#ifndef ISL_CPP
#define ISL_CPP
-#include <isl/id.h>
-#include <isl/space.h>
-#include <isl/val.h>
-#include <isl/aff.h>
-#include <isl/set.h>
-#include <isl/map.h>
-#include <isl/ilp.h>
-#include <isl/union_set.h>
-#include <isl/union_map.h>
-#include <isl/flow.h>
-#include <isl/schedule.h>
-#include <isl/schedule_node.h>
-#include <isl/ast_build.h>
-#include <isl/fixed_box.h>
-
#include <isl/ctx.h>
#include <isl/options.h>
} // namespace isl
+#include <isl/id.h>
+#include <isl/space.h>
+#include <isl/val.h>
+#include <isl/aff.h>
+#include <isl/set.h>
+#include <isl/map.h>
+#include <isl/ilp.h>
+#include <isl/union_set.h>
+#include <isl/union_map.h>
+#include <isl/flow.h>
+#include <isl/schedule.h>
+#include <isl/schedule_node.h>
+#include <isl/ast_build.h>
+#include <isl/fixed_box.h>
+
namespace isl {
// forward declarations
class id;
class id_list;
class map;
+class map_list;
class multi_aff;
class multi_id;
class multi_pw_aff;
inline isl::ctx ctx() const;
inline isl::aff add(isl::aff aff2) const;
+ inline isl::multi_aff add(const isl::multi_aff &multi2) const;
+ inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_aff add(const isl::pw_aff &pwaff2) const;
+ inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const;
+ inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
inline isl::aff add_constant(isl::val v) const;
inline isl::aff add_constant(long v) const;
+ inline isl::multi_aff add_constant(const isl::multi_val &mv) const;
+ inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::aff as_aff() const;
+ inline isl::map as_map() const;
+ inline isl::multi_aff as_multi_aff() const;
+ inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
+ inline isl::pw_multi_aff as_pw_multi_aff() const;
+ inline isl::set as_set() const;
+ inline isl::union_map as_union_map() const;
+ inline isl::aff at(int pos) const;
inline isl::basic_set bind(isl::id id) const;
inline isl::basic_set bind(const std::string &id) const;
+ inline isl::basic_set bind(const isl::multi_id &tuple) const;
+ inline isl::pw_aff bind_domain(const isl::multi_id &tuple) const;
+ inline isl::pw_aff bind_domain_wrapped_domain(const isl::multi_id &tuple) const;
inline isl::aff ceil() const;
+ inline isl::pw_aff coalesce() const;
+ inline isl::pw_aff cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const;
+ inline isl::multi_val constant_multi_val() const;
+ inline isl::val constant_val() const;
+ inline isl::val get_constant_val() const;
inline isl::aff div(isl::aff aff2) const;
+ inline isl::pw_aff div(const isl::pw_aff &pa2) const;
+ inline isl::set domain() const;
inline isl::set eq_set(isl::aff aff2) const;
+ inline isl::set eq_set(const isl::pw_aff &pwaff2) const;
inline isl::val eval(isl::point pnt) const;
+ inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
+ inline isl::multi_aff flat_range_product(const isl::multi_aff &multi2) const;
+ inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
inline isl::aff floor() const;
+ inline void foreach_piece(const std::function<void(isl::set, isl::multi_aff)> &fn) const;
inline isl::set ge_set(isl::aff aff2) const;
- inline isl::val constant_val() const;
- inline isl::val get_constant_val() const;
+ inline isl::set ge_set(const isl::pw_aff &pwaff2) const;
inline isl::aff gist(isl::set context) const;
+ inline isl::union_pw_aff gist(const isl::union_set &context) const;
+ inline isl::aff gist(const isl::basic_set &context) const;
+ inline isl::aff gist(const isl::point &context) const;
inline isl::set gt_set(isl::aff aff2) const;
+ inline isl::set gt_set(const isl::pw_aff &pwaff2) const;
+ inline bool has_range_tuple_id() const;
+ inline isl::multi_aff identity() const;
+ inline isl::pw_aff insert_domain(const isl::space &domain) const;
+ inline isl::pw_aff intersect_domain(const isl::set &set) const;
+ inline isl::union_pw_aff intersect_domain(const isl::space &space) const;
+ inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const;
+ inline isl::union_pw_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
+ inline isl::union_pw_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
+ inline isl::pw_aff intersect_params(const isl::set &set) const;
+ inline bool involves_locals() const;
+ inline bool involves_nan() const;
+ inline bool involves_param(const isl::id &id) const;
+ inline bool involves_param(const std::string &id) const;
+ inline bool involves_param(const isl::id_list &list) const;
inline bool is_cst() const;
+ inline bool isa_aff() const;
+ inline bool isa_multi_aff() const;
+ inline bool isa_pw_multi_aff() const;
inline isl::set le_set(isl::aff aff2) const;
+ inline isl::set le_set(const isl::pw_aff &pwaff2) const;
+ inline isl::aff_list list() const;
inline isl::set lt_set(isl::aff aff2) const;
+ inline isl::set lt_set(const isl::pw_aff &pwaff2) const;
+ inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
+ inline isl::pw_aff max(const isl::pw_aff &pwaff2) const;
+ inline isl::multi_val max_multi_val() const;
+ inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
+ inline isl::pw_aff min(const isl::pw_aff &pwaff2) const;
+ inline isl::multi_val min_multi_val() const;
inline isl::aff mod(isl::val mod) const;
inline isl::aff mod(long mod) const;
inline isl::aff mul(isl::aff aff2) const;
+ inline isl::pw_aff mul(const isl::pw_aff &pwaff2) const;
+ inline unsigned n_piece() const;
inline isl::set ne_set(isl::aff aff2) const;
+ inline isl::set ne_set(const isl::pw_aff &pwaff2) const;
inline isl::aff neg() const;
+ inline bool plain_is_empty() const;
+ inline bool plain_is_equal(const isl::multi_aff &multi2) const;
+ inline bool plain_is_equal(const isl::multi_pw_aff &multi2) const;
+ inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::multi_aff product(const isl::multi_aff &multi2) const;
+ inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
+ inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
inline isl::aff pullback(isl::multi_aff ma) const;
+ inline isl::pw_aff pullback(const isl::multi_pw_aff &mpa) const;
+ inline isl::pw_aff pullback(const isl::pw_multi_aff &pma) const;
+ inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
+ inline isl::aff pullback(const isl::aff &ma) const;
+ inline isl::pw_multi_aff_list pw_multi_aff_list() const;
+ inline isl::pw_multi_aff range_factor_domain() const;
+ inline isl::pw_multi_aff range_factor_range() const;
+ inline isl::multi_aff range_product(const isl::multi_aff &multi2) const;
+ inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::id range_tuple_id() const;
+ inline isl::multi_aff reset_range_tuple_id() const;
inline isl::aff scale(isl::val v) const;
inline isl::aff scale(long v) const;
+ inline isl::multi_aff scale(const isl::multi_val &mv) const;
inline isl::aff scale_down(isl::val v) const;
inline isl::aff scale_down(long v) const;
+ inline isl::multi_aff scale_down(const isl::multi_val &mv) const;
+ inline isl::multi_aff set_at(int pos, const isl::aff &el) const;
+ inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
+ inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
+ inline isl::multi_aff set_range_tuple(const isl::id &id) const;
+ inline isl::multi_aff set_range_tuple(const std::string &id) const;
+ inline unsigned size() const;
+ inline isl::space space() const;
inline isl::aff sub(isl::aff aff2) const;
+ inline isl::multi_aff sub(const isl::multi_aff &multi2) const;
+ inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_aff sub(const isl::pw_aff &pwaff2) const;
+ inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const;
+ inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::pw_aff subtract_domain(const isl::set &set) const;
+ inline isl::union_pw_aff subtract_domain(const isl::space &space) const;
+ inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const;
+ inline isl::pw_aff tdiv_q(const isl::pw_aff &pa2) const;
+ inline isl::pw_aff tdiv_r(const isl::pw_aff &pa2) const;
+ inline isl::aff_list to_list() const;
+ inline isl::multi_pw_aff to_multi_pw_aff() const;
+ inline isl::multi_union_pw_aff to_multi_union_pw_aff() const;
+ inline isl::pw_multi_aff to_pw_multi_aff() const;
+ inline isl::union_pw_aff to_union_pw_aff() const;
+ inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
inline isl::aff unbind_params_insert_domain(isl::multi_id domain) const;
+ inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
+ inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
+ inline isl::pw_aff union_add(const isl::pw_aff &pwaff2) const;
+ inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const;
+ inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
static inline isl::aff zero_on_domain(isl::space space);
};
inline /* implicit */ aff_list(const aff_list &obj);
inline explicit aff_list(isl::ctx ctx, int n);
inline explicit aff_list(isl::aff el);
+ inline explicit aff_list(isl::ctx ctx, const std::string &str);
inline aff_list &operator=(aff_list obj);
inline ~aff_list();
inline __isl_give isl_aff_list *copy() const &;
inline isl::ctx ctx() const;
inline isl::aff_list add(isl::aff el) const;
+ inline isl::aff at(int index) const;
+ inline isl::aff get_at(int index) const;
inline isl::aff_list clear() const;
inline isl::aff_list concat(isl::aff_list list2) const;
inline isl::aff_list drop(unsigned int first, unsigned int n) const;
inline void foreach(const std::function<void(isl::aff)> &fn) const;
- inline isl::aff at(int index) const;
- inline isl::aff get_at(int index) const;
inline isl::aff_list insert(unsigned int pos, isl::aff el) const;
inline unsigned size() const;
};
inline isl::ast_expr expr_from(isl::pw_aff pa) const;
inline isl::ast_expr expr_from(isl::set set) const;
static inline isl::ast_build from_context(isl::set set);
- inline isl::union_map schedule() const;
- inline isl::union_map get_schedule() const;
inline isl::ast_node node_from(isl::schedule schedule) const;
inline isl::ast_node node_from_schedule_map(isl::union_map schedule) const;
+ inline isl::union_map schedule() const;
+ inline isl::union_map get_schedule() const;
};
// declarations for isl::ast_expr
inline isl::ctx ctx() const;
inline std::string to_C_str() const;
+ inline isl::ast_node_list to_list() const;
};
// declarations for isl::ast_node_block
inline isl::ast_expr get_inc() const;
inline isl::ast_expr init() const;
inline isl::ast_expr get_init() const;
+ inline bool is_degenerate() const;
inline isl::ast_expr iterator() const;
inline isl::ast_expr get_iterator() const;
- inline bool is_degenerate() const;
};
// declarations for isl::ast_node_if
inline isl::ast_expr get_cond() const;
inline isl::ast_node else_node() const;
inline isl::ast_node get_else_node() const;
+ inline bool has_else_node() const;
inline isl::ast_node then_node() const;
inline isl::ast_node get_then_node() const;
- inline bool has_else_node() const;
};
// declarations for isl::ast_node_list
inline isl::ctx ctx() const;
inline isl::ast_node_list add(isl::ast_node el) const;
+ inline isl::ast_node at(int index) const;
+ inline isl::ast_node get_at(int index) const;
inline isl::ast_node_list clear() const;
inline isl::ast_node_list concat(isl::ast_node_list list2) const;
inline isl::ast_node_list drop(unsigned int first, unsigned int n) const;
inline void foreach(const std::function<void(isl::ast_node)> &fn) const;
- inline isl::ast_node at(int index) const;
- inline isl::ast_node get_at(int index) const;
inline isl::ast_node_list insert(unsigned int pos, isl::ast_node el) const;
inline unsigned size() const;
};
inline isl::basic_map affine_hull() const;
inline isl::basic_map apply_domain(isl::basic_map bmap2) const;
+ inline isl::map apply_domain(const isl::map &map2) const;
+ inline isl::union_map apply_domain(const isl::union_map &umap2) const;
inline isl::basic_map apply_range(isl::basic_map bmap2) const;
+ inline isl::map apply_range(const isl::map &map2) const;
+ inline isl::union_map apply_range(const isl::union_map &umap2) const;
+ inline isl::map as_map() const;
+ inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
+ inline isl::pw_multi_aff as_pw_multi_aff() const;
+ inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
+ inline isl::set bind_domain(const isl::multi_id &tuple) const;
+ inline isl::set bind_range(const isl::multi_id &tuple) const;
+ inline isl::map coalesce() const;
+ inline isl::map complement() const;
+ inline isl::union_map compute_divs() const;
+ inline isl::map curry() const;
inline isl::basic_set deltas() const;
inline isl::basic_map detect_equalities() const;
+ inline isl::set domain() const;
+ inline isl::map domain_factor_domain() const;
+ inline isl::map domain_factor_range() const;
+ inline isl::union_map domain_map() const;
+ inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
+ inline isl::map domain_product(const isl::map &map2) const;
+ inline isl::union_map domain_product(const isl::union_map &umap2) const;
+ inline unsigned domain_tuple_dim() const;
+ inline isl::id domain_tuple_id() const;
+ inline isl::map eq_at(const isl::multi_pw_aff &mpa) const;
+ inline isl::union_map eq_at(const isl::multi_union_pw_aff &mupa) const;
+ inline bool every_map(const std::function<bool(isl::map)> &test) const;
+ inline isl::map extract_map(const isl::space &space) const;
+ inline isl::map factor_domain() const;
+ inline isl::map factor_range() const;
+ inline isl::union_map fixed_power(const isl::val &exp) const;
+ inline isl::union_map fixed_power(long exp) const;
inline isl::basic_map flatten() const;
inline isl::basic_map flatten_domain() const;
inline isl::basic_map flatten_range() const;
+ inline void foreach_basic_map(const std::function<void(isl::basic_map)> &fn) const;
+ inline void foreach_map(const std::function<void(isl::map)> &fn) const;
inline isl::basic_map gist(isl::basic_map context) const;
+ inline isl::map gist(const isl::map &context) const;
+ inline isl::union_map gist(const isl::union_map &context) const;
+ inline isl::map gist_domain(const isl::set &context) const;
+ inline isl::union_map gist_domain(const isl::union_set &uset) const;
+ inline isl::union_map gist_params(const isl::set &set) const;
+ inline isl::union_map gist_range(const isl::union_set &uset) const;
+ inline bool has_domain_tuple_id() const;
+ inline bool has_range_tuple_id() const;
inline isl::basic_map intersect(isl::basic_map bmap2) const;
+ inline isl::map intersect(const isl::map &map2) const;
+ inline isl::union_map intersect(const isl::union_map &umap2) const;
inline isl::basic_map intersect_domain(isl::basic_set bset) const;
+ inline isl::map intersect_domain(const isl::set &set) const;
+ inline isl::union_map intersect_domain(const isl::space &space) const;
+ inline isl::union_map intersect_domain(const isl::union_set &uset) const;
+ inline isl::basic_map intersect_domain(const isl::point &bset) const;
+ inline isl::map intersect_domain_factor_domain(const isl::map &factor) const;
+ inline isl::union_map intersect_domain_factor_domain(const isl::union_map &factor) const;
+ inline isl::map intersect_domain_factor_range(const isl::map &factor) const;
+ inline isl::union_map intersect_domain_factor_range(const isl::union_map &factor) const;
+ inline isl::map intersect_params(const isl::set ¶ms) const;
inline isl::basic_map intersect_range(isl::basic_set bset) const;
+ inline isl::map intersect_range(const isl::set &set) const;
+ inline isl::union_map intersect_range(const isl::space &space) const;
+ inline isl::union_map intersect_range(const isl::union_set &uset) const;
+ inline isl::basic_map intersect_range(const isl::point &bset) const;
+ inline isl::map intersect_range_factor_domain(const isl::map &factor) const;
+ inline isl::union_map intersect_range_factor_domain(const isl::union_map &factor) const;
+ inline isl::map intersect_range_factor_range(const isl::map &factor) const;
+ inline isl::union_map intersect_range_factor_range(const isl::union_map &factor) const;
+ inline bool is_bijective() const;
+ inline bool is_disjoint(const isl::map &map2) const;
+ inline bool is_disjoint(const isl::union_map &umap2) const;
inline bool is_empty() const;
inline bool is_equal(const isl::basic_map &bmap2) const;
+ inline bool is_equal(const isl::map &map2) const;
+ inline bool is_equal(const isl::union_map &umap2) const;
+ inline bool is_injective() const;
+ inline bool is_single_valued() const;
+ inline bool is_strict_subset(const isl::map &map2) const;
+ inline bool is_strict_subset(const isl::union_map &umap2) const;
inline bool is_subset(const isl::basic_map &bmap2) const;
+ inline bool is_subset(const isl::map &map2) const;
+ inline bool is_subset(const isl::union_map &umap2) const;
+ inline bool isa_map() const;
+ inline isl::map lex_ge_at(const isl::multi_pw_aff &mpa) const;
+ inline isl::map lex_gt_at(const isl::multi_pw_aff &mpa) const;
+ inline isl::map lex_le_at(const isl::multi_pw_aff &mpa) const;
+ inline isl::map lex_lt_at(const isl::multi_pw_aff &mpa) const;
inline isl::map lexmax() const;
+ inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
inline isl::map lexmin() const;
+ inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
+ inline isl::map lower_bound(const isl::multi_pw_aff &lower) const;
+ inline isl::map_list map_list() const;
+ inline isl::multi_pw_aff max_multi_pw_aff() const;
+ inline isl::multi_pw_aff min_multi_pw_aff() const;
+ inline isl::basic_map polyhedral_hull() const;
+ inline isl::map preimage_domain(const isl::multi_aff &ma) const;
+ inline isl::map preimage_domain(const isl::multi_pw_aff &mpa) const;
+ inline isl::map preimage_domain(const isl::pw_multi_aff &pma) const;
+ inline isl::union_map preimage_domain(const isl::union_pw_multi_aff &upma) const;
+ inline isl::map preimage_range(const isl::multi_aff &ma) const;
+ inline isl::map preimage_range(const isl::pw_multi_aff &pma) const;
+ inline isl::union_map preimage_range(const isl::union_pw_multi_aff &upma) const;
+ inline isl::map product(const isl::map &map2) const;
+ inline isl::union_map product(const isl::union_map &umap2) const;
+ inline isl::map project_out_all_params() const;
+ inline isl::set range() const;
+ inline isl::map range_factor_domain() const;
+ inline isl::map range_factor_range() const;
+ inline isl::fixed_box range_lattice_tile() const;
+ inline isl::union_map range_map() const;
+ inline isl::map range_product(const isl::map &map2) const;
+ inline isl::union_map range_product(const isl::union_map &umap2) const;
+ inline isl::map range_reverse() const;
+ inline isl::fixed_box range_simple_fixed_box_hull() const;
+ inline unsigned range_tuple_dim() const;
+ inline isl::id range_tuple_id() const;
inline isl::basic_map reverse() const;
inline isl::basic_map sample() const;
+ inline isl::map set_domain_tuple(const isl::id &id) const;
+ inline isl::map set_domain_tuple(const std::string &id) const;
+ inline isl::map set_range_tuple(const isl::id &id) const;
+ inline isl::map set_range_tuple(const std::string &id) const;
+ inline isl::space space() const;
+ inline isl::map subtract(const isl::map &map2) const;
+ inline isl::union_map subtract(const isl::union_map &umap2) const;
+ inline isl::union_map subtract_domain(const isl::union_set &dom) const;
+ inline isl::union_map subtract_range(const isl::union_set &dom) const;
+ inline isl::map_list to_list() const;
+ inline isl::union_map to_union_map() const;
+ inline isl::map uncurry() const;
inline isl::map unite(isl::basic_map bmap2) const;
+ inline isl::map unite(const isl::map &map2) const;
+ inline isl::union_map unite(const isl::union_map &umap2) const;
+ inline isl::basic_map unshifted_simple_hull() const;
+ inline isl::map upper_bound(const isl::multi_pw_aff &upper) const;
+ inline isl::set wrap() const;
+ inline isl::map zip() const;
};
// declarations for isl::basic_set
inline isl::basic_set affine_hull() const;
inline isl::basic_set apply(isl::basic_map bmap) const;
+ inline isl::set apply(const isl::map &map) const;
+ inline isl::union_set apply(const isl::union_map &umap) const;
+ inline isl::pw_multi_aff as_pw_multi_aff() const;
+ inline isl::set as_set() const;
+ inline isl::set bind(const isl::multi_id &tuple) const;
+ inline isl::set coalesce() const;
+ inline isl::set complement() const;
+ inline isl::union_set compute_divs() const;
inline isl::basic_set detect_equalities() const;
inline isl::val dim_max_val(int pos) const;
+ inline isl::val dim_min_val(int pos) const;
+ inline bool every_set(const std::function<bool(isl::set)> &test) const;
+ inline isl::set extract_set(const isl::space &space) const;
inline isl::basic_set flatten() const;
+ inline void foreach_basic_set(const std::function<void(isl::basic_set)> &fn) const;
+ inline void foreach_point(const std::function<void(isl::point)> &fn) const;
+ inline void foreach_set(const std::function<void(isl::set)> &fn) const;
inline isl::basic_set gist(isl::basic_set context) const;
+ inline isl::set gist(const isl::set &context) const;
+ inline isl::union_set gist(const isl::union_set &context) const;
+ inline isl::basic_set gist(const isl::point &context) const;
+ inline isl::union_set gist_params(const isl::set &set) const;
+ inline isl::map identity() const;
+ inline isl::pw_aff indicator_function() const;
+ inline isl::map insert_domain(const isl::space &domain) const;
inline isl::basic_set intersect(isl::basic_set bset2) const;
+ inline isl::set intersect(const isl::set &set2) const;
+ inline isl::union_set intersect(const isl::union_set &uset2) const;
+ inline isl::basic_set intersect(const isl::point &bset2) const;
inline isl::basic_set intersect_params(isl::basic_set bset2) const;
+ inline isl::set intersect_params(const isl::set ¶ms) const;
+ inline isl::basic_set intersect_params(const isl::point &bset2) const;
+ inline bool involves_locals() const;
+ inline bool is_disjoint(const isl::set &set2) const;
+ inline bool is_disjoint(const isl::union_set &uset2) const;
inline bool is_empty() const;
inline bool is_equal(const isl::basic_set &bset2) const;
+ inline bool is_equal(const isl::set &set2) const;
+ inline bool is_equal(const isl::union_set &uset2) const;
+ inline bool is_equal(const isl::point &bset2) const;
+ inline bool is_singleton() const;
+ inline bool is_strict_subset(const isl::set &set2) const;
+ inline bool is_strict_subset(const isl::union_set &uset2) const;
inline bool is_subset(const isl::basic_set &bset2) const;
+ inline bool is_subset(const isl::set &set2) const;
+ inline bool is_subset(const isl::union_set &uset2) const;
+ inline bool is_subset(const isl::point &bset2) const;
inline bool is_wrapping() const;
+ inline bool isa_set() const;
inline isl::set lexmax() const;
+ inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
inline isl::set lexmin() const;
+ inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
+ inline isl::set lower_bound(const isl::multi_pw_aff &lower) const;
+ inline isl::set lower_bound(const isl::multi_val &lower) const;
+ inline isl::multi_pw_aff max_multi_pw_aff() const;
+ inline isl::val max_val(const isl::aff &obj) const;
+ inline isl::multi_pw_aff min_multi_pw_aff() const;
+ inline isl::val min_val(const isl::aff &obj) const;
inline isl::basic_set params() const;
+ inline isl::multi_val plain_multi_val_if_fixed() const;
+ inline isl::basic_set polyhedral_hull() const;
+ inline isl::set preimage(const isl::multi_aff &ma) const;
+ inline isl::set preimage(const isl::multi_pw_aff &mpa) const;
+ inline isl::set preimage(const isl::pw_multi_aff &pma) const;
+ inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
+ inline isl::set product(const isl::set &set2) const;
+ inline isl::set project_out_all_params() const;
+ inline isl::set project_out_param(const isl::id &id) const;
+ inline isl::set project_out_param(const std::string &id) const;
+ inline isl::set project_out_param(const isl::id_list &list) const;
+ inline isl::pw_multi_aff pw_multi_aff_on_domain(const isl::multi_val &mv) const;
inline isl::basic_set sample() const;
inline isl::point sample_point() const;
+ inline isl::fixed_box simple_fixed_box_hull() const;
+ inline isl::space space() const;
+ inline isl::val stride(int pos) const;
+ inline isl::set subtract(const isl::set &set2) const;
+ inline isl::union_set subtract(const isl::union_set &uset2) const;
+ inline isl::union_set_list to_list() const;
+ inline isl::set to_set() const;
+ inline isl::union_set to_union_set() const;
+ inline isl::map translation() const;
+ inline unsigned tuple_dim() const;
+ inline isl::set unbind_params(const isl::multi_id &tuple) const;
+ inline isl::map unbind_params_insert_domain(const isl::multi_id &domain) const;
inline isl::set unite(isl::basic_set bset2) const;
+ inline isl::set unite(const isl::set &set2) const;
+ inline isl::union_set unite(const isl::union_set &uset2) const;
+ inline isl::set unite(const isl::point &bset2) const;
+ inline isl::basic_set unshifted_simple_hull() const;
+ inline isl::map unwrap() const;
+ inline isl::set upper_bound(const isl::multi_pw_aff &upper) const;
+ inline isl::set upper_bound(const isl::multi_val &upper) const;
};
// declarations for isl::fixed_box
inline bool is_null() const;
inline isl::ctx ctx() const;
+ inline bool is_valid() const;
inline isl::multi_aff offset() const;
inline isl::multi_aff get_offset() const;
inline isl::multi_val size() const;
inline isl::multi_val get_size() const;
inline isl::space space() const;
inline isl::space get_space() const;
- inline bool is_valid() const;
};
// declarations for isl::id
inline std::string name() const;
inline std::string get_name() const;
+ inline isl::id_list to_list() const;
};
// declarations for isl::id_list
inline /* implicit */ id_list(const id_list &obj);
inline explicit id_list(isl::ctx ctx, int n);
inline explicit id_list(isl::id el);
+ inline explicit id_list(isl::ctx ctx, const std::string &str);
inline id_list &operator=(id_list obj);
inline ~id_list();
inline __isl_give isl_id_list *copy() const &;
inline isl::id_list add(isl::id el) const;
inline isl::id_list add(const std::string &el) const;
+ inline isl::id at(int index) const;
+ inline isl::id get_at(int index) const;
inline isl::id_list clear() const;
inline isl::id_list concat(isl::id_list list2) const;
inline isl::id_list drop(unsigned int first, unsigned int n) const;
inline void foreach(const std::function<void(isl::id)> &fn) const;
- inline isl::id at(int index) const;
- inline isl::id get_at(int index) const;
inline isl::id_list insert(unsigned int pos, isl::id el) const;
inline isl::id_list insert(unsigned int pos, const std::string &el) const;
inline unsigned size() const;
inline isl::basic_map affine_hull() const;
inline isl::map apply_domain(isl::map map2) const;
+ inline isl::union_map apply_domain(const isl::union_map &umap2) const;
+ inline isl::map apply_domain(const isl::basic_map &map2) const;
inline isl::map apply_range(isl::map map2) const;
+ inline isl::union_map apply_range(const isl::union_map &umap2) const;
+ inline isl::map apply_range(const isl::basic_map &map2) const;
+ inline isl::map as_map() const;
+ inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
+ inline isl::pw_multi_aff as_pw_multi_aff() const;
+ inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
inline isl::set bind_domain(isl::multi_id tuple) const;
inline isl::set bind_range(isl::multi_id tuple) const;
inline isl::map coalesce() const;
inline isl::map complement() const;
+ inline isl::union_map compute_divs() const;
inline isl::map curry() const;
inline isl::set deltas() const;
inline isl::map detect_equalities() const;
inline isl::set domain() const;
inline isl::map domain_factor_domain() const;
inline isl::map domain_factor_range() const;
+ inline isl::union_map domain_map() const;
+ inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
inline isl::map domain_product(isl::map map2) const;
+ inline isl::union_map domain_product(const isl::union_map &umap2) const;
+ inline isl::map domain_product(const isl::basic_map &map2) const;
+ inline unsigned domain_tuple_dim() const;
+ inline isl::id domain_tuple_id() const;
+ inline isl::id get_domain_tuple_id() const;
static inline isl::map empty(isl::space space);
inline isl::map eq_at(isl::multi_pw_aff mpa) const;
+ inline isl::union_map eq_at(const isl::multi_union_pw_aff &mupa) const;
+ inline isl::map eq_at(const isl::aff &mpa) const;
+ inline isl::map eq_at(const isl::multi_aff &mpa) const;
+ inline isl::map eq_at(const isl::pw_aff &mpa) const;
+ inline isl::map eq_at(const isl::pw_multi_aff &mpa) const;
+ inline bool every_map(const std::function<bool(isl::map)> &test) const;
+ inline isl::map extract_map(const isl::space &space) const;
inline isl::map factor_domain() const;
inline isl::map factor_range() const;
+ inline isl::union_map fixed_power(const isl::val &exp) const;
+ inline isl::union_map fixed_power(long exp) const;
inline isl::map flatten() const;
inline isl::map flatten_domain() const;
inline isl::map flatten_range() const;
inline void foreach_basic_map(const std::function<void(isl::basic_map)> &fn) const;
- inline isl::fixed_box range_simple_fixed_box_hull() const;
- inline isl::fixed_box get_range_simple_fixed_box_hull() const;
- inline isl::space space() const;
- inline isl::space get_space() const;
+ inline void foreach_map(const std::function<void(isl::map)> &fn) const;
inline isl::map gist(isl::map context) const;
+ inline isl::union_map gist(const isl::union_map &context) const;
+ inline isl::map gist(const isl::basic_map &context) const;
inline isl::map gist_domain(isl::set context) const;
+ inline isl::union_map gist_domain(const isl::union_set &uset) const;
+ inline isl::map gist_domain(const isl::basic_set &context) const;
+ inline isl::map gist_domain(const isl::point &context) const;
+ inline isl::union_map gist_params(const isl::set &set) const;
+ inline isl::union_map gist_range(const isl::union_set &uset) const;
+ inline bool has_domain_tuple_id() const;
+ inline bool has_range_tuple_id() const;
inline isl::map intersect(isl::map map2) const;
+ inline isl::union_map intersect(const isl::union_map &umap2) const;
+ inline isl::map intersect(const isl::basic_map &map2) const;
inline isl::map intersect_domain(isl::set set) const;
+ inline isl::union_map intersect_domain(const isl::space &space) const;
+ inline isl::union_map intersect_domain(const isl::union_set &uset) const;
+ inline isl::map intersect_domain(const isl::basic_set &set) const;
+ inline isl::map intersect_domain(const isl::point &set) const;
inline isl::map intersect_domain_factor_domain(isl::map factor) const;
+ inline isl::union_map intersect_domain_factor_domain(const isl::union_map &factor) const;
+ inline isl::map intersect_domain_factor_domain(const isl::basic_map &factor) const;
inline isl::map intersect_domain_factor_range(isl::map factor) const;
+ inline isl::union_map intersect_domain_factor_range(const isl::union_map &factor) const;
+ inline isl::map intersect_domain_factor_range(const isl::basic_map &factor) const;
inline isl::map intersect_params(isl::set params) const;
inline isl::map intersect_range(isl::set set) const;
+ inline isl::union_map intersect_range(const isl::space &space) const;
+ inline isl::union_map intersect_range(const isl::union_set &uset) const;
+ inline isl::map intersect_range(const isl::basic_set &set) const;
+ inline isl::map intersect_range(const isl::point &set) const;
inline isl::map intersect_range_factor_domain(isl::map factor) const;
+ inline isl::union_map intersect_range_factor_domain(const isl::union_map &factor) const;
+ inline isl::map intersect_range_factor_domain(const isl::basic_map &factor) const;
inline isl::map intersect_range_factor_range(isl::map factor) const;
+ inline isl::union_map intersect_range_factor_range(const isl::union_map &factor) const;
+ inline isl::map intersect_range_factor_range(const isl::basic_map &factor) const;
inline bool is_bijective() const;
inline bool is_disjoint(const isl::map &map2) const;
+ inline bool is_disjoint(const isl::union_map &umap2) const;
+ inline bool is_disjoint(const isl::basic_map &map2) const;
inline bool is_empty() const;
inline bool is_equal(const isl::map &map2) const;
+ inline bool is_equal(const isl::union_map &umap2) const;
+ inline bool is_equal(const isl::basic_map &map2) const;
inline bool is_injective() const;
inline bool is_single_valued() const;
inline bool is_strict_subset(const isl::map &map2) const;
+ inline bool is_strict_subset(const isl::union_map &umap2) const;
+ inline bool is_strict_subset(const isl::basic_map &map2) const;
inline bool is_subset(const isl::map &map2) const;
+ inline bool is_subset(const isl::union_map &umap2) const;
+ inline bool is_subset(const isl::basic_map &map2) const;
+ inline bool isa_map() const;
inline isl::map lex_ge_at(isl::multi_pw_aff mpa) const;
inline isl::map lex_gt_at(isl::multi_pw_aff mpa) const;
inline isl::map lex_le_at(isl::multi_pw_aff mpa) const;
inline isl::map lexmin() const;
inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
inline isl::map lower_bound(isl::multi_pw_aff lower) const;
+ inline isl::map_list map_list() const;
inline isl::multi_pw_aff max_multi_pw_aff() const;
inline isl::multi_pw_aff min_multi_pw_aff() const;
inline isl::basic_map polyhedral_hull() const;
inline isl::map preimage_domain(isl::multi_aff ma) const;
inline isl::map preimage_domain(isl::multi_pw_aff mpa) const;
inline isl::map preimage_domain(isl::pw_multi_aff pma) const;
+ inline isl::union_map preimage_domain(const isl::union_pw_multi_aff &upma) const;
inline isl::map preimage_range(isl::multi_aff ma) const;
inline isl::map preimage_range(isl::pw_multi_aff pma) const;
+ inline isl::union_map preimage_range(const isl::union_pw_multi_aff &upma) const;
inline isl::map product(isl::map map2) const;
+ inline isl::union_map product(const isl::union_map &umap2) const;
+ inline isl::map product(const isl::basic_map &map2) const;
inline isl::map project_out_all_params() const;
inline isl::set range() const;
inline isl::map range_factor_domain() const;
inline isl::map range_factor_range() const;
+ inline isl::fixed_box range_lattice_tile() const;
+ inline isl::fixed_box get_range_lattice_tile() const;
+ inline isl::union_map range_map() const;
inline isl::map range_product(isl::map map2) const;
+ inline isl::union_map range_product(const isl::union_map &umap2) const;
+ inline isl::map range_product(const isl::basic_map &map2) const;
inline isl::map range_reverse() const;
+ inline isl::fixed_box range_simple_fixed_box_hull() const;
+ inline isl::fixed_box get_range_simple_fixed_box_hull() const;
+ inline unsigned range_tuple_dim() const;
+ inline isl::id range_tuple_id() const;
+ inline isl::id get_range_tuple_id() const;
inline isl::map reverse() const;
inline isl::basic_map sample() const;
+ inline isl::map set_domain_tuple(isl::id id) const;
+ inline isl::map set_domain_tuple(const std::string &id) const;
+ inline isl::map set_range_tuple(isl::id id) const;
+ inline isl::map set_range_tuple(const std::string &id) const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
inline isl::map subtract(isl::map map2) const;
+ inline isl::union_map subtract(const isl::union_map &umap2) const;
+ inline isl::map subtract(const isl::basic_map &map2) const;
+ inline isl::union_map subtract_domain(const isl::union_set &dom) const;
+ inline isl::union_map subtract_range(const isl::union_set &dom) const;
+ inline isl::map_list to_list() const;
+ inline isl::union_map to_union_map() const;
inline isl::map uncurry() const;
inline isl::map unite(isl::map map2) const;
+ inline isl::union_map unite(const isl::union_map &umap2) const;
+ inline isl::map unite(const isl::basic_map &map2) const;
static inline isl::map universe(isl::space space);
inline isl::basic_map unshifted_simple_hull() const;
inline isl::map upper_bound(isl::multi_pw_aff upper) const;
inline isl::map zip() const;
};
+// declarations for isl::map_list
+inline map_list manage(__isl_take isl_map_list *ptr);
+inline map_list manage_copy(__isl_keep isl_map_list *ptr);
+
+class map_list {
+ friend inline map_list manage(__isl_take isl_map_list *ptr);
+ friend inline map_list manage_copy(__isl_keep isl_map_list *ptr);
+
+protected:
+ isl_map_list *ptr = nullptr;
+
+ inline explicit map_list(__isl_take isl_map_list *ptr);
+
+public:
+ inline /* implicit */ map_list();
+ inline /* implicit */ map_list(const map_list &obj);
+ inline explicit map_list(isl::ctx ctx, int n);
+ inline explicit map_list(isl::map el);
+ inline explicit map_list(isl::ctx ctx, const std::string &str);
+ inline map_list &operator=(map_list obj);
+ inline ~map_list();
+ inline __isl_give isl_map_list *copy() const &;
+ inline __isl_give isl_map_list *copy() && = delete;
+ inline __isl_keep isl_map_list *get() const;
+ inline __isl_give isl_map_list *release();
+ inline bool is_null() const;
+ inline isl::ctx ctx() const;
+
+ inline isl::map_list add(isl::map el) const;
+ inline isl::map at(int index) const;
+ inline isl::map get_at(int index) const;
+ inline isl::map_list clear() const;
+ inline isl::map_list concat(isl::map_list list2) const;
+ inline isl::map_list drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(isl::map)> &fn) const;
+ inline isl::map_list insert(unsigned int pos, isl::map el) const;
+ inline unsigned size() const;
+};
+
// declarations for isl::multi_aff
inline multi_aff manage(__isl_take isl_multi_aff *ptr);
inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr);
inline isl::ctx ctx() const;
inline isl::multi_aff add(isl::multi_aff multi2) const;
+ inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::multi_aff add(const isl::aff &multi2) const;
inline isl::multi_aff add_constant(isl::multi_val mv) const;
inline isl::multi_aff add_constant(isl::val v) const;
inline isl::multi_aff add_constant(long v) const;
+ inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::map as_map() const;
+ inline isl::multi_aff as_multi_aff() const;
+ inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
+ inline isl::pw_multi_aff as_pw_multi_aff() const;
+ inline isl::set as_set() const;
+ inline isl::union_map as_union_map() const;
+ inline isl::aff at(int pos) const;
+ inline isl::aff get_at(int pos) const;
inline isl::basic_set bind(isl::multi_id tuple) const;
inline isl::multi_aff bind_domain(isl::multi_id tuple) const;
inline isl::multi_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
+ inline isl::pw_multi_aff coalesce() const;
+ inline isl::multi_val constant_multi_val() const;
+ inline isl::multi_val get_constant_multi_val() const;
+ inline isl::set domain() const;
static inline isl::multi_aff domain_map(isl::space space);
+ inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
inline isl::multi_aff flat_range_product(isl::multi_aff multi2) const;
+ inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::multi_aff flat_range_product(const isl::aff &multi2) const;
inline isl::multi_aff floor() const;
- inline isl::aff at(int pos) const;
- inline isl::aff get_at(int pos) const;
- inline isl::multi_val constant_multi_val() const;
- inline isl::multi_val get_constant_multi_val() const;
- inline isl::aff_list list() const;
- inline isl::aff_list get_list() const;
- inline isl::space space() const;
- inline isl::space get_space() const;
+ inline void foreach_piece(const std::function<void(isl::set, isl::multi_aff)> &fn) const;
inline isl::multi_aff gist(isl::set context) const;
+ inline isl::union_pw_multi_aff gist(const isl::union_set &context) const;
+ inline isl::multi_aff gist(const isl::basic_set &context) const;
+ inline isl::multi_aff gist(const isl::point &context) const;
+ inline bool has_range_tuple_id() const;
inline isl::multi_aff identity() const;
static inline isl::multi_aff identity_on_domain(isl::space space);
inline isl::multi_aff insert_domain(isl::space domain) const;
+ inline isl::pw_multi_aff intersect_domain(const isl::set &set) const;
+ inline isl::union_pw_multi_aff intersect_domain(const isl::space &space) const;
+ inline isl::union_pw_multi_aff intersect_domain(const isl::union_set &uset) const;
+ inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
+ inline isl::union_pw_multi_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
+ inline isl::pw_multi_aff intersect_params(const isl::set &set) const;
inline bool involves_locals() const;
inline bool involves_nan() const;
+ inline bool involves_param(const isl::id &id) const;
+ inline bool involves_param(const std::string &id) const;
+ inline bool involves_param(const isl::id_list &list) const;
+ inline bool isa_multi_aff() const;
+ inline bool isa_pw_multi_aff() const;
+ inline isl::aff_list list() const;
+ inline isl::aff_list get_list() const;
+ inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_val max_multi_val() const;
+ inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_val min_multi_val() const;
+ static inline isl::multi_aff multi_val_on_domain(isl::space space, isl::multi_val mv);
+ inline unsigned n_piece() const;
inline isl::multi_aff neg() const;
+ inline bool plain_is_empty() const;
inline bool plain_is_equal(const isl::multi_aff &multi2) const;
+ inline bool plain_is_equal(const isl::multi_pw_aff &multi2) const;
+ inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
+ inline bool plain_is_equal(const isl::aff &multi2) const;
+ inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
inline isl::multi_aff product(isl::multi_aff multi2) const;
+ inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
+ inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
+ inline isl::multi_aff product(const isl::aff &multi2) const;
inline isl::multi_aff pullback(isl::multi_aff ma2) const;
+ inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const;
+ inline isl::pw_multi_aff pullback(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff pullback(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::multi_aff pullback(const isl::aff &ma2) const;
+ inline isl::pw_multi_aff_list pw_multi_aff_list() const;
+ inline isl::pw_multi_aff range_factor_domain() const;
+ inline isl::pw_multi_aff range_factor_range() const;
static inline isl::multi_aff range_map(isl::space space);
inline isl::multi_aff range_product(isl::multi_aff multi2) const;
+ inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::multi_aff range_product(const isl::aff &multi2) const;
+ inline isl::id range_tuple_id() const;
+ inline isl::id get_range_tuple_id() const;
+ inline isl::multi_aff reset_range_tuple_id() const;
inline isl::multi_aff scale(isl::multi_val mv) const;
inline isl::multi_aff scale(isl::val v) const;
inline isl::multi_aff scale(long v) const;
inline isl::multi_aff scale_down(isl::val v) const;
inline isl::multi_aff scale_down(long v) const;
inline isl::multi_aff set_at(int pos, isl::aff el) const;
+ inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
+ inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
+ inline isl::multi_aff set_range_tuple(isl::id id) const;
+ inline isl::multi_aff set_range_tuple(const std::string &id) const;
inline unsigned size() const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
inline isl::multi_aff sub(isl::multi_aff multi2) const;
+ inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::multi_aff sub(const isl::aff &multi2) const;
+ inline isl::pw_multi_aff subtract_domain(const isl::set &set) const;
+ inline isl::union_pw_multi_aff subtract_domain(const isl::space &space) const;
+ inline isl::union_pw_multi_aff subtract_domain(const isl::union_set &uset) const;
+ inline isl::pw_multi_aff_list to_list() const;
+ inline isl::multi_pw_aff to_multi_pw_aff() const;
+ inline isl::multi_union_pw_aff to_multi_union_pw_aff() const;
+ inline isl::pw_multi_aff to_pw_multi_aff() const;
+ inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
inline isl::multi_aff unbind_params_insert_domain(isl::multi_id domain) const;
+ inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
+ inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
+ inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
static inline isl::multi_aff zero(isl::space space);
};
inline bool is_null() const;
inline isl::ctx ctx() const;
- inline isl::multi_id flat_range_product(isl::multi_id multi2) const;
inline isl::id at(int pos) const;
inline isl::id get_at(int pos) const;
+ inline isl::multi_id flat_range_product(isl::multi_id multi2) const;
inline isl::id_list list() const;
inline isl::id_list get_list() const;
- inline isl::space space() const;
- inline isl::space get_space() const;
inline bool plain_is_equal(const isl::multi_id &multi2) const;
inline isl::multi_id range_product(isl::multi_id multi2) const;
inline isl::multi_id set_at(int pos, isl::id el) const;
inline isl::multi_id set_at(int pos, const std::string &el) const;
inline unsigned size() const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
};
// declarations for isl::multi_pw_aff
inline isl::ctx ctx() const;
inline isl::multi_pw_aff add(isl::multi_pw_aff multi2) const;
+ inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::multi_pw_aff add(const isl::aff &multi2) const;
+ inline isl::multi_pw_aff add(const isl::multi_aff &multi2) const;
+ inline isl::multi_pw_aff add(const isl::pw_aff &multi2) const;
+ inline isl::multi_pw_aff add(const isl::pw_multi_aff &multi2) const;
inline isl::multi_pw_aff add_constant(isl::multi_val mv) const;
inline isl::multi_pw_aff add_constant(isl::val v) const;
inline isl::multi_pw_aff add_constant(long v) const;
+ inline isl::map as_map() const;
+ inline isl::multi_aff as_multi_aff() const;
+ inline isl::set as_set() const;
+ inline isl::pw_aff at(int pos) const;
+ inline isl::pw_aff get_at(int pos) const;
inline isl::set bind(isl::multi_id tuple) const;
inline isl::multi_pw_aff bind_domain(isl::multi_id tuple) const;
inline isl::multi_pw_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
inline isl::multi_pw_aff coalesce() const;
inline isl::set domain() const;
inline isl::multi_pw_aff flat_range_product(isl::multi_pw_aff multi2) const;
- inline isl::pw_aff at(int pos) const;
- inline isl::pw_aff get_at(int pos) const;
- inline isl::pw_aff_list list() const;
- inline isl::pw_aff_list get_list() const;
- inline isl::space space() const;
- inline isl::space get_space() const;
+ inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::multi_pw_aff flat_range_product(const isl::aff &multi2) const;
+ inline isl::multi_pw_aff flat_range_product(const isl::multi_aff &multi2) const;
+ inline isl::multi_pw_aff flat_range_product(const isl::pw_aff &multi2) const;
+ inline isl::multi_pw_aff flat_range_product(const isl::pw_multi_aff &multi2) const;
inline isl::multi_pw_aff gist(isl::set set) const;
+ inline isl::multi_union_pw_aff gist(const isl::union_set &context) const;
+ inline isl::multi_pw_aff gist(const isl::basic_set &set) const;
+ inline isl::multi_pw_aff gist(const isl::point &set) const;
+ inline bool has_range_tuple_id() const;
inline isl::multi_pw_aff identity() const;
static inline isl::multi_pw_aff identity_on_domain(isl::space space);
inline isl::multi_pw_aff insert_domain(isl::space domain) const;
inline isl::multi_pw_aff intersect_domain(isl::set domain) const;
+ inline isl::multi_union_pw_aff intersect_domain(const isl::union_set &uset) const;
+ inline isl::multi_pw_aff intersect_domain(const isl::basic_set &domain) const;
+ inline isl::multi_pw_aff intersect_domain(const isl::point &domain) const;
inline isl::multi_pw_aff intersect_params(isl::set set) const;
inline bool involves_nan() const;
inline bool involves_param(const isl::id &id) const;
inline bool involves_param(const std::string &id) const;
inline bool involves_param(const isl::id_list &list) const;
+ inline bool isa_multi_aff() const;
+ inline isl::pw_aff_list list() const;
+ inline isl::pw_aff_list get_list() const;
inline isl::multi_pw_aff max(isl::multi_pw_aff multi2) const;
inline isl::multi_val max_multi_val() const;
inline isl::multi_pw_aff min(isl::multi_pw_aff multi2) const;
inline isl::multi_val min_multi_val() const;
inline isl::multi_pw_aff neg() const;
inline bool plain_is_equal(const isl::multi_pw_aff &multi2) const;
+ inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
+ inline bool plain_is_equal(const isl::aff &multi2) const;
+ inline bool plain_is_equal(const isl::multi_aff &multi2) const;
+ inline bool plain_is_equal(const isl::pw_aff &multi2) const;
+ inline bool plain_is_equal(const isl::pw_multi_aff &multi2) const;
inline isl::multi_pw_aff product(isl::multi_pw_aff multi2) const;
inline isl::multi_pw_aff pullback(isl::multi_aff ma) const;
inline isl::multi_pw_aff pullback(isl::multi_pw_aff mpa2) const;
inline isl::multi_pw_aff pullback(isl::pw_multi_aff pma) const;
+ inline isl::multi_union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
inline isl::multi_pw_aff range_product(isl::multi_pw_aff multi2) const;
+ inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::multi_pw_aff range_product(const isl::aff &multi2) const;
+ inline isl::multi_pw_aff range_product(const isl::multi_aff &multi2) const;
+ inline isl::multi_pw_aff range_product(const isl::pw_aff &multi2) const;
+ inline isl::multi_pw_aff range_product(const isl::pw_multi_aff &multi2) const;
+ inline isl::id range_tuple_id() const;
+ inline isl::id get_range_tuple_id() const;
+ inline isl::multi_pw_aff reset_range_tuple_id() const;
inline isl::multi_pw_aff scale(isl::multi_val mv) const;
inline isl::multi_pw_aff scale(isl::val v) const;
inline isl::multi_pw_aff scale(long v) const;
inline isl::multi_pw_aff scale_down(isl::val v) const;
inline isl::multi_pw_aff scale_down(long v) const;
inline isl::multi_pw_aff set_at(int pos, isl::pw_aff el) const;
+ inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
+ inline isl::multi_pw_aff set_range_tuple(isl::id id) const;
+ inline isl::multi_pw_aff set_range_tuple(const std::string &id) const;
inline unsigned size() const;
- inline isl::multi_pw_aff sub(isl::multi_pw_aff multi2) const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
+ inline isl::multi_pw_aff sub(isl::multi_pw_aff multi2) const;
+ inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::multi_pw_aff sub(const isl::aff &multi2) const;
+ inline isl::multi_pw_aff sub(const isl::multi_aff &multi2) const;
+ inline isl::multi_pw_aff sub(const isl::pw_aff &multi2) const;
+ inline isl::multi_pw_aff sub(const isl::pw_multi_aff &multi2) const;
inline isl::multi_pw_aff unbind_params_insert_domain(isl::multi_id domain) const;
inline isl::multi_pw_aff union_add(isl::multi_pw_aff mpa2) const;
+ inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
+ inline isl::multi_pw_aff union_add(const isl::aff &mpa2) const;
+ inline isl::multi_pw_aff union_add(const isl::multi_aff &mpa2) const;
+ inline isl::multi_pw_aff union_add(const isl::pw_aff &mpa2) const;
+ inline isl::multi_pw_aff union_add(const isl::pw_multi_aff &mpa2) const;
static inline isl::multi_pw_aff zero(isl::space space);
};
inline isl::ctx ctx() const;
inline isl::multi_union_pw_aff add(isl::multi_union_pw_aff multi2) const;
+ inline isl::union_pw_aff at(int pos) const;
+ inline isl::union_pw_aff get_at(int pos) const;
inline isl::union_set bind(isl::multi_id tuple) const;
inline isl::multi_union_pw_aff coalesce() const;
inline isl::union_set domain() const;
inline isl::multi_union_pw_aff flat_range_product(isl::multi_union_pw_aff multi2) const;
- inline isl::union_pw_aff at(int pos) const;
- inline isl::union_pw_aff get_at(int pos) const;
- inline isl::union_pw_aff_list list() const;
- inline isl::union_pw_aff_list get_list() const;
- inline isl::space space() const;
- inline isl::space get_space() const;
inline isl::multi_union_pw_aff gist(isl::union_set context) const;
+ inline bool has_range_tuple_id() const;
inline isl::multi_union_pw_aff intersect_domain(isl::union_set uset) const;
inline isl::multi_union_pw_aff intersect_params(isl::set params) const;
inline bool involves_nan() const;
+ inline isl::union_pw_aff_list list() const;
+ inline isl::union_pw_aff_list get_list() const;
inline isl::multi_union_pw_aff neg() const;
inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
inline isl::multi_union_pw_aff pullback(isl::union_pw_multi_aff upma) const;
inline isl::multi_union_pw_aff range_product(isl::multi_union_pw_aff multi2) const;
+ inline isl::id range_tuple_id() const;
+ inline isl::id get_range_tuple_id() const;
+ inline isl::multi_union_pw_aff reset_range_tuple_id() const;
inline isl::multi_union_pw_aff scale(isl::multi_val mv) const;
inline isl::multi_union_pw_aff scale(isl::val v) const;
inline isl::multi_union_pw_aff scale(long v) const;
inline isl::multi_union_pw_aff scale_down(isl::val v) const;
inline isl::multi_union_pw_aff scale_down(long v) const;
inline isl::multi_union_pw_aff set_at(int pos, isl::union_pw_aff el) const;
+ inline isl::multi_union_pw_aff set_range_tuple(isl::id id) const;
+ inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const;
inline unsigned size() const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
inline isl::multi_union_pw_aff sub(isl::multi_union_pw_aff multi2) const;
inline isl::multi_union_pw_aff union_add(isl::multi_union_pw_aff mupa2) const;
static inline isl::multi_union_pw_aff zero(isl::space space);
inline isl::multi_val add(isl::multi_val multi2) const;
inline isl::multi_val add(isl::val v) const;
inline isl::multi_val add(long v) const;
- inline isl::multi_val flat_range_product(isl::multi_val multi2) const;
inline isl::val at(int pos) const;
inline isl::val get_at(int pos) const;
+ inline isl::multi_val flat_range_product(isl::multi_val multi2) const;
+ inline bool has_range_tuple_id() const;
+ inline bool involves_nan() const;
inline isl::val_list list() const;
inline isl::val_list get_list() const;
- inline isl::space space() const;
- inline isl::space get_space() const;
- inline bool involves_nan() const;
inline isl::multi_val max(isl::multi_val multi2) const;
inline isl::multi_val min(isl::multi_val multi2) const;
inline isl::multi_val neg() const;
inline bool plain_is_equal(const isl::multi_val &multi2) const;
inline isl::multi_val product(isl::multi_val multi2) const;
inline isl::multi_val range_product(isl::multi_val multi2) const;
+ inline isl::id range_tuple_id() const;
+ inline isl::id get_range_tuple_id() const;
+ inline isl::multi_val reset_range_tuple_id() const;
inline isl::multi_val scale(isl::multi_val mv) const;
inline isl::multi_val scale(isl::val v) const;
inline isl::multi_val scale(long v) const;
inline isl::multi_val scale_down(long v) const;
inline isl::multi_val set_at(int pos, isl::val el) const;
inline isl::multi_val set_at(int pos, long el) const;
+ inline isl::multi_val set_range_tuple(isl::id id) const;
+ inline isl::multi_val set_range_tuple(const std::string &id) const;
inline unsigned size() const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
inline isl::multi_val sub(isl::multi_val multi2) const;
static inline isl::multi_val zero(isl::space space);
};
inline bool is_null() const;
inline isl::ctx ctx() const;
+ inline isl::basic_set affine_hull() const;
+ inline isl::basic_set apply(const isl::basic_map &bmap) const;
+ inline isl::set apply(const isl::map &map) const;
+ inline isl::union_set apply(const isl::union_map &umap) const;
+ inline isl::pw_multi_aff as_pw_multi_aff() const;
+ inline isl::set as_set() const;
+ inline isl::set bind(const isl::multi_id &tuple) const;
+ inline isl::set coalesce() const;
+ inline isl::set complement() const;
+ inline isl::union_set compute_divs() const;
+ inline isl::basic_set detect_equalities() const;
+ inline isl::val dim_max_val(int pos) const;
+ inline isl::val dim_min_val(int pos) const;
+ inline bool every_set(const std::function<bool(isl::set)> &test) const;
+ inline isl::set extract_set(const isl::space &space) const;
+ inline isl::basic_set flatten() const;
+ inline void foreach_basic_set(const std::function<void(isl::basic_set)> &fn) const;
+ inline void foreach_point(const std::function<void(isl::point)> &fn) const;
+ inline void foreach_set(const std::function<void(isl::set)> &fn) const;
+ inline isl::basic_set gist(const isl::basic_set &context) const;
+ inline isl::set gist(const isl::set &context) const;
+ inline isl::union_set gist(const isl::union_set &context) const;
+ inline isl::union_set gist_params(const isl::set &set) const;
+ inline isl::map identity() const;
+ inline isl::pw_aff indicator_function() const;
+ inline isl::map insert_domain(const isl::space &domain) const;
+ inline isl::basic_set intersect(const isl::basic_set &bset2) const;
+ inline isl::set intersect(const isl::set &set2) const;
+ inline isl::union_set intersect(const isl::union_set &uset2) const;
+ inline isl::basic_set intersect_params(const isl::basic_set &bset2) const;
+ inline isl::set intersect_params(const isl::set ¶ms) const;
+ inline bool involves_locals() const;
+ inline bool is_disjoint(const isl::set &set2) const;
+ inline bool is_disjoint(const isl::union_set &uset2) const;
+ inline bool is_empty() const;
+ inline bool is_equal(const isl::basic_set &bset2) const;
+ inline bool is_equal(const isl::set &set2) const;
+ inline bool is_equal(const isl::union_set &uset2) const;
+ inline bool is_singleton() const;
+ inline bool is_strict_subset(const isl::set &set2) const;
+ inline bool is_strict_subset(const isl::union_set &uset2) const;
+ inline bool is_subset(const isl::basic_set &bset2) const;
+ inline bool is_subset(const isl::set &set2) const;
+ inline bool is_subset(const isl::union_set &uset2) const;
+ inline bool is_wrapping() const;
+ inline bool isa_set() const;
+ inline isl::set lexmax() const;
+ inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
+ inline isl::set lexmin() const;
+ inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
+ inline isl::set lower_bound(const isl::multi_pw_aff &lower) const;
+ inline isl::set lower_bound(const isl::multi_val &lower) const;
+ inline isl::multi_pw_aff max_multi_pw_aff() const;
+ inline isl::val max_val(const isl::aff &obj) const;
+ inline isl::multi_pw_aff min_multi_pw_aff() const;
+ inline isl::val min_val(const isl::aff &obj) const;
inline isl::multi_val multi_val() const;
inline isl::multi_val get_multi_val() const;
+ inline isl::basic_set params() const;
+ inline isl::multi_val plain_multi_val_if_fixed() const;
+ inline isl::basic_set polyhedral_hull() const;
+ inline isl::set preimage(const isl::multi_aff &ma) const;
+ inline isl::set preimage(const isl::multi_pw_aff &mpa) const;
+ inline isl::set preimage(const isl::pw_multi_aff &pma) const;
+ inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
+ inline isl::set product(const isl::set &set2) const;
+ inline isl::set project_out_all_params() const;
+ inline isl::set project_out_param(const isl::id &id) const;
+ inline isl::set project_out_param(const std::string &id) const;
+ inline isl::set project_out_param(const isl::id_list &list) const;
+ inline isl::pw_multi_aff pw_multi_aff_on_domain(const isl::multi_val &mv) const;
+ inline isl::basic_set sample() const;
+ inline isl::point sample_point() const;
+ inline isl::fixed_box simple_fixed_box_hull() const;
+ inline isl::space space() const;
+ inline isl::val stride(int pos) const;
+ inline isl::set subtract(const isl::set &set2) const;
+ inline isl::union_set subtract(const isl::union_set &uset2) const;
+ inline isl::union_set_list to_list() const;
+ inline isl::set to_set() const;
+ inline isl::union_set to_union_set() const;
+ inline isl::map translation() const;
+ inline unsigned tuple_dim() const;
+ inline isl::set unbind_params(const isl::multi_id &tuple) const;
+ inline isl::map unbind_params_insert_domain(const isl::multi_id &domain) const;
+ inline isl::set unite(const isl::basic_set &bset2) const;
+ inline isl::set unite(const isl::set &set2) const;
+ inline isl::union_set unite(const isl::union_set &uset2) const;
+ inline isl::basic_set unshifted_simple_hull() const;
+ inline isl::map unwrap() const;
+ inline isl::set upper_bound(const isl::multi_pw_aff &upper) const;
+ inline isl::set upper_bound(const isl::multi_val &upper) const;
};
// declarations for isl::pw_aff
inline bool is_null() const;
inline isl::ctx ctx() const;
+ inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
inline isl::pw_aff add(isl::pw_aff pwaff2) const;
+ inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const;
+ inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::pw_aff add(const isl::aff &pwaff2) const;
inline isl::pw_aff add_constant(isl::val v) const;
inline isl::pw_aff add_constant(long v) const;
+ inline isl::pw_multi_aff add_constant(const isl::multi_val &mv) const;
+ inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
inline isl::aff as_aff() const;
+ inline isl::map as_map() const;
+ inline isl::multi_aff as_multi_aff() const;
+ inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
+ inline isl::pw_multi_aff as_pw_multi_aff() const;
+ inline isl::set as_set() const;
+ inline isl::union_map as_union_map() const;
+ inline isl::pw_aff at(int pos) const;
+ inline isl::set bind(const isl::multi_id &tuple) const;
inline isl::set bind(isl::id id) const;
inline isl::set bind(const std::string &id) const;
inline isl::pw_aff bind_domain(isl::multi_id tuple) const;
inline isl::set domain() const;
inline isl::set eq_set(isl::pw_aff pwaff2) const;
inline isl::val eval(isl::point pnt) const;
+ inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
+ inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
inline isl::pw_aff floor() const;
+ inline void foreach_piece(const std::function<void(isl::set, isl::multi_aff)> &fn) const;
inline isl::set ge_set(isl::pw_aff pwaff2) const;
inline isl::pw_aff gist(isl::set context) const;
+ inline isl::union_pw_aff gist(const isl::union_set &context) const;
+ inline isl::pw_aff gist(const isl::basic_set &context) const;
+ inline isl::pw_aff gist(const isl::point &context) const;
inline isl::set gt_set(isl::pw_aff pwaff2) const;
+ inline bool has_range_tuple_id() const;
+ inline isl::multi_pw_aff identity() const;
inline isl::pw_aff insert_domain(isl::space domain) const;
inline isl::pw_aff intersect_domain(isl::set set) const;
+ inline isl::union_pw_aff intersect_domain(const isl::space &space) const;
+ inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const;
+ inline isl::pw_aff intersect_domain(const isl::basic_set &set) const;
+ inline isl::pw_aff intersect_domain(const isl::point &set) const;
+ inline isl::union_pw_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
+ inline isl::union_pw_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
inline isl::pw_aff intersect_params(isl::set set) const;
+ inline bool involves_locals() const;
+ inline bool involves_nan() const;
+ inline bool involves_param(const isl::id &id) const;
+ inline bool involves_param(const std::string &id) const;
+ inline bool involves_param(const isl::id_list &list) const;
inline bool isa_aff() const;
+ inline bool isa_multi_aff() const;
+ inline bool isa_pw_multi_aff() const;
inline isl::set le_set(isl::pw_aff pwaff2) const;
+ inline isl::pw_aff_list list() const;
inline isl::set lt_set(isl::pw_aff pwaff2) const;
+ inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
inline isl::pw_aff max(isl::pw_aff pwaff2) const;
+ inline isl::pw_aff max(const isl::aff &pwaff2) const;
+ inline isl::multi_val max_multi_val() const;
+ inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
inline isl::pw_aff min(isl::pw_aff pwaff2) const;
+ inline isl::pw_aff min(const isl::aff &pwaff2) const;
+ inline isl::multi_val min_multi_val() const;
inline isl::pw_aff mod(isl::val mod) const;
inline isl::pw_aff mod(long mod) const;
inline isl::pw_aff mul(isl::pw_aff pwaff2) const;
+ inline unsigned n_piece() const;
inline isl::set ne_set(isl::pw_aff pwaff2) const;
inline isl::pw_aff neg() const;
static inline isl::pw_aff param_on_domain(isl::set domain, isl::id id);
+ inline bool plain_is_empty() const;
+ inline bool plain_is_equal(const isl::multi_pw_aff &multi2) const;
+ inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
+ inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
inline isl::pw_aff pullback(isl::multi_aff ma) const;
inline isl::pw_aff pullback(isl::multi_pw_aff mpa) const;
inline isl::pw_aff pullback(isl::pw_multi_aff pma) const;
+ inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
+ inline isl::pw_multi_aff_list pw_multi_aff_list() const;
+ inline isl::pw_multi_aff range_factor_domain() const;
+ inline isl::pw_multi_aff range_factor_range() const;
+ inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::id range_tuple_id() const;
+ inline isl::multi_pw_aff reset_range_tuple_id() const;
+ inline isl::multi_pw_aff scale(const isl::multi_val &mv) const;
inline isl::pw_aff scale(isl::val v) const;
inline isl::pw_aff scale(long v) const;
+ inline isl::multi_pw_aff scale_down(const isl::multi_val &mv) const;
inline isl::pw_aff scale_down(isl::val f) const;
inline isl::pw_aff scale_down(long f) const;
+ inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
+ inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
+ inline isl::pw_multi_aff set_range_tuple(const isl::id &id) const;
+ inline isl::pw_multi_aff set_range_tuple(const std::string &id) const;
+ inline unsigned size() const;
+ inline isl::space space() const;
+ inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
inline isl::pw_aff sub(isl::pw_aff pwaff2) const;
+ inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const;
+ inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::pw_aff sub(const isl::aff &pwaff2) const;
inline isl::pw_aff subtract_domain(isl::set set) const;
+ inline isl::union_pw_aff subtract_domain(const isl::space &space) const;
+ inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const;
+ inline isl::pw_aff subtract_domain(const isl::basic_set &set) const;
+ inline isl::pw_aff subtract_domain(const isl::point &set) const;
inline isl::pw_aff tdiv_q(isl::pw_aff pa2) const;
inline isl::pw_aff tdiv_r(isl::pw_aff pa2) const;
+ inline isl::pw_aff_list to_list() const;
+ inline isl::multi_pw_aff to_multi_pw_aff() const;
+ inline isl::union_pw_aff to_union_pw_aff() const;
+ inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
+ inline isl::multi_pw_aff unbind_params_insert_domain(const isl::multi_id &domain) const;
+ inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
+ inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
inline isl::pw_aff union_add(isl::pw_aff pwaff2) const;
+ inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
+ inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const;
+ inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::pw_aff union_add(const isl::aff &pwaff2) const;
};
// declarations for isl::pw_aff_list
inline /* implicit */ pw_aff_list(const pw_aff_list &obj);
inline explicit pw_aff_list(isl::ctx ctx, int n);
inline explicit pw_aff_list(isl::pw_aff el);
+ inline explicit pw_aff_list(isl::ctx ctx, const std::string &str);
inline pw_aff_list &operator=(pw_aff_list obj);
inline ~pw_aff_list();
inline __isl_give isl_pw_aff_list *copy() const &;
inline isl::ctx ctx() const;
inline isl::pw_aff_list add(isl::pw_aff el) const;
+ inline isl::pw_aff at(int index) const;
+ inline isl::pw_aff get_at(int index) const;
inline isl::pw_aff_list clear() const;
inline isl::pw_aff_list concat(isl::pw_aff_list list2) const;
inline isl::pw_aff_list drop(unsigned int first, unsigned int n) const;
inline void foreach(const std::function<void(isl::pw_aff)> &fn) const;
- inline isl::pw_aff at(int index) const;
- inline isl::pw_aff get_at(int index) const;
inline isl::pw_aff_list insert(unsigned int pos, isl::pw_aff el) const;
inline unsigned size() const;
};
inline bool is_null() const;
inline isl::ctx ctx() const;
+ inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
inline isl::pw_multi_aff add(isl::pw_multi_aff pma2) const;
+ inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::pw_multi_aff add(const isl::multi_aff &pma2) const;
+ inline isl::pw_multi_aff add(const isl::pw_aff &pma2) const;
inline isl::pw_multi_aff add_constant(isl::multi_val mv) const;
inline isl::pw_multi_aff add_constant(isl::val v) const;
inline isl::pw_multi_aff add_constant(long v) const;
+ inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::map as_map() const;
inline isl::multi_aff as_multi_aff() const;
+ inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
+ inline isl::pw_multi_aff as_pw_multi_aff() const;
+ inline isl::set as_set() const;
+ inline isl::union_map as_union_map() const;
+ inline isl::pw_aff at(int pos) const;
+ inline isl::pw_aff get_at(int pos) const;
+ inline isl::set bind(const isl::multi_id &tuple) const;
inline isl::pw_multi_aff bind_domain(isl::multi_id tuple) const;
inline isl::pw_multi_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
inline isl::pw_multi_aff coalesce() const;
inline isl::set domain() const;
static inline isl::pw_multi_aff domain_map(isl::space space);
+ inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
+ inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
inline isl::pw_multi_aff flat_range_product(isl::pw_multi_aff pma2) const;
+ inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::pw_multi_aff flat_range_product(const isl::multi_aff &pma2) const;
+ inline isl::pw_multi_aff flat_range_product(const isl::pw_aff &pma2) const;
inline void foreach_piece(const std::function<void(isl::set, isl::multi_aff)> &fn) const;
- inline isl::space space() const;
- inline isl::space get_space() const;
inline isl::pw_multi_aff gist(isl::set set) const;
+ inline isl::union_pw_multi_aff gist(const isl::union_set &context) const;
+ inline isl::pw_multi_aff gist(const isl::basic_set &set) const;
+ inline isl::pw_multi_aff gist(const isl::point &set) const;
+ inline bool has_range_tuple_id() const;
+ inline isl::multi_pw_aff identity() const;
static inline isl::pw_multi_aff identity_on_domain(isl::space space);
inline isl::pw_multi_aff insert_domain(isl::space domain) const;
inline isl::pw_multi_aff intersect_domain(isl::set set) const;
+ inline isl::union_pw_multi_aff intersect_domain(const isl::space &space) const;
+ inline isl::union_pw_multi_aff intersect_domain(const isl::union_set &uset) const;
+ inline isl::pw_multi_aff intersect_domain(const isl::basic_set &set) const;
+ inline isl::pw_multi_aff intersect_domain(const isl::point &set) const;
+ inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
+ inline isl::union_pw_multi_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
inline isl::pw_multi_aff intersect_params(isl::set set) const;
inline bool involves_locals() const;
+ inline bool involves_nan() const;
+ inline bool involves_param(const isl::id &id) const;
+ inline bool involves_param(const std::string &id) const;
+ inline bool involves_param(const isl::id_list &list) const;
inline bool isa_multi_aff() const;
+ inline bool isa_pw_multi_aff() const;
+ inline isl::pw_aff_list list() const;
+ inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
inline isl::multi_val max_multi_val() const;
+ inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
inline isl::multi_val min_multi_val() const;
+ static inline isl::pw_multi_aff multi_val_on_domain(isl::set domain, isl::multi_val mv);
inline unsigned n_piece() const;
+ inline isl::multi_pw_aff neg() const;
+ inline bool plain_is_empty() const;
+ inline bool plain_is_equal(const isl::multi_pw_aff &multi2) const;
+ inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
inline isl::pw_multi_aff preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const;
+ inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const;
+ inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const;
+ inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
inline isl::pw_multi_aff product(isl::pw_multi_aff pma2) const;
+ inline isl::pw_multi_aff product(const isl::multi_aff &pma2) const;
+ inline isl::pw_multi_aff product(const isl::pw_aff &pma2) const;
+ inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const;
inline isl::pw_multi_aff pullback(isl::multi_aff ma) const;
inline isl::pw_multi_aff pullback(isl::pw_multi_aff pma2) const;
+ inline isl::union_pw_multi_aff pullback(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::pw_multi_aff_list pw_multi_aff_list() const;
inline isl::pw_multi_aff range_factor_domain() const;
inline isl::pw_multi_aff range_factor_range() const;
static inline isl::pw_multi_aff range_map(isl::space space);
+ inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
inline isl::pw_multi_aff range_product(isl::pw_multi_aff pma2) const;
+ inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::pw_multi_aff range_product(const isl::multi_aff &pma2) const;
+ inline isl::pw_multi_aff range_product(const isl::pw_aff &pma2) const;
+ inline isl::id range_tuple_id() const;
+ inline isl::id get_range_tuple_id() const;
+ inline isl::multi_pw_aff reset_range_tuple_id() const;
+ inline isl::multi_pw_aff scale(const isl::multi_val &mv) const;
inline isl::pw_multi_aff scale(isl::val v) const;
inline isl::pw_multi_aff scale(long v) const;
+ inline isl::multi_pw_aff scale_down(const isl::multi_val &mv) const;
inline isl::pw_multi_aff scale_down(isl::val v) const;
inline isl::pw_multi_aff scale_down(long v) const;
+ inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
+ inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
+ inline isl::pw_multi_aff set_range_tuple(isl::id id) const;
+ inline isl::pw_multi_aff set_range_tuple(const std::string &id) const;
+ inline unsigned size() const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
+ inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
+ inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
inline isl::pw_multi_aff sub(isl::pw_multi_aff pma2) const;
+ inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::pw_multi_aff sub(const isl::multi_aff &pma2) const;
+ inline isl::pw_multi_aff sub(const isl::pw_aff &pma2) const;
inline isl::pw_multi_aff subtract_domain(isl::set set) const;
+ inline isl::union_pw_multi_aff subtract_domain(const isl::space &space) const;
+ inline isl::union_pw_multi_aff subtract_domain(const isl::union_set &uset) const;
+ inline isl::pw_multi_aff subtract_domain(const isl::basic_set &set) const;
+ inline isl::pw_multi_aff subtract_domain(const isl::point &set) const;
+ inline isl::pw_multi_aff_list to_list() const;
+ inline isl::multi_pw_aff to_multi_pw_aff() const;
+ inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
+ inline isl::multi_pw_aff unbind_params_insert_domain(const isl::multi_id &domain) const;
+ inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
+ inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
inline isl::pw_multi_aff union_add(isl::pw_multi_aff pma2) const;
+ inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::pw_multi_aff union_add(const isl::multi_aff &pma2) const;
+ inline isl::pw_multi_aff union_add(const isl::pw_aff &pma2) const;
static inline isl::pw_multi_aff zero(isl::space space);
};
inline /* implicit */ pw_multi_aff_list(const pw_multi_aff_list &obj);
inline explicit pw_multi_aff_list(isl::ctx ctx, int n);
inline explicit pw_multi_aff_list(isl::pw_multi_aff el);
+ inline explicit pw_multi_aff_list(isl::ctx ctx, const std::string &str);
inline pw_multi_aff_list &operator=(pw_multi_aff_list obj);
inline ~pw_multi_aff_list();
inline __isl_give isl_pw_multi_aff_list *copy() const &;
inline isl::ctx ctx() const;
inline isl::pw_multi_aff_list add(isl::pw_multi_aff el) const;
+ inline isl::pw_multi_aff at(int index) const;
+ inline isl::pw_multi_aff get_at(int index) const;
inline isl::pw_multi_aff_list clear() const;
inline isl::pw_multi_aff_list concat(isl::pw_multi_aff_list list2) const;
inline isl::pw_multi_aff_list drop(unsigned int first, unsigned int n) const;
inline void foreach(const std::function<void(isl::pw_multi_aff)> &fn) const;
- inline isl::pw_multi_aff at(int index) const;
- inline isl::pw_multi_aff get_at(int index) const;
inline isl::pw_multi_aff_list insert(unsigned int pos, isl::pw_multi_aff el) const;
inline unsigned size() const;
};
inline bool is_null() const;
inline isl::ctx ctx() const;
- static inline isl::schedule from_domain(isl::union_set domain);
inline isl::union_set domain() const;
inline isl::union_set get_domain() const;
+ static inline isl::schedule from_domain(isl::union_set domain);
inline isl::union_map map() const;
inline isl::union_map get_map() const;
+ inline isl::schedule pullback(isl::union_pw_multi_aff upma) const;
inline isl::schedule_node root() const;
inline isl::schedule_node get_root() const;
- inline isl::schedule pullback(isl::union_pw_multi_aff upma) const;
};
// declarations for isl::schedule_constraints
inline bool is_null() const;
inline isl::ctx ctx() const;
- inline isl::schedule compute_schedule() const;
inline isl::union_map coincidence() const;
inline isl::union_map get_coincidence() const;
+ inline isl::schedule compute_schedule() const;
inline isl::union_map conditional_validity() const;
inline isl::union_map get_conditional_validity() const;
inline isl::union_map conditional_validity_condition() const;
inline isl::set get_context() const;
inline isl::union_set domain() const;
inline isl::union_set get_domain() const;
+ static inline isl::schedule_constraints on_domain(isl::union_set domain);
inline isl::union_map proximity() const;
inline isl::union_map get_proximity() const;
- inline isl::union_map validity() const;
- inline isl::union_map get_validity() const;
- static inline isl::schedule_constraints on_domain(isl::union_set domain);
inline isl::schedule_constraints set_coincidence(isl::union_map coincidence) const;
inline isl::schedule_constraints set_conditional_validity(isl::union_map condition, isl::union_map validity) const;
inline isl::schedule_constraints set_context(isl::set context) const;
inline isl::schedule_constraints set_proximity(isl::union_map proximity) const;
inline isl::schedule_constraints set_validity(isl::union_map validity) const;
+ inline isl::union_map validity() const;
+ inline isl::union_map get_validity() const;
};
// declarations for isl::schedule_node
inline isl::ctx ctx() const;
inline isl::schedule_node ancestor(int generation) const;
+ inline unsigned ancestor_child_position(const isl::schedule_node &ancestor) const;
+ inline unsigned get_ancestor_child_position(const isl::schedule_node &ancestor) const;
inline isl::schedule_node child(int pos) const;
+ inline unsigned child_position() const;
+ inline unsigned get_child_position() const;
inline bool every_descendant(const std::function<bool(isl::schedule_node)> &test) const;
inline isl::schedule_node first_child() const;
inline void foreach_ancestor_top_down(const std::function<void(isl::schedule_node)> &fn) const;
inline void foreach_descendant_top_down(const std::function<bool(isl::schedule_node)> &fn) const;
static inline isl::schedule_node from_domain(isl::union_set domain);
static inline isl::schedule_node from_extension(isl::union_map extension);
- inline unsigned ancestor_child_position(const isl::schedule_node &ancestor) const;
- inline unsigned get_ancestor_child_position(const isl::schedule_node &ancestor) const;
- inline unsigned child_position() const;
- inline unsigned get_child_position() const;
- inline isl::multi_union_pw_aff prefix_schedule_multi_union_pw_aff() const;
- inline isl::multi_union_pw_aff get_prefix_schedule_multi_union_pw_aff() const;
- inline isl::union_map prefix_schedule_union_map() const;
- inline isl::union_map get_prefix_schedule_union_map() const;
- inline isl::union_pw_multi_aff prefix_schedule_union_pw_multi_aff() const;
- inline isl::union_pw_multi_aff get_prefix_schedule_union_pw_multi_aff() const;
- inline isl::schedule schedule() const;
- inline isl::schedule get_schedule() const;
- inline isl::schedule_node shared_ancestor(const isl::schedule_node &node2) const;
- inline isl::schedule_node get_shared_ancestor(const isl::schedule_node &node2) const;
- inline unsigned tree_depth() const;
- inline unsigned get_tree_depth() const;
inline isl::schedule_node graft_after(isl::schedule_node graft) const;
inline isl::schedule_node graft_before(isl::schedule_node graft) const;
inline bool has_children() const;
inline isl::schedule_node order_after(isl::union_set filter) const;
inline isl::schedule_node order_before(isl::union_set filter) const;
inline isl::schedule_node parent() const;
+ inline isl::multi_union_pw_aff prefix_schedule_multi_union_pw_aff() const;
+ inline isl::multi_union_pw_aff get_prefix_schedule_multi_union_pw_aff() const;
+ inline isl::union_map prefix_schedule_union_map() const;
+ inline isl::union_map get_prefix_schedule_union_map() const;
+ inline isl::union_pw_multi_aff prefix_schedule_union_pw_multi_aff() const;
+ inline isl::union_pw_multi_aff get_prefix_schedule_union_pw_multi_aff() const;
inline isl::schedule_node previous_sibling() const;
inline isl::schedule_node root() const;
+ inline isl::schedule schedule() const;
+ inline isl::schedule get_schedule() const;
+ inline isl::schedule_node shared_ancestor(const isl::schedule_node &node2) const;
+ inline isl::schedule_node get_shared_ancestor(const isl::schedule_node &node2) const;
+ inline unsigned tree_depth() const;
+ inline unsigned get_tree_depth() const;
};
// declarations for isl::schedule_node_band
inline isl::union_set get_ast_build_options() const;
inline isl::set ast_isolate_option() const;
inline isl::set get_ast_isolate_option() const;
- inline isl::multi_union_pw_aff partial_schedule() const;
- inline isl::multi_union_pw_aff get_partial_schedule() const;
- inline bool permutable() const;
- inline bool get_permutable() const;
inline bool member_get_coincident(int pos) const;
inline schedule_node_band member_set_coincident(int pos, int coincident) const;
inline schedule_node_band mod(isl::multi_val mv) const;
inline unsigned n_member() const;
+ inline isl::multi_union_pw_aff partial_schedule() const;
+ inline isl::multi_union_pw_aff get_partial_schedule() const;
+ inline bool permutable() const;
+ inline bool get_permutable() const;
inline schedule_node_band scale(isl::multi_val mv) const;
inline schedule_node_band scale_down(isl::multi_val mv) const;
inline schedule_node_band set_ast_build_options(isl::union_set options) const;
inline isl::basic_set affine_hull() const;
inline isl::set apply(isl::map map) const;
+ inline isl::union_set apply(const isl::union_map &umap) const;
+ inline isl::set apply(const isl::basic_map &map) const;
+ inline isl::pw_multi_aff as_pw_multi_aff() const;
+ inline isl::set as_set() const;
inline isl::set bind(isl::multi_id tuple) const;
inline isl::set coalesce() const;
inline isl::set complement() const;
+ inline isl::union_set compute_divs() const;
inline isl::set detect_equalities() const;
inline isl::val dim_max_val(int pos) const;
inline isl::val dim_min_val(int pos) const;
static inline isl::set empty(isl::space space);
+ inline bool every_set(const std::function<bool(isl::set)> &test) const;
+ inline isl::set extract_set(const isl::space &space) const;
inline isl::set flatten() const;
inline void foreach_basic_set(const std::function<void(isl::basic_set)> &fn) const;
inline void foreach_point(const std::function<void(isl::point)> &fn) const;
- inline isl::multi_val plain_multi_val_if_fixed() const;
- inline isl::multi_val get_plain_multi_val_if_fixed() const;
- inline isl::fixed_box simple_fixed_box_hull() const;
- inline isl::fixed_box get_simple_fixed_box_hull() const;
- inline isl::space space() const;
- inline isl::space get_space() const;
- inline isl::val stride(int pos) const;
- inline isl::val get_stride(int pos) const;
+ inline void foreach_set(const std::function<void(isl::set)> &fn) const;
inline isl::set gist(isl::set context) const;
+ inline isl::union_set gist(const isl::union_set &context) const;
+ inline isl::set gist(const isl::basic_set &context) const;
+ inline isl::set gist(const isl::point &context) const;
+ inline isl::union_set gist_params(const isl::set &set) const;
inline isl::map identity() const;
inline isl::pw_aff indicator_function() const;
inline isl::map insert_domain(isl::space domain) const;
inline isl::set intersect(isl::set set2) const;
+ inline isl::union_set intersect(const isl::union_set &uset2) const;
+ inline isl::set intersect(const isl::basic_set &set2) const;
+ inline isl::set intersect(const isl::point &set2) const;
inline isl::set intersect_params(isl::set params) const;
inline bool involves_locals() const;
inline bool is_disjoint(const isl::set &set2) const;
+ inline bool is_disjoint(const isl::union_set &uset2) const;
+ inline bool is_disjoint(const isl::basic_set &set2) const;
+ inline bool is_disjoint(const isl::point &set2) const;
inline bool is_empty() const;
inline bool is_equal(const isl::set &set2) const;
+ inline bool is_equal(const isl::union_set &uset2) const;
+ inline bool is_equal(const isl::basic_set &set2) const;
+ inline bool is_equal(const isl::point &set2) const;
inline bool is_singleton() const;
inline bool is_strict_subset(const isl::set &set2) const;
+ inline bool is_strict_subset(const isl::union_set &uset2) const;
+ inline bool is_strict_subset(const isl::basic_set &set2) const;
+ inline bool is_strict_subset(const isl::point &set2) const;
inline bool is_subset(const isl::set &set2) const;
+ inline bool is_subset(const isl::union_set &uset2) const;
+ inline bool is_subset(const isl::basic_set &set2) const;
+ inline bool is_subset(const isl::point &set2) const;
inline bool is_wrapping() const;
+ inline bool isa_set() const;
inline isl::set lexmax() const;
inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
inline isl::set lexmin() const;
inline isl::multi_pw_aff min_multi_pw_aff() const;
inline isl::val min_val(const isl::aff &obj) const;
inline isl::set params() const;
+ inline isl::multi_val plain_multi_val_if_fixed() const;
+ inline isl::multi_val get_plain_multi_val_if_fixed() const;
inline isl::basic_set polyhedral_hull() const;
inline isl::set preimage(isl::multi_aff ma) const;
inline isl::set preimage(isl::multi_pw_aff mpa) const;
inline isl::set preimage(isl::pw_multi_aff pma) const;
+ inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
inline isl::set product(isl::set set2) const;
inline isl::set project_out_all_params() const;
inline isl::set project_out_param(isl::id id) const;
inline isl::set project_out_param(const std::string &id) const;
inline isl::set project_out_param(isl::id_list list) const;
+ inline isl::pw_multi_aff pw_multi_aff_on_domain(isl::multi_val mv) const;
inline isl::basic_set sample() const;
inline isl::point sample_point() const;
+ inline isl::fixed_box simple_fixed_box_hull() const;
+ inline isl::fixed_box get_simple_fixed_box_hull() const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
+ inline isl::val stride(int pos) const;
+ inline isl::val get_stride(int pos) const;
inline isl::set subtract(isl::set set2) const;
+ inline isl::union_set subtract(const isl::union_set &uset2) const;
+ inline isl::set subtract(const isl::basic_set &set2) const;
+ inline isl::set subtract(const isl::point &set2) const;
+ inline isl::union_set_list to_list() const;
+ inline isl::union_set to_union_set() const;
inline isl::map translation() const;
+ inline unsigned tuple_dim() const;
inline isl::set unbind_params(isl::multi_id tuple) const;
inline isl::map unbind_params_insert_domain(isl::multi_id domain) const;
inline isl::set unite(isl::set set2) const;
+ inline isl::union_set unite(const isl::union_set &uset2) const;
+ inline isl::set unite(const isl::basic_set &set2) const;
+ inline isl::set unite(const isl::point &set2) const;
static inline isl::set universe(isl::space space);
inline isl::basic_set unshifted_simple_hull() const;
inline isl::map unwrap() const;
inline isl::space add_named_tuple(isl::id tuple_id, unsigned int dim) const;
inline isl::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const;
+ inline isl::space add_param(isl::id id) const;
+ inline isl::space add_param(const std::string &id) const;
inline isl::space add_unnamed_tuple(unsigned int dim) const;
inline isl::space curry() const;
inline isl::space domain() const;
+ inline isl::multi_aff domain_map_multi_aff() const;
+ inline isl::pw_multi_aff domain_map_pw_multi_aff() const;
+ inline isl::id domain_tuple_id() const;
+ inline isl::id get_domain_tuple_id() const;
inline isl::space flatten_domain() const;
inline isl::space flatten_range() const;
+ inline bool has_domain_tuple_id() const;
+ inline bool has_range_tuple_id() const;
+ inline isl::multi_aff identity_multi_aff_on_domain() const;
+ inline isl::multi_pw_aff identity_multi_pw_aff_on_domain() const;
+ inline isl::pw_multi_aff identity_pw_multi_aff_on_domain() const;
inline bool is_equal(const isl::space &space2) const;
inline bool is_wrapping() const;
inline isl::space map_from_set() const;
+ inline isl::multi_aff multi_aff(isl::aff_list list) const;
+ inline isl::multi_aff multi_aff_on_domain(isl::multi_val mv) const;
+ inline isl::multi_id multi_id(isl::id_list list) const;
+ inline isl::multi_pw_aff multi_pw_aff(isl::pw_aff_list list) const;
+ inline isl::multi_union_pw_aff multi_union_pw_aff(isl::union_pw_aff_list list) const;
+ inline isl::multi_val multi_val(isl::val_list list) const;
+ inline isl::aff param_aff_on_domain(isl::id id) const;
+ inline isl::aff param_aff_on_domain(const std::string &id) const;
inline isl::space params() const;
inline isl::space product(isl::space right) const;
inline isl::space range() const;
+ inline isl::multi_aff range_map_multi_aff() const;
+ inline isl::pw_multi_aff range_map_pw_multi_aff() const;
inline isl::space range_reverse() const;
+ inline isl::id range_tuple_id() const;
+ inline isl::id get_range_tuple_id() const;
inline isl::space reverse() const;
+ inline isl::space set_domain_tuple(isl::id id) const;
+ inline isl::space set_domain_tuple(const std::string &id) const;
+ inline isl::space set_range_tuple(isl::id id) const;
+ inline isl::space set_range_tuple(const std::string &id) const;
inline isl::space uncurry() const;
static inline isl::space unit(isl::ctx ctx);
+ inline isl::map universe_map() const;
+ inline isl::set universe_set() const;
inline isl::space unwrap() const;
inline isl::space wrap() const;
+ inline isl::aff zero_aff_on_domain() const;
+ inline isl::multi_aff zero_multi_aff() const;
+ inline isl::multi_pw_aff zero_multi_pw_aff() const;
+ inline isl::multi_union_pw_aff zero_multi_union_pw_aff() const;
+ inline isl::multi_val zero_multi_val() const;
};
// declarations for isl::union_access_info
inline isl::union_map affine_hull() const;
inline isl::union_map apply_domain(isl::union_map umap2) const;
inline isl::union_map apply_range(isl::union_map umap2) const;
+ inline isl::map as_map() const;
+ inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
+ inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
inline isl::union_set bind_range(isl::multi_id tuple) const;
inline isl::union_map coalesce() const;
inline isl::union_map compute_divs() const;
static inline isl::union_map from_domain(isl::union_set uset);
static inline isl::union_map from_domain_and_range(isl::union_set domain, isl::union_set range);
static inline isl::union_map from_range(isl::union_set uset);
- inline isl::space space() const;
- inline isl::space get_space() const;
inline isl::union_map gist(isl::union_map context) const;
inline isl::union_map gist_domain(isl::union_set uset) const;
inline isl::union_map gist_params(isl::set set) const;
inline bool isa_map() const;
inline isl::union_map lexmax() const;
inline isl::union_map lexmin() const;
+ inline isl::map_list map_list() const;
+ inline isl::map_list get_map_list() const;
inline isl::union_map polyhedral_hull() const;
inline isl::union_map preimage_domain(isl::multi_aff ma) const;
inline isl::union_map preimage_domain(isl::multi_pw_aff mpa) const;
inline isl::union_map range_product(isl::union_map umap2) const;
inline isl::union_map range_reverse() const;
inline isl::union_map reverse() const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
inline isl::union_map subtract(isl::union_map umap2) const;
inline isl::union_map subtract_domain(isl::union_set dom) const;
inline isl::union_map subtract_range(isl::union_set dom) const;
inline bool is_null() const;
inline isl::ctx ctx() const;
+ inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
inline isl::union_pw_aff add(isl::union_pw_aff upa2) const;
+ inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::union_pw_aff add(const isl::aff &upa2) const;
+ inline isl::union_pw_aff add(const isl::pw_aff &upa2) const;
+ inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
+ inline isl::pw_multi_aff as_pw_multi_aff() const;
+ inline isl::union_map as_union_map() const;
+ inline isl::union_pw_aff at(int pos) const;
+ inline isl::union_set bind(const isl::multi_id &tuple) const;
inline isl::union_set bind(isl::id id) const;
inline isl::union_set bind(const std::string &id) const;
inline isl::union_pw_aff coalesce() const;
inline isl::union_set domain() const;
- inline isl::space space() const;
- inline isl::space get_space() const;
+ inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
+ inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
inline isl::union_pw_aff gist(isl::union_set context) const;
+ inline bool has_range_tuple_id() const;
inline isl::union_pw_aff intersect_domain(isl::space space) const;
inline isl::union_pw_aff intersect_domain(isl::union_set uset) const;
inline isl::union_pw_aff intersect_domain_wrapped_domain(isl::union_set uset) const;
inline isl::union_pw_aff intersect_domain_wrapped_range(isl::union_set uset) const;
inline isl::union_pw_aff intersect_params(isl::set set) const;
+ inline bool involves_locals() const;
+ inline bool involves_nan() const;
+ inline bool isa_pw_multi_aff() const;
+ inline isl::union_pw_aff_list list() const;
+ inline isl::multi_union_pw_aff neg() const;
+ inline bool plain_is_empty() const;
+ inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
inline isl::union_pw_aff pullback(isl::union_pw_multi_aff upma) const;
+ inline isl::pw_multi_aff_list pw_multi_aff_list() const;
+ inline isl::union_pw_multi_aff range_factor_domain() const;
+ inline isl::union_pw_multi_aff range_factor_range() const;
+ inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
+ inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::id range_tuple_id() const;
+ inline isl::multi_union_pw_aff reset_range_tuple_id() const;
+ inline isl::multi_union_pw_aff scale(const isl::multi_val &mv) const;
+ inline isl::multi_union_pw_aff scale(const isl::val &v) const;
+ inline isl::multi_union_pw_aff scale(long v) const;
+ inline isl::multi_union_pw_aff scale_down(const isl::multi_val &mv) const;
+ inline isl::multi_union_pw_aff scale_down(const isl::val &v) const;
+ inline isl::multi_union_pw_aff scale_down(long v) const;
+ inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
+ inline isl::multi_union_pw_aff set_range_tuple(const isl::id &id) const;
+ inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const;
+ inline unsigned size() const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
+ inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
inline isl::union_pw_aff sub(isl::union_pw_aff upa2) const;
+ inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::union_pw_aff sub(const isl::aff &upa2) const;
+ inline isl::union_pw_aff sub(const isl::pw_aff &upa2) const;
inline isl::union_pw_aff subtract_domain(isl::space space) const;
inline isl::union_pw_aff subtract_domain(isl::union_set uset) const;
+ inline isl::union_pw_aff_list to_list() const;
+ inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
inline isl::union_pw_aff union_add(isl::union_pw_aff upa2) const;
+ inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
+ inline isl::union_pw_aff union_add(const isl::aff &upa2) const;
+ inline isl::union_pw_aff union_add(const isl::pw_aff &upa2) const;
};
// declarations for isl::union_pw_aff_list
inline /* implicit */ union_pw_aff_list(const union_pw_aff_list &obj);
inline explicit union_pw_aff_list(isl::ctx ctx, int n);
inline explicit union_pw_aff_list(isl::union_pw_aff el);
+ inline explicit union_pw_aff_list(isl::ctx ctx, const std::string &str);
inline union_pw_aff_list &operator=(union_pw_aff_list obj);
inline ~union_pw_aff_list();
inline __isl_give isl_union_pw_aff_list *copy() const &;
inline isl::ctx ctx() const;
inline isl::union_pw_aff_list add(isl::union_pw_aff el) const;
+ inline isl::union_pw_aff at(int index) const;
+ inline isl::union_pw_aff get_at(int index) const;
inline isl::union_pw_aff_list clear() const;
inline isl::union_pw_aff_list concat(isl::union_pw_aff_list list2) const;
inline isl::union_pw_aff_list drop(unsigned int first, unsigned int n) const;
inline void foreach(const std::function<void(isl::union_pw_aff)> &fn) const;
- inline isl::union_pw_aff at(int index) const;
- inline isl::union_pw_aff get_at(int index) const;
inline isl::union_pw_aff_list insert(unsigned int pos, isl::union_pw_aff el) const;
inline unsigned size() const;
};
inline isl::union_pw_multi_aff add(isl::union_pw_multi_aff upma2) const;
inline isl::union_pw_multi_aff apply(isl::union_pw_multi_aff upma2) const;
+ inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
inline isl::pw_multi_aff as_pw_multi_aff() const;
+ inline isl::union_map as_union_map() const;
inline isl::union_pw_multi_aff coalesce() const;
inline isl::union_set domain() const;
static inline isl::union_pw_multi_aff empty(isl::ctx ctx);
inline isl::pw_multi_aff extract_pw_multi_aff(isl::space space) const;
inline isl::union_pw_multi_aff flat_range_product(isl::union_pw_multi_aff upma2) const;
- inline isl::space space() const;
- inline isl::space get_space() const;
inline isl::union_pw_multi_aff gist(isl::union_set context) const;
inline isl::union_pw_multi_aff intersect_domain(isl::space space) const;
inline isl::union_pw_multi_aff intersect_domain(isl::union_set uset) const;
inline bool plain_is_empty() const;
inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2) const;
inline isl::union_pw_multi_aff pullback(isl::union_pw_multi_aff upma2) const;
+ inline isl::pw_multi_aff_list pw_multi_aff_list() const;
+ inline isl::pw_multi_aff_list get_pw_multi_aff_list() const;
inline isl::union_pw_multi_aff range_factor_domain() const;
inline isl::union_pw_multi_aff range_factor_range() const;
inline isl::union_pw_multi_aff range_product(isl::union_pw_multi_aff upma2) const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
inline isl::union_pw_multi_aff sub(isl::union_pw_multi_aff upma2) const;
inline isl::union_pw_multi_aff subtract_domain(isl::space space) const;
inline isl::union_pw_multi_aff subtract_domain(isl::union_set uset) const;
inline isl::union_set affine_hull() const;
inline isl::union_set apply(isl::union_map umap) const;
+ inline isl::set as_set() const;
inline isl::union_set coalesce() const;
inline isl::union_set compute_divs() const;
inline isl::union_set detect_equalities() const;
inline isl::set extract_set(isl::space space) const;
inline void foreach_point(const std::function<void(isl::point)> &fn) const;
inline void foreach_set(const std::function<void(isl::set)> &fn) const;
- inline isl::space space() const;
- inline isl::space get_space() const;
inline isl::union_set gist(isl::union_set context) const;
inline isl::union_set gist_params(isl::set set) const;
inline isl::union_map identity() const;
inline isl::union_set preimage(isl::pw_multi_aff pma) const;
inline isl::union_set preimage(isl::union_pw_multi_aff upma) const;
inline isl::point sample_point() const;
+ inline isl::space space() const;
+ inline isl::space get_space() const;
inline isl::union_set subtract(isl::union_set uset2) const;
+ inline isl::union_set_list to_list() const;
inline isl::union_set unite(isl::union_set uset2) const;
inline isl::union_set universe() const;
inline isl::union_map unwrap() const;
inline /* implicit */ union_set_list(const union_set_list &obj);
inline explicit union_set_list(isl::ctx ctx, int n);
inline explicit union_set_list(isl::union_set el);
+ inline explicit union_set_list(isl::ctx ctx, const std::string &str);
inline union_set_list &operator=(union_set_list obj);
inline ~union_set_list();
inline __isl_give isl_union_set_list *copy() const &;
inline isl::ctx ctx() const;
inline isl::union_set_list add(isl::union_set el) const;
+ inline isl::union_set at(int index) const;
+ inline isl::union_set get_at(int index) const;
inline isl::union_set_list clear() const;
inline isl::union_set_list concat(isl::union_set_list list2) const;
inline isl::union_set_list drop(unsigned int first, unsigned int n) const;
inline void foreach(const std::function<void(isl::union_set)> &fn) const;
- inline isl::union_set at(int index) const;
- inline isl::union_set get_at(int index) const;
inline isl::union_set_list insert(unsigned int pos, isl::union_set el) const;
inline unsigned size() const;
};
inline isl::val add(long v2) const;
inline isl::val ceil() const;
inline int cmp_si(long i) const;
+ inline long den_si() const;
+ inline long get_den_si() const;
inline isl::val div(isl::val v2) const;
inline isl::val div(long v2) const;
inline bool eq(const isl::val &v2) const;
inline isl::val gcd(long v2) const;
inline bool ge(const isl::val &v2) const;
inline bool ge(long v2) const;
- inline long den_si() const;
- inline long get_den_si() const;
- inline long num_si() const;
- inline long get_num_si() const;
inline bool gt(const isl::val &v2) const;
inline bool gt(long v2) const;
static inline isl::val infty(isl::ctx ctx);
inline isl::val neg() const;
static inline isl::val neginfty(isl::ctx ctx);
static inline isl::val negone(isl::ctx ctx);
+ inline long num_si() const;
+ inline long get_num_si() const;
static inline isl::val one(isl::ctx ctx);
inline isl::val pow2() const;
inline int sgn() const;
inline isl::val sub(isl::val v2) const;
inline isl::val sub(long v2) const;
+ inline isl::val_list to_list() const;
inline isl::val trunc() const;
static inline isl::val zero(isl::ctx ctx);
};
inline /* implicit */ val_list(const val_list &obj);
inline explicit val_list(isl::ctx ctx, int n);
inline explicit val_list(isl::val el);
+ inline explicit val_list(isl::ctx ctx, const std::string &str);
inline val_list &operator=(val_list obj);
inline ~val_list();
inline __isl_give isl_val_list *copy() const &;
inline isl::val_list add(isl::val el) const;
inline isl::val_list add(long el) const;
+ inline isl::val at(int index) const;
+ inline isl::val get_at(int index) const;
inline isl::val_list clear() const;
inline isl::val_list concat(isl::val_list list2) const;
inline isl::val_list drop(unsigned int first, unsigned int n) const;
inline void foreach(const std::function<void(isl::val)> &fn) const;
- inline isl::val at(int index) const;
- inline isl::val get_at(int index) const;
inline isl::val_list insert(unsigned int pos, isl::val el) const;
inline isl::val_list insert(unsigned int pos, long el) const;
inline unsigned size() const;
return manage(res);
}
-isl::aff aff::add_constant(isl::val v) const
+isl::multi_aff aff::add(const isl::multi_aff &multi2) const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ return isl::multi_aff(*this).add(multi2);
+}
+
+isl::multi_pw_aff aff::add(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).add(multi2);
+}
+
+isl::multi_union_pw_aff aff::add(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).add(multi2);
+}
+
+isl::pw_aff aff::add(const isl::pw_aff &pwaff2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).add(pwaff2);
+}
+
+isl::pw_multi_aff aff::add(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).add(pma2);
+}
+
+isl::union_pw_aff aff::add(const isl::union_pw_aff &upa2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).add(upa2);
+}
+
+isl::union_pw_multi_aff aff::add(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).add(upma2);
+}
+
+isl::aff aff::add_constant(isl::val v) const
+{
+ if (!ptr || v.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
auto res = isl_aff_add_constant_val(copy(), v.release());
if (!res)
exception::throw_last_error(saved_ctx);
return this->add_constant(isl::val(ctx(), v));
}
+isl::multi_aff aff::add_constant(const isl::multi_val &mv) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).add_constant(mv);
+}
+
+isl::union_pw_multi_aff aff::apply(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).apply(upma2);
+}
+
+isl::aff aff::as_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).as_aff();
+}
+
+isl::map aff::as_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).as_map();
+}
+
+isl::multi_aff aff::as_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).as_multi_aff();
+}
+
+isl::multi_union_pw_aff aff::as_multi_union_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).as_multi_union_pw_aff();
+}
+
+isl::pw_multi_aff aff::as_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).as_pw_multi_aff();
+}
+
+isl::set aff::as_set() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).as_set();
+}
+
+isl::union_map aff::as_union_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).as_union_map();
+}
+
+isl::aff aff::at(int pos) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).at(pos);
+}
+
isl::basic_set aff::bind(isl::id id) const
{
if (!ptr || id.is_null())
return this->bind(isl::id(ctx(), id));
}
-isl::aff aff::ceil() const
+isl::basic_set aff::bind(const isl::multi_id &tuple) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_ceil(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_aff(*this).bind(tuple);
}
-isl::aff aff::div(isl::aff aff2) const
+isl::pw_aff aff::bind_domain(const isl::multi_id &tuple) const
{
- if (!ptr || aff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_div(copy(), aff2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).bind_domain(tuple);
}
-isl::set aff::eq_set(isl::aff aff2) const
+isl::pw_aff aff::bind_domain_wrapped_domain(const isl::multi_id &tuple) const
{
- if (!ptr || aff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_eq_set(copy(), aff2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).bind_domain_wrapped_domain(tuple);
}
-isl::val aff::eval(isl::point pnt) const
+isl::aff aff::ceil() const
{
- if (!ptr || pnt.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_eval(copy(), pnt.release());
+ auto res = isl_aff_ceil(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::aff aff::floor() const
+isl::pw_aff aff::coalesce() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_floor(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).coalesce();
}
-isl::set aff::ge_set(isl::aff aff2) const
+isl::pw_aff aff::cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const
{
- if (!ptr || aff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_ge_set(copy(), aff2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).cond(pwaff_true, pwaff_false);
+}
+
+isl::multi_val aff::constant_multi_val() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).constant_multi_val();
}
isl::val aff::constant_val() const
return constant_val();
}
-isl::aff aff::gist(isl::set context) const
+isl::aff aff::div(isl::aff aff2) const
{
- if (!ptr || context.is_null())
+ if (!ptr || aff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_gist(copy(), context.release());
+ auto res = isl_aff_div(copy(), aff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set aff::gt_set(isl::aff aff2) const
+isl::pw_aff aff::div(const isl::pw_aff &pa2) const
{
- if (!ptr || aff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_gt_set(copy(), aff2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).div(pa2);
}
-bool aff::is_cst() const
+isl::set aff::domain() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_is_cst(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::pw_aff(*this).domain();
}
-isl::set aff::le_set(isl::aff aff2) const
+isl::set aff::eq_set(isl::aff aff2) const
{
if (!ptr || aff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_le_set(copy(), aff2.release());
+ auto res = isl_aff_eq_set(copy(), aff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set aff::lt_set(isl::aff aff2) const
+isl::set aff::eq_set(const isl::pw_aff &pwaff2) const
{
- if (!ptr || aff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_lt_set(copy(), aff2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).eq_set(pwaff2);
}
-isl::aff aff::mod(isl::val mod) const
+isl::val aff::eval(isl::point pnt) const
{
- if (!ptr || mod.is_null())
+ if (!ptr || pnt.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_mod_val(copy(), mod.release());
+ auto res = isl_aff_eval(copy(), pnt.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::aff aff::mod(long mod) const
+isl::pw_multi_aff aff::extract_pw_multi_aff(const isl::space &space) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->mod(isl::val(ctx(), mod));
+ return isl::pw_aff(*this).extract_pw_multi_aff(space);
}
-isl::aff aff::mul(isl::aff aff2) const
+isl::multi_aff aff::flat_range_product(const isl::multi_aff &multi2) const
{
- if (!ptr || aff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_mul(copy(), aff2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_aff(*this).flat_range_product(multi2);
}
-isl::set aff::ne_set(isl::aff aff2) const
+isl::multi_pw_aff aff::flat_range_product(const isl::multi_pw_aff &multi2) const
{
- if (!ptr || aff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_ne_set(copy(), aff2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).flat_range_product(multi2);
}
-isl::aff aff::neg() const
+isl::multi_union_pw_aff aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_neg(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).flat_range_product(multi2);
}
-isl::aff aff::pullback(isl::multi_aff ma) const
+isl::pw_multi_aff aff::flat_range_product(const isl::pw_multi_aff &pma2) const
{
- if (!ptr || ma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_pullback_multi_aff(copy(), ma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).flat_range_product(pma2);
}
-isl::aff aff::scale(isl::val v) const
+isl::union_pw_multi_aff aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
{
- if (!ptr || v.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).flat_range_product(upma2);
+}
+
+isl::aff aff::floor() const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_scale_val(copy(), v.release());
+ auto res = isl_aff_floor(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::aff aff::scale(long v) const
+void aff::foreach_piece(const std::function<void(isl::set, isl::multi_aff)> &fn) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale(isl::val(ctx(), v));
+ return isl::pw_aff(*this).foreach_piece(fn);
}
-isl::aff aff::scale_down(isl::val v) const
+isl::set aff::ge_set(isl::aff aff2) const
{
- if (!ptr || v.is_null())
+ if (!ptr || aff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_scale_down_val(copy(), v.release());
+ auto res = isl_aff_ge_set(copy(), aff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::aff aff::scale_down(long v) const
+isl::set aff::ge_set(const isl::pw_aff &pwaff2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale_down(isl::val(ctx(), v));
+ return isl::pw_aff(*this).ge_set(pwaff2);
}
-isl::aff aff::sub(isl::aff aff2) const
+isl::aff aff::gist(isl::set context) const
{
- if (!ptr || aff2.is_null())
+ if (!ptr || context.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_sub(copy(), aff2.release());
+ auto res = isl_aff_gist(copy(), context.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::aff aff::unbind_params_insert_domain(isl::multi_id domain) const
+isl::union_pw_aff aff::gist(const isl::union_set &context) const
{
- if (!ptr || domain.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_unbind_params_insert_domain(copy(), domain.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).gist(context);
}
-isl::aff aff::zero_on_domain(isl::space space)
+isl::aff aff::gist(const isl::basic_set &context) const
{
- if (space.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ return this->gist(isl::set(context));
+}
+
+isl::aff aff::gist(const isl::point &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist(isl::set(context));
+}
+
+isl::set aff::gt_set(isl::aff aff2) const
+{
+ if (!ptr || aff2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_zero_on_domain_space(space.release());
+ auto res = isl_aff_gt_set(copy(), aff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const aff &obj)
+isl::set aff::gt_set(const isl::pw_aff &pwaff2) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_aff_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_aff_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return isl::pw_aff(*this).gt_set(pwaff2);
}
-// implementations for isl::aff_list
-aff_list manage(__isl_take isl_aff_list *ptr) {
+bool aff::has_range_tuple_id() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return aff_list(ptr);
+ return isl::multi_aff(*this).has_range_tuple_id();
}
-aff_list manage_copy(__isl_keep isl_aff_list *ptr) {
+
+isl::multi_aff aff::identity() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_aff_list_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_aff_list_copy(ptr);
- if (!ptr)
- exception::throw_last_error(saved_ctx);
- return aff_list(ptr);
+ return isl::multi_aff(*this).identity();
}
-aff_list::aff_list()
- : ptr(nullptr) {}
-
-aff_list::aff_list(const aff_list &obj)
- : ptr(nullptr)
+isl::pw_aff aff::insert_domain(const isl::space &domain) const
{
- if (!obj.ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_aff_list_get_ctx(obj.ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
if (!ptr)
- exception::throw_last_error(saved_ctx);
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).insert_domain(domain);
}
-aff_list::aff_list(__isl_take isl_aff_list *ptr)
- : ptr(ptr) {}
-
-aff_list::aff_list(isl::ctx ctx, int n)
+isl::pw_aff aff::intersect_domain(const isl::set &set) const
{
- auto saved_ctx = ctx;
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_list_alloc(ctx.release(), n);
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).intersect_domain(set);
}
-aff_list::aff_list(isl::aff el)
+isl::union_pw_aff aff::intersect_domain(const isl::space &space) const
{
- if (el.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = el.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_list_from_aff(el.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
+ return isl::pw_aff(*this).intersect_domain(space);
}
-aff_list &aff_list::operator=(aff_list obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::union_pw_aff aff::intersect_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).intersect_domain(uset);
}
-aff_list::~aff_list() {
- if (ptr)
- isl_aff_list_free(ptr);
+isl::union_pw_aff aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).intersect_domain_wrapped_domain(uset);
}
-__isl_give isl_aff_list *aff_list::copy() const & {
- return isl_aff_list_copy(ptr);
+isl::union_pw_aff aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).intersect_domain_wrapped_range(uset);
}
-__isl_keep isl_aff_list *aff_list::get() const {
- return ptr;
+isl::pw_aff aff::intersect_params(const isl::set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).intersect_params(set);
}
-__isl_give isl_aff_list *aff_list::release() {
- isl_aff_list *tmp = ptr;
- ptr = nullptr;
- return tmp;
+bool aff::involves_locals() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).involves_locals();
}
-bool aff_list::is_null() const {
- return ptr == nullptr;
+bool aff::involves_nan() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).involves_nan();
}
-isl::ctx aff_list::ctx() const {
- return isl::ctx(isl_aff_list_get_ctx(ptr));
+bool aff::involves_param(const isl::id &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).involves_param(id);
}
-isl::aff_list aff_list::add(isl::aff el) const
+bool aff::involves_param(const std::string &id) const
{
- if (!ptr || el.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_list_add(copy(), el.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->involves_param(isl::id(ctx(), id));
}
-isl::aff_list aff_list::clear() const
+bool aff::involves_param(const isl::id_list &list) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_list_clear(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).involves_param(list);
}
-isl::aff_list aff_list::concat(isl::aff_list list2) const
+bool aff::is_cst() const
{
- if (!ptr || list2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_list_concat(copy(), list2.release());
- if (!res)
+ auto res = isl_aff_is_cst(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::aff_list aff_list::drop(unsigned int first, unsigned int n) const
+bool aff::isa_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_list_drop(copy(), first, n);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).isa_aff();
}
-void aff_list::foreach(const std::function<void(isl::aff)> &fn) const
+bool aff::isa_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct fn_data {
- std::function<void(isl::aff)> func;
- std::exception_ptr eptr;
- } fn_data = { fn };
- auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat {
- auto *data = static_cast<struct fn_data *>(arg_1);
- ISL_CPP_TRY {
- (data->func)(manage(arg_0));
- return isl_stat_ok;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_stat_error;
- }
- };
- auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data);
- if (fn_data.eptr)
- std::rethrow_exception(fn_data.eptr);
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return;
+ return isl::pw_aff(*this).isa_multi_aff();
}
-isl::aff aff_list::at(int index) const
+bool aff::isa_pw_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).isa_pw_multi_aff();
+}
+
+isl::set aff::le_set(isl::aff aff2) const
+{
+ if (!ptr || aff2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_list_get_at(get(), index);
+ auto res = isl_aff_le_set(copy(), aff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::aff aff_list::get_at(int index) const
+isl::set aff::le_set(const isl::pw_aff &pwaff2) const
{
- return at(index);
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).le_set(pwaff2);
}
-isl::aff_list aff_list::insert(unsigned int pos, isl::aff el) const
+isl::aff_list aff::list() const
{
- if (!ptr || el.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).list();
+}
+
+isl::set aff::lt_set(isl::aff aff2) const
+{
+ if (!ptr || aff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_list_insert(copy(), pos, el.release());
+ auto res = isl_aff_lt_set(copy(), aff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-unsigned aff_list::size() const
+isl::set aff::lt_set(const isl::pw_aff &pwaff2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_aff_list_size(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::pw_aff(*this).lt_set(pwaff2);
}
-inline std::ostream &operator<<(std::ostream &os, const aff_list &obj)
+isl::multi_pw_aff aff::max(const isl::multi_pw_aff &multi2) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_aff_list_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_aff_list_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return isl::pw_aff(*this).max(multi2);
}
-// implementations for isl::ast_build
-ast_build manage(__isl_take isl_ast_build *ptr) {
+isl::pw_aff aff::max(const isl::pw_aff &pwaff2) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return ast_build(ptr);
+ return isl::pw_aff(*this).max(pwaff2);
}
-ast_build manage_copy(__isl_keep isl_ast_build *ptr) {
+
+isl::multi_val aff::max_multi_val() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_build_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_ast_build_copy(ptr);
- if (!ptr)
- exception::throw_last_error(saved_ctx);
- return ast_build(ptr);
+ return isl::pw_aff(*this).max_multi_val();
}
-ast_build::ast_build()
- : ptr(nullptr) {}
-
-ast_build::ast_build(const ast_build &obj)
- : ptr(nullptr)
+isl::multi_pw_aff aff::min(const isl::multi_pw_aff &multi2) const
{
- if (!obj.ptr)
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_build_get_ctx(obj.ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- copy_callbacks(obj);
+ return isl::pw_aff(*this).min(multi2);
+}
+
+isl::pw_aff aff::min(const isl::pw_aff &pwaff2) const
+{
if (!ptr)
- exception::throw_last_error(saved_ctx);
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).min(pwaff2);
}
-ast_build::ast_build(__isl_take isl_ast_build *ptr)
- : ptr(ptr) {}
+isl::multi_val aff::min_multi_val() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).min_multi_val();
+}
-ast_build::ast_build(isl::ctx ctx)
+isl::aff aff::mod(isl::val mod) const
{
- auto saved_ctx = ctx;
+ if (!ptr || mod.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_build_alloc(ctx.release());
+ auto res = isl_aff_mod_val(copy(), mod.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-ast_build &ast_build::operator=(ast_build obj) {
- std::swap(this->ptr, obj.ptr);
- copy_callbacks(obj);
- return *this;
-}
-
-ast_build::~ast_build() {
- if (ptr)
- isl_ast_build_free(ptr);
-}
-
-__isl_give isl_ast_build *ast_build::copy() const & {
- return isl_ast_build_copy(ptr);
-}
-
-__isl_keep isl_ast_build *ast_build::get() const {
- return ptr;
-}
-
-__isl_give isl_ast_build *ast_build::release() {
- if (at_each_domain_data)
- exception::throw_invalid("cannot release object with persistent callbacks", __FILE__, __LINE__);
- isl_ast_build *tmp = ptr;
- ptr = nullptr;
- return tmp;
-}
-
-bool ast_build::is_null() const {
- return ptr == nullptr;
-}
-
-isl::ctx ast_build::ctx() const {
- return isl::ctx(isl_ast_build_get_ctx(ptr));
-}
-
-ast_build &ast_build::copy_callbacks(const ast_build &obj)
+isl::aff aff::mod(long mod) const
{
- at_each_domain_data = obj.at_each_domain_data;
- return *this;
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->mod(isl::val(ctx(), mod));
}
-isl_ast_node *ast_build::at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2)
+isl::aff aff::mul(isl::aff aff2) const
{
- auto *data = static_cast<struct at_each_domain_data *>(arg_2);
- ISL_CPP_TRY {
- auto ret = (data->func)(manage(arg_0), manage_copy(arg_1));
- return ret.release();
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return NULL;
- }
+ if (!ptr || aff2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_aff_mul(copy(), aff2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-void ast_build::set_at_each_domain_data(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn)
+isl::pw_aff aff::mul(const isl::pw_aff &pwaff2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_build_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- at_each_domain_data = std::make_shared<struct at_each_domain_data>();
- at_each_domain_data->func = fn;
- ptr = isl_ast_build_set_at_each_domain(ptr, &at_each_domain, at_each_domain_data.get());
- if (!ptr)
- exception::throw_last_error(saved_ctx);
+ return isl::pw_aff(*this).mul(pwaff2);
}
-isl::ast_build ast_build::set_at_each_domain(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn) const
+unsigned aff::n_piece() const
{
- auto copy = *this;
- copy.set_at_each_domain_data(fn);
- return copy;
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).n_piece();
}
-isl::ast_expr ast_build::access_from(isl::multi_pw_aff mpa) const
+isl::set aff::ne_set(isl::aff aff2) const
{
- if (!ptr || mpa.is_null())
+ if (!ptr || aff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_build_access_from_multi_pw_aff(get(), mpa.release());
- if (at_each_domain_data && at_each_domain_data->eptr) {
- std::exception_ptr eptr = at_each_domain_data->eptr;
- at_each_domain_data->eptr = nullptr;
- std::rethrow_exception(eptr);
- }
+ auto res = isl_aff_ne_set(copy(), aff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_expr ast_build::access_from(isl::pw_multi_aff pma) const
+isl::set aff::ne_set(const isl::pw_aff &pwaff2) const
{
- if (!ptr || pma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_build_access_from_pw_multi_aff(get(), pma.release());
- if (at_each_domain_data && at_each_domain_data->eptr) {
- std::exception_ptr eptr = at_each_domain_data->eptr;
- at_each_domain_data->eptr = nullptr;
- std::rethrow_exception(eptr);
- }
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).ne_set(pwaff2);
}
-isl::ast_expr ast_build::call_from(isl::multi_pw_aff mpa) const
+isl::aff aff::neg() const
{
- if (!ptr || mpa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_build_call_from_multi_pw_aff(get(), mpa.release());
- if (at_each_domain_data && at_each_domain_data->eptr) {
- std::exception_ptr eptr = at_each_domain_data->eptr;
- at_each_domain_data->eptr = nullptr;
- std::rethrow_exception(eptr);
- }
+ auto res = isl_aff_neg(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_expr ast_build::call_from(isl::pw_multi_aff pma) const
+bool aff::plain_is_empty() const
{
- if (!ptr || pma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release());
- if (at_each_domain_data && at_each_domain_data->eptr) {
- std::exception_ptr eptr = at_each_domain_data->eptr;
- at_each_domain_data->eptr = nullptr;
- std::rethrow_exception(eptr);
- }
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).plain_is_empty();
}
-isl::ast_expr ast_build::expr_from(isl::pw_aff pa) const
+bool aff::plain_is_equal(const isl::multi_aff &multi2) const
{
- if (!ptr || pa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release());
- if (at_each_domain_data && at_each_domain_data->eptr) {
- std::exception_ptr eptr = at_each_domain_data->eptr;
- at_each_domain_data->eptr = nullptr;
- std::rethrow_exception(eptr);
- }
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_aff(*this).plain_is_equal(multi2);
}
-isl::ast_expr ast_build::expr_from(isl::set set) const
+bool aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
{
- if (!ptr || set.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_build_expr_from_set(get(), set.release());
- if (at_each_domain_data && at_each_domain_data->eptr) {
- std::exception_ptr eptr = at_each_domain_data->eptr;
- at_each_domain_data->eptr = nullptr;
- std::rethrow_exception(eptr);
- }
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).plain_is_equal(multi2);
}
-isl::ast_build ast_build::from_context(isl::set set)
+bool aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
{
- if (set.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = set.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_build_from_context(set.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).plain_is_equal(multi2);
}
-isl::union_map ast_build::schedule() const
+isl::pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_build_get_schedule(get());
- if (at_each_domain_data && at_each_domain_data->eptr) {
- std::exception_ptr eptr = at_each_domain_data->eptr;
- at_each_domain_data->eptr = nullptr;
- std::rethrow_exception(eptr);
- }
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).preimage_domain_wrapped_domain(pma2);
}
-isl::union_map ast_build::get_schedule() const
+isl::union_pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
{
- return schedule();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).preimage_domain_wrapped_domain(upma2);
}
-isl::ast_node ast_build::node_from(isl::schedule schedule) const
+isl::multi_aff aff::product(const isl::multi_aff &multi2) const
{
- if (!ptr || schedule.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_build_node_from_schedule(get(), schedule.release());
- if (at_each_domain_data && at_each_domain_data->eptr) {
- std::exception_ptr eptr = at_each_domain_data->eptr;
- at_each_domain_data->eptr = nullptr;
- std::rethrow_exception(eptr);
- }
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_aff(*this).product(multi2);
}
-isl::ast_node ast_build::node_from_schedule_map(isl::union_map schedule) const
+isl::multi_pw_aff aff::product(const isl::multi_pw_aff &multi2) const
{
- if (!ptr || schedule.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).product(multi2);
+}
+
+isl::pw_multi_aff aff::product(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).product(pma2);
+}
+
+isl::aff aff::pullback(isl::multi_aff ma) const
+{
+ if (!ptr || ma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_build_node_from_schedule_map(get(), schedule.release());
- if (at_each_domain_data && at_each_domain_data->eptr) {
- std::exception_ptr eptr = at_each_domain_data->eptr;
- at_each_domain_data->eptr = nullptr;
- std::rethrow_exception(eptr);
- }
+ auto res = isl_aff_pullback_multi_aff(copy(), ma.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-// implementations for isl::ast_expr
-ast_expr manage(__isl_take isl_ast_expr *ptr) {
+isl::pw_aff aff::pullback(const isl::multi_pw_aff &mpa) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return ast_expr(ptr);
+ return isl::pw_aff(*this).pullback(mpa);
}
-ast_expr manage_copy(__isl_keep isl_ast_expr *ptr) {
+
+isl::pw_aff aff::pullback(const isl::pw_multi_aff &pma) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_ast_expr_copy(ptr);
- if (!ptr)
- exception::throw_last_error(saved_ctx);
- return ast_expr(ptr);
+ return isl::pw_aff(*this).pullback(pma);
}
-ast_expr::ast_expr()
- : ptr(nullptr) {}
-
-ast_expr::ast_expr(const ast_expr &obj)
- : ptr(nullptr)
+isl::union_pw_aff aff::pullback(const isl::union_pw_multi_aff &upma) const
{
- if (!obj.ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
if (!ptr)
- exception::throw_last_error(saved_ctx);
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).pullback(upma);
}
-ast_expr::ast_expr(__isl_take isl_ast_expr *ptr)
- : ptr(ptr) {}
-
-ast_expr &ast_expr::operator=(ast_expr obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::aff aff::pullback(const isl::aff &ma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->pullback(isl::multi_aff(ma));
}
-ast_expr::~ast_expr() {
- if (ptr)
- isl_ast_expr_free(ptr);
+isl::pw_multi_aff_list aff::pw_multi_aff_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).pw_multi_aff_list();
}
-__isl_give isl_ast_expr *ast_expr::copy() const & {
- return isl_ast_expr_copy(ptr);
+isl::pw_multi_aff aff::range_factor_domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).range_factor_domain();
}
-__isl_keep isl_ast_expr *ast_expr::get() const {
- return ptr;
+isl::pw_multi_aff aff::range_factor_range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).range_factor_range();
}
-__isl_give isl_ast_expr *ast_expr::release() {
- isl_ast_expr *tmp = ptr;
- ptr = nullptr;
- return tmp;
+isl::multi_aff aff::range_product(const isl::multi_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).range_product(multi2);
}
-bool ast_expr::is_null() const {
- return ptr == nullptr;
+isl::multi_pw_aff aff::range_product(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).range_product(multi2);
}
-template <typename T, typename>
-bool ast_expr::isa_type(T subtype) const
+isl::multi_union_pw_aff aff::range_product(const isl::multi_union_pw_aff &multi2) const
{
- if (is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return isl_ast_expr_get_type(get()) == subtype;
+ return isl::pw_aff(*this).range_product(multi2);
}
-template <class T>
-bool ast_expr::isa() const
+
+isl::pw_multi_aff aff::range_product(const isl::pw_multi_aff &pma2) const
{
- return isa_type<decltype(T::type)>(T::type);
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).range_product(pma2);
}
-template <class T>
-T ast_expr::as() const
+
+isl::union_pw_multi_aff aff::range_product(const isl::union_pw_multi_aff &upma2) const
{
- if (!isa<T>())
- exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__);
- return T(copy());
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).range_product(upma2);
}
-isl::ctx ast_expr::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::id aff::range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).range_tuple_id();
}
-std::string ast_expr::to_C_str() const
+isl::multi_aff aff::reset_range_tuple_id() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_expr_to_C_str(get());
- std::string tmp(res);
- free(res);
- return tmp;
+ return isl::multi_aff(*this).reset_range_tuple_id();
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj)
+isl::aff aff::scale(isl::val v) const
{
- if (!obj.get())
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_aff_scale_val(copy(), v.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::ast_expr_id
-ast_expr_id::ast_expr_id()
- : ast_expr() {}
-
-ast_expr_id::ast_expr_id(const ast_expr_id &obj)
- : ast_expr(obj)
+isl::aff aff::scale(long v) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->scale(isl::val(ctx(), v));
}
-ast_expr_id::ast_expr_id(__isl_take isl_ast_expr *ptr)
- : ast_expr(ptr) {}
-
-ast_expr_id &ast_expr_id::operator=(ast_expr_id obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx ast_expr_id::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::multi_aff aff::scale(const isl::multi_val &mv) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).scale(mv);
}
-isl::id ast_expr_id::id() const
+isl::aff aff::scale_down(isl::val v) const
{
- if (!ptr)
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_expr_id_get_id(get());
+ auto res = isl_aff_scale_down_val(copy(), v.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::id ast_expr_id::get_id() const
+isl::aff aff::scale_down(long v) const
{
- return id();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->scale_down(isl::val(ctx(), v));
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj)
+isl::multi_aff aff::scale_down(const isl::multi_val &mv) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return isl::multi_aff(*this).scale_down(mv);
}
-// implementations for isl::ast_expr_int
-ast_expr_int::ast_expr_int()
- : ast_expr() {}
+isl::multi_aff aff::set_at(int pos, const isl::aff &el) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).set_at(pos, el);
+}
-ast_expr_int::ast_expr_int(const ast_expr_int &obj)
- : ast_expr(obj)
+isl::multi_pw_aff aff::set_at(int pos, const isl::pw_aff &el) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).set_at(pos, el);
}
-ast_expr_int::ast_expr_int(__isl_take isl_ast_expr *ptr)
- : ast_expr(ptr) {}
+isl::multi_union_pw_aff aff::set_at(int pos, const isl::union_pw_aff &el) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).set_at(pos, el);
+}
-ast_expr_int &ast_expr_int::operator=(ast_expr_int obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::multi_aff aff::set_range_tuple(const isl::id &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).set_range_tuple(id);
}
-isl::ctx ast_expr_int::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::multi_aff aff::set_range_tuple(const std::string &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->set_range_tuple(isl::id(ctx(), id));
}
-isl::val ast_expr_int::val() const
+unsigned aff::size() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).size();
+}
+
+isl::space aff::space() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).space();
+}
+
+isl::aff aff::sub(isl::aff aff2) const
+{
+ if (!ptr || aff2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_expr_int_get_val(get());
+ auto res = isl_aff_sub(copy(), aff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::val ast_expr_int::get_val() const
+isl::multi_aff aff::sub(const isl::multi_aff &multi2) const
{
- return val();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).sub(multi2);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj)
+isl::multi_pw_aff aff::sub(const isl::multi_pw_aff &multi2) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return isl::pw_aff(*this).sub(multi2);
}
-// implementations for isl::ast_expr_op
-ast_expr_op::ast_expr_op()
- : ast_expr() {}
+isl::multi_union_pw_aff aff::sub(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).sub(multi2);
+}
-ast_expr_op::ast_expr_op(const ast_expr_op &obj)
- : ast_expr(obj)
+isl::pw_aff aff::sub(const isl::pw_aff &pwaff2) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).sub(pwaff2);
}
-ast_expr_op::ast_expr_op(__isl_take isl_ast_expr *ptr)
- : ast_expr(ptr) {}
+isl::pw_multi_aff aff::sub(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).sub(pma2);
+}
-ast_expr_op &ast_expr_op::operator=(ast_expr_op obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::union_pw_aff aff::sub(const isl::union_pw_aff &upa2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).sub(upa2);
}
-template <typename T, typename>
-bool ast_expr_op::isa_type(T subtype) const
+isl::union_pw_multi_aff aff::sub(const isl::union_pw_multi_aff &upma2) const
{
- if (is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return isl_ast_expr_op_get_type(get()) == subtype;
+ return isl::pw_aff(*this).sub(upma2);
}
-template <class T>
-bool ast_expr_op::isa() const
+
+isl::pw_aff aff::subtract_domain(const isl::set &set) const
{
- return isa_type<decltype(T::type)>(T::type);
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).subtract_domain(set);
}
-template <class T>
-T ast_expr_op::as() const
+
+isl::union_pw_aff aff::subtract_domain(const isl::space &space) const
{
- if (!isa<T>())
- exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__);
- return T(copy());
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).subtract_domain(space);
}
-isl::ctx ast_expr_op::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::union_pw_aff aff::subtract_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).subtract_domain(uset);
}
-isl::ast_expr ast_expr_op::arg(int pos) const
+isl::pw_aff aff::tdiv_q(const isl::pw_aff &pa2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_expr_op_get_arg(get(), pos);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_aff(*this).tdiv_q(pa2);
}
-isl::ast_expr ast_expr_op::get_arg(int pos) const
+isl::pw_aff aff::tdiv_r(const isl::pw_aff &pa2) const
{
- return arg(pos);
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).tdiv_r(pa2);
}
-unsigned ast_expr_op::n_arg() const
+isl::aff_list aff::to_list() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_expr_op_get_n_arg(get());
- if (res < 0)
+ auto res = isl_aff_to_list(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-unsigned ast_expr_op::get_n_arg() const
+isl::multi_pw_aff aff::to_multi_pw_aff() const
{
- return n_arg();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).to_multi_pw_aff();
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj)
+isl::multi_union_pw_aff aff::to_multi_union_pw_aff() const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return isl::multi_aff(*this).to_multi_union_pw_aff();
}
-// implementations for isl::ast_expr_op_access
-ast_expr_op_access::ast_expr_op_access()
- : ast_expr_op() {}
+isl::pw_multi_aff aff::to_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_aff(*this).to_pw_multi_aff();
+}
-ast_expr_op_access::ast_expr_op_access(const ast_expr_op_access &obj)
- : ast_expr_op(obj)
+isl::union_pw_aff aff::to_union_pw_aff() const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).to_union_pw_aff();
}
-ast_expr_op_access::ast_expr_op_access(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_access &ast_expr_op_access::operator=(ast_expr_op_access obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx ast_expr_op_access::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::union_pw_multi_aff aff::to_union_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).to_union_pw_multi_aff();
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj)
+isl::aff aff::unbind_params_insert_domain(isl::multi_id domain) const
{
- if (!obj.get())
+ if (!ptr || domain.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_aff_unbind_params_insert_domain(copy(), domain.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::ast_expr_op_add
-ast_expr_op_add::ast_expr_op_add()
- : ast_expr_op() {}
-
-ast_expr_op_add::ast_expr_op_add(const ast_expr_op_add &obj)
- : ast_expr_op(obj)
+isl::multi_pw_aff aff::union_add(const isl::multi_pw_aff &mpa2) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).union_add(mpa2);
}
-ast_expr_op_add::ast_expr_op_add(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_add &ast_expr_op_add::operator=(ast_expr_op_add obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::multi_union_pw_aff aff::union_add(const isl::multi_union_pw_aff &mupa2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).union_add(mupa2);
}
-isl::ctx ast_expr_op_add::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::pw_aff aff::union_add(const isl::pw_aff &pwaff2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).union_add(pwaff2);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj)
+isl::pw_multi_aff aff::union_add(const isl::pw_multi_aff &pma2) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return isl::pw_aff(*this).union_add(pma2);
}
-// implementations for isl::ast_expr_op_address_of
-ast_expr_op_address_of::ast_expr_op_address_of()
- : ast_expr_op() {}
-
-ast_expr_op_address_of::ast_expr_op_address_of(const ast_expr_op_address_of &obj)
- : ast_expr_op(obj)
+isl::union_pw_aff aff::union_add(const isl::union_pw_aff &upa2) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).union_add(upa2);
}
-ast_expr_op_address_of::ast_expr_op_address_of(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_address_of &ast_expr_op_address_of::operator=(ast_expr_op_address_of obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::union_pw_multi_aff aff::union_add(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_aff(*this).union_add(upma2);
}
-isl::ctx ast_expr_op_address_of::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::aff aff::zero_on_domain(isl::space space)
+{
+ if (space.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_aff_zero_on_domain_space(space.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj)
+inline std::ostream &operator<<(std::ostream &os, const aff &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = isl_aff_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
+ char *str = isl_aff_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::ast_expr_op_and
-ast_expr_op_and::ast_expr_op_and()
- : ast_expr_op() {}
-
-ast_expr_op_and::ast_expr_op_and(const ast_expr_op_and &obj)
- : ast_expr_op(obj)
-{
+// implementations for isl::aff_list
+aff_list manage(__isl_take isl_aff_list *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return aff_list(ptr);
}
-
-ast_expr_op_and::ast_expr_op_and(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_and &ast_expr_op_and::operator=(ast_expr_op_and obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+aff_list manage_copy(__isl_keep isl_aff_list *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_aff_list_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_aff_list_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return aff_list(ptr);
}
-isl::ctx ast_expr_op_and::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
-}
+aff_list::aff_list()
+ : ptr(nullptr) {}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj)
+aff_list::aff_list(const aff_list &obj)
+ : ptr(nullptr)
{
- if (!obj.get())
+ if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = isl_aff_list_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ ptr = obj.copy();
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
}
-// implementations for isl::ast_expr_op_and_then
-ast_expr_op_and_then::ast_expr_op_and_then()
- : ast_expr_op() {}
+aff_list::aff_list(__isl_take isl_aff_list *ptr)
+ : ptr(ptr) {}
-ast_expr_op_and_then::ast_expr_op_and_then(const ast_expr_op_and_then &obj)
- : ast_expr_op(obj)
+aff_list::aff_list(isl::ctx ctx, int n)
{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_aff_list_alloc(ctx.release(), n);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
}
-ast_expr_op_and_then::ast_expr_op_and_then(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_and_then &ast_expr_op_and_then::operator=(ast_expr_op_and_then obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx ast_expr_op_and_then::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
-}
-
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj)
+aff_list::aff_list(isl::aff el)
{
- if (!obj.get())
+ if (el.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = el.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_aff_list_from_aff(el.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ ptr = res;
}
-// implementations for isl::ast_expr_op_call
-ast_expr_op_call::ast_expr_op_call()
- : ast_expr_op() {}
-
-ast_expr_op_call::ast_expr_op_call(const ast_expr_op_call &obj)
- : ast_expr_op(obj)
+aff_list::aff_list(isl::ctx ctx, const std::string &str)
{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_aff_list_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
}
-ast_expr_op_call::ast_expr_op_call(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_call &ast_expr_op_call::operator=(ast_expr_op_call obj) {
+aff_list &aff_list::operator=(aff_list obj) {
std::swap(this->ptr, obj.ptr);
return *this;
}
-isl::ctx ast_expr_op_call::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+aff_list::~aff_list() {
+ if (ptr)
+ isl_aff_list_free(ptr);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj)
-{
- if (!obj.get())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+__isl_give isl_aff_list *aff_list::copy() const & {
+ return isl_aff_list_copy(ptr);
}
-// implementations for isl::ast_expr_op_cond
-ast_expr_op_cond::ast_expr_op_cond()
- : ast_expr_op() {}
-
-ast_expr_op_cond::ast_expr_op_cond(const ast_expr_op_cond &obj)
- : ast_expr_op(obj)
-{
+__isl_keep isl_aff_list *aff_list::get() const {
+ return ptr;
}
-ast_expr_op_cond::ast_expr_op_cond(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
+__isl_give isl_aff_list *aff_list::release() {
+ isl_aff_list *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
-ast_expr_op_cond &ast_expr_op_cond::operator=(ast_expr_op_cond obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+bool aff_list::is_null() const {
+ return ptr == nullptr;
}
-isl::ctx ast_expr_op_cond::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::ctx aff_list::ctx() const {
+ return isl::ctx(isl_aff_list_get_ctx(ptr));
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj)
+isl::aff_list aff_list::add(isl::aff el) const
{
- if (!obj.get())
+ if (!ptr || el.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_aff_list_add(copy(), el.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::ast_expr_op_div
-ast_expr_op_div::ast_expr_op_div()
- : ast_expr_op() {}
-
-ast_expr_op_div::ast_expr_op_div(const ast_expr_op_div &obj)
- : ast_expr_op(obj)
+isl::aff aff_list::at(int index) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_aff_list_get_at(get(), index);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-ast_expr_op_div::ast_expr_op_div(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_div &ast_expr_op_div::operator=(ast_expr_op_div obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::aff aff_list::get_at(int index) const
+{
+ return at(index);
}
-isl::ctx ast_expr_op_div::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::aff_list aff_list::clear() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_aff_list_clear(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj)
+isl::aff_list aff_list::concat(isl::aff_list list2) const
{
- if (!obj.get())
+ if (!ptr || list2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_aff_list_concat(copy(), list2.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::ast_expr_op_eq
-ast_expr_op_eq::ast_expr_op_eq()
- : ast_expr_op() {}
-
-ast_expr_op_eq::ast_expr_op_eq(const ast_expr_op_eq &obj)
- : ast_expr_op(obj)
+isl::aff_list aff_list::drop(unsigned int first, unsigned int n) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_aff_list_drop(copy(), first, n);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-ast_expr_op_eq::ast_expr_op_eq(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
+void aff_list::foreach(const std::function<void(isl::aff)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ struct fn_data {
+ std::function<void(isl::aff)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat {
+ auto *data = static_cast<struct fn_data *>(arg_1);
+ ISL_CPP_TRY {
+ (data->func)(manage(arg_0));
+ return isl_stat_ok;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_stat_error;
+ }
+ };
+ auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return;
+}
-ast_expr_op_eq &ast_expr_op_eq::operator=(ast_expr_op_eq obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::aff_list aff_list::insert(unsigned int pos, isl::aff el) const
+{
+ if (!ptr || el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_aff_list_insert(copy(), pos, el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::ctx ast_expr_op_eq::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+unsigned aff_list::size() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_aff_list_size(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj)
+inline std::ostream &operator<<(std::ostream &os, const aff_list &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = isl_aff_list_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
+ char *str = isl_aff_list_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::ast_expr_op_fdiv_q
-ast_expr_op_fdiv_q::ast_expr_op_fdiv_q()
- : ast_expr_op() {}
-
-ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj)
- : ast_expr_op(obj)
-{
+// implementations for isl::ast_build
+ast_build manage(__isl_take isl_ast_build *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return ast_build(ptr);
}
-
-ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_fdiv_q &ast_expr_op_fdiv_q::operator=(ast_expr_op_fdiv_q obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+ast_build manage_copy(__isl_keep isl_ast_build *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_build_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_ast_build_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return ast_build(ptr);
}
-isl::ctx ast_expr_op_fdiv_q::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
-}
+ast_build::ast_build()
+ : ptr(nullptr) {}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj)
+ast_build::ast_build(const ast_build &obj)
+ : ptr(nullptr)
{
- if (!obj.get())
+ if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = isl_ast_build_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ ptr = obj.copy();
+ copy_callbacks(obj);
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
}
-// implementations for isl::ast_expr_op_ge
-ast_expr_op_ge::ast_expr_op_ge()
- : ast_expr_op() {}
+ast_build::ast_build(__isl_take isl_ast_build *ptr)
+ : ptr(ptr) {}
-ast_expr_op_ge::ast_expr_op_ge(const ast_expr_op_ge &obj)
- : ast_expr_op(obj)
+ast_build::ast_build(isl::ctx ctx)
{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_build_alloc(ctx.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
}
-ast_expr_op_ge::ast_expr_op_ge(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_ge &ast_expr_op_ge::operator=(ast_expr_op_ge obj) {
+ast_build &ast_build::operator=(ast_build obj) {
std::swap(this->ptr, obj.ptr);
+ copy_callbacks(obj);
return *this;
}
-isl::ctx ast_expr_op_ge::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+ast_build::~ast_build() {
+ if (ptr)
+ isl_ast_build_free(ptr);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj)
-{
- if (!obj.get())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+__isl_give isl_ast_build *ast_build::copy() const & {
+ return isl_ast_build_copy(ptr);
}
-// implementations for isl::ast_expr_op_gt
-ast_expr_op_gt::ast_expr_op_gt()
- : ast_expr_op() {}
+__isl_keep isl_ast_build *ast_build::get() const {
+ return ptr;
+}
-ast_expr_op_gt::ast_expr_op_gt(const ast_expr_op_gt &obj)
- : ast_expr_op(obj)
-{
+__isl_give isl_ast_build *ast_build::release() {
+ if (at_each_domain_data)
+ exception::throw_invalid("cannot release object with persistent callbacks", __FILE__, __LINE__);
+ isl_ast_build *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
}
-ast_expr_op_gt::ast_expr_op_gt(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
+bool ast_build::is_null() const {
+ return ptr == nullptr;
+}
-ast_expr_op_gt &ast_expr_op_gt::operator=(ast_expr_op_gt obj) {
- std::swap(this->ptr, obj.ptr);
+isl::ctx ast_build::ctx() const {
+ return isl::ctx(isl_ast_build_get_ctx(ptr));
+}
+
+ast_build &ast_build::copy_callbacks(const ast_build &obj)
+{
+ at_each_domain_data = obj.at_each_domain_data;
return *this;
}
-isl::ctx ast_expr_op_gt::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl_ast_node *ast_build::at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2)
+{
+ auto *data = static_cast<struct at_each_domain_data *>(arg_2);
+ ISL_CPP_TRY {
+ auto ret = (data->func)(manage(arg_0), manage_copy(arg_1));
+ return ret.release();
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return NULL;
+ }
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj)
+void ast_build::set_at_each_domain_data(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn)
{
- if (!obj.get())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_build_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ at_each_domain_data = std::make_shared<struct at_each_domain_data>();
+ at_each_domain_data->func = fn;
+ ptr = isl_ast_build_set_at_each_domain(ptr, &at_each_domain, at_each_domain_data.get());
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+isl::ast_build ast_build::set_at_each_domain(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn) const
+{
+ auto copy = *this;
+ copy.set_at_each_domain_data(fn);
+ return copy;
+}
+
+isl::ast_expr ast_build::access_from(isl::multi_pw_aff mpa) const
+{
+ if (!ptr || mpa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_build_access_from_multi_pw_aff(get(), mpa.release());
+ if (at_each_domain_data && at_each_domain_data->eptr) {
+ std::exception_ptr eptr = at_each_domain_data->eptr;
+ at_each_domain_data->eptr = nullptr;
+ std::rethrow_exception(eptr);
+ }
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_build::access_from(isl::pw_multi_aff pma) const
+{
+ if (!ptr || pma.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_build_access_from_pw_multi_aff(get(), pma.release());
+ if (at_each_domain_data && at_each_domain_data->eptr) {
+ std::exception_ptr eptr = at_each_domain_data->eptr;
+ at_each_domain_data->eptr = nullptr;
+ std::rethrow_exception(eptr);
+ }
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_build::call_from(isl::multi_pw_aff mpa) const
+{
+ if (!ptr || mpa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_build_call_from_multi_pw_aff(get(), mpa.release());
+ if (at_each_domain_data && at_each_domain_data->eptr) {
+ std::exception_ptr eptr = at_each_domain_data->eptr;
+ at_each_domain_data->eptr = nullptr;
+ std::rethrow_exception(eptr);
+ }
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_build::call_from(isl::pw_multi_aff pma) const
+{
+ if (!ptr || pma.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release());
+ if (at_each_domain_data && at_each_domain_data->eptr) {
+ std::exception_ptr eptr = at_each_domain_data->eptr;
+ at_each_domain_data->eptr = nullptr;
+ std::rethrow_exception(eptr);
+ }
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_build::expr_from(isl::pw_aff pa) const
+{
+ if (!ptr || pa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release());
+ if (at_each_domain_data && at_each_domain_data->eptr) {
+ std::exception_ptr eptr = at_each_domain_data->eptr;
+ at_each_domain_data->eptr = nullptr;
+ std::rethrow_exception(eptr);
+ }
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_build::expr_from(isl::set set) const
+{
+ if (!ptr || set.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_build_expr_from_set(get(), set.release());
+ if (at_each_domain_data && at_each_domain_data->eptr) {
+ std::exception_ptr eptr = at_each_domain_data->eptr;
+ at_each_domain_data->eptr = nullptr;
+ std::rethrow_exception(eptr);
+ }
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_build ast_build::from_context(isl::set set)
+{
+ if (set.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = set.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_build_from_context(set.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_node ast_build::node_from(isl::schedule schedule) const
+{
+ if (!ptr || schedule.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_build_node_from_schedule(get(), schedule.release());
+ if (at_each_domain_data && at_each_domain_data->eptr) {
+ std::exception_ptr eptr = at_each_domain_data->eptr;
+ at_each_domain_data->eptr = nullptr;
+ std::rethrow_exception(eptr);
+ }
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_node ast_build::node_from_schedule_map(isl::union_map schedule) const
+{
+ if (!ptr || schedule.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_build_node_from_schedule_map(get(), schedule.release());
+ if (at_each_domain_data && at_each_domain_data->eptr) {
+ std::exception_ptr eptr = at_each_domain_data->eptr;
+ at_each_domain_data->eptr = nullptr;
+ std::rethrow_exception(eptr);
+ }
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map ast_build::schedule() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_build_get_schedule(get());
+ if (at_each_domain_data && at_each_domain_data->eptr) {
+ std::exception_ptr eptr = at_each_domain_data->eptr;
+ at_each_domain_data->eptr = nullptr;
+ std::rethrow_exception(eptr);
+ }
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map ast_build::get_schedule() const
+{
+ return schedule();
+}
+
+// implementations for isl::ast_expr
+ast_expr manage(__isl_take isl_ast_expr *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return ast_expr(ptr);
+}
+ast_expr manage_copy(__isl_keep isl_ast_expr *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_ast_expr_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return ast_expr(ptr);
+}
+
+ast_expr::ast_expr()
+ : ptr(nullptr) {}
+
+ast_expr::ast_expr(const ast_expr &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+ast_expr::ast_expr(__isl_take isl_ast_expr *ptr)
+ : ptr(ptr) {}
+
+ast_expr &ast_expr::operator=(ast_expr obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+ast_expr::~ast_expr() {
+ if (ptr)
+ isl_ast_expr_free(ptr);
+}
+
+__isl_give isl_ast_expr *ast_expr::copy() const & {
+ return isl_ast_expr_copy(ptr);
+}
+
+__isl_keep isl_ast_expr *ast_expr::get() const {
+ return ptr;
+}
+
+__isl_give isl_ast_expr *ast_expr::release() {
+ isl_ast_expr *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool ast_expr::is_null() const {
+ return ptr == nullptr;
+}
+
+template <typename T, typename>
+bool ast_expr::isa_type(T subtype) const
+{
+ if (is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl_ast_expr_get_type(get()) == subtype;
+}
+template <class T>
+bool ast_expr::isa() const
+{
+ return isa_type<decltype(T::type)>(T::type);
+}
+template <class T>
+T ast_expr::as() const
+{
+ if (!isa<T>())
+ exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__);
+ return T(copy());
+}
+
+isl::ctx ast_expr::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+std::string ast_expr::to_C_str() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_expr_to_C_str(get());
+ std::string tmp(res);
+ free(res);
+ return tmp;
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_id
+ast_expr_id::ast_expr_id()
+ : ast_expr() {}
+
+ast_expr_id::ast_expr_id(const ast_expr_id &obj)
+ : ast_expr(obj)
+{
+}
+
+ast_expr_id::ast_expr_id(__isl_take isl_ast_expr *ptr)
+ : ast_expr(ptr) {}
+
+ast_expr_id &ast_expr_id::operator=(ast_expr_id obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_id::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+isl::id ast_expr_id::id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_expr_id_get_id(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::id ast_expr_id::get_id() const
+{
+ return id();
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_int
+ast_expr_int::ast_expr_int()
+ : ast_expr() {}
+
+ast_expr_int::ast_expr_int(const ast_expr_int &obj)
+ : ast_expr(obj)
+{
+}
+
+ast_expr_int::ast_expr_int(__isl_take isl_ast_expr *ptr)
+ : ast_expr(ptr) {}
+
+ast_expr_int &ast_expr_int::operator=(ast_expr_int obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_int::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+isl::val ast_expr_int::val() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_expr_int_get_val(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::val ast_expr_int::get_val() const
+{
+ return val();
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op
+ast_expr_op::ast_expr_op()
+ : ast_expr() {}
+
+ast_expr_op::ast_expr_op(const ast_expr_op &obj)
+ : ast_expr(obj)
+{
+}
+
+ast_expr_op::ast_expr_op(__isl_take isl_ast_expr *ptr)
+ : ast_expr(ptr) {}
+
+ast_expr_op &ast_expr_op::operator=(ast_expr_op obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+template <typename T, typename>
+bool ast_expr_op::isa_type(T subtype) const
+{
+ if (is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl_ast_expr_op_get_type(get()) == subtype;
+}
+template <class T>
+bool ast_expr_op::isa() const
+{
+ return isa_type<decltype(T::type)>(T::type);
+}
+template <class T>
+T ast_expr_op::as() const
+{
+ if (!isa<T>())
+ exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__);
+ return T(copy());
+}
+
+isl::ctx ast_expr_op::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+isl::ast_expr ast_expr_op::arg(int pos) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_expr_op_get_arg(get(), pos);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_expr_op::get_arg(int pos) const
+{
+ return arg(pos);
+}
+
+unsigned ast_expr_op::n_arg() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_expr_op_get_n_arg(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+unsigned ast_expr_op::get_n_arg() const
+{
+ return n_arg();
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_access
+ast_expr_op_access::ast_expr_op_access()
+ : ast_expr_op() {}
+
+ast_expr_op_access::ast_expr_op_access(const ast_expr_op_access &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_access::ast_expr_op_access(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_access &ast_expr_op_access::operator=(ast_expr_op_access obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_access::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_add
+ast_expr_op_add::ast_expr_op_add()
+ : ast_expr_op() {}
+
+ast_expr_op_add::ast_expr_op_add(const ast_expr_op_add &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_add::ast_expr_op_add(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_add &ast_expr_op_add::operator=(ast_expr_op_add obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_add::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_address_of
+ast_expr_op_address_of::ast_expr_op_address_of()
+ : ast_expr_op() {}
+
+ast_expr_op_address_of::ast_expr_op_address_of(const ast_expr_op_address_of &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_address_of::ast_expr_op_address_of(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_address_of &ast_expr_op_address_of::operator=(ast_expr_op_address_of obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_address_of::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_and
+ast_expr_op_and::ast_expr_op_and()
+ : ast_expr_op() {}
+
+ast_expr_op_and::ast_expr_op_and(const ast_expr_op_and &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_and::ast_expr_op_and(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_and &ast_expr_op_and::operator=(ast_expr_op_and obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_and::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_and_then
+ast_expr_op_and_then::ast_expr_op_and_then()
+ : ast_expr_op() {}
+
+ast_expr_op_and_then::ast_expr_op_and_then(const ast_expr_op_and_then &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_and_then::ast_expr_op_and_then(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_and_then &ast_expr_op_and_then::operator=(ast_expr_op_and_then obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_and_then::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_call
+ast_expr_op_call::ast_expr_op_call()
+ : ast_expr_op() {}
+
+ast_expr_op_call::ast_expr_op_call(const ast_expr_op_call &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_call::ast_expr_op_call(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_call &ast_expr_op_call::operator=(ast_expr_op_call obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_call::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_cond
+ast_expr_op_cond::ast_expr_op_cond()
+ : ast_expr_op() {}
+
+ast_expr_op_cond::ast_expr_op_cond(const ast_expr_op_cond &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_cond::ast_expr_op_cond(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_cond &ast_expr_op_cond::operator=(ast_expr_op_cond obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_cond::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_div
+ast_expr_op_div::ast_expr_op_div()
+ : ast_expr_op() {}
+
+ast_expr_op_div::ast_expr_op_div(const ast_expr_op_div &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_div::ast_expr_op_div(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_div &ast_expr_op_div::operator=(ast_expr_op_div obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_div::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_eq
+ast_expr_op_eq::ast_expr_op_eq()
+ : ast_expr_op() {}
+
+ast_expr_op_eq::ast_expr_op_eq(const ast_expr_op_eq &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_eq::ast_expr_op_eq(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_eq &ast_expr_op_eq::operator=(ast_expr_op_eq obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_eq::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_fdiv_q
+ast_expr_op_fdiv_q::ast_expr_op_fdiv_q()
+ : ast_expr_op() {}
+
+ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_fdiv_q &ast_expr_op_fdiv_q::operator=(ast_expr_op_fdiv_q obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_fdiv_q::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_ge
+ast_expr_op_ge::ast_expr_op_ge()
+ : ast_expr_op() {}
+
+ast_expr_op_ge::ast_expr_op_ge(const ast_expr_op_ge &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_ge::ast_expr_op_ge(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_ge &ast_expr_op_ge::operator=(ast_expr_op_ge obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_ge::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_gt
+ast_expr_op_gt::ast_expr_op_gt()
+ : ast_expr_op() {}
+
+ast_expr_op_gt::ast_expr_op_gt(const ast_expr_op_gt &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_gt::ast_expr_op_gt(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_gt &ast_expr_op_gt::operator=(ast_expr_op_gt obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_gt::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_le
+ast_expr_op_le::ast_expr_op_le()
+ : ast_expr_op() {}
+
+ast_expr_op_le::ast_expr_op_le(const ast_expr_op_le &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_le::ast_expr_op_le(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_le &ast_expr_op_le::operator=(ast_expr_op_le obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_le::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_lt
+ast_expr_op_lt::ast_expr_op_lt()
+ : ast_expr_op() {}
+
+ast_expr_op_lt::ast_expr_op_lt(const ast_expr_op_lt &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_lt::ast_expr_op_lt(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_lt &ast_expr_op_lt::operator=(ast_expr_op_lt obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_lt::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_max
+ast_expr_op_max::ast_expr_op_max()
+ : ast_expr_op() {}
+
+ast_expr_op_max::ast_expr_op_max(const ast_expr_op_max &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_max::ast_expr_op_max(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_max &ast_expr_op_max::operator=(ast_expr_op_max obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_max::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_member
+ast_expr_op_member::ast_expr_op_member()
+ : ast_expr_op() {}
+
+ast_expr_op_member::ast_expr_op_member(const ast_expr_op_member &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_member::ast_expr_op_member(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_member &ast_expr_op_member::operator=(ast_expr_op_member obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_member::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_min
+ast_expr_op_min::ast_expr_op_min()
+ : ast_expr_op() {}
+
+ast_expr_op_min::ast_expr_op_min(const ast_expr_op_min &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_min::ast_expr_op_min(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_min &ast_expr_op_min::operator=(ast_expr_op_min obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_min::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_minus
+ast_expr_op_minus::ast_expr_op_minus()
+ : ast_expr_op() {}
+
+ast_expr_op_minus::ast_expr_op_minus(const ast_expr_op_minus &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_minus::ast_expr_op_minus(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_minus &ast_expr_op_minus::operator=(ast_expr_op_minus obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_minus::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_mul
+ast_expr_op_mul::ast_expr_op_mul()
+ : ast_expr_op() {}
+
+ast_expr_op_mul::ast_expr_op_mul(const ast_expr_op_mul &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_mul::ast_expr_op_mul(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_mul &ast_expr_op_mul::operator=(ast_expr_op_mul obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_mul::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_or
+ast_expr_op_or::ast_expr_op_or()
+ : ast_expr_op() {}
+
+ast_expr_op_or::ast_expr_op_or(const ast_expr_op_or &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_or::ast_expr_op_or(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_or &ast_expr_op_or::operator=(ast_expr_op_or obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_or::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_or_else
+ast_expr_op_or_else::ast_expr_op_or_else()
+ : ast_expr_op() {}
+
+ast_expr_op_or_else::ast_expr_op_or_else(const ast_expr_op_or_else &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_or_else::ast_expr_op_or_else(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_or_else &ast_expr_op_or_else::operator=(ast_expr_op_or_else obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_or_else::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_pdiv_q
+ast_expr_op_pdiv_q::ast_expr_op_pdiv_q()
+ : ast_expr_op() {}
+
+ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_pdiv_q &ast_expr_op_pdiv_q::operator=(ast_expr_op_pdiv_q obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_pdiv_q::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_pdiv_r
+ast_expr_op_pdiv_r::ast_expr_op_pdiv_r()
+ : ast_expr_op() {}
+
+ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_pdiv_r &ast_expr_op_pdiv_r::operator=(ast_expr_op_pdiv_r obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_pdiv_r::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_select
+ast_expr_op_select::ast_expr_op_select()
+ : ast_expr_op() {}
+
+ast_expr_op_select::ast_expr_op_select(const ast_expr_op_select &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_select::ast_expr_op_select(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_select &ast_expr_op_select::operator=(ast_expr_op_select obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_select::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_sub
+ast_expr_op_sub::ast_expr_op_sub()
+ : ast_expr_op() {}
+
+ast_expr_op_sub::ast_expr_op_sub(const ast_expr_op_sub &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_sub::ast_expr_op_sub(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_sub &ast_expr_op_sub::operator=(ast_expr_op_sub obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_sub::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_expr_op_zdiv_r
+ast_expr_op_zdiv_r::ast_expr_op_zdiv_r()
+ : ast_expr_op() {}
+
+ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj)
+ : ast_expr_op(obj)
+{
+}
+
+ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr)
+ : ast_expr_op(ptr) {}
+
+ast_expr_op_zdiv_r &ast_expr_op_zdiv_r::operator=(ast_expr_op_zdiv_r obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_expr_op_zdiv_r::ctx() const {
+ return isl::ctx(isl_ast_expr_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj)
+{
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ char *str = isl_ast_expr_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_node
+ast_node manage(__isl_take isl_ast_node *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return ast_node(ptr);
+}
+ast_node manage_copy(__isl_keep isl_ast_node *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_node_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_ast_node_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return ast_node(ptr);
+}
+
+ast_node::ast_node()
+ : ptr(nullptr) {}
+
+ast_node::ast_node(const ast_node &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_node_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+ast_node::ast_node(__isl_take isl_ast_node *ptr)
+ : ptr(ptr) {}
+
+ast_node &ast_node::operator=(ast_node obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+ast_node::~ast_node() {
+ if (ptr)
+ isl_ast_node_free(ptr);
+}
+
+__isl_give isl_ast_node *ast_node::copy() const & {
+ return isl_ast_node_copy(ptr);
+}
+
+__isl_keep isl_ast_node *ast_node::get() const {
+ return ptr;
+}
+
+__isl_give isl_ast_node *ast_node::release() {
+ isl_ast_node *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool ast_node::is_null() const {
+ return ptr == nullptr;
+}
+
+template <typename T, typename>
+bool ast_node::isa_type(T subtype) const
+{
+ if (is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl_ast_node_get_type(get()) == subtype;
+}
+template <class T>
+bool ast_node::isa() const
+{
+ return isa_type<decltype(T::type)>(T::type);
+}
+template <class T>
+T ast_node::as() const
+{
+ if (!isa<T>())
+ exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__);
+ return T(copy());
+}
+
+isl::ctx ast_node::ctx() const {
+ return isl::ctx(isl_ast_node_get_ctx(ptr));
+}
+
+std::string ast_node::to_C_str() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_to_C_str(get());
+ std::string tmp(res);
+ free(res);
+ return tmp;
+}
+
+isl::ast_node_list ast_node::to_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_to_list(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_node &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_node_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_node_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_node_block
+ast_node_block::ast_node_block()
+ : ast_node() {}
+
+ast_node_block::ast_node_block(const ast_node_block &obj)
+ : ast_node(obj)
+{
+}
+
+ast_node_block::ast_node_block(__isl_take isl_ast_node *ptr)
+ : ast_node(ptr) {}
+
+ast_node_block &ast_node_block::operator=(ast_node_block obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_node_block::ctx() const {
+ return isl::ctx(isl_ast_node_get_ctx(ptr));
+}
+
+isl::ast_node_list ast_node_block::children() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_block_get_children(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_node_list ast_node_block::get_children() const
+{
+ return children();
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_node_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_node_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_node_for
+ast_node_for::ast_node_for()
+ : ast_node() {}
+
+ast_node_for::ast_node_for(const ast_node_for &obj)
+ : ast_node(obj)
+{
+}
+
+ast_node_for::ast_node_for(__isl_take isl_ast_node *ptr)
+ : ast_node(ptr) {}
+
+ast_node_for &ast_node_for::operator=(ast_node_for obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_node_for::ctx() const {
+ return isl::ctx(isl_ast_node_get_ctx(ptr));
+}
+
+isl::ast_node ast_node_for::body() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_for_get_body(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_node ast_node_for::get_body() const
+{
+ return body();
+}
+
+isl::ast_expr ast_node_for::cond() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_for_get_cond(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_node_for::get_cond() const
+{
+ return cond();
+}
+
+isl::ast_expr ast_node_for::inc() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_for_get_inc(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_node_for::get_inc() const
+{
+ return inc();
+}
+
+isl::ast_expr ast_node_for::init() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_for_get_init(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_node_for::get_init() const
+{
+ return init();
+}
+
+bool ast_node_for::is_degenerate() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_for_is_degenerate(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+isl::ast_expr ast_node_for::iterator() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_for_get_iterator(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_node_for::get_iterator() const
+{
+ return iterator();
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_node_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_node_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_node_if
+ast_node_if::ast_node_if()
+ : ast_node() {}
+
+ast_node_if::ast_node_if(const ast_node_if &obj)
+ : ast_node(obj)
+{
+}
+
+ast_node_if::ast_node_if(__isl_take isl_ast_node *ptr)
+ : ast_node(ptr) {}
+
+ast_node_if &ast_node_if::operator=(ast_node_if obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_node_if::ctx() const {
+ return isl::ctx(isl_ast_node_get_ctx(ptr));
+}
+
+isl::ast_expr ast_node_if::cond() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_if_get_cond(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_node_if::get_cond() const
+{
+ return cond();
+}
+
+isl::ast_node ast_node_if::else_node() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_if_get_else_node(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_node ast_node_if::get_else_node() const
+{
+ return else_node();
+}
+
+bool ast_node_if::has_else_node() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_if_has_else_node(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+isl::ast_node ast_node_if::then_node() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_if_get_then_node(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_node ast_node_if::get_then_node() const
+{
+ return then_node();
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_node_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_node_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_node_list
+ast_node_list manage(__isl_take isl_ast_node_list *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return ast_node_list(ptr);
+}
+ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_node_list_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_ast_node_list_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return ast_node_list(ptr);
+}
+
+ast_node_list::ast_node_list()
+ : ptr(nullptr) {}
+
+ast_node_list::ast_node_list(const ast_node_list &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_node_list_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr)
+ : ptr(ptr) {}
+
+ast_node_list::ast_node_list(isl::ctx ctx, int n)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_list_alloc(ctx.release(), n);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+ast_node_list::ast_node_list(isl::ast_node el)
+{
+ if (el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = el.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_list_from_ast_node(el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+ast_node_list &ast_node_list::operator=(ast_node_list obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+ast_node_list::~ast_node_list() {
+ if (ptr)
+ isl_ast_node_list_free(ptr);
+}
+
+__isl_give isl_ast_node_list *ast_node_list::copy() const & {
+ return isl_ast_node_list_copy(ptr);
+}
+
+__isl_keep isl_ast_node_list *ast_node_list::get() const {
+ return ptr;
+}
+
+__isl_give isl_ast_node_list *ast_node_list::release() {
+ isl_ast_node_list *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool ast_node_list::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx ast_node_list::ctx() const {
+ return isl::ctx(isl_ast_node_list_get_ctx(ptr));
+}
+
+isl::ast_node_list ast_node_list::add(isl::ast_node el) const
+{
+ if (!ptr || el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_list_add(copy(), el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_node ast_node_list::at(int index) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_list_get_at(get(), index);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_node ast_node_list::get_at(int index) const
+{
+ return at(index);
+}
+
+isl::ast_node_list ast_node_list::clear() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_list_clear(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const
+{
+ if (!ptr || list2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_list_concat(copy(), list2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_list_drop(copy(), first, n);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+void ast_node_list::foreach(const std::function<void(isl::ast_node)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ struct fn_data {
+ std::function<void(isl::ast_node)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_stat {
+ auto *data = static_cast<struct fn_data *>(arg_1);
+ ISL_CPP_TRY {
+ (data->func)(manage(arg_0));
+ return isl_stat_ok;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_stat_error;
+ }
+ };
+ auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return;
+}
+
+isl::ast_node_list ast_node_list::insert(unsigned int pos, isl::ast_node el) const
+{
+ if (!ptr || el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_list_insert(copy(), pos, el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+unsigned ast_node_list::size() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_list_size(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_node_list_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_node_list_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_node_mark
+ast_node_mark::ast_node_mark()
+ : ast_node() {}
+
+ast_node_mark::ast_node_mark(const ast_node_mark &obj)
+ : ast_node(obj)
+{
+}
+
+ast_node_mark::ast_node_mark(__isl_take isl_ast_node *ptr)
+ : ast_node(ptr) {}
+
+ast_node_mark &ast_node_mark::operator=(ast_node_mark obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_node_mark::ctx() const {
+ return isl::ctx(isl_ast_node_get_ctx(ptr));
+}
+
+isl::id ast_node_mark::id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_mark_get_id(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::id ast_node_mark::get_id() const
+{
+ return id();
+}
+
+isl::ast_node ast_node_mark::node() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_mark_get_node(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_node ast_node_mark::get_node() const
+{
+ return node();
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_node_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_node_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::ast_node_user
+ast_node_user::ast_node_user()
+ : ast_node() {}
+
+ast_node_user::ast_node_user(const ast_node_user &obj)
+ : ast_node(obj)
+{
+}
+
+ast_node_user::ast_node_user(__isl_take isl_ast_node *ptr)
+ : ast_node(ptr) {}
+
+ast_node_user &ast_node_user::operator=(ast_node_user obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx ast_node_user::ctx() const {
+ return isl::ctx(isl_ast_node_get_ctx(ptr));
+}
+
+isl::ast_expr ast_node_user::expr() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_ast_node_user_get_expr(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::ast_expr ast_node_user::get_expr() const
+{
+ return expr();
+}
+
+inline std::ostream &operator<<(std::ostream &os, const ast_node_user &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_ast_node_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_ast_node_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::basic_map
+basic_map manage(__isl_take isl_basic_map *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return basic_map(ptr);
+}
+basic_map manage_copy(__isl_keep isl_basic_map *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_basic_map_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_basic_map_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return basic_map(ptr);
+}
+
+basic_map::basic_map()
+ : ptr(nullptr) {}
+
+basic_map::basic_map(const basic_map &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_basic_map_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+basic_map::basic_map(__isl_take isl_basic_map *ptr)
+ : ptr(ptr) {}
+
+basic_map::basic_map(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+basic_map &basic_map::operator=(basic_map obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+basic_map::~basic_map() {
+ if (ptr)
+ isl_basic_map_free(ptr);
+}
+
+__isl_give isl_basic_map *basic_map::copy() const & {
+ return isl_basic_map_copy(ptr);
+}
+
+__isl_keep isl_basic_map *basic_map::get() const {
+ return ptr;
+}
+
+__isl_give isl_basic_map *basic_map::release() {
+ isl_basic_map *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool basic_map::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx basic_map::ctx() const {
+ return isl::ctx(isl_basic_map_get_ctx(ptr));
+}
+
+isl::basic_map basic_map::affine_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_affine_hull(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::basic_map basic_map::apply_domain(isl::basic_map bmap2) const
+{
+ if (!ptr || bmap2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_apply_domain(copy(), bmap2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map basic_map::apply_domain(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).apply_domain(map2);
+}
+
+isl::union_map basic_map::apply_domain(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).apply_domain(umap2);
+}
+
+isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const
+{
+ if (!ptr || bmap2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_apply_range(copy(), bmap2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map basic_map::apply_range(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).apply_range(map2);
+}
+
+isl::union_map basic_map::apply_range(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).apply_range(umap2);
+}
+
+isl::map basic_map::as_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).as_map();
+}
+
+isl::multi_union_pw_aff basic_map::as_multi_union_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).as_multi_union_pw_aff();
+}
+
+isl::pw_multi_aff basic_map::as_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).as_pw_multi_aff();
+}
+
+isl::union_pw_multi_aff basic_map::as_union_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).as_union_pw_multi_aff();
+}
+
+isl::set basic_map::bind_domain(const isl::multi_id &tuple) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).bind_domain(tuple);
+}
+
+isl::set basic_map::bind_range(const isl::multi_id &tuple) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).bind_range(tuple);
+}
+
+isl::map basic_map::coalesce() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).coalesce();
+}
+
+isl::map basic_map::complement() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).complement();
+}
+
+isl::union_map basic_map::compute_divs() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).compute_divs();
+}
+
+isl::map basic_map::curry() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).curry();
+}
+
+isl::basic_set basic_map::deltas() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_deltas(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::basic_map basic_map::detect_equalities() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_detect_equalities(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set basic_map::domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).domain();
+}
+
+isl::map basic_map::domain_factor_domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).domain_factor_domain();
+}
+
+isl::map basic_map::domain_factor_range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).domain_factor_range();
+}
+
+isl::union_map basic_map::domain_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).domain_map();
+}
+
+isl::union_pw_multi_aff basic_map::domain_map_union_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).domain_map_union_pw_multi_aff();
+}
+
+isl::map basic_map::domain_product(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).domain_product(map2);
+}
+
+isl::union_map basic_map::domain_product(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).domain_product(umap2);
+}
+
+unsigned basic_map::domain_tuple_dim() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).domain_tuple_dim();
+}
+
+isl::id basic_map::domain_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).domain_tuple_id();
+}
+
+isl::map basic_map::eq_at(const isl::multi_pw_aff &mpa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).eq_at(mpa);
+}
+
+isl::union_map basic_map::eq_at(const isl::multi_union_pw_aff &mupa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).eq_at(mupa);
+}
+
+bool basic_map::every_map(const std::function<bool(isl::map)> &test) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).every_map(test);
+}
+
+isl::map basic_map::extract_map(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).extract_map(space);
+}
+
+isl::map basic_map::factor_domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).factor_domain();
+}
+
+isl::map basic_map::factor_range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).factor_range();
+}
+
+isl::union_map basic_map::fixed_power(const isl::val &exp) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).fixed_power(exp);
+}
+
+isl::union_map basic_map::fixed_power(long exp) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->fixed_power(isl::val(ctx(), exp));
+}
+
+isl::basic_map basic_map::flatten() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_flatten(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::basic_map basic_map::flatten_domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_flatten_domain(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::basic_map basic_map::flatten_range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_flatten_range(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+void basic_map::foreach_basic_map(const std::function<void(isl::basic_map)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).foreach_basic_map(fn);
+}
+
+void basic_map::foreach_map(const std::function<void(isl::map)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).foreach_map(fn);
+}
+
+isl::basic_map basic_map::gist(isl::basic_map context) const
+{
+ if (!ptr || context.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_gist(copy(), context.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map basic_map::gist(const isl::map &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).gist(context);
+}
+
+isl::union_map basic_map::gist(const isl::union_map &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).gist(context);
+}
+
+isl::map basic_map::gist_domain(const isl::set &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).gist_domain(context);
+}
+
+isl::union_map basic_map::gist_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).gist_domain(uset);
+}
+
+isl::union_map basic_map::gist_params(const isl::set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).gist_params(set);
+}
+
+isl::union_map basic_map::gist_range(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).gist_range(uset);
+}
+
+bool basic_map::has_domain_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).has_domain_tuple_id();
+}
+
+bool basic_map::has_range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).has_range_tuple_id();
+}
+
+isl::basic_map basic_map::intersect(isl::basic_map bmap2) const
+{
+ if (!ptr || bmap2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_intersect(copy(), bmap2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map basic_map::intersect(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect(map2);
+}
+
+isl::union_map basic_map::intersect(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect(umap2);
+}
+
+isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const
+{
+ if (!ptr || bset.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_intersect_domain(copy(), bset.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map basic_map::intersect_domain(const isl::set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_domain(set);
+}
+
+isl::union_map basic_map::intersect_domain(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_domain(space);
+}
+
+isl::union_map basic_map::intersect_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_domain(uset);
+}
+
+isl::basic_map basic_map::intersect_domain(const isl::point &bset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_domain(isl::basic_set(bset));
+}
+
+isl::map basic_map::intersect_domain_factor_domain(const isl::map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_domain_factor_domain(factor);
+}
+
+isl::union_map basic_map::intersect_domain_factor_domain(const isl::union_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_domain_factor_domain(factor);
+}
+
+isl::map basic_map::intersect_domain_factor_range(const isl::map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_domain_factor_range(factor);
+}
+
+isl::union_map basic_map::intersect_domain_factor_range(const isl::union_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_domain_factor_range(factor);
+}
+
+isl::map basic_map::intersect_params(const isl::set ¶ms) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_params(params);
+}
+
+isl::basic_map basic_map::intersect_range(isl::basic_set bset) const
+{
+ if (!ptr || bset.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_intersect_range(copy(), bset.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map basic_map::intersect_range(const isl::set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_range(set);
+}
+
+isl::union_map basic_map::intersect_range(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_range(space);
+}
+
+isl::union_map basic_map::intersect_range(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_range(uset);
+}
+
+isl::basic_map basic_map::intersect_range(const isl::point &bset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_range(isl::basic_set(bset));
+}
+
+isl::map basic_map::intersect_range_factor_domain(const isl::map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_range_factor_domain(factor);
+}
+
+isl::union_map basic_map::intersect_range_factor_domain(const isl::union_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_range_factor_domain(factor);
+}
+
+isl::map basic_map::intersect_range_factor_range(const isl::map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_range_factor_range(factor);
+}
+
+isl::union_map basic_map::intersect_range_factor_range(const isl::union_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).intersect_range_factor_range(factor);
+}
+
+bool basic_map::is_bijective() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).is_bijective();
+}
+
+bool basic_map::is_disjoint(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).is_disjoint(map2);
+}
+
+bool basic_map::is_disjoint(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).is_disjoint(umap2);
+}
+
+bool basic_map::is_empty() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_is_empty(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool basic_map::is_equal(const isl::basic_map &bmap2) const
+{
+ if (!ptr || bmap2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_is_equal(get(), bmap2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool basic_map::is_equal(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).is_equal(map2);
+}
+
+bool basic_map::is_equal(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).is_equal(umap2);
+}
+
+bool basic_map::is_injective() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).is_injective();
+}
+
+bool basic_map::is_single_valued() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).is_single_valued();
+}
+
+bool basic_map::is_strict_subset(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).is_strict_subset(map2);
+}
+
+bool basic_map::is_strict_subset(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).is_strict_subset(umap2);
+}
+
+bool basic_map::is_subset(const isl::basic_map &bmap2) const
+{
+ if (!ptr || bmap2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_is_subset(get(), bmap2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool basic_map::is_subset(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).is_subset(map2);
+}
+
+bool basic_map::is_subset(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).is_subset(umap2);
+}
+
+bool basic_map::isa_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).isa_map();
+}
+
+isl::map basic_map::lex_ge_at(const isl::multi_pw_aff &mpa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).lex_ge_at(mpa);
+}
+
+isl::map basic_map::lex_gt_at(const isl::multi_pw_aff &mpa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).lex_gt_at(mpa);
+}
+
+isl::map basic_map::lex_le_at(const isl::multi_pw_aff &mpa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).lex_le_at(mpa);
+}
+
+isl::map basic_map::lex_lt_at(const isl::multi_pw_aff &mpa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).lex_lt_at(mpa);
+}
+
+isl::map basic_map::lexmax() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_lexmax(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff basic_map::lexmax_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).lexmax_pw_multi_aff();
+}
+
+isl::map basic_map::lexmin() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_lexmin(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff basic_map::lexmin_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).lexmin_pw_multi_aff();
+}
+
+isl::map basic_map::lower_bound(const isl::multi_pw_aff &lower) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).lower_bound(lower);
+}
+
+isl::map_list basic_map::map_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).map_list();
+}
+
+isl::multi_pw_aff basic_map::max_multi_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).max_multi_pw_aff();
+}
+
+isl::multi_pw_aff basic_map::min_multi_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).min_multi_pw_aff();
+}
+
+isl::basic_map basic_map::polyhedral_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).polyhedral_hull();
+}
+
+isl::map basic_map::preimage_domain(const isl::multi_aff &ma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).preimage_domain(ma);
+}
+
+isl::map basic_map::preimage_domain(const isl::multi_pw_aff &mpa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).preimage_domain(mpa);
+}
+
+isl::map basic_map::preimage_domain(const isl::pw_multi_aff &pma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).preimage_domain(pma);
+}
+
+isl::union_map basic_map::preimage_domain(const isl::union_pw_multi_aff &upma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).preimage_domain(upma);
+}
+
+isl::map basic_map::preimage_range(const isl::multi_aff &ma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).preimage_range(ma);
+}
+
+isl::map basic_map::preimage_range(const isl::pw_multi_aff &pma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).preimage_range(pma);
+}
+
+isl::union_map basic_map::preimage_range(const isl::union_pw_multi_aff &upma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).preimage_range(upma);
+}
+
+isl::map basic_map::product(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).product(map2);
+}
+
+isl::union_map basic_map::product(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).product(umap2);
+}
+
+isl::map basic_map::project_out_all_params() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).project_out_all_params();
+}
+
+isl::set basic_map::range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).range();
+}
+
+isl::map basic_map::range_factor_domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).range_factor_domain();
+}
+
+isl::map basic_map::range_factor_range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).range_factor_range();
+}
+
+isl::fixed_box basic_map::range_lattice_tile() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).range_lattice_tile();
+}
+
+isl::union_map basic_map::range_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).range_map();
+}
+
+isl::map basic_map::range_product(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).range_product(map2);
+}
+
+isl::union_map basic_map::range_product(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).range_product(umap2);
+}
+
+isl::map basic_map::range_reverse() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).range_reverse();
+}
+
+isl::fixed_box basic_map::range_simple_fixed_box_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).range_simple_fixed_box_hull();
+}
+
+unsigned basic_map::range_tuple_dim() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).range_tuple_dim();
+}
+
+isl::id basic_map::range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).range_tuple_id();
+}
+
+isl::basic_map basic_map::reverse() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_reverse(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::basic_map basic_map::sample() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_sample(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map basic_map::set_domain_tuple(const isl::id &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).set_domain_tuple(id);
+}
+
+isl::map basic_map::set_domain_tuple(const std::string &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->set_domain_tuple(isl::id(ctx(), id));
+}
+
+isl::map basic_map::set_range_tuple(const isl::id &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).set_range_tuple(id);
+}
+
+isl::map basic_map::set_range_tuple(const std::string &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->set_range_tuple(isl::id(ctx(), id));
+}
+
+isl::space basic_map::space() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).space();
+}
+
+isl::map basic_map::subtract(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).subtract(map2);
+}
+
+isl::union_map basic_map::subtract(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).subtract(umap2);
+}
+
+isl::union_map basic_map::subtract_domain(const isl::union_set &dom) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).subtract_domain(dom);
+}
+
+isl::union_map basic_map::subtract_range(const isl::union_set &dom) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).subtract_range(dom);
+}
+
+isl::map_list basic_map::to_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).to_list();
+}
+
+isl::union_map basic_map::to_union_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).to_union_map();
+}
+
+isl::map basic_map::uncurry() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).uncurry();
+}
+
+isl::map basic_map::unite(isl::basic_map bmap2) const
+{
+ if (!ptr || bmap2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_map_union(copy(), bmap2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map basic_map::unite(const isl::map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).unite(map2);
+}
+
+isl::union_map basic_map::unite(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).unite(umap2);
+}
+
+isl::basic_map basic_map::unshifted_simple_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).unshifted_simple_hull();
+}
+
+isl::map basic_map::upper_bound(const isl::multi_pw_aff &upper) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).upper_bound(upper);
+}
+
+isl::set basic_map::wrap() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).wrap();
+}
+
+isl::map basic_map::zip() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::map(*this).zip();
+}
+
+inline std::ostream &operator<<(std::ostream &os, const basic_map &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_basic_map_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_basic_map_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::basic_set
+basic_set manage(__isl_take isl_basic_set *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return basic_set(ptr);
+}
+basic_set manage_copy(__isl_keep isl_basic_set *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_basic_set_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_basic_set_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return basic_set(ptr);
+}
+
+basic_set::basic_set()
+ : ptr(nullptr) {}
+
+basic_set::basic_set(const basic_set &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_basic_set_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+basic_set::basic_set(__isl_take isl_basic_set *ptr)
+ : ptr(ptr) {}
+
+basic_set::basic_set(isl::point pnt)
+{
+ if (pnt.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = pnt.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_from_point(pnt.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+basic_set::basic_set(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+basic_set &basic_set::operator=(basic_set obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+basic_set::~basic_set() {
+ if (ptr)
+ isl_basic_set_free(ptr);
+}
+
+__isl_give isl_basic_set *basic_set::copy() const & {
+ return isl_basic_set_copy(ptr);
+}
+
+__isl_keep isl_basic_set *basic_set::get() const {
+ return ptr;
+}
+
+__isl_give isl_basic_set *basic_set::release() {
+ isl_basic_set *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool basic_set::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx basic_set::ctx() const {
+ return isl::ctx(isl_basic_set_get_ctx(ptr));
+}
+
+isl::basic_set basic_set::affine_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_affine_hull(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::basic_set basic_set::apply(isl::basic_map bmap) const
+{
+ if (!ptr || bmap.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_apply(copy(), bmap.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set basic_set::apply(const isl::map &map) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).apply(map);
+}
+
+isl::union_set basic_set::apply(const isl::union_map &umap) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).apply(umap);
+}
+
+isl::pw_multi_aff basic_set::as_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).as_pw_multi_aff();
+}
+
+isl::set basic_set::as_set() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).as_set();
+}
+
+isl::set basic_set::bind(const isl::multi_id &tuple) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).bind(tuple);
+}
+
+isl::set basic_set::coalesce() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).coalesce();
+}
+
+isl::set basic_set::complement() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).complement();
+}
+
+isl::union_set basic_set::compute_divs() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).compute_divs();
+}
+
+isl::basic_set basic_set::detect_equalities() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_detect_equalities(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::val basic_set::dim_max_val(int pos) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_dim_max_val(copy(), pos);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::val basic_set::dim_min_val(int pos) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).dim_min_val(pos);
+}
+
+bool basic_set::every_set(const std::function<bool(isl::set)> &test) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).every_set(test);
+}
+
+isl::set basic_set::extract_set(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).extract_set(space);
+}
+
+isl::basic_set basic_set::flatten() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_flatten(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+void basic_set::foreach_basic_set(const std::function<void(isl::basic_set)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).foreach_basic_set(fn);
+}
+
+void basic_set::foreach_point(const std::function<void(isl::point)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).foreach_point(fn);
+}
+
+void basic_set::foreach_set(const std::function<void(isl::set)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).foreach_set(fn);
+}
+
+isl::basic_set basic_set::gist(isl::basic_set context) const
+{
+ if (!ptr || context.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_gist(copy(), context.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set basic_set::gist(const isl::set &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).gist(context);
+}
+
+isl::union_set basic_set::gist(const isl::union_set &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).gist(context);
+}
+
+isl::basic_set basic_set::gist(const isl::point &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist(isl::basic_set(context));
+}
+
+isl::union_set basic_set::gist_params(const isl::set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).gist_params(set);
+}
+
+isl::map basic_set::identity() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).identity();
+}
+
+isl::pw_aff basic_set::indicator_function() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).indicator_function();
+}
+
+isl::map basic_set::insert_domain(const isl::space &domain) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).insert_domain(domain);
+}
+
+isl::basic_set basic_set::intersect(isl::basic_set bset2) const
+{
+ if (!ptr || bset2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_intersect(copy(), bset2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set basic_set::intersect(const isl::set &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).intersect(set2);
+}
+
+isl::union_set basic_set::intersect(const isl::union_set &uset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).intersect(uset2);
+}
+
+isl::basic_set basic_set::intersect(const isl::point &bset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect(isl::basic_set(bset2));
+}
+
+isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const
+{
+ if (!ptr || bset2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_intersect_params(copy(), bset2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set basic_set::intersect_params(const isl::set ¶ms) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).intersect_params(params);
+}
+
+isl::basic_set basic_set::intersect_params(const isl::point &bset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_params(isl::basic_set(bset2));
+}
+
+bool basic_set::involves_locals() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).involves_locals();
+}
+
+bool basic_set::is_disjoint(const isl::set &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).is_disjoint(set2);
+}
+
+bool basic_set::is_disjoint(const isl::union_set &uset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).is_disjoint(uset2);
+}
+
+bool basic_set::is_empty() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_is_empty(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool basic_set::is_equal(const isl::basic_set &bset2) const
+{
+ if (!ptr || bset2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_is_equal(get(), bset2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool basic_set::is_equal(const isl::set &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).is_equal(set2);
+}
+
+bool basic_set::is_equal(const isl::union_set &uset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).is_equal(uset2);
+}
+
+bool basic_set::is_equal(const isl::point &bset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->is_equal(isl::basic_set(bset2));
+}
+
+bool basic_set::is_singleton() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).is_singleton();
+}
+
+bool basic_set::is_strict_subset(const isl::set &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).is_strict_subset(set2);
+}
+
+bool basic_set::is_strict_subset(const isl::union_set &uset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).is_strict_subset(uset2);
+}
+
+bool basic_set::is_subset(const isl::basic_set &bset2) const
+{
+ if (!ptr || bset2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_is_subset(get(), bset2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool basic_set::is_subset(const isl::set &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).is_subset(set2);
+}
+
+bool basic_set::is_subset(const isl::union_set &uset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).is_subset(uset2);
+}
+
+bool basic_set::is_subset(const isl::point &bset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->is_subset(isl::basic_set(bset2));
+}
+
+bool basic_set::is_wrapping() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_is_wrapping(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool basic_set::isa_set() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).isa_set();
+}
+
+isl::set basic_set::lexmax() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_lexmax(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff basic_set::lexmax_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).lexmax_pw_multi_aff();
+}
+
+isl::set basic_set::lexmin() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_lexmin(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff basic_set::lexmin_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).lexmin_pw_multi_aff();
+}
+
+isl::set basic_set::lower_bound(const isl::multi_pw_aff &lower) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).lower_bound(lower);
+}
+
+isl::set basic_set::lower_bound(const isl::multi_val &lower) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).lower_bound(lower);
+}
+
+isl::multi_pw_aff basic_set::max_multi_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).max_multi_pw_aff();
+}
+
+isl::val basic_set::max_val(const isl::aff &obj) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).max_val(obj);
+}
+
+isl::multi_pw_aff basic_set::min_multi_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).min_multi_pw_aff();
+}
+
+isl::val basic_set::min_val(const isl::aff &obj) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).min_val(obj);
+}
+
+isl::basic_set basic_set::params() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_params(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_val basic_set::plain_multi_val_if_fixed() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).plain_multi_val_if_fixed();
+}
+
+isl::basic_set basic_set::polyhedral_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).polyhedral_hull();
+}
+
+isl::set basic_set::preimage(const isl::multi_aff &ma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).preimage(ma);
+}
+
+isl::set basic_set::preimage(const isl::multi_pw_aff &mpa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).preimage(mpa);
+}
+
+isl::set basic_set::preimage(const isl::pw_multi_aff &pma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).preimage(pma);
+}
+
+isl::union_set basic_set::preimage(const isl::union_pw_multi_aff &upma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).preimage(upma);
+}
+
+isl::set basic_set::product(const isl::set &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).product(set2);
+}
+
+isl::set basic_set::project_out_all_params() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).project_out_all_params();
+}
+
+isl::set basic_set::project_out_param(const isl::id &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).project_out_param(id);
+}
+
+isl::set basic_set::project_out_param(const std::string &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->project_out_param(isl::id(ctx(), id));
+}
+
+isl::set basic_set::project_out_param(const isl::id_list &list) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).project_out_param(list);
+}
+
+isl::pw_multi_aff basic_set::pw_multi_aff_on_domain(const isl::multi_val &mv) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).pw_multi_aff_on_domain(mv);
+}
+
+isl::basic_set basic_set::sample() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_sample(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::point basic_set::sample_point() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_sample_point(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::fixed_box basic_set::simple_fixed_box_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).simple_fixed_box_hull();
+}
+
+isl::space basic_set::space() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).space();
+}
+
+isl::val basic_set::stride(int pos) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).stride(pos);
+}
+
+isl::set basic_set::subtract(const isl::set &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).subtract(set2);
+}
+
+isl::union_set basic_set::subtract(const isl::union_set &uset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).subtract(uset2);
+}
+
+isl::union_set_list basic_set::to_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).to_list();
+}
+
+isl::set basic_set::to_set() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_to_set(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_set basic_set::to_union_set() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).to_union_set();
+}
+
+isl::map basic_set::translation() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).translation();
+}
+
+unsigned basic_set::tuple_dim() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).tuple_dim();
+}
+
+isl::set basic_set::unbind_params(const isl::multi_id &tuple) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).unbind_params(tuple);
+}
+
+isl::map basic_set::unbind_params_insert_domain(const isl::multi_id &domain) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).unbind_params_insert_domain(domain);
+}
+
+isl::set basic_set::unite(isl::basic_set bset2) const
+{
+ if (!ptr || bset2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_basic_set_union(copy(), bset2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set basic_set::unite(const isl::set &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).unite(set2);
+}
+
+isl::union_set basic_set::unite(const isl::union_set &uset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).unite(uset2);
+}
+
+isl::set basic_set::unite(const isl::point &bset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->unite(isl::basic_set(bset2));
+}
+
+isl::basic_set basic_set::unshifted_simple_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).unshifted_simple_hull();
+}
+
+isl::map basic_set::unwrap() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).unwrap();
+}
+
+isl::set basic_set::upper_bound(const isl::multi_pw_aff &upper) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).upper_bound(upper);
+}
+
+isl::set basic_set::upper_bound(const isl::multi_val &upper) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::set(*this).upper_bound(upper);
+}
+
+inline std::ostream &operator<<(std::ostream &os, const basic_set &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_basic_set_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_basic_set_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::fixed_box
+fixed_box manage(__isl_take isl_fixed_box *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return fixed_box(ptr);
+}
+fixed_box manage_copy(__isl_keep isl_fixed_box *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_fixed_box_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_fixed_box_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return fixed_box(ptr);
+}
+
+fixed_box::fixed_box()
+ : ptr(nullptr) {}
+
+fixed_box::fixed_box(const fixed_box &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_fixed_box_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+fixed_box::fixed_box(__isl_take isl_fixed_box *ptr)
+ : ptr(ptr) {}
+
+fixed_box &fixed_box::operator=(fixed_box obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+fixed_box::~fixed_box() {
+ if (ptr)
+ isl_fixed_box_free(ptr);
+}
+
+__isl_give isl_fixed_box *fixed_box::copy() const & {
+ return isl_fixed_box_copy(ptr);
+}
+
+__isl_keep isl_fixed_box *fixed_box::get() const {
+ return ptr;
+}
+
+__isl_give isl_fixed_box *fixed_box::release() {
+ isl_fixed_box *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool fixed_box::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx fixed_box::ctx() const {
+ return isl::ctx(isl_fixed_box_get_ctx(ptr));
+}
+
+bool fixed_box::is_valid() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_fixed_box_is_valid(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+isl::multi_aff fixed_box::offset() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_fixed_box_get_offset(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff fixed_box::get_offset() const
+{
+ return offset();
+}
+
+isl::multi_val fixed_box::size() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_fixed_box_get_size(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_val fixed_box::get_size() const
+{
+ return size();
+}
+
+isl::space fixed_box::space() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_fixed_box_get_space(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::space fixed_box::get_space() const
+{
+ return space();
+}
+
+inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_fixed_box_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_fixed_box_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::id
+id manage(__isl_take isl_id *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return id(ptr);
+}
+id manage_copy(__isl_keep isl_id *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_id_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_id_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return id(ptr);
+}
+
+id::id()
+ : ptr(nullptr) {}
+
+id::id(const id &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_id_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+id::id(__isl_take isl_id *ptr)
+ : ptr(ptr) {}
+
+id::id(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+id &id::operator=(id obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+id::~id() {
+ if (ptr)
+ isl_id_free(ptr);
+}
+
+__isl_give isl_id *id::copy() const & {
+ return isl_id_copy(ptr);
+}
+
+__isl_keep isl_id *id::get() const {
+ return ptr;
+}
+
+__isl_give isl_id *id::release() {
+ isl_id *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool id::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx id::ctx() const {
+ return isl::ctx(isl_id_get_ctx(ptr));
+}
+
+std::string id::name() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_get_name(get());
+ std::string tmp(res);
+ return tmp;
+}
+
+std::string id::get_name() const
+{
+ return name();
+}
+
+isl::id_list id::to_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_to_list(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+inline std::ostream &operator<<(std::ostream &os, const id &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_id_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_id_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::id_list
+id_list manage(__isl_take isl_id_list *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return id_list(ptr);
+}
+id_list manage_copy(__isl_keep isl_id_list *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_id_list_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_id_list_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return id_list(ptr);
+}
+
+id_list::id_list()
+ : ptr(nullptr) {}
+
+id_list::id_list(const id_list &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_id_list_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+id_list::id_list(__isl_take isl_id_list *ptr)
+ : ptr(ptr) {}
+
+id_list::id_list(isl::ctx ctx, int n)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_list_alloc(ctx.release(), n);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+id_list::id_list(isl::id el)
+{
+ if (el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = el.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_list_from_id(el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+id_list::id_list(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_list_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+id_list &id_list::operator=(id_list obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+id_list::~id_list() {
+ if (ptr)
+ isl_id_list_free(ptr);
+}
+
+__isl_give isl_id_list *id_list::copy() const & {
+ return isl_id_list_copy(ptr);
+}
+
+__isl_keep isl_id_list *id_list::get() const {
+ return ptr;
+}
+
+__isl_give isl_id_list *id_list::release() {
+ isl_id_list *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool id_list::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx id_list::ctx() const {
+ return isl::ctx(isl_id_list_get_ctx(ptr));
+}
+
+isl::id_list id_list::add(isl::id el) const
+{
+ if (!ptr || el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_list_add(copy(), el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::id_list id_list::add(const std::string &el) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add(isl::id(ctx(), el));
+}
+
+isl::id id_list::at(int index) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_list_get_at(get(), index);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::id id_list::get_at(int index) const
+{
+ return at(index);
+}
+
+isl::id_list id_list::clear() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_list_clear(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::id_list id_list::concat(isl::id_list list2) const
+{
+ if (!ptr || list2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_list_concat(copy(), list2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::id_list id_list::drop(unsigned int first, unsigned int n) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_list_drop(copy(), first, n);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+void id_list::foreach(const std::function<void(isl::id)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ struct fn_data {
+ std::function<void(isl::id)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_id *arg_0, void *arg_1) -> isl_stat {
+ auto *data = static_cast<struct fn_data *>(arg_1);
+ ISL_CPP_TRY {
+ (data->func)(manage(arg_0));
+ return isl_stat_ok;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_stat_error;
+ }
+ };
+ auto res = isl_id_list_foreach(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return;
+}
+
+isl::id_list id_list::insert(unsigned int pos, isl::id el) const
+{
+ if (!ptr || el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_list_insert(copy(), pos, el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::id_list id_list::insert(unsigned int pos, const std::string &el) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->insert(pos, isl::id(ctx(), el));
+}
+
+unsigned id_list::size() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_id_list_size(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+inline std::ostream &operator<<(std::ostream &os, const id_list &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_id_list_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_id_list_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::map
+map manage(__isl_take isl_map *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return map(ptr);
+}
+map manage_copy(__isl_keep isl_map *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_map_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_map_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return map(ptr);
+}
+
+map::map()
+ : ptr(nullptr) {}
+
+map::map(const map &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_map_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+map::map(__isl_take isl_map *ptr)
+ : ptr(ptr) {}
+
+map::map(isl::basic_map bmap)
+{
+ if (bmap.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = bmap.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_from_basic_map(bmap.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+map::map(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+map &map::operator=(map obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+map::~map() {
+ if (ptr)
+ isl_map_free(ptr);
+}
+
+__isl_give isl_map *map::copy() const & {
+ return isl_map_copy(ptr);
+}
+
+__isl_keep isl_map *map::get() const {
+ return ptr;
+}
+
+__isl_give isl_map *map::release() {
+ isl_map *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool map::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx map::ctx() const {
+ return isl::ctx(isl_map_get_ctx(ptr));
+}
+
+isl::basic_map map::affine_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_affine_hull(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::apply_domain(isl::map map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_apply_domain(copy(), map2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::apply_domain(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).apply_domain(umap2);
+}
+
+isl::map map::apply_domain(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->apply_domain(isl::map(map2));
+}
+
+isl::map map::apply_range(isl::map map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_apply_range(copy(), map2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::apply_range(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).apply_range(umap2);
+}
+
+isl::map map::apply_range(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->apply_range(isl::map(map2));
+}
+
+isl::map map::as_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).as_map();
+}
+
+isl::multi_union_pw_aff map::as_multi_union_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).as_multi_union_pw_aff();
+}
+
+isl::pw_multi_aff map::as_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_as_pw_multi_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_pw_multi_aff map::as_union_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).as_union_pw_multi_aff();
+}
+
+isl::set map::bind_domain(isl::multi_id tuple) const
+{
+ if (!ptr || tuple.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_bind_domain(copy(), tuple.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set map::bind_range(isl::multi_id tuple) const
+{
+ if (!ptr || tuple.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_bind_range(copy(), tuple.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::coalesce() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_coalesce(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::complement() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_complement(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::compute_divs() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).compute_divs();
+}
+
+isl::map map::curry() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_curry(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set map::deltas() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_deltas(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::detect_equalities() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_detect_equalities(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set map::domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_domain(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::domain_factor_domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_domain_factor_domain(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::domain_factor_range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_domain_factor_range(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::domain_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).domain_map();
+}
+
+isl::union_pw_multi_aff map::domain_map_union_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).domain_map_union_pw_multi_aff();
+}
+
+isl::map map::domain_product(isl::map map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_domain_product(copy(), map2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::domain_product(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).domain_product(umap2);
+}
+
+isl::map map::domain_product(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->domain_product(isl::map(map2));
+}
+
+unsigned map::domain_tuple_dim() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_domain_tuple_dim(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+isl::id map::domain_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_get_domain_tuple_id(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::id map::get_domain_tuple_id() const
+{
+ return domain_tuple_id();
+}
+
+isl::map map::empty(isl::space space)
+{
+ if (space.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_empty(space.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::eq_at(isl::multi_pw_aff mpa) const
+{
+ if (!ptr || mpa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_eq_at_multi_pw_aff(copy(), mpa.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::eq_at(const isl::multi_union_pw_aff &mupa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).eq_at(mupa);
+}
+
+isl::map map::eq_at(const isl::aff &mpa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->eq_at(isl::multi_pw_aff(mpa));
+}
+
+isl::map map::eq_at(const isl::multi_aff &mpa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->eq_at(isl::multi_pw_aff(mpa));
+}
+
+isl::map map::eq_at(const isl::pw_aff &mpa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->eq_at(isl::multi_pw_aff(mpa));
+}
+
+isl::map map::eq_at(const isl::pw_multi_aff &mpa) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->eq_at(isl::multi_pw_aff(mpa));
+}
+
+bool map::every_map(const std::function<bool(isl::map)> &test) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).every_map(test);
+}
+
+isl::map map::extract_map(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).extract_map(space);
+}
+
+isl::map map::factor_domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_factor_domain(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::factor_range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_factor_range(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::fixed_power(const isl::val &exp) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).fixed_power(exp);
+}
+
+isl::union_map map::fixed_power(long exp) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->fixed_power(isl::val(ctx(), exp));
+}
+
+isl::map map::flatten() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_flatten(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::flatten_domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_flatten_domain(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::flatten_range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_flatten_range(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+void map::foreach_basic_map(const std::function<void(isl::basic_map)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ struct fn_data {
+ std::function<void(isl::basic_map)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
+ auto *data = static_cast<struct fn_data *>(arg_1);
+ ISL_CPP_TRY {
+ (data->func)(manage(arg_0));
+ return isl_stat_ok;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_stat_error;
+ }
+ };
+ auto res = isl_map_foreach_basic_map(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return;
+}
+
+void map::foreach_map(const std::function<void(isl::map)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).foreach_map(fn);
+}
+
+isl::map map::gist(isl::map context) const
+{
+ if (!ptr || context.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_gist(copy(), context.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::gist(const isl::union_map &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).gist(context);
+}
+
+isl::map map::gist(const isl::basic_map &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist(isl::map(context));
+}
+
+isl::map map::gist_domain(isl::set context) const
+{
+ if (!ptr || context.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_gist_domain(copy(), context.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::gist_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).gist_domain(uset);
+}
+
+isl::map map::gist_domain(const isl::basic_set &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist_domain(isl::set(context));
+}
+
+isl::map map::gist_domain(const isl::point &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist_domain(isl::set(context));
+}
+
+isl::union_map map::gist_params(const isl::set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).gist_params(set);
+}
+
+isl::union_map map::gist_range(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).gist_range(uset);
+}
+
+bool map::has_domain_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_has_domain_tuple_id(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool map::has_range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_has_range_tuple_id(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+isl::map map::intersect(isl::map map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_intersect(copy(), map2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::intersect(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).intersect(umap2);
+}
+
+isl::map map::intersect(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect(isl::map(map2));
+}
+
+isl::map map::intersect_domain(isl::set set) const
+{
+ if (!ptr || set.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_intersect_domain(copy(), set.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::intersect_domain(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).intersect_domain(space);
+}
+
+isl::union_map map::intersect_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).intersect_domain(uset);
+}
+
+isl::map map::intersect_domain(const isl::basic_set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_domain(isl::set(set));
+}
+
+isl::map map::intersect_domain(const isl::point &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_domain(isl::set(set));
+}
+
+isl::map map::intersect_domain_factor_domain(isl::map factor) const
+{
+ if (!ptr || factor.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_intersect_domain_factor_domain(copy(), factor.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::intersect_domain_factor_domain(const isl::union_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).intersect_domain_factor_domain(factor);
+}
+
+isl::map map::intersect_domain_factor_domain(const isl::basic_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_domain_factor_domain(isl::map(factor));
+}
+
+isl::map map::intersect_domain_factor_range(isl::map factor) const
+{
+ if (!ptr || factor.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_intersect_domain_factor_range(copy(), factor.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::intersect_domain_factor_range(const isl::union_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).intersect_domain_factor_range(factor);
+}
+
+isl::map map::intersect_domain_factor_range(const isl::basic_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_domain_factor_range(isl::map(factor));
+}
+
+isl::map map::intersect_params(isl::set params) const
+{
+ if (!ptr || params.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_intersect_params(copy(), params.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::intersect_range(isl::set set) const
+{
+ if (!ptr || set.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_intersect_range(copy(), set.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::intersect_range(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).intersect_range(space);
+}
+
+isl::union_map map::intersect_range(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).intersect_range(uset);
+}
+
+isl::map map::intersect_range(const isl::basic_set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_range(isl::set(set));
+}
+
+isl::map map::intersect_range(const isl::point &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_range(isl::set(set));
+}
+
+isl::map map::intersect_range_factor_domain(isl::map factor) const
+{
+ if (!ptr || factor.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_intersect_range_factor_domain(copy(), factor.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::intersect_range_factor_domain(const isl::union_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).intersect_range_factor_domain(factor);
+}
+
+isl::map map::intersect_range_factor_domain(const isl::basic_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_range_factor_domain(isl::map(factor));
+}
+
+isl::map map::intersect_range_factor_range(isl::map factor) const
+{
+ if (!ptr || factor.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_intersect_range_factor_range(copy(), factor.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::intersect_range_factor_range(const isl::union_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).intersect_range_factor_range(factor);
+}
+
+isl::map map::intersect_range_factor_range(const isl::basic_map &factor) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_range_factor_range(isl::map(factor));
+}
+
+bool map::is_bijective() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_is_bijective(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool map::is_disjoint(const isl::map &map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_is_disjoint(get(), map2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool map::is_disjoint(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).is_disjoint(umap2);
+}
+
+bool map::is_disjoint(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->is_disjoint(isl::map(map2));
+}
+
+bool map::is_empty() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_is_empty(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool map::is_equal(const isl::map &map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_is_equal(get(), map2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool map::is_equal(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).is_equal(umap2);
+}
+
+bool map::is_equal(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->is_equal(isl::map(map2));
+}
+
+bool map::is_injective() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_is_injective(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool map::is_single_valued() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_is_single_valued(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool map::is_strict_subset(const isl::map &map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_is_strict_subset(get(), map2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool map::is_strict_subset(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).is_strict_subset(umap2);
+}
+
+bool map::is_strict_subset(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->is_strict_subset(isl::map(map2));
+}
+
+bool map::is_subset(const isl::map &map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_is_subset(get(), map2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool map::is_subset(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).is_subset(umap2);
+}
+
+bool map::is_subset(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->is_subset(isl::map(map2));
+}
+
+bool map::isa_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).isa_map();
+}
+
+isl::map map::lex_ge_at(isl::multi_pw_aff mpa) const
+{
+ if (!ptr || mpa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_lex_ge_at_multi_pw_aff(copy(), mpa.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::lex_gt_at(isl::multi_pw_aff mpa) const
+{
+ if (!ptr || mpa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_lex_gt_at_multi_pw_aff(copy(), mpa.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::lex_le_at(isl::multi_pw_aff mpa) const
+{
+ if (!ptr || mpa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_lex_le_at_multi_pw_aff(copy(), mpa.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::lex_lt_at(isl::multi_pw_aff mpa) const
+{
+ if (!ptr || mpa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_lex_lt_at_multi_pw_aff(copy(), mpa.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::lexmax() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_lexmax(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff map::lexmax_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_lexmax_pw_multi_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::lexmin() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_lexmin(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff map::lexmin_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_lexmin_pw_multi_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::lower_bound(isl::multi_pw_aff lower) const
+{
+ if (!ptr || lower.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_lower_bound_multi_pw_aff(copy(), lower.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map_list map::map_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).map_list();
+}
+
+isl::multi_pw_aff map::max_multi_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_max_multi_pw_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_pw_aff map::min_multi_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_min_multi_pw_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::basic_map map::polyhedral_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_polyhedral_hull(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::preimage_domain(isl::multi_aff ma) const
+{
+ if (!ptr || ma.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::preimage_domain(isl::multi_pw_aff mpa) const
+{
+ if (!ptr || mpa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::preimage_domain(isl::pw_multi_aff pma) const
+{
+ if (!ptr || pma.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::preimage_domain(const isl::union_pw_multi_aff &upma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).preimage_domain(upma);
+}
+
+isl::map map::preimage_range(isl::multi_aff ma) const
+{
+ if (!ptr || ma.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_preimage_range_multi_aff(copy(), ma.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::preimage_range(isl::pw_multi_aff pma) const
+{
+ if (!ptr || pma.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::preimage_range(const isl::union_pw_multi_aff &upma) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).preimage_range(upma);
+}
+
+isl::map map::product(isl::map map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_product(copy(), map2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::product(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).product(umap2);
+}
+
+isl::map map::product(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->product(isl::map(map2));
+}
+
+isl::map map::project_out_all_params() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_project_out_all_params(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set map::range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_range(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::range_factor_domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_range_factor_domain(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::range_factor_range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_range_factor_range(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::fixed_box map::range_lattice_tile() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_get_range_lattice_tile(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::fixed_box map::get_range_lattice_tile() const
+{
+ return range_lattice_tile();
+}
+
+isl::union_map map::range_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).range_map();
+}
+
+isl::map map::range_product(isl::map map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_range_product(copy(), map2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::range_product(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).range_product(umap2);
+}
+
+isl::map map::range_product(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->range_product(isl::map(map2));
+}
+
+isl::map map::range_reverse() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_range_reverse(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::fixed_box map::range_simple_fixed_box_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_get_range_simple_fixed_box_hull(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::fixed_box map::get_range_simple_fixed_box_hull() const
+{
+ return range_simple_fixed_box_hull();
+}
+
+unsigned map::range_tuple_dim() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_range_tuple_dim(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+isl::id map::range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_get_range_tuple_id(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::id map::get_range_tuple_id() const
+{
+ return range_tuple_id();
+}
+
+isl::map map::reverse() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_reverse(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::basic_map map::sample() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_sample(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::set_domain_tuple(isl::id id) const
+{
+ if (!ptr || id.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_set_domain_tuple_id(copy(), id.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::set_domain_tuple(const std::string &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->set_domain_tuple(isl::id(ctx(), id));
+}
+
+isl::map map::set_range_tuple(isl::id id) const
+{
+ if (!ptr || id.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_set_range_tuple_id(copy(), id.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::set_range_tuple(const std::string &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->set_range_tuple(isl::id(ctx(), id));
+}
+
+isl::space map::space() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_get_space(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::space map::get_space() const
+{
+ return space();
+}
+
+isl::map map::subtract(isl::map map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_subtract(copy(), map2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::subtract(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).subtract(umap2);
+}
+
+isl::map map::subtract(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->subtract(isl::map(map2));
+}
+
+isl::union_map map::subtract_domain(const isl::union_set &dom) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).subtract_domain(dom);
+}
+
+isl::union_map map::subtract_range(const isl::union_set &dom) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).subtract_range(dom);
+}
+
+isl::map_list map::to_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_to_list(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::to_union_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_to_union_map(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::uncurry() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_uncurry(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::unite(isl::map map2) const
+{
+ if (!ptr || map2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_union(copy(), map2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map map::unite(const isl::union_map &umap2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_map(*this).unite(umap2);
+}
+
+isl::map map::unite(const isl::basic_map &map2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->unite(isl::map(map2));
+}
+
+isl::map map::universe(isl::space space)
+{
+ if (space.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_universe(space.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::basic_map map::unshifted_simple_hull() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_unshifted_simple_hull(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::upper_bound(isl::multi_pw_aff upper) const
+{
+ if (!ptr || upper.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_upper_bound_multi_pw_aff(copy(), upper.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set map::wrap() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_wrap(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map::zip() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_zip(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+inline std::ostream &operator<<(std::ostream &os, const map &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_map_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_map_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::map_list
+map_list manage(__isl_take isl_map_list *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return map_list(ptr);
+}
+map_list manage_copy(__isl_keep isl_map_list *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_map_list_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_map_list_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return map_list(ptr);
+}
+
+map_list::map_list()
+ : ptr(nullptr) {}
+
+map_list::map_list(const map_list &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_map_list_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+map_list::map_list(__isl_take isl_map_list *ptr)
+ : ptr(ptr) {}
+
+map_list::map_list(isl::ctx ctx, int n)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_list_alloc(ctx.release(), n);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+map_list::map_list(isl::map el)
+{
+ if (el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = el.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_list_from_map(el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+map_list::map_list(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_list_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+map_list &map_list::operator=(map_list obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+map_list::~map_list() {
+ if (ptr)
+ isl_map_list_free(ptr);
+}
+
+__isl_give isl_map_list *map_list::copy() const & {
+ return isl_map_list_copy(ptr);
+}
+
+__isl_keep isl_map_list *map_list::get() const {
+ return ptr;
+}
+
+__isl_give isl_map_list *map_list::release() {
+ isl_map_list *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool map_list::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx map_list::ctx() const {
+ return isl::ctx(isl_map_list_get_ctx(ptr));
+}
+
+isl::map_list map_list::add(isl::map el) const
+{
+ if (!ptr || el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_list_add(copy(), el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map_list::at(int index) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_list_get_at(get(), index);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map map_list::get_at(int index) const
+{
+ return at(index);
+}
+
+isl::map_list map_list::clear() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_list_clear(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map_list map_list::concat(isl::map_list list2) const
+{
+ if (!ptr || list2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_list_concat(copy(), list2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::map_list map_list::drop(unsigned int first, unsigned int n) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_list_drop(copy(), first, n);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+void map_list::foreach(const std::function<void(isl::map)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ struct fn_data {
+ std::function<void(isl::map)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
+ auto *data = static_cast<struct fn_data *>(arg_1);
+ ISL_CPP_TRY {
+ (data->func)(manage(arg_0));
+ return isl_stat_ok;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_stat_error;
+ }
+ };
+ auto res = isl_map_list_foreach(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return;
+}
+
+isl::map_list map_list::insert(unsigned int pos, isl::map el) const
+{
+ if (!ptr || el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_list_insert(copy(), pos, el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+unsigned map_list::size() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_map_list_size(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+inline std::ostream &operator<<(std::ostream &os, const map_list &obj)
+{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_map_list_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_map_list_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::multi_aff
+multi_aff manage(__isl_take isl_multi_aff *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return multi_aff(ptr);
+}
+multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_multi_aff_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_multi_aff_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return multi_aff(ptr);
+}
+
+multi_aff::multi_aff()
+ : ptr(nullptr) {}
+
+multi_aff::multi_aff(const multi_aff &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_multi_aff_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+multi_aff::multi_aff(__isl_take isl_multi_aff *ptr)
+ : ptr(ptr) {}
+
+multi_aff::multi_aff(isl::aff aff)
+{
+ if (aff.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = aff.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_from_aff(aff.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+multi_aff::multi_aff(isl::space space, isl::aff_list list)
+{
+ if (space.is_null() || list.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_from_aff_list(space.release(), list.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+multi_aff::multi_aff(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+multi_aff &multi_aff::operator=(multi_aff obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+multi_aff::~multi_aff() {
+ if (ptr)
+ isl_multi_aff_free(ptr);
+}
+
+__isl_give isl_multi_aff *multi_aff::copy() const & {
+ return isl_multi_aff_copy(ptr);
+}
+
+__isl_keep isl_multi_aff *multi_aff::get() const {
+ return ptr;
+}
+
+__isl_give isl_multi_aff *multi_aff::release() {
+ isl_multi_aff *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool multi_aff::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx multi_aff::ctx() const {
+ return isl::ctx(isl_multi_aff_get_ctx(ptr));
+}
+
+isl::multi_aff multi_aff::add(isl::multi_aff multi2) const
+{
+ if (!ptr || multi2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_add(copy(), multi2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_pw_aff multi_aff::add(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).add(multi2);
+}
+
+isl::multi_union_pw_aff multi_aff::add(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).add(multi2);
+}
+
+isl::pw_multi_aff multi_aff::add(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).add(pma2);
+}
+
+isl::union_pw_multi_aff multi_aff::add(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).add(upma2);
+}
+
+isl::multi_aff multi_aff::add(const isl::aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add(isl::multi_aff(multi2));
+}
+
+isl::multi_aff multi_aff::add_constant(isl::multi_val mv) const
+{
+ if (!ptr || mv.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::add_constant(isl::val v) const
+{
+ if (!ptr || v.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_add_constant_val(copy(), v.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::add_constant(long v) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add_constant(isl::val(ctx(), v));
+}
+
+isl::union_pw_multi_aff multi_aff::apply(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).apply(upma2);
+}
+
+isl::map multi_aff::as_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_as_map(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::as_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).as_multi_aff();
+}
+
+isl::multi_union_pw_aff multi_aff::as_multi_union_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).as_multi_union_pw_aff();
+}
+
+isl::pw_multi_aff multi_aff::as_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).as_pw_multi_aff();
+}
+
+isl::set multi_aff::as_set() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_as_set(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map multi_aff::as_union_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).as_union_map();
+}
+
+isl::aff multi_aff::at(int pos) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_get_at(get(), pos);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::aff multi_aff::get_at(int pos) const
+{
+ return at(pos);
+}
+
+isl::basic_set multi_aff::bind(isl::multi_id tuple) const
+{
+ if (!ptr || tuple.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_bind(copy(), tuple.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::bind_domain(isl::multi_id tuple) const
+{
+ if (!ptr || tuple.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_bind_domain(copy(), tuple.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
+{
+ if (!ptr || tuple.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff multi_aff::coalesce() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).coalesce();
+}
+
+isl::multi_val multi_aff::constant_multi_val() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_get_constant_multi_val(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_val multi_aff::get_constant_multi_val() const
+{
+ return constant_multi_val();
+}
+
+isl::set multi_aff::domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).domain();
+}
+
+isl::multi_aff multi_aff::domain_map(isl::space space)
+{
+ if (space.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_domain_map(space.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff multi_aff::extract_pw_multi_aff(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).extract_pw_multi_aff(space);
+}
+
+isl::multi_aff multi_aff::flat_range_product(isl::multi_aff multi2) const
+{
+ if (!ptr || multi2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_flat_range_product(copy(), multi2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_pw_aff multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).flat_range_product(multi2);
+}
+
+isl::multi_union_pw_aff multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).flat_range_product(multi2);
+}
+
+isl::pw_multi_aff multi_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).flat_range_product(pma2);
+}
+
+isl::union_pw_multi_aff multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).flat_range_product(upma2);
+}
+
+isl::multi_aff multi_aff::flat_range_product(const isl::aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->flat_range_product(isl::multi_aff(multi2));
+}
+
+isl::multi_aff multi_aff::floor() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_floor(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+void multi_aff::foreach_piece(const std::function<void(isl::set, isl::multi_aff)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).foreach_piece(fn);
+}
+
+isl::multi_aff multi_aff::gist(isl::set context) const
+{
+ if (!ptr || context.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_gist(copy(), context.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_pw_multi_aff multi_aff::gist(const isl::union_set &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).gist(context);
+}
+
+isl::multi_aff multi_aff::gist(const isl::basic_set &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist(isl::set(context));
+}
+
+isl::multi_aff multi_aff::gist(const isl::point &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist(isl::set(context));
+}
+
+bool multi_aff::has_range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_has_range_tuple_id(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+isl::multi_aff multi_aff::identity() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_identity_multi_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::identity_on_domain(isl::space space)
+{
+ if (space.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_identity_on_domain_space(space.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::insert_domain(isl::space domain) const
+{
+ if (!ptr || domain.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_insert_domain(copy(), domain.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff multi_aff::intersect_domain(const isl::set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).intersect_domain(set);
+}
+
+isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).intersect_domain(space);
+}
+
+isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).intersect_domain(uset);
+}
+
+isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
+}
+
+isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
+}
+
+isl::pw_multi_aff multi_aff::intersect_params(const isl::set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).intersect_params(set);
+}
+
+bool multi_aff::involves_locals() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_involves_locals(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool multi_aff::involves_nan() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_involves_nan(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool multi_aff::involves_param(const isl::id &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).involves_param(id);
+}
+
+bool multi_aff::involves_param(const std::string &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->involves_param(isl::id(ctx(), id));
+}
+
+bool multi_aff::involves_param(const isl::id_list &list) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).involves_param(list);
+}
+
+bool multi_aff::isa_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).isa_multi_aff();
+}
+
+bool multi_aff::isa_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).isa_pw_multi_aff();
+}
+
+isl::aff_list multi_aff::list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_get_list(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::aff_list multi_aff::get_list() const
+{
+ return list();
+}
+
+isl::multi_pw_aff multi_aff::max(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).max(multi2);
+}
+
+isl::multi_val multi_aff::max_multi_val() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).max_multi_val();
+}
+
+isl::multi_pw_aff multi_aff::min(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).min(multi2);
+}
+
+isl::multi_val multi_aff::min_multi_val() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).min_multi_val();
+}
+
+isl::multi_aff multi_aff::multi_val_on_domain(isl::space space, isl::multi_val mv)
+{
+ if (space.is_null() || mv.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_multi_val_on_domain_space(space.release(), mv.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+unsigned multi_aff::n_piece() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).n_piece();
+}
+
+isl::multi_aff multi_aff::neg() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_neg(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+bool multi_aff::plain_is_empty() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).plain_is_empty();
+}
+
+bool multi_aff::plain_is_equal(const isl::multi_aff &multi2) const
+{
+ if (!ptr || multi2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_plain_is_equal(get(), multi2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).plain_is_equal(multi2);
+}
+
+bool multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).plain_is_equal(multi2);
+}
+
+bool multi_aff::plain_is_equal(const isl::aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->plain_is_equal(isl::multi_aff(multi2));
+}
+
+isl::pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
+}
+
+isl::union_pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
+}
+
+isl::multi_aff multi_aff::product(isl::multi_aff multi2) const
+{
+ if (!ptr || multi2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_product(copy(), multi2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_pw_aff multi_aff::product(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).product(multi2);
+}
+
+isl::pw_multi_aff multi_aff::product(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).product(pma2);
+}
+
+isl::multi_aff multi_aff::product(const isl::aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->product(isl::multi_aff(multi2));
+}
+
+isl::multi_aff multi_aff::pullback(isl::multi_aff ma2) const
+{
+ if (!ptr || ma2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_pullback_multi_aff(copy(), ma2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_pw_aff multi_aff::pullback(const isl::multi_pw_aff &mpa2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).pullback(mpa2);
+}
+
+isl::pw_multi_aff multi_aff::pullback(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).pullback(pma2);
+}
+
+isl::union_pw_multi_aff multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).pullback(upma2);
+}
+
+isl::multi_aff multi_aff::pullback(const isl::aff &ma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->pullback(isl::multi_aff(ma2));
+}
+
+isl::pw_multi_aff_list multi_aff::pw_multi_aff_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).pw_multi_aff_list();
+}
+
+isl::pw_multi_aff multi_aff::range_factor_domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).range_factor_domain();
+}
+
+isl::pw_multi_aff multi_aff::range_factor_range() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).range_factor_range();
+}
+
+isl::multi_aff multi_aff::range_map(isl::space space)
+{
+ if (space.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_range_map(space.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::range_product(isl::multi_aff multi2) const
+{
+ if (!ptr || multi2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_range_product(copy(), multi2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_pw_aff multi_aff::range_product(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).range_product(multi2);
+}
+
+isl::multi_union_pw_aff multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).range_product(multi2);
+}
+
+isl::pw_multi_aff multi_aff::range_product(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).range_product(pma2);
+}
+
+isl::union_pw_multi_aff multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).range_product(upma2);
+}
+
+isl::multi_aff multi_aff::range_product(const isl::aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->range_product(isl::multi_aff(multi2));
+}
+
+isl::id multi_aff::range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_get_range_tuple_id(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::id multi_aff::get_range_tuple_id() const
+{
+ return range_tuple_id();
+}
+
+isl::multi_aff multi_aff::reset_range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_reset_range_tuple_id(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::scale(isl::multi_val mv) const
+{
+ if (!ptr || mv.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_scale_multi_val(copy(), mv.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::scale(isl::val v) const
+{
+ if (!ptr || v.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_scale_val(copy(), v.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::scale(long v) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->scale(isl::val(ctx(), v));
+}
+
+isl::multi_aff multi_aff::scale_down(isl::multi_val mv) const
+{
+ if (!ptr || mv.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::scale_down(isl::val v) const
+{
+ if (!ptr || v.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_scale_down_val(copy(), v.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::scale_down(long v) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->scale_down(isl::val(ctx(), v));
+}
+
+isl::multi_aff multi_aff::set_at(int pos, isl::aff el) const
+{
+ if (!ptr || el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_set_at(copy(), pos, el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_pw_aff multi_aff::set_at(int pos, const isl::pw_aff &el) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).set_at(pos, el);
+}
+
+isl::multi_union_pw_aff multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).set_at(pos, el);
+}
+
+isl::multi_aff multi_aff::set_range_tuple(isl::id id) const
+{
+ if (!ptr || id.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_set_range_tuple_id(copy(), id.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_aff multi_aff::set_range_tuple(const std::string &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->set_range_tuple(isl::id(ctx(), id));
+}
+
+unsigned multi_aff::size() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_size(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+isl::space multi_aff::space() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_get_space(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::space multi_aff::get_space() const
+{
+ return space();
+}
+
+isl::multi_aff multi_aff::sub(isl::multi_aff multi2) const
+{
+ if (!ptr || multi2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_sub(copy(), multi2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_pw_aff multi_aff::sub(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).sub(multi2);
+}
+
+isl::multi_union_pw_aff multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).sub(multi2);
+}
+
+isl::pw_multi_aff multi_aff::sub(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).sub(pma2);
+}
+
+isl::union_pw_multi_aff multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).sub(upma2);
+}
+
+isl::multi_aff multi_aff::sub(const isl::aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->sub(isl::multi_aff(multi2));
+}
+
+isl::pw_multi_aff multi_aff::subtract_domain(const isl::set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).subtract_domain(set);
+}
+
+isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).subtract_domain(space);
+}
+
+isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).subtract_domain(uset);
+}
+
+isl::pw_multi_aff_list multi_aff::to_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).to_list();
+}
+
+isl::multi_pw_aff multi_aff::to_multi_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_to_multi_pw_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_union_pw_aff multi_aff::to_multi_union_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_to_multi_union_pw_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff multi_aff::to_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_to_pw_multi_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_pw_multi_aff multi_aff::to_union_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
+}
+
+isl::multi_aff multi_aff::unbind_params_insert_domain(isl::multi_id domain) const
+{
+ if (!ptr || domain.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::ast_expr_op_le
-ast_expr_op_le::ast_expr_op_le()
- : ast_expr_op() {}
+isl::multi_pw_aff multi_aff::union_add(const isl::multi_pw_aff &mpa2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).union_add(mpa2);
+}
-ast_expr_op_le::ast_expr_op_le(const ast_expr_op_le &obj)
- : ast_expr_op(obj)
+isl::multi_union_pw_aff multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).union_add(mupa2);
}
-ast_expr_op_le::ast_expr_op_le(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
+isl::pw_multi_aff multi_aff::union_add(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).union_add(pma2);
+}
-ast_expr_op_le &ast_expr_op_le::operator=(ast_expr_op_le obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::union_pw_multi_aff multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).union_add(upma2);
}
-isl::ctx ast_expr_op_le::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::multi_aff multi_aff::zero(isl::space space)
+{
+ if (space.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_aff_zero(space.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj)
+inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = isl_multi_aff_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
+ char *str = isl_multi_aff_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::ast_expr_op_lt
-ast_expr_op_lt::ast_expr_op_lt()
- : ast_expr_op() {}
-
-ast_expr_op_lt::ast_expr_op_lt(const ast_expr_op_lt &obj)
- : ast_expr_op(obj)
-{
+// implementations for isl::multi_id
+multi_id manage(__isl_take isl_multi_id *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return multi_id(ptr);
}
-
-ast_expr_op_lt::ast_expr_op_lt(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_lt &ast_expr_op_lt::operator=(ast_expr_op_lt obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+multi_id manage_copy(__isl_keep isl_multi_id *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_multi_id_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_multi_id_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return multi_id(ptr);
}
-isl::ctx ast_expr_op_lt::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
-}
+multi_id::multi_id()
+ : ptr(nullptr) {}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj)
+multi_id::multi_id(const multi_id &obj)
+ : ptr(nullptr)
{
- if (!obj.get())
+ if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = isl_multi_id_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ ptr = obj.copy();
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
}
-// implementations for isl::ast_expr_op_max
-ast_expr_op_max::ast_expr_op_max()
- : ast_expr_op() {}
+multi_id::multi_id(__isl_take isl_multi_id *ptr)
+ : ptr(ptr) {}
-ast_expr_op_max::ast_expr_op_max(const ast_expr_op_max &obj)
- : ast_expr_op(obj)
+multi_id::multi_id(isl::space space, isl::id_list list)
{
+ if (space.is_null() || list.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_id_from_id_list(space.release(), list.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
}
-ast_expr_op_max::ast_expr_op_max(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
+multi_id::multi_id(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_id_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
-ast_expr_op_max &ast_expr_op_max::operator=(ast_expr_op_max obj) {
+multi_id &multi_id::operator=(multi_id obj) {
std::swap(this->ptr, obj.ptr);
return *this;
}
-isl::ctx ast_expr_op_max::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+multi_id::~multi_id() {
+ if (ptr)
+ isl_multi_id_free(ptr);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj)
+__isl_give isl_multi_id *multi_id::copy() const & {
+ return isl_multi_id_copy(ptr);
+}
+
+__isl_keep isl_multi_id *multi_id::get() const {
+ return ptr;
+}
+
+__isl_give isl_multi_id *multi_id::release() {
+ isl_multi_id *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool multi_id::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx multi_id::ctx() const {
+ return isl::ctx(isl_multi_id_get_ctx(ptr));
+}
+
+isl::id multi_id::at(int pos) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_id_get_at(get(), pos);
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::ast_expr_op_member
-ast_expr_op_member::ast_expr_op_member()
- : ast_expr_op() {}
-
-ast_expr_op_member::ast_expr_op_member(const ast_expr_op_member &obj)
- : ast_expr_op(obj)
+isl::id multi_id::get_at(int pos) const
{
+ return at(pos);
}
-ast_expr_op_member::ast_expr_op_member(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
+isl::multi_id multi_id::flat_range_product(isl::multi_id multi2) const
+{
+ if (!ptr || multi2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_id_flat_range_product(copy(), multi2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
-ast_expr_op_member &ast_expr_op_member::operator=(ast_expr_op_member obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::id_list multi_id::list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_id_get_list(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::ctx ast_expr_op_member::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::id_list multi_id::get_list() const
+{
+ return list();
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj)
+bool multi_id::plain_is_equal(const isl::multi_id &multi2) const
{
- if (!obj.get())
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_id_plain_is_equal(get(), multi2.get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return res;
}
-// implementations for isl::ast_expr_op_min
-ast_expr_op_min::ast_expr_op_min()
- : ast_expr_op() {}
-
-ast_expr_op_min::ast_expr_op_min(const ast_expr_op_min &obj)
- : ast_expr_op(obj)
+isl::multi_id multi_id::range_product(isl::multi_id multi2) const
{
+ if (!ptr || multi2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_id_range_product(copy(), multi2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-ast_expr_op_min::ast_expr_op_min(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_min &ast_expr_op_min::operator=(ast_expr_op_min obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::multi_id multi_id::set_at(int pos, isl::id el) const
+{
+ if (!ptr || el.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_id_set_at(copy(), pos, el.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::ctx ast_expr_op_min::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::multi_id multi_id::set_at(int pos, const std::string &el) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->set_at(pos, isl::id(ctx(), el));
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj)
+unsigned multi_id::size() const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_id_size(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return res;
}
-// implementations for isl::ast_expr_op_minus
-ast_expr_op_minus::ast_expr_op_minus()
- : ast_expr_op() {}
-
-ast_expr_op_minus::ast_expr_op_minus(const ast_expr_op_minus &obj)
- : ast_expr_op(obj)
+isl::space multi_id::space() const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_id_get_space(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-ast_expr_op_minus::ast_expr_op_minus(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_minus &ast_expr_op_minus::operator=(ast_expr_op_minus obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx ast_expr_op_minus::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::space multi_id::get_space() const
+{
+ return space();
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj)
+inline std::ostream &operator<<(std::ostream &os, const multi_id &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = isl_multi_id_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
+ char *str = isl_multi_id_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::ast_expr_op_mul
-ast_expr_op_mul::ast_expr_op_mul()
- : ast_expr_op() {}
-
-ast_expr_op_mul::ast_expr_op_mul(const ast_expr_op_mul &obj)
- : ast_expr_op(obj)
-{
+// implementations for isl::multi_pw_aff
+multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return multi_pw_aff(ptr);
}
-
-ast_expr_op_mul::ast_expr_op_mul(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_mul &ast_expr_op_mul::operator=(ast_expr_op_mul obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_multi_pw_aff_get_ctx(ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = isl_multi_pw_aff_copy(ptr);
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+ return multi_pw_aff(ptr);
}
-isl::ctx ast_expr_op_mul::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
-}
+multi_pw_aff::multi_pw_aff()
+ : ptr(nullptr) {}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj)
+multi_pw_aff::multi_pw_aff(const multi_pw_aff &obj)
+ : ptr(nullptr)
{
- if (!obj.get())
+ if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = isl_multi_pw_aff_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ ptr = obj.copy();
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
}
-// implementations for isl::ast_expr_op_or
-ast_expr_op_or::ast_expr_op_or()
- : ast_expr_op() {}
+multi_pw_aff::multi_pw_aff(__isl_take isl_multi_pw_aff *ptr)
+ : ptr(ptr) {}
-ast_expr_op_or::ast_expr_op_or(const ast_expr_op_or &obj)
- : ast_expr_op(obj)
+multi_pw_aff::multi_pw_aff(isl::aff aff)
{
+ if (aff.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = aff.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_from_aff(aff.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
}
-ast_expr_op_or::ast_expr_op_or(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_or &ast_expr_op_or::operator=(ast_expr_op_or obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx ast_expr_op_or::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
-}
-
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj)
+multi_pw_aff::multi_pw_aff(isl::multi_aff ma)
{
- if (!obj.get())
+ if (ma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ma.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_pw_aff_from_multi_aff(ma.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ ptr = res;
}
-// implementations for isl::ast_expr_op_or_else
-ast_expr_op_or_else::ast_expr_op_or_else()
- : ast_expr_op() {}
-
-ast_expr_op_or_else::ast_expr_op_or_else(const ast_expr_op_or_else &obj)
- : ast_expr_op(obj)
+multi_pw_aff::multi_pw_aff(isl::pw_aff pa)
{
+ if (pa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = pa.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_from_pw_aff(pa.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
}
-ast_expr_op_or_else::ast_expr_op_or_else(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_or_else &ast_expr_op_or_else::operator=(ast_expr_op_or_else obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx ast_expr_op_or_else::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+multi_pw_aff::multi_pw_aff(isl::space space, isl::pw_aff_list list)
+{
+ if (space.is_null() || list.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_from_pw_aff_list(space.release(), list.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj)
+multi_pw_aff::multi_pw_aff(isl::pw_multi_aff pma)
{
- if (!obj.get())
+ if (pma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = pma.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_pw_aff_from_pw_multi_aff(pma.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ ptr = res;
}
-// implementations for isl::ast_expr_op_pdiv_q
-ast_expr_op_pdiv_q::ast_expr_op_pdiv_q()
- : ast_expr_op() {}
-
-ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj)
- : ast_expr_op(obj)
+multi_pw_aff::multi_pw_aff(isl::ctx ctx, const std::string &str)
{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
}
-ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_pdiv_q &ast_expr_op_pdiv_q::operator=(ast_expr_op_pdiv_q obj) {
+multi_pw_aff &multi_pw_aff::operator=(multi_pw_aff obj) {
std::swap(this->ptr, obj.ptr);
return *this;
}
-isl::ctx ast_expr_op_pdiv_q::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+multi_pw_aff::~multi_pw_aff() {
+ if (ptr)
+ isl_multi_pw_aff_free(ptr);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj)
-{
- if (!obj.get())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+__isl_give isl_multi_pw_aff *multi_pw_aff::copy() const & {
+ return isl_multi_pw_aff_copy(ptr);
}
-// implementations for isl::ast_expr_op_pdiv_r
-ast_expr_op_pdiv_r::ast_expr_op_pdiv_r()
- : ast_expr_op() {}
-
-ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj)
- : ast_expr_op(obj)
-{
+__isl_keep isl_multi_pw_aff *multi_pw_aff::get() const {
+ return ptr;
}
-ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
+__isl_give isl_multi_pw_aff *multi_pw_aff::release() {
+ isl_multi_pw_aff *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
-ast_expr_op_pdiv_r &ast_expr_op_pdiv_r::operator=(ast_expr_op_pdiv_r obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+bool multi_pw_aff::is_null() const {
+ return ptr == nullptr;
}
-isl::ctx ast_expr_op_pdiv_r::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::ctx multi_pw_aff::ctx() const {
+ return isl::ctx(isl_multi_pw_aff_get_ctx(ptr));
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj)
+isl::multi_pw_aff multi_pw_aff::add(isl::multi_pw_aff multi2) const
{
- if (!obj.get())
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_pw_aff_add(copy(), multi2.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::ast_expr_op_select
-ast_expr_op_select::ast_expr_op_select()
- : ast_expr_op() {}
+isl::multi_union_pw_aff multi_pw_aff::add(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).add(multi2);
+}
-ast_expr_op_select::ast_expr_op_select(const ast_expr_op_select &obj)
- : ast_expr_op(obj)
+isl::multi_pw_aff multi_pw_aff::add(const isl::aff &multi2) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add(isl::multi_pw_aff(multi2));
}
-ast_expr_op_select::ast_expr_op_select(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
+isl::multi_pw_aff multi_pw_aff::add(const isl::multi_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add(isl::multi_pw_aff(multi2));
+}
-ast_expr_op_select &ast_expr_op_select::operator=(ast_expr_op_select obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::multi_pw_aff multi_pw_aff::add(const isl::pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add(isl::multi_pw_aff(multi2));
}
-isl::ctx ast_expr_op_select::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::multi_pw_aff multi_pw_aff::add(const isl::pw_multi_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add(isl::multi_pw_aff(multi2));
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj)
+isl::multi_pw_aff multi_pw_aff::add_constant(isl::multi_val mv) const
{
- if (!obj.get())
+ if (!ptr || mv.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::ast_expr_op_sub
-ast_expr_op_sub::ast_expr_op_sub()
- : ast_expr_op() {}
-
-ast_expr_op_sub::ast_expr_op_sub(const ast_expr_op_sub &obj)
- : ast_expr_op(obj)
+isl::multi_pw_aff multi_pw_aff::add_constant(isl::val v) const
{
+ if (!ptr || v.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-ast_expr_op_sub::ast_expr_op_sub(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
-
-ast_expr_op_sub &ast_expr_op_sub::operator=(ast_expr_op_sub obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::multi_pw_aff multi_pw_aff::add_constant(long v) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add_constant(isl::val(ctx(), v));
}
-isl::ctx ast_expr_op_sub::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::map multi_pw_aff::as_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_as_map(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj)
+isl::multi_aff multi_pw_aff::as_multi_aff() const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_pw_aff_as_multi_aff(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::ast_expr_op_zdiv_r
-ast_expr_op_zdiv_r::ast_expr_op_zdiv_r()
- : ast_expr_op() {}
+isl::set multi_pw_aff::as_set() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_as_set(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
-ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj)
- : ast_expr_op(obj)
+isl::pw_aff multi_pw_aff::at(int pos) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_get_at(get(), pos);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr)
- : ast_expr_op(ptr) {}
+isl::pw_aff multi_pw_aff::get_at(int pos) const
+{
+ return at(pos);
+}
-ast_expr_op_zdiv_r &ast_expr_op_zdiv_r::operator=(ast_expr_op_zdiv_r obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::set multi_pw_aff::bind(isl::multi_id tuple) const
+{
+ if (!ptr || tuple.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_bind(copy(), tuple.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::ctx ast_expr_op_zdiv_r::ctx() const {
- return isl::ctx(isl_ast_expr_get_ctx(ptr));
+isl::multi_pw_aff multi_pw_aff::bind_domain(isl::multi_id tuple) const
+{
+ if (!ptr || tuple.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj)
+isl::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
{
- if (!obj.get())
+ if (!ptr || tuple.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_expr_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_expr_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::ast_node
-ast_node manage(__isl_take isl_ast_node *ptr) {
+isl::multi_pw_aff multi_pw_aff::coalesce() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return ast_node(ptr);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_coalesce(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-ast_node manage_copy(__isl_keep isl_ast_node *ptr) {
+
+isl::set multi_pw_aff::domain() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_node_get_ctx(ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_ast_node_copy(ptr);
- if (!ptr)
+ auto res = isl_multi_pw_aff_domain(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return ast_node(ptr);
+ return manage(res);
}
-ast_node::ast_node()
- : ptr(nullptr) {}
-
-ast_node::ast_node(const ast_node &obj)
- : ptr(nullptr)
+isl::multi_pw_aff multi_pw_aff::flat_range_product(isl::multi_pw_aff multi2) const
{
- if (!obj.ptr)
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_node_get_ctx(obj.ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
+ auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-ast_node::ast_node(__isl_take isl_ast_node *ptr)
- : ptr(ptr) {}
-
-ast_node &ast_node::operator=(ast_node obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::multi_union_pw_aff multi_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).flat_range_product(multi2);
}
-ast_node::~ast_node() {
- if (ptr)
- isl_ast_node_free(ptr);
+isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->flat_range_product(isl::multi_pw_aff(multi2));
}
-__isl_give isl_ast_node *ast_node::copy() const & {
- return isl_ast_node_copy(ptr);
+isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::multi_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->flat_range_product(isl::multi_pw_aff(multi2));
}
-__isl_keep isl_ast_node *ast_node::get() const {
- return ptr;
+isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->flat_range_product(isl::multi_pw_aff(multi2));
}
-__isl_give isl_ast_node *ast_node::release() {
- isl_ast_node *tmp = ptr;
- ptr = nullptr;
- return tmp;
+isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_multi_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->flat_range_product(isl::multi_pw_aff(multi2));
}
-bool ast_node::is_null() const {
- return ptr == nullptr;
+isl::multi_pw_aff multi_pw_aff::gist(isl::set set) const
+{
+ if (!ptr || set.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_gist(copy(), set.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-template <typename T, typename>
-bool ast_node::isa_type(T subtype) const
+isl::multi_union_pw_aff multi_pw_aff::gist(const isl::union_set &context) const
{
- if (is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return isl_ast_node_get_type(get()) == subtype;
+ return isl::multi_union_pw_aff(*this).gist(context);
}
-template <class T>
-bool ast_node::isa() const
+
+isl::multi_pw_aff multi_pw_aff::gist(const isl::basic_set &set) const
{
- return isa_type<decltype(T::type)>(T::type);
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist(isl::set(set));
}
-template <class T>
-T ast_node::as() const
+
+isl::multi_pw_aff multi_pw_aff::gist(const isl::point &set) const
{
- if (!isa<T>())
- exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__);
- return T(copy());
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist(isl::set(set));
}
-isl::ctx ast_node::ctx() const {
- return isl::ctx(isl_ast_node_get_ctx(ptr));
+bool multi_pw_aff::has_range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_has_range_tuple_id(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-std::string ast_node::to_C_str() const
+isl::multi_pw_aff multi_pw_aff::identity() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_to_C_str(get());
- std::string tmp(res);
- free(res);
- return tmp;
+ auto res = isl_multi_pw_aff_identity_multi_pw_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_node &obj)
+isl::multi_pw_aff multi_pw_aff::identity_on_domain(isl::space space)
{
- if (!obj.get())
+ if (space.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_node_get_ctx(obj.get());
+ auto saved_ctx = space.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_node_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_pw_aff_identity_on_domain_space(space.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::ast_node_block
-ast_node_block::ast_node_block()
- : ast_node() {}
-
-ast_node_block::ast_node_block(const ast_node_block &obj)
- : ast_node(obj)
+isl::multi_pw_aff multi_pw_aff::insert_domain(isl::space domain) const
{
+ if (!ptr || domain.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_insert_domain(copy(), domain.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-ast_node_block::ast_node_block(__isl_take isl_ast_node *ptr)
- : ast_node(ptr) {}
+isl::multi_pw_aff multi_pw_aff::intersect_domain(isl::set domain) const
+{
+ if (!ptr || domain.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_intersect_domain(copy(), domain.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
-ast_node_block &ast_node_block::operator=(ast_node_block obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::multi_union_pw_aff multi_pw_aff::intersect_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).intersect_domain(uset);
}
-isl::ctx ast_node_block::ctx() const {
- return isl::ctx(isl_ast_node_get_ctx(ptr));
+isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::basic_set &domain) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_domain(isl::set(domain));
}
-isl::ast_node_list ast_node_block::children() const
+isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::point &domain) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_domain(isl::set(domain));
+}
+
+isl::multi_pw_aff multi_pw_aff::intersect_params(isl::set set) const
+{
+ if (!ptr || set.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_block_get_children(get());
+ auto res = isl_multi_pw_aff_intersect_params(copy(), set.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_node_list ast_node_block::get_children() const
+bool multi_pw_aff::involves_nan() const
{
- return children();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_involves_nan(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj)
+bool multi_pw_aff::involves_param(const isl::id &id) const
{
- if (!obj.get())
+ if (!ptr || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_node_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_node_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_pw_aff_involves_param_id(get(), id.get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return res;
}
-// implementations for isl::ast_node_for
-ast_node_for::ast_node_for()
- : ast_node() {}
-
-ast_node_for::ast_node_for(const ast_node_for &obj)
- : ast_node(obj)
+bool multi_pw_aff::involves_param(const std::string &id) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->involves_param(isl::id(ctx(), id));
}
-ast_node_for::ast_node_for(__isl_take isl_ast_node *ptr)
- : ast_node(ptr) {}
-
-ast_node_for &ast_node_for::operator=(ast_node_for obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+bool multi_pw_aff::involves_param(const isl::id_list &list) const
+{
+ if (!ptr || list.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-isl::ctx ast_node_for::ctx() const {
- return isl::ctx(isl_ast_node_get_ctx(ptr));
+bool multi_pw_aff::isa_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_isa_multi_aff(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-isl::ast_node ast_node_for::body() const
+isl::pw_aff_list multi_pw_aff::list() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_for_get_body(get());
+ auto res = isl_multi_pw_aff_get_list(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_node ast_node_for::get_body() const
+isl::pw_aff_list multi_pw_aff::get_list() const
{
- return body();
+ return list();
}
-isl::ast_expr ast_node_for::cond() const
+isl::multi_pw_aff multi_pw_aff::max(isl::multi_pw_aff multi2) const
{
- if (!ptr)
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_for_get_cond(get());
+ auto res = isl_multi_pw_aff_max(copy(), multi2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_expr ast_node_for::get_cond() const
-{
- return cond();
-}
-
-isl::ast_expr ast_node_for::inc() const
+isl::multi_val multi_pw_aff::max_multi_val() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_for_get_inc(get());
+ auto res = isl_multi_pw_aff_max_multi_val(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_expr ast_node_for::get_inc() const
+isl::multi_pw_aff multi_pw_aff::min(isl::multi_pw_aff multi2) const
{
- return inc();
+ if (!ptr || multi2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_min(copy(), multi2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::ast_expr ast_node_for::init() const
+isl::multi_val multi_pw_aff::min_multi_val() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_for_get_init(get());
+ auto res = isl_multi_pw_aff_min_multi_val(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_expr ast_node_for::get_init() const
-{
- return init();
-}
-
-isl::ast_expr ast_node_for::iterator() const
+isl::multi_pw_aff multi_pw_aff::neg() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_for_get_iterator(get());
+ auto res = isl_multi_pw_aff_neg(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_expr ast_node_for::get_iterator() const
-{
- return iterator();
-}
-
-bool ast_node_for::is_degenerate() const
+bool multi_pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
{
- if (!ptr)
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_for_is_degenerate(get());
+ auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get());
if (res < 0)
exception::throw_last_error(saved_ctx);
return res;
}
-inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj)
+bool multi_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_node_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_node_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return isl::multi_union_pw_aff(*this).plain_is_equal(multi2);
}
-// implementations for isl::ast_node_if
-ast_node_if::ast_node_if()
- : ast_node() {}
-
-ast_node_if::ast_node_if(const ast_node_if &obj)
- : ast_node(obj)
+bool multi_pw_aff::plain_is_equal(const isl::aff &multi2) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->plain_is_equal(isl::multi_pw_aff(multi2));
}
-ast_node_if::ast_node_if(__isl_take isl_ast_node *ptr)
- : ast_node(ptr) {}
+bool multi_pw_aff::plain_is_equal(const isl::multi_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->plain_is_equal(isl::multi_pw_aff(multi2));
+}
-ast_node_if &ast_node_if::operator=(ast_node_if obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+bool multi_pw_aff::plain_is_equal(const isl::pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->plain_is_equal(isl::multi_pw_aff(multi2));
}
-isl::ctx ast_node_if::ctx() const {
- return isl::ctx(isl_ast_node_get_ctx(ptr));
+bool multi_pw_aff::plain_is_equal(const isl::pw_multi_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->plain_is_equal(isl::multi_pw_aff(multi2));
}
-isl::ast_expr ast_node_if::cond() const
+isl::multi_pw_aff multi_pw_aff::product(isl::multi_pw_aff multi2) const
{
- if (!ptr)
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_if_get_cond(get());
+ auto res = isl_multi_pw_aff_product(copy(), multi2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_expr ast_node_if::get_cond() const
-{
- return cond();
-}
-
-isl::ast_node ast_node_if::else_node() const
+isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_aff ma) const
{
- if (!ptr)
+ if (!ptr || ma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_if_get_else_node(get());
+ auto res = isl_multi_pw_aff_pullback_multi_aff(copy(), ma.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_node ast_node_if::get_else_node() const
+isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_pw_aff mpa2) const
{
- return else_node();
+ if (!ptr || mpa2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_pullback_multi_pw_aff(copy(), mpa2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::ast_node ast_node_if::then_node() const
+isl::multi_pw_aff multi_pw_aff::pullback(isl::pw_multi_aff pma) const
{
- if (!ptr)
+ if (!ptr || pma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_if_get_then_node(get());
+ auto res = isl_multi_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_node ast_node_if::get_then_node() const
+isl::multi_union_pw_aff multi_pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
{
- return then_node();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).pullback(upma);
}
-bool ast_node_if::has_else_node() const
+isl::multi_pw_aff multi_pw_aff::range_product(isl::multi_pw_aff multi2) const
{
- if (!ptr)
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_if_has_else_node(get());
- if (res < 0)
+ auto res = isl_multi_pw_aff_range_product(copy(), multi2.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj)
+isl::multi_union_pw_aff multi_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_node_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_node_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return isl::multi_union_pw_aff(*this).range_product(multi2);
}
-// implementations for isl::ast_node_list
-ast_node_list manage(__isl_take isl_ast_node_list *ptr) {
+isl::multi_pw_aff multi_pw_aff::range_product(const isl::aff &multi2) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return ast_node_list(ptr);
+ return this->range_product(isl::multi_pw_aff(multi2));
}
-ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) {
+
+isl::multi_pw_aff multi_pw_aff::range_product(const isl::multi_aff &multi2) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_node_list_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_ast_node_list_copy(ptr);
+ return this->range_product(isl::multi_pw_aff(multi2));
+}
+
+isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_aff &multi2) const
+{
if (!ptr)
- exception::throw_last_error(saved_ctx);
- return ast_node_list(ptr);
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->range_product(isl::multi_pw_aff(multi2));
}
-ast_node_list::ast_node_list()
- : ptr(nullptr) {}
+isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_multi_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->range_product(isl::multi_pw_aff(multi2));
+}
-ast_node_list::ast_node_list(const ast_node_list &obj)
- : ptr(nullptr)
+isl::id multi_pw_aff::range_tuple_id() const
{
- if (!obj.ptr)
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_node_list_get_ctx(obj.ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
+ auto res = isl_multi_pw_aff_get_range_tuple_id(get());
+ if (!res)
exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr)
- : ptr(ptr) {}
+isl::id multi_pw_aff::get_range_tuple_id() const
+{
+ return range_tuple_id();
+}
-ast_node_list::ast_node_list(isl::ctx ctx, int n)
+isl::multi_pw_aff multi_pw_aff::reset_range_tuple_id() const
{
- auto saved_ctx = ctx;
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_list_alloc(ctx.release(), n);
+ auto res = isl_multi_pw_aff_reset_range_tuple_id(copy());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-ast_node_list::ast_node_list(isl::ast_node el)
+isl::multi_pw_aff multi_pw_aff::scale(isl::multi_val mv) const
{
- if (el.is_null())
+ if (!ptr || mv.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = el.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_list_from_ast_node(el.release());
+ auto res = isl_multi_pw_aff_scale_multi_val(copy(), mv.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-ast_node_list &ast_node_list::operator=(ast_node_list obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-ast_node_list::~ast_node_list() {
- if (ptr)
- isl_ast_node_list_free(ptr);
-}
-
-__isl_give isl_ast_node_list *ast_node_list::copy() const & {
- return isl_ast_node_list_copy(ptr);
-}
-
-__isl_keep isl_ast_node_list *ast_node_list::get() const {
- return ptr;
-}
-
-__isl_give isl_ast_node_list *ast_node_list::release() {
- isl_ast_node_list *tmp = ptr;
- ptr = nullptr;
- return tmp;
+ return manage(res);
}
-bool ast_node_list::is_null() const {
- return ptr == nullptr;
+isl::multi_pw_aff multi_pw_aff::scale(isl::val v) const
+{
+ if (!ptr || v.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_pw_aff_scale_val(copy(), v.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::ctx ast_node_list::ctx() const {
- return isl::ctx(isl_ast_node_list_get_ctx(ptr));
+isl::multi_pw_aff multi_pw_aff::scale(long v) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->scale(isl::val(ctx(), v));
}
-isl::ast_node_list ast_node_list::add(isl::ast_node el) const
+isl::multi_pw_aff multi_pw_aff::scale_down(isl::multi_val mv) const
{
- if (!ptr || el.is_null())
+ if (!ptr || mv.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_list_add(copy(), el.release());
+ auto res = isl_multi_pw_aff_scale_down_multi_val(copy(), mv.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_node_list ast_node_list::clear() const
+isl::multi_pw_aff multi_pw_aff::scale_down(isl::val v) const
{
- if (!ptr)
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_list_clear(copy());
+ auto res = isl_multi_pw_aff_scale_down_val(copy(), v.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const
+isl::multi_pw_aff multi_pw_aff::scale_down(long v) const
{
- if (!ptr || list2.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->scale_down(isl::val(ctx(), v));
+}
+
+isl::multi_pw_aff multi_pw_aff::set_at(int pos, isl::pw_aff el) const
+{
+ if (!ptr || el.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_list_concat(copy(), list2.release());
+ auto res = isl_multi_pw_aff_set_at(copy(), pos, el.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const
+isl::multi_union_pw_aff multi_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).set_at(pos, el);
+}
+
+isl::multi_pw_aff multi_pw_aff::set_range_tuple(isl::id id) const
+{
+ if (!ptr || id.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_list_drop(copy(), first, n);
+ auto res = isl_multi_pw_aff_set_range_tuple_id(copy(), id.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-void ast_node_list::foreach(const std::function<void(isl::ast_node)> &fn) const
+isl::multi_pw_aff multi_pw_aff::set_range_tuple(const std::string &id) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->set_range_tuple(isl::id(ctx(), id));
+}
+
+unsigned multi_pw_aff::size() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct fn_data {
- std::function<void(isl::ast_node)> func;
- std::exception_ptr eptr;
- } fn_data = { fn };
- auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_stat {
- auto *data = static_cast<struct fn_data *>(arg_1);
- ISL_CPP_TRY {
- (data->func)(manage(arg_0));
- return isl_stat_ok;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_stat_error;
- }
- };
- auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data);
- if (fn_data.eptr)
- std::rethrow_exception(fn_data.eptr);
+ auto res = isl_multi_pw_aff_size(get());
if (res < 0)
exception::throw_last_error(saved_ctx);
- return;
+ return res;
}
-isl::ast_node ast_node_list::at(int index) const
+isl::space multi_pw_aff::space() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_list_get_at(get(), index);
+ auto res = isl_multi_pw_aff_get_space(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_node ast_node_list::get_at(int index) const
+isl::space multi_pw_aff::get_space() const
{
- return at(index);
+ return space();
}
-isl::ast_node_list ast_node_list::insert(unsigned int pos, isl::ast_node el) const
+isl::multi_pw_aff multi_pw_aff::sub(isl::multi_pw_aff multi2) const
{
- if (!ptr || el.is_null())
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_list_insert(copy(), pos, el.release());
+ auto res = isl_multi_pw_aff_sub(copy(), multi2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-unsigned ast_node_list::size() const
+isl::multi_union_pw_aff multi_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_list_size(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::multi_union_pw_aff(*this).sub(multi2);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj)
+isl::multi_pw_aff multi_pw_aff::sub(const isl::aff &multi2) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_node_list_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_node_list_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
-}
-
-// implementations for isl::ast_node_mark
-ast_node_mark::ast_node_mark()
- : ast_node() {}
-
-ast_node_mark::ast_node_mark(const ast_node_mark &obj)
- : ast_node(obj)
-{
+ return this->sub(isl::multi_pw_aff(multi2));
}
-ast_node_mark::ast_node_mark(__isl_take isl_ast_node *ptr)
- : ast_node(ptr) {}
-
-ast_node_mark &ast_node_mark::operator=(ast_node_mark obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::multi_pw_aff multi_pw_aff::sub(const isl::multi_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->sub(isl::multi_pw_aff(multi2));
}
-isl::ctx ast_node_mark::ctx() const {
- return isl::ctx(isl_ast_node_get_ctx(ptr));
+isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->sub(isl::multi_pw_aff(multi2));
}
-isl::id ast_node_mark::id() const
+isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_multi_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->sub(isl::multi_pw_aff(multi2));
+}
+
+isl::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::multi_id domain) const
+{
+ if (!ptr || domain.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_mark_get_id(get());
+ auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::id ast_node_mark::get_id() const
-{
- return id();
-}
-
-isl::ast_node ast_node_mark::node() const
+isl::multi_pw_aff multi_pw_aff::union_add(isl::multi_pw_aff mpa2) const
{
- if (!ptr)
+ if (!ptr || mpa2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_mark_get_node(get());
+ auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_node ast_node_mark::get_node() const
+isl::multi_union_pw_aff multi_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
{
- return node();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).union_add(mupa2);
}
-inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj)
+isl::multi_pw_aff multi_pw_aff::union_add(const isl::aff &mpa2) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_node_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_node_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return this->union_add(isl::multi_pw_aff(mpa2));
}
-// implementations for isl::ast_node_user
-ast_node_user::ast_node_user()
- : ast_node() {}
-
-ast_node_user::ast_node_user(const ast_node_user &obj)
- : ast_node(obj)
+isl::multi_pw_aff multi_pw_aff::union_add(const isl::multi_aff &mpa2) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->union_add(isl::multi_pw_aff(mpa2));
}
-ast_node_user::ast_node_user(__isl_take isl_ast_node *ptr)
- : ast_node(ptr) {}
-
-ast_node_user &ast_node_user::operator=(ast_node_user obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_aff &mpa2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->union_add(isl::multi_pw_aff(mpa2));
}
-isl::ctx ast_node_user::ctx() const {
- return isl::ctx(isl_ast_node_get_ctx(ptr));
+isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_multi_aff &mpa2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->union_add(isl::multi_pw_aff(mpa2));
}
-isl::ast_expr ast_node_user::expr() const
+isl::multi_pw_aff multi_pw_aff::zero(isl::space space)
{
- if (!ptr)
+ if (space.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = space.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_ast_node_user_get_expr(get());
+ auto res = isl_multi_pw_aff_zero(space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::ast_expr ast_node_user::get_expr() const
-{
- return expr();
-}
-
-inline std::ostream &operator<<(std::ostream &os, const ast_node_user &obj)
+inline std::ostream &operator<<(std::ostream &os, const multi_pw_aff &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_ast_node_get_ctx(obj.get());
+ auto saved_ctx = isl_multi_pw_aff_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_ast_node_to_str(obj.get());
+ char *str = isl_multi_pw_aff_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::basic_map
-basic_map manage(__isl_take isl_basic_map *ptr) {
+// implementations for isl::multi_union_pw_aff
+multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return basic_map(ptr);
+ return multi_union_pw_aff(ptr);
}
-basic_map manage_copy(__isl_keep isl_basic_map *ptr) {
+multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_basic_map_get_ctx(ptr);
+ auto saved_ctx = isl_multi_union_pw_aff_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_basic_map_copy(ptr);
+ ptr = isl_multi_union_pw_aff_copy(ptr);
if (!ptr)
exception::throw_last_error(saved_ctx);
- return basic_map(ptr);
+ return multi_union_pw_aff(ptr);
}
-basic_map::basic_map()
+multi_union_pw_aff::multi_union_pw_aff()
: ptr(nullptr) {}
-basic_map::basic_map(const basic_map &obj)
+multi_union_pw_aff::multi_union_pw_aff(const multi_union_pw_aff &obj)
: ptr(nullptr)
{
if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_basic_map_get_ctx(obj.ptr);
+ auto saved_ctx = isl_multi_union_pw_aff_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
ptr = obj.copy();
if (!ptr)
exception::throw_last_error(saved_ctx);
}
-basic_map::basic_map(__isl_take isl_basic_map *ptr)
+multi_union_pw_aff::multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr)
: ptr(ptr) {}
-basic_map::basic_map(isl::ctx ctx, const std::string &str)
+multi_union_pw_aff::multi_union_pw_aff(isl::multi_pw_aff mpa)
{
- auto saved_ctx = ctx;
+ if (mpa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = mpa.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str());
+ auto res = isl_multi_union_pw_aff_from_multi_pw_aff(mpa.release());
if (!res)
exception::throw_last_error(saved_ctx);
ptr = res;
}
-basic_map &basic_map::operator=(basic_map obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-basic_map::~basic_map() {
- if (ptr)
- isl_basic_map_free(ptr);
-}
-
-__isl_give isl_basic_map *basic_map::copy() const & {
- return isl_basic_map_copy(ptr);
-}
-
-__isl_keep isl_basic_map *basic_map::get() const {
- return ptr;
-}
-
-__isl_give isl_basic_map *basic_map::release() {
- isl_basic_map *tmp = ptr;
- ptr = nullptr;
- return tmp;
-}
-
-bool basic_map::is_null() const {
- return ptr == nullptr;
-}
-
-isl::ctx basic_map::ctx() const {
- return isl::ctx(isl_basic_map_get_ctx(ptr));
-}
-
-isl::basic_map basic_map::affine_hull() const
+multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_aff upa)
{
- if (!ptr)
+ if (upa.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = upa.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_affine_hull(copy());
+ auto res = isl_multi_union_pw_aff_from_union_pw_aff(upa.release());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ ptr = res;
}
-isl::basic_map basic_map::apply_domain(isl::basic_map bmap2) const
+multi_union_pw_aff::multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list)
{
- if (!ptr || bmap2.is_null())
+ if (space.is_null() || list.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = space.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_apply_domain(copy(), bmap2.release());
+ auto res = isl_multi_union_pw_aff_from_union_pw_aff_list(space.release(), list.release());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ ptr = res;
}
-isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const
+multi_union_pw_aff::multi_union_pw_aff(isl::ctx ctx, const std::string &str)
{
- if (!ptr || bmap2.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = ctx;
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_apply_range(copy(), bmap2.release());
+ auto res = isl_multi_union_pw_aff_read_from_str(ctx.release(), str.c_str());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ ptr = res;
}
-isl::basic_set basic_map::deltas() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_deltas(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+multi_union_pw_aff &multi_union_pw_aff::operator=(multi_union_pw_aff obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
}
-isl::basic_map basic_map::detect_equalities() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_detect_equalities(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+multi_union_pw_aff::~multi_union_pw_aff() {
+ if (ptr)
+ isl_multi_union_pw_aff_free(ptr);
}
-isl::basic_map basic_map::flatten() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_flatten(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::copy() const & {
+ return isl_multi_union_pw_aff_copy(ptr);
}
-isl::basic_map basic_map::flatten_domain() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_flatten_domain(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+__isl_keep isl_multi_union_pw_aff *multi_union_pw_aff::get() const {
+ return ptr;
}
-isl::basic_map basic_map::flatten_range() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_flatten_range(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::release() {
+ isl_multi_union_pw_aff *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
}
-isl::basic_map basic_map::gist(isl::basic_map context) const
+bool multi_union_pw_aff::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx multi_union_pw_aff::ctx() const {
+ return isl::ctx(isl_multi_union_pw_aff_get_ctx(ptr));
+}
+
+isl::multi_union_pw_aff multi_union_pw_aff::add(isl::multi_union_pw_aff multi2) const
{
- if (!ptr || context.is_null())
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_gist(copy(), context.release());
+ auto res = isl_multi_union_pw_aff_add(copy(), multi2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_map basic_map::intersect(isl::basic_map bmap2) const
+isl::union_pw_aff multi_union_pw_aff::at(int pos) const
{
- if (!ptr || bmap2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_intersect(copy(), bmap2.release());
+ auto res = isl_multi_union_pw_aff_get_at(get(), pos);
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const
+isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const
{
- if (!ptr || bset.is_null())
+ return at(pos);
+}
+
+isl::union_set multi_union_pw_aff::bind(isl::multi_id tuple) const
+{
+ if (!ptr || tuple.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_intersect_domain(copy(), bset.release());
+ auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_map basic_map::intersect_range(isl::basic_set bset) const
+isl::multi_union_pw_aff multi_union_pw_aff::coalesce() const
{
- if (!ptr || bset.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_intersect_range(copy(), bset.release());
+ auto res = isl_multi_union_pw_aff_coalesce(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool basic_map::is_empty() const
+isl::union_set multi_union_pw_aff::domain() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_is_empty(get());
- if (res < 0)
+ auto res = isl_multi_union_pw_aff_domain(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool basic_map::is_equal(const isl::basic_map &bmap2) const
+isl::multi_union_pw_aff multi_union_pw_aff::flat_range_product(isl::multi_union_pw_aff multi2) const
{
- if (!ptr || bmap2.is_null())
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_is_equal(get(), bmap2.get());
- if (res < 0)
+ auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool basic_map::is_subset(const isl::basic_map &bmap2) const
+isl::multi_union_pw_aff multi_union_pw_aff::gist(isl::union_set context) const
{
- if (!ptr || bmap2.is_null())
+ if (!ptr || context.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_is_subset(get(), bmap2.get());
- if (res < 0)
+ auto res = isl_multi_union_pw_aff_gist(copy(), context.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-isl::map basic_map::lexmax() const
+bool multi_union_pw_aff::has_range_tuple_id() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_lexmax(copy());
- if (!res)
+ auto res = isl_multi_union_pw_aff_has_range_tuple_id(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::map basic_map::lexmin() const
+isl::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::union_set uset) const
{
- if (!ptr)
+ if (!ptr || uset.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_lexmin(copy());
+ auto res = isl_multi_union_pw_aff_intersect_domain(copy(), uset.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_map basic_map::reverse() const
+isl::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::set params) const
{
- if (!ptr)
+ if (!ptr || params.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_reverse(copy());
+ auto res = isl_multi_union_pw_aff_intersect_params(copy(), params.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_map basic_map::sample() const
+bool multi_union_pw_aff::involves_nan() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_sample(copy());
- if (!res)
+ auto res = isl_multi_union_pw_aff_involves_nan(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::map basic_map::unite(isl::basic_map bmap2) const
+isl::union_pw_aff_list multi_union_pw_aff::list() const
{
- if (!ptr || bmap2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_map_union(copy(), bmap2.release());
+ auto res = isl_multi_union_pw_aff_get_list(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const basic_map &obj)
+isl::union_pw_aff_list multi_union_pw_aff::get_list() const
{
- if (!obj.get())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_basic_map_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_basic_map_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
-}
-
-// implementations for isl::basic_set
-basic_set manage(__isl_take isl_basic_set *ptr) {
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return basic_set(ptr);
-}
-basic_set manage_copy(__isl_keep isl_basic_set *ptr) {
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_basic_set_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_basic_set_copy(ptr);
- if (!ptr)
- exception::throw_last_error(saved_ctx);
- return basic_set(ptr);
+ return list();
}
-basic_set::basic_set()
- : ptr(nullptr) {}
-
-basic_set::basic_set(const basic_set &obj)
- : ptr(nullptr)
+isl::multi_union_pw_aff multi_union_pw_aff::neg() const
{
- if (!obj.ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_basic_set_get_ctx(obj.ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
if (!ptr)
- exception::throw_last_error(saved_ctx);
-}
-
-basic_set::basic_set(__isl_take isl_basic_set *ptr)
- : ptr(ptr) {}
-
-basic_set::basic_set(isl::point pnt)
-{
- if (pnt.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = pnt.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_from_point(pnt.release());
+ auto res = isl_multi_union_pw_aff_neg(copy());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-basic_set::basic_set(isl::ctx ctx, const std::string &str)
+bool multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
{
- auto saved_ctx = ctx;
+ if (!ptr || multi2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_read_from_str(ctx.release(), str.c_str());
- if (!res)
+ auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-basic_set &basic_set::operator=(basic_set obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-basic_set::~basic_set() {
- if (ptr)
- isl_basic_set_free(ptr);
-}
-
-__isl_give isl_basic_set *basic_set::copy() const & {
- return isl_basic_set_copy(ptr);
-}
-
-__isl_keep isl_basic_set *basic_set::get() const {
- return ptr;
-}
-
-__isl_give isl_basic_set *basic_set::release() {
- isl_basic_set *tmp = ptr;
- ptr = nullptr;
- return tmp;
-}
-
-bool basic_set::is_null() const {
- return ptr == nullptr;
-}
-
-isl::ctx basic_set::ctx() const {
- return isl::ctx(isl_basic_set_get_ctx(ptr));
+ return res;
}
-isl::basic_set basic_set::affine_hull() const
+isl::multi_union_pw_aff multi_union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
{
- if (!ptr)
+ if (!ptr || upma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_affine_hull(copy());
+ auto res = isl_multi_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_set basic_set::apply(isl::basic_map bmap) const
+isl::multi_union_pw_aff multi_union_pw_aff::range_product(isl::multi_union_pw_aff multi2) const
{
- if (!ptr || bmap.is_null())
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_apply(copy(), bmap.release());
+ auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_set basic_set::detect_equalities() const
+isl::id multi_union_pw_aff::range_tuple_id() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_detect_equalities(copy());
+ auto res = isl_multi_union_pw_aff_get_range_tuple_id(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::val basic_set::dim_max_val(int pos) const
+isl::id multi_union_pw_aff::get_range_tuple_id() const
+{
+ return range_tuple_id();
+}
+
+isl::multi_union_pw_aff multi_union_pw_aff::reset_range_tuple_id() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_dim_max_val(copy(), pos);
+ auto res = isl_multi_union_pw_aff_reset_range_tuple_id(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_set basic_set::flatten() const
+isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::multi_val mv) const
{
- if (!ptr)
+ if (!ptr || mv.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_flatten(copy());
+ auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_set basic_set::gist(isl::basic_set context) const
+isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::val v) const
{
- if (!ptr || context.is_null())
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_gist(copy(), context.release());
+ auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_set basic_set::intersect(isl::basic_set bset2) const
+isl::multi_union_pw_aff multi_union_pw_aff::scale(long v) const
{
- if (!ptr || bset2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_intersect(copy(), bset2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->scale(isl::val(ctx(), v));
}
-isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const
+isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::multi_val mv) const
{
- if (!ptr || bset2.is_null())
+ if (!ptr || mv.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_intersect_params(copy(), bset2.release());
+ auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool basic_set::is_empty() const
+isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::val v) const
{
- if (!ptr)
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_is_empty(get());
- if (res < 0)
+ auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool basic_set::is_equal(const isl::basic_set &bset2) const
+isl::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const
{
- if (!ptr || bset2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_is_equal(get(), bset2.get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return this->scale_down(isl::val(ctx(), v));
}
-bool basic_set::is_subset(const isl::basic_set &bset2) const
+isl::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::union_pw_aff el) const
{
- if (!ptr || bset2.is_null())
+ if (!ptr || el.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_is_subset(get(), bset2.get());
- if (res < 0)
+ auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool basic_set::is_wrapping() const
+isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(isl::id id) const
{
- if (!ptr)
+ if (!ptr || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_is_wrapping(get());
- if (res < 0)
+ auto res = isl_multi_union_pw_aff_set_range_tuple_id(copy(), id.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-isl::set basic_set::lexmax() const
+isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(const std::string &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_lexmax(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->set_range_tuple(isl::id(ctx(), id));
}
-isl::set basic_set::lexmin() const
+unsigned multi_union_pw_aff::size() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_lexmin(copy());
- if (!res)
+ auto res = isl_multi_union_pw_aff_size(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::basic_set basic_set::params() const
+isl::space multi_union_pw_aff::space() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_params(copy());
+ auto res = isl_multi_union_pw_aff_get_space(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_set basic_set::sample() const
+isl::space multi_union_pw_aff::get_space() const
{
- if (!ptr)
+ return space();
+}
+
+isl::multi_union_pw_aff multi_union_pw_aff::sub(isl::multi_union_pw_aff multi2) const
+{
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_sample(copy());
+ auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::point basic_set::sample_point() const
+isl::multi_union_pw_aff multi_union_pw_aff::union_add(isl::multi_union_pw_aff mupa2) const
{
- if (!ptr)
+ if (!ptr || mupa2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_sample_point(copy());
+ auto res = isl_multi_union_pw_aff_union_add(copy(), mupa2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set basic_set::unite(isl::basic_set bset2) const
+isl::multi_union_pw_aff multi_union_pw_aff::zero(isl::space space)
{
- if (!ptr || bset2.is_null())
+ if (space.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = space.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_basic_set_union(copy(), bset2.release());
+ auto res = isl_multi_union_pw_aff_zero(space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const basic_set &obj)
+inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_basic_set_get_ctx(obj.get());
+ auto saved_ctx = isl_multi_union_pw_aff_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_basic_set_to_str(obj.get());
+ char *str = isl_multi_union_pw_aff_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::fixed_box
-fixed_box manage(__isl_take isl_fixed_box *ptr) {
+// implementations for isl::multi_val
+multi_val manage(__isl_take isl_multi_val *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return fixed_box(ptr);
+ return multi_val(ptr);
}
-fixed_box manage_copy(__isl_keep isl_fixed_box *ptr) {
+multi_val manage_copy(__isl_keep isl_multi_val *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_fixed_box_get_ctx(ptr);
+ auto saved_ctx = isl_multi_val_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_fixed_box_copy(ptr);
+ ptr = isl_multi_val_copy(ptr);
if (!ptr)
exception::throw_last_error(saved_ctx);
- return fixed_box(ptr);
+ return multi_val(ptr);
}
-fixed_box::fixed_box()
+multi_val::multi_val()
: ptr(nullptr) {}
-fixed_box::fixed_box(const fixed_box &obj)
+multi_val::multi_val(const multi_val &obj)
: ptr(nullptr)
{
if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_fixed_box_get_ctx(obj.ptr);
+ auto saved_ctx = isl_multi_val_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
ptr = obj.copy();
if (!ptr)
exception::throw_last_error(saved_ctx);
}
-fixed_box::fixed_box(__isl_take isl_fixed_box *ptr)
+multi_val::multi_val(__isl_take isl_multi_val *ptr)
: ptr(ptr) {}
-fixed_box &fixed_box::operator=(fixed_box obj) {
+multi_val::multi_val(isl::space space, isl::val_list list)
+{
+ if (space.is_null() || list.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_val_from_val_list(space.release(), list.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+multi_val::multi_val(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+multi_val &multi_val::operator=(multi_val obj) {
std::swap(this->ptr, obj.ptr);
return *this;
}
-fixed_box::~fixed_box() {
+multi_val::~multi_val() {
if (ptr)
- isl_fixed_box_free(ptr);
+ isl_multi_val_free(ptr);
}
-__isl_give isl_fixed_box *fixed_box::copy() const & {
- return isl_fixed_box_copy(ptr);
+__isl_give isl_multi_val *multi_val::copy() const & {
+ return isl_multi_val_copy(ptr);
}
-__isl_keep isl_fixed_box *fixed_box::get() const {
+__isl_keep isl_multi_val *multi_val::get() const {
return ptr;
}
-__isl_give isl_fixed_box *fixed_box::release() {
- isl_fixed_box *tmp = ptr;
+__isl_give isl_multi_val *multi_val::release() {
+ isl_multi_val *tmp = ptr;
ptr = nullptr;
return tmp;
}
-bool fixed_box::is_null() const {
+bool multi_val::is_null() const {
return ptr == nullptr;
}
-isl::ctx fixed_box::ctx() const {
- return isl::ctx(isl_fixed_box_get_ctx(ptr));
+isl::ctx multi_val::ctx() const {
+ return isl::ctx(isl_multi_val_get_ctx(ptr));
}
-isl::multi_aff fixed_box::offset() const
+isl::multi_val multi_val::add(isl::multi_val multi2) const
{
- if (!ptr)
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_fixed_box_get_offset(get());
+ auto res = isl_multi_val_add(copy(), multi2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_aff fixed_box::get_offset() const
-{
- return offset();
-}
-
-isl::multi_val fixed_box::size() const
+isl::multi_val multi_val::add(isl::val v) const
{
- if (!ptr)
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_fixed_box_get_size(get());
+ auto res = isl_multi_val_add_val(copy(), v.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_val fixed_box::get_size() const
+isl::multi_val multi_val::add(long v) const
{
- return size();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add(isl::val(ctx(), v));
}
-isl::space fixed_box::space() const
+isl::val multi_val::at(int pos) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_fixed_box_get_space(get());
+ auto res = isl_multi_val_get_at(get(), pos);
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space fixed_box::get_space() const
+isl::val multi_val::get_at(int pos) const
{
- return space();
+ return at(pos);
}
-bool fixed_box::is_valid() const
+isl::multi_val multi_val::flat_range_product(isl::multi_val multi2) const
{
- if (!ptr)
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_fixed_box_is_valid(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
-}
-
-inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj)
-{
- if (!obj.get())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_fixed_box_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_fixed_box_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
-}
-
-// implementations for isl::id
-id manage(__isl_take isl_id *ptr) {
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return id(ptr);
-}
-id manage_copy(__isl_keep isl_id *ptr) {
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_id_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_id_copy(ptr);
- if (!ptr)
- exception::throw_last_error(saved_ctx);
- return id(ptr);
-}
-
-id::id()
- : ptr(nullptr) {}
-
-id::id(const id &obj)
- : ptr(nullptr)
-{
- if (!obj.ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_id_get_ctx(obj.ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
- exception::throw_last_error(saved_ctx);
-}
-
-id::id(__isl_take isl_id *ptr)
- : ptr(ptr) {}
-
-id::id(isl::ctx ctx, const std::string &str)
-{
- auto saved_ctx = ctx;
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_id_read_from_str(ctx.release(), str.c_str());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-id &id::operator=(id obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-id::~id() {
- if (ptr)
- isl_id_free(ptr);
-}
-
-__isl_give isl_id *id::copy() const & {
- return isl_id_copy(ptr);
-}
-
-__isl_keep isl_id *id::get() const {
- return ptr;
-}
-
-__isl_give isl_id *id::release() {
- isl_id *tmp = ptr;
- ptr = nullptr;
- return tmp;
+ auto res = isl_multi_val_flat_range_product(copy(), multi2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-bool id::is_null() const {
- return ptr == nullptr;
+bool multi_val::has_range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_val_has_range_tuple_id(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-isl::ctx id::ctx() const {
- return isl::ctx(isl_id_get_ctx(ptr));
+bool multi_val::involves_nan() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_val_involves_nan(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-std::string id::name() const
+isl::val_list multi_val::list() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_id_get_name(get());
- std::string tmp(res);
- return tmp;
+ auto res = isl_multi_val_get_list(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-std::string id::get_name() const
+isl::val_list multi_val::get_list() const
{
- return name();
+ return list();
}
-inline std::ostream &operator<<(std::ostream &os, const id &obj)
+isl::multi_val multi_val::max(isl::multi_val multi2) const
{
- if (!obj.get())
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_id_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_id_to_str(obj.get());
- if (!str)
+ auto res = isl_multi_val_max(copy(), multi2.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::id_list
-id_list manage(__isl_take isl_id_list *ptr) {
- if (!ptr)
+isl::multi_val multi_val::min(isl::multi_val multi2) const
+{
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return id_list(ptr);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_val_min(copy(), multi2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-id_list manage_copy(__isl_keep isl_id_list *ptr) {
+
+isl::multi_val multi_val::neg() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_id_list_get_ctx(ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_id_list_copy(ptr);
- if (!ptr)
+ auto res = isl_multi_val_neg(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return id_list(ptr);
+ return manage(res);
}
-id_list::id_list()
- : ptr(nullptr) {}
-
-id_list::id_list(const id_list &obj)
- : ptr(nullptr)
+bool multi_val::plain_is_equal(const isl::multi_val &multi2) const
{
- if (!obj.ptr)
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_id_list_get_ctx(obj.ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
+ auto res = isl_multi_val_plain_is_equal(get(), multi2.get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
+ return res;
}
-id_list::id_list(__isl_take isl_id_list *ptr)
- : ptr(ptr) {}
-
-id_list::id_list(isl::ctx ctx, int n)
+isl::multi_val multi_val::product(isl::multi_val multi2) const
{
- auto saved_ctx = ctx;
+ if (!ptr || multi2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_id_list_alloc(ctx.release(), n);
+ auto res = isl_multi_val_product(copy(), multi2.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-id_list::id_list(isl::id el)
+isl::multi_val multi_val::range_product(isl::multi_val multi2) const
{
- if (el.is_null())
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = el.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_id_list_from_id(el.release());
+ auto res = isl_multi_val_range_product(copy(), multi2.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-id_list &id_list::operator=(id_list obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::id multi_val::range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_val_get_range_tuple_id(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-id_list::~id_list() {
- if (ptr)
- isl_id_list_free(ptr);
+isl::id multi_val::get_range_tuple_id() const
+{
+ return range_tuple_id();
}
-__isl_give isl_id_list *id_list::copy() const & {
- return isl_id_list_copy(ptr);
+isl::multi_val multi_val::reset_range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_val_reset_range_tuple_id(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-__isl_keep isl_id_list *id_list::get() const {
- return ptr;
+isl::multi_val multi_val::scale(isl::multi_val mv) const
+{
+ if (!ptr || mv.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_val_scale_multi_val(copy(), mv.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-__isl_give isl_id_list *id_list::release() {
- isl_id_list *tmp = ptr;
- ptr = nullptr;
- return tmp;
+isl::multi_val multi_val::scale(isl::val v) const
+{
+ if (!ptr || v.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_val_scale_val(copy(), v.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-bool id_list::is_null() const {
- return ptr == nullptr;
+isl::multi_val multi_val::scale(long v) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->scale(isl::val(ctx(), v));
}
-isl::ctx id_list::ctx() const {
- return isl::ctx(isl_id_list_get_ctx(ptr));
+isl::multi_val multi_val::scale_down(isl::multi_val mv) const
+{
+ if (!ptr || mv.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::id_list id_list::add(isl::id el) const
+isl::multi_val multi_val::scale_down(isl::val v) const
{
- if (!ptr || el.is_null())
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_id_list_add(copy(), el.release());
+ auto res = isl_multi_val_scale_down_val(copy(), v.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::id_list id_list::add(const std::string &el) const
+isl::multi_val multi_val::scale_down(long v) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->add(isl::id(ctx(), el));
+ return this->scale_down(isl::val(ctx(), v));
}
-isl::id_list id_list::clear() const
+isl::multi_val multi_val::set_at(int pos, isl::val el) const
{
- if (!ptr)
+ if (!ptr || el.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_id_list_clear(copy());
+ auto res = isl_multi_val_set_at(copy(), pos, el.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::id_list id_list::concat(isl::id_list list2) const
+isl::multi_val multi_val::set_at(int pos, long el) const
{
- if (!ptr || list2.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->set_at(pos, isl::val(ctx(), el));
+}
+
+isl::multi_val multi_val::set_range_tuple(isl::id id) const
+{
+ if (!ptr || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_id_list_concat(copy(), list2.release());
+ auto res = isl_multi_val_set_range_tuple_id(copy(), id.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::id_list id_list::drop(unsigned int first, unsigned int n) const
+isl::multi_val multi_val::set_range_tuple(const std::string &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_id_list_drop(copy(), first, n);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->set_range_tuple(isl::id(ctx(), id));
}
-void id_list::foreach(const std::function<void(isl::id)> &fn) const
+unsigned multi_val::size() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct fn_data {
- std::function<void(isl::id)> func;
- std::exception_ptr eptr;
- } fn_data = { fn };
- auto fn_lambda = [](isl_id *arg_0, void *arg_1) -> isl_stat {
- auto *data = static_cast<struct fn_data *>(arg_1);
- ISL_CPP_TRY {
- (data->func)(manage(arg_0));
- return isl_stat_ok;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_stat_error;
- }
- };
- auto res = isl_id_list_foreach(get(), fn_lambda, &fn_data);
- if (fn_data.eptr)
- std::rethrow_exception(fn_data.eptr);
+ auto res = isl_multi_val_size(get());
if (res < 0)
exception::throw_last_error(saved_ctx);
- return;
+ return res;
}
-isl::id id_list::at(int index) const
+isl::space multi_val::space() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_id_list_get_at(get(), index);
+ auto res = isl_multi_val_get_space(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::id id_list::get_at(int index) const
+isl::space multi_val::get_space() const
{
- return at(index);
+ return space();
}
-isl::id_list id_list::insert(unsigned int pos, isl::id el) const
+isl::multi_val multi_val::sub(isl::multi_val multi2) const
{
- if (!ptr || el.is_null())
+ if (!ptr || multi2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_id_list_insert(copy(), pos, el.release());
+ auto res = isl_multi_val_sub(copy(), multi2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::id_list id_list::insert(unsigned int pos, const std::string &el) const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->insert(pos, isl::id(ctx(), el));
-}
-
-unsigned id_list::size() const
+isl::multi_val multi_val::zero(isl::space space)
{
- if (!ptr)
+ if (space.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = space.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_id_list_size(get());
- if (res < 0)
+ auto res = isl_multi_val_zero(space.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const id_list &obj)
+inline std::ostream &operator<<(std::ostream &os, const multi_val &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_id_list_get_ctx(obj.get());
+ auto saved_ctx = isl_multi_val_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_id_list_to_str(obj.get());
+ char *str = isl_multi_val_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::map
-map manage(__isl_take isl_map *ptr) {
+// implementations for isl::point
+point manage(__isl_take isl_point *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return map(ptr);
+ return point(ptr);
}
-map manage_copy(__isl_keep isl_map *ptr) {
+point manage_copy(__isl_keep isl_point *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_map_get_ctx(ptr);
+ auto saved_ctx = isl_point_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_map_copy(ptr);
+ ptr = isl_point_copy(ptr);
if (!ptr)
exception::throw_last_error(saved_ctx);
- return map(ptr);
+ return point(ptr);
}
-map::map()
+point::point()
: ptr(nullptr) {}
-map::map(const map &obj)
+point::point(const point &obj)
: ptr(nullptr)
{
if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_map_get_ctx(obj.ptr);
+ auto saved_ctx = isl_point_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
ptr = obj.copy();
if (!ptr)
exception::throw_last_error(saved_ctx);
}
-map::map(__isl_take isl_map *ptr)
+point::point(__isl_take isl_point *ptr)
: ptr(ptr) {}
-map::map(isl::basic_map bmap)
-{
- if (bmap.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = bmap.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_from_basic_map(bmap.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-map::map(isl::ctx ctx, const std::string &str)
-{
- auto saved_ctx = ctx;
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_read_from_str(ctx.release(), str.c_str());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-map &map::operator=(map obj) {
+point &point::operator=(point obj) {
std::swap(this->ptr, obj.ptr);
return *this;
}
-map::~map() {
+point::~point() {
if (ptr)
- isl_map_free(ptr);
+ isl_point_free(ptr);
}
-__isl_give isl_map *map::copy() const & {
- return isl_map_copy(ptr);
+__isl_give isl_point *point::copy() const & {
+ return isl_point_copy(ptr);
}
-__isl_keep isl_map *map::get() const {
+__isl_keep isl_point *point::get() const {
return ptr;
}
-__isl_give isl_map *map::release() {
- isl_map *tmp = ptr;
+__isl_give isl_point *point::release() {
+ isl_point *tmp = ptr;
ptr = nullptr;
return tmp;
}
-bool map::is_null() const {
+bool point::is_null() const {
return ptr == nullptr;
}
-isl::ctx map::ctx() const {
- return isl::ctx(isl_map_get_ctx(ptr));
+isl::ctx point::ctx() const {
+ return isl::ctx(isl_point_get_ctx(ptr));
}
-isl::basic_map map::affine_hull() const
+isl::basic_set point::affine_hull() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_affine_hull(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).affine_hull();
}
-isl::map map::apply_domain(isl::map map2) const
+isl::basic_set point::apply(const isl::basic_map &bmap) const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_apply_domain(copy(), map2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).apply(bmap);
}
-isl::map map::apply_range(isl::map map2) const
+isl::set point::apply(const isl::map &map) const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_apply_range(copy(), map2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).apply(map);
}
-isl::set map::bind_domain(isl::multi_id tuple) const
+isl::union_set point::apply(const isl::union_map &umap) const
{
- if (!ptr || tuple.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_bind_domain(copy(), tuple.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).apply(umap);
}
-isl::set map::bind_range(isl::multi_id tuple) const
+isl::pw_multi_aff point::as_pw_multi_aff() const
{
- if (!ptr || tuple.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_bind_range(copy(), tuple.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).as_pw_multi_aff();
}
-isl::map map::coalesce() const
+isl::set point::as_set() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_coalesce(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).as_set();
}
-isl::map map::complement() const
+isl::set point::bind(const isl::multi_id &tuple) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_complement(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).bind(tuple);
}
-isl::map map::curry() const
+isl::set point::coalesce() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_curry(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).coalesce();
}
-isl::set map::deltas() const
+isl::set point::complement() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_deltas(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).complement();
}
-isl::map map::detect_equalities() const
+isl::union_set point::compute_divs() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_detect_equalities(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).compute_divs();
}
-isl::set map::domain() const
+isl::basic_set point::detect_equalities() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_domain(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).detect_equalities();
}
-isl::map map::domain_factor_domain() const
+isl::val point::dim_max_val(int pos) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_domain_factor_domain(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).dim_max_val(pos);
}
-isl::map map::domain_factor_range() const
+isl::val point::dim_min_val(int pos) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_domain_factor_range(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).dim_min_val(pos);
}
-isl::map map::domain_product(isl::map map2) const
+bool point::every_set(const std::function<bool(isl::set)> &test) const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_domain_product(copy(), map2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).every_set(test);
+}
+
+isl::set point::extract_set(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).extract_set(space);
+}
+
+isl::basic_set point::flatten() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).flatten();
+}
+
+void point::foreach_basic_set(const std::function<void(isl::basic_set)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).foreach_basic_set(fn);
+}
+
+void point::foreach_point(const std::function<void(isl::point)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).foreach_point(fn);
+}
+
+void point::foreach_set(const std::function<void(isl::set)> &fn) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).foreach_set(fn);
+}
+
+isl::basic_set point::gist(const isl::basic_set &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).gist(context);
+}
+
+isl::set point::gist(const isl::set &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).gist(context);
+}
+
+isl::union_set point::gist(const isl::union_set &context) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).gist(context);
+}
+
+isl::union_set point::gist_params(const isl::set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).gist_params(set);
+}
+
+isl::map point::identity() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).identity();
+}
+
+isl::pw_aff point::indicator_function() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).indicator_function();
+}
+
+isl::map point::insert_domain(const isl::space &domain) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).insert_domain(domain);
}
-isl::map map::empty(isl::space space)
+isl::basic_set point::intersect(const isl::basic_set &bset2) const
{
- if (space.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_empty(space.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).intersect(bset2);
}
-isl::map map::eq_at(isl::multi_pw_aff mpa) const
+isl::set point::intersect(const isl::set &set2) const
{
- if (!ptr || mpa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_eq_at_multi_pw_aff(copy(), mpa.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).intersect(set2);
}
-isl::map map::factor_domain() const
+isl::union_set point::intersect(const isl::union_set &uset2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_factor_domain(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).intersect(uset2);
}
-isl::map map::factor_range() const
+isl::basic_set point::intersect_params(const isl::basic_set &bset2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_factor_range(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).intersect_params(bset2);
}
-isl::map map::flatten() const
+isl::set point::intersect_params(const isl::set ¶ms) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_flatten(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).intersect_params(params);
}
-isl::map map::flatten_domain() const
+bool point::involves_locals() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_flatten_domain(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).involves_locals();
}
-isl::map map::flatten_range() const
+bool point::is_disjoint(const isl::set &set2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_flatten_range(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).is_disjoint(set2);
}
-void map::foreach_basic_map(const std::function<void(isl::basic_map)> &fn) const
+bool point::is_disjoint(const isl::union_set &uset2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct fn_data {
- std::function<void(isl::basic_map)> func;
- std::exception_ptr eptr;
- } fn_data = { fn };
- auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
- auto *data = static_cast<struct fn_data *>(arg_1);
- ISL_CPP_TRY {
- (data->func)(manage(arg_0));
- return isl_stat_ok;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_stat_error;
- }
- };
- auto res = isl_map_foreach_basic_map(get(), fn_lambda, &fn_data);
- if (fn_data.eptr)
- std::rethrow_exception(fn_data.eptr);
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return;
+ return isl::basic_set(*this).is_disjoint(uset2);
}
-isl::fixed_box map::range_simple_fixed_box_hull() const
+bool point::is_empty() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_get_range_simple_fixed_box_hull(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).is_empty();
}
-isl::fixed_box map::get_range_simple_fixed_box_hull() const
+bool point::is_equal(const isl::basic_set &bset2) const
{
- return range_simple_fixed_box_hull();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).is_equal(bset2);
}
-isl::space map::space() const
+bool point::is_equal(const isl::set &set2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_get_space(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).is_equal(set2);
}
-isl::space map::get_space() const
+bool point::is_equal(const isl::union_set &uset2) const
{
- return space();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).is_equal(uset2);
}
-isl::map map::gist(isl::map context) const
+bool point::is_singleton() const
{
- if (!ptr || context.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_gist(copy(), context.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).is_singleton();
}
-isl::map map::gist_domain(isl::set context) const
+bool point::is_strict_subset(const isl::set &set2) const
{
- if (!ptr || context.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_gist_domain(copy(), context.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).is_strict_subset(set2);
}
-isl::map map::intersect(isl::map map2) const
+bool point::is_strict_subset(const isl::union_set &uset2) const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_intersect(copy(), map2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).is_strict_subset(uset2);
}
-isl::map map::intersect_domain(isl::set set) const
+bool point::is_subset(const isl::basic_set &bset2) const
{
- if (!ptr || set.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_intersect_domain(copy(), set.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).is_subset(bset2);
}
-isl::map map::intersect_domain_factor_domain(isl::map factor) const
+bool point::is_subset(const isl::set &set2) const
{
- if (!ptr || factor.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_intersect_domain_factor_domain(copy(), factor.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).is_subset(set2);
}
-isl::map map::intersect_domain_factor_range(isl::map factor) const
+bool point::is_subset(const isl::union_set &uset2) const
{
- if (!ptr || factor.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_intersect_domain_factor_range(copy(), factor.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).is_subset(uset2);
}
-isl::map map::intersect_params(isl::set params) const
+bool point::is_wrapping() const
{
- if (!ptr || params.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_intersect_params(copy(), params.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).is_wrapping();
}
-isl::map map::intersect_range(isl::set set) const
+bool point::isa_set() const
{
- if (!ptr || set.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_intersect_range(copy(), set.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).isa_set();
}
-isl::map map::intersect_range_factor_domain(isl::map factor) const
+isl::set point::lexmax() const
{
- if (!ptr || factor.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_intersect_range_factor_domain(copy(), factor.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).lexmax();
}
-isl::map map::intersect_range_factor_range(isl::map factor) const
+isl::pw_multi_aff point::lexmax_pw_multi_aff() const
{
- if (!ptr || factor.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_intersect_range_factor_range(copy(), factor.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).lexmax_pw_multi_aff();
}
-bool map::is_bijective() const
+isl::set point::lexmin() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_is_bijective(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::basic_set(*this).lexmin();
}
-bool map::is_disjoint(const isl::map &map2) const
+isl::pw_multi_aff point::lexmin_pw_multi_aff() const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_is_disjoint(get(), map2.get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::basic_set(*this).lexmin_pw_multi_aff();
}
-bool map::is_empty() const
+isl::set point::lower_bound(const isl::multi_pw_aff &lower) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_is_empty(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::basic_set(*this).lower_bound(lower);
}
-bool map::is_equal(const isl::map &map2) const
+isl::set point::lower_bound(const isl::multi_val &lower) const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_is_equal(get(), map2.get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::basic_set(*this).lower_bound(lower);
}
-bool map::is_injective() const
+isl::multi_pw_aff point::max_multi_pw_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_is_injective(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::basic_set(*this).max_multi_pw_aff();
}
-bool map::is_single_valued() const
+isl::val point::max_val(const isl::aff &obj) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_is_single_valued(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::basic_set(*this).max_val(obj);
}
-bool map::is_strict_subset(const isl::map &map2) const
+isl::multi_pw_aff point::min_multi_pw_aff() const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_is_strict_subset(get(), map2.get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::basic_set(*this).min_multi_pw_aff();
}
-bool map::is_subset(const isl::map &map2) const
+isl::val point::min_val(const isl::aff &obj) const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_is_subset(get(), map2.get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::basic_set(*this).min_val(obj);
}
-isl::map map::lex_ge_at(isl::multi_pw_aff mpa) const
+isl::multi_val point::multi_val() const
{
- if (!ptr || mpa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_lex_ge_at_multi_pw_aff(copy(), mpa.release());
+ auto res = isl_point_get_multi_val(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::map map::lex_gt_at(isl::multi_pw_aff mpa) const
+isl::multi_val point::get_multi_val() const
{
- if (!ptr || mpa.is_null())
+ return multi_val();
+}
+
+isl::basic_set point::params() const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_lex_gt_at_multi_pw_aff(copy(), mpa.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).params();
}
-isl::map map::lex_le_at(isl::multi_pw_aff mpa) const
+isl::multi_val point::plain_multi_val_if_fixed() const
{
- if (!ptr || mpa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_lex_le_at_multi_pw_aff(copy(), mpa.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).plain_multi_val_if_fixed();
}
-isl::map map::lex_lt_at(isl::multi_pw_aff mpa) const
+isl::basic_set point::polyhedral_hull() const
{
- if (!ptr || mpa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_lex_lt_at_multi_pw_aff(copy(), mpa.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).polyhedral_hull();
}
-isl::map map::lexmax() const
+isl::set point::preimage(const isl::multi_aff &ma) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_lexmax(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).preimage(ma);
}
-isl::pw_multi_aff map::lexmax_pw_multi_aff() const
+isl::set point::preimage(const isl::multi_pw_aff &mpa) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_lexmax_pw_multi_aff(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).preimage(mpa);
}
-isl::map map::lexmin() const
+isl::set point::preimage(const isl::pw_multi_aff &pma) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_lexmin(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).preimage(pma);
}
-isl::pw_multi_aff map::lexmin_pw_multi_aff() const
+isl::union_set point::preimage(const isl::union_pw_multi_aff &upma) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_lexmin_pw_multi_aff(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).preimage(upma);
}
-isl::map map::lower_bound(isl::multi_pw_aff lower) const
+isl::set point::product(const isl::set &set2) const
{
- if (!ptr || lower.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_lower_bound_multi_pw_aff(copy(), lower.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).product(set2);
}
-isl::multi_pw_aff map::max_multi_pw_aff() const
+isl::set point::project_out_all_params() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_max_multi_pw_aff(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).project_out_all_params();
}
-isl::multi_pw_aff map::min_multi_pw_aff() const
+isl::set point::project_out_param(const isl::id &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_min_multi_pw_aff(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).project_out_param(id);
}
-isl::basic_map map::polyhedral_hull() const
+isl::set point::project_out_param(const std::string &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_polyhedral_hull(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->project_out_param(isl::id(ctx(), id));
}
-isl::map map::preimage_domain(isl::multi_aff ma) const
+isl::set point::project_out_param(const isl::id_list &list) const
{
- if (!ptr || ma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).project_out_param(list);
}
-isl::map map::preimage_domain(isl::multi_pw_aff mpa) const
+isl::pw_multi_aff point::pw_multi_aff_on_domain(const isl::multi_val &mv) const
{
- if (!ptr || mpa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).pw_multi_aff_on_domain(mv);
}
-isl::map map::preimage_domain(isl::pw_multi_aff pma) const
+isl::basic_set point::sample() const
{
- if (!ptr || pma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).sample();
}
-isl::map map::preimage_range(isl::multi_aff ma) const
+isl::point point::sample_point() const
{
- if (!ptr || ma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_preimage_range_multi_aff(copy(), ma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).sample_point();
}
-isl::map map::preimage_range(isl::pw_multi_aff pma) const
+isl::fixed_box point::simple_fixed_box_hull() const
{
- if (!ptr || pma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).simple_fixed_box_hull();
}
-isl::map map::product(isl::map map2) const
+isl::space point::space() const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_product(copy(), map2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).space();
}
-isl::map map::project_out_all_params() const
+isl::val point::stride(int pos) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_project_out_all_params(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).stride(pos);
}
-isl::set map::range() const
+isl::set point::subtract(const isl::set &set2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_range(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).subtract(set2);
}
-isl::map map::range_factor_domain() const
+isl::union_set point::subtract(const isl::union_set &uset2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_range_factor_domain(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).subtract(uset2);
}
-isl::map map::range_factor_range() const
+isl::union_set_list point::to_list() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_range_factor_range(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).to_list();
}
-isl::map map::range_product(isl::map map2) const
+isl::set point::to_set() const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_range_product(copy(), map2.release());
+ auto res = isl_point_to_set(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::map map::range_reverse() const
+isl::union_set point::to_union_set() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_range_reverse(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).to_union_set();
}
-isl::map map::reverse() const
+isl::map point::translation() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_reverse(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).translation();
}
-isl::basic_map map::sample() const
+unsigned point::tuple_dim() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_sample(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).tuple_dim();
}
-isl::map map::subtract(isl::map map2) const
+isl::set point::unbind_params(const isl::multi_id &tuple) const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_subtract(copy(), map2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).unbind_params(tuple);
}
-isl::map map::uncurry() const
+isl::map point::unbind_params_insert_domain(const isl::multi_id &domain) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_uncurry(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).unbind_params_insert_domain(domain);
}
-isl::map map::unite(isl::map map2) const
+isl::set point::unite(const isl::basic_set &bset2) const
{
- if (!ptr || map2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_union(copy(), map2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).unite(bset2);
}
-isl::map map::universe(isl::space space)
+isl::set point::unite(const isl::set &set2) const
{
- if (space.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_universe(space.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).unite(set2);
}
-isl::basic_map map::unshifted_simple_hull() const
+isl::union_set point::unite(const isl::union_set &uset2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_unshifted_simple_hull(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).unite(uset2);
}
-isl::map map::upper_bound(isl::multi_pw_aff upper) const
+isl::basic_set point::unshifted_simple_hull() const
{
- if (!ptr || upper.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_upper_bound_multi_pw_aff(copy(), upper.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).unshifted_simple_hull();
+}
+
+isl::map point::unwrap() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::basic_set(*this).unwrap();
}
-isl::set map::wrap() const
+isl::set point::upper_bound(const isl::multi_pw_aff &upper) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_wrap(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).upper_bound(upper);
}
-isl::map map::zip() const
+isl::set point::upper_bound(const isl::multi_val &upper) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_map_zip(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::basic_set(*this).upper_bound(upper);
}
-inline std::ostream &operator<<(std::ostream &os, const map &obj)
+inline std::ostream &operator<<(std::ostream &os, const point &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_map_get_ctx(obj.get());
+ auto saved_ctx = isl_point_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_map_to_str(obj.get());
+ char *str = isl_point_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::multi_aff
-multi_aff manage(__isl_take isl_multi_aff *ptr) {
+// implementations for isl::pw_aff
+pw_aff manage(__isl_take isl_pw_aff *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return multi_aff(ptr);
+ return pw_aff(ptr);
}
-multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) {
+pw_aff manage_copy(__isl_keep isl_pw_aff *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_aff_get_ctx(ptr);
+ auto saved_ctx = isl_pw_aff_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_multi_aff_copy(ptr);
+ ptr = isl_pw_aff_copy(ptr);
if (!ptr)
exception::throw_last_error(saved_ctx);
- return multi_aff(ptr);
+ return pw_aff(ptr);
}
-multi_aff::multi_aff()
+pw_aff::pw_aff()
: ptr(nullptr) {}
-multi_aff::multi_aff(const multi_aff &obj)
+pw_aff::pw_aff(const pw_aff &obj)
: ptr(nullptr)
{
if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_aff_get_ctx(obj.ptr);
+ auto saved_ctx = isl_pw_aff_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
ptr = obj.copy();
if (!ptr)
exception::throw_last_error(saved_ctx);
}
-multi_aff::multi_aff(__isl_take isl_multi_aff *ptr)
+pw_aff::pw_aff(__isl_take isl_pw_aff *ptr)
: ptr(ptr) {}
-multi_aff::multi_aff(isl::aff aff)
+pw_aff::pw_aff(isl::aff aff)
{
if (aff.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = aff.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_from_aff(aff.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-multi_aff::multi_aff(isl::space space, isl::aff_list list)
-{
- if (space.is_null() || list.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_from_aff_list(space.release(), list.release());
+ auto res = isl_pw_aff_from_aff(aff.release());
if (!res)
exception::throw_last_error(saved_ctx);
ptr = res;
}
-multi_aff::multi_aff(isl::ctx ctx, const std::string &str)
+pw_aff::pw_aff(isl::ctx ctx, const std::string &str)
{
auto saved_ctx = ctx;
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str());
+ auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str());
if (!res)
exception::throw_last_error(saved_ctx);
ptr = res;
}
-multi_aff &multi_aff::operator=(multi_aff obj) {
+pw_aff &pw_aff::operator=(pw_aff obj) {
std::swap(this->ptr, obj.ptr);
return *this;
}
-multi_aff::~multi_aff() {
+pw_aff::~pw_aff() {
if (ptr)
- isl_multi_aff_free(ptr);
+ isl_pw_aff_free(ptr);
}
-__isl_give isl_multi_aff *multi_aff::copy() const & {
- return isl_multi_aff_copy(ptr);
+__isl_give isl_pw_aff *pw_aff::copy() const & {
+ return isl_pw_aff_copy(ptr);
}
-__isl_keep isl_multi_aff *multi_aff::get() const {
+__isl_keep isl_pw_aff *pw_aff::get() const {
return ptr;
}
-__isl_give isl_multi_aff *multi_aff::release() {
- isl_multi_aff *tmp = ptr;
+__isl_give isl_pw_aff *pw_aff::release() {
+ isl_pw_aff *tmp = ptr;
ptr = nullptr;
return tmp;
}
-bool multi_aff::is_null() const {
+bool pw_aff::is_null() const {
return ptr == nullptr;
}
-isl::ctx multi_aff::ctx() const {
- return isl::ctx(isl_multi_aff_get_ctx(ptr));
+isl::ctx pw_aff::ctx() const {
+ return isl::ctx(isl_pw_aff_get_ctx(ptr));
}
-isl::multi_aff multi_aff::add(isl::multi_aff multi2) const
+isl::multi_pw_aff pw_aff::add(const isl::multi_pw_aff &multi2) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_add(copy(), multi2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).add(multi2);
}
-isl::multi_aff multi_aff::add_constant(isl::multi_val mv) const
+isl::multi_union_pw_aff pw_aff::add(const isl::multi_union_pw_aff &multi2) const
{
- if (!ptr || mv.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).add(multi2);
}
-isl::multi_aff multi_aff::add_constant(isl::val v) const
+isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const
{
- if (!ptr || v.is_null())
+ if (!ptr || pwaff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_add_constant_val(copy(), v.release());
+ auto res = isl_pw_aff_add(copy(), pwaff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_aff multi_aff::add_constant(long v) const
+isl::pw_multi_aff pw_aff::add(const isl::pw_multi_aff &pma2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->add_constant(isl::val(ctx(), v));
+ return isl::pw_multi_aff(*this).add(pma2);
}
-isl::basic_set multi_aff::bind(isl::multi_id tuple) const
+isl::union_pw_aff pw_aff::add(const isl::union_pw_aff &upa2) const
{
- if (!ptr || tuple.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_bind(copy(), tuple.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).add(upa2);
}
-isl::multi_aff multi_aff::bind_domain(isl::multi_id tuple) const
+isl::union_pw_multi_aff pw_aff::add(const isl::union_pw_multi_aff &upma2) const
{
- if (!ptr || tuple.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_bind_domain(copy(), tuple.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).add(upma2);
}
-isl::multi_aff multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
+isl::pw_aff pw_aff::add(const isl::aff &pwaff2) const
{
- if (!ptr || tuple.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add(isl::pw_aff(pwaff2));
+}
+
+isl::pw_aff pw_aff::add_constant(isl::val v) const
+{
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
+ auto res = isl_pw_aff_add_constant_val(copy(), v.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_aff multi_aff::domain_map(isl::space space)
+isl::pw_aff pw_aff::add_constant(long v) const
{
- if (space.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_domain_map(space.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->add_constant(isl::val(ctx(), v));
}
-isl::multi_aff multi_aff::flat_range_product(isl::multi_aff multi2) const
+isl::pw_multi_aff pw_aff::add_constant(const isl::multi_val &mv) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_flat_range_product(copy(), multi2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).add_constant(mv);
}
-isl::multi_aff multi_aff::floor() const
+isl::union_pw_multi_aff pw_aff::apply(const isl::union_pw_multi_aff &upma2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_floor(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).apply(upma2);
}
-isl::aff multi_aff::at(int pos) const
+isl::aff pw_aff::as_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_get_at(get(), pos);
+ auto res = isl_pw_aff_as_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::aff multi_aff::get_at(int pos) const
-{
- return at(pos);
-}
-
-isl::multi_val multi_aff::constant_multi_val() const
+isl::map pw_aff::as_map() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_get_constant_multi_val(get());
+ auto res = isl_pw_aff_as_map(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_val multi_aff::get_constant_multi_val() const
-{
- return constant_multi_val();
-}
-
-isl::aff_list multi_aff::list() const
+isl::multi_aff pw_aff::as_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_get_list(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).as_multi_aff();
}
-isl::aff_list multi_aff::get_list() const
+isl::multi_union_pw_aff pw_aff::as_multi_union_pw_aff() const
{
- return list();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_aff(*this).as_multi_union_pw_aff();
}
-isl::space multi_aff::space() const
+isl::pw_multi_aff pw_aff::as_pw_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_get_space(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).as_pw_multi_aff();
}
-isl::space multi_aff::get_space() const
+isl::set pw_aff::as_set() const
{
- return space();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).as_set();
}
-isl::multi_aff multi_aff::gist(isl::set context) const
+isl::union_map pw_aff::as_union_map() const
{
- if (!ptr || context.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_gist(copy(), context.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).as_union_map();
}
-isl::multi_aff multi_aff::identity() const
+isl::pw_aff pw_aff::at(int pos) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_identity_multi_aff(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).at(pos);
}
-isl::multi_aff multi_aff::identity_on_domain(isl::space space)
+isl::set pw_aff::bind(const isl::multi_id &tuple) const
{
- if (space.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_identity_on_domain_space(space.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).bind(tuple);
}
-isl::multi_aff multi_aff::insert_domain(isl::space domain) const
+isl::set pw_aff::bind(isl::id id) const
{
- if (!ptr || domain.is_null())
+ if (!ptr || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_insert_domain(copy(), domain.release());
+ auto res = isl_pw_aff_bind_id(copy(), id.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool multi_aff::involves_locals() const
+isl::set pw_aff::bind(const std::string &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_involves_locals(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return this->bind(isl::id(ctx(), id));
}
-bool multi_aff::involves_nan() const
+isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const
{
- if (!ptr)
+ if (!ptr || tuple.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_involves_nan(get());
- if (res < 0)
+ auto res = isl_pw_aff_bind_domain(copy(), tuple.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-isl::multi_aff multi_aff::neg() const
+isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
{
- if (!ptr)
+ if (!ptr || tuple.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_neg(copy());
+ auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool multi_aff::plain_is_equal(const isl::multi_aff &multi2) const
+isl::pw_aff pw_aff::ceil() const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_plain_is_equal(get(), multi2.get());
- if (res < 0)
+ auto res = isl_pw_aff_ceil(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-isl::multi_aff multi_aff::product(isl::multi_aff multi2) const
+isl::pw_aff pw_aff::coalesce() const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_product(copy(), multi2.release());
+ auto res = isl_pw_aff_coalesce(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_aff multi_aff::pullback(isl::multi_aff ma2) const
+isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const
{
- if (!ptr || ma2.is_null())
+ if (!ptr || pwaff_true.is_null() || pwaff_false.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_pullback_multi_aff(copy(), ma2.release());
+ auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_aff multi_aff::range_map(isl::space space)
+isl::pw_aff pw_aff::div(isl::pw_aff pa2) const
{
- if (space.is_null())
+ if (!ptr || pa2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_range_map(space.release());
+ auto res = isl_pw_aff_div(copy(), pa2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_aff multi_aff::range_product(isl::multi_aff multi2) const
+isl::set pw_aff::domain() const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_range_product(copy(), multi2.release());
+ auto res = isl_pw_aff_domain(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_aff multi_aff::scale(isl::multi_val mv) const
+isl::set pw_aff::eq_set(isl::pw_aff pwaff2) const
{
- if (!ptr || mv.is_null())
+ if (!ptr || pwaff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_scale_multi_val(copy(), mv.release());
+ auto res = isl_pw_aff_eq_set(copy(), pwaff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_aff multi_aff::scale(isl::val v) const
+isl::val pw_aff::eval(isl::point pnt) const
{
- if (!ptr || v.is_null())
+ if (!ptr || pnt.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_scale_val(copy(), v.release());
+ auto res = isl_pw_aff_eval(copy(), pnt.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_aff multi_aff::scale(long v) const
+isl::pw_multi_aff pw_aff::extract_pw_multi_aff(const isl::space &space) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale(isl::val(ctx(), v));
+ return isl::union_pw_aff(*this).extract_pw_multi_aff(space);
}
-isl::multi_aff multi_aff::scale_down(isl::multi_val mv) const
+isl::multi_pw_aff pw_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
{
- if (!ptr || mv.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).flat_range_product(multi2);
}
-isl::multi_aff multi_aff::scale_down(isl::val v) const
+isl::multi_union_pw_aff pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_scale_down_val(copy(), v.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).flat_range_product(multi2);
}
-isl::multi_aff multi_aff::scale_down(long v) const
+isl::pw_multi_aff pw_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale_down(isl::val(ctx(), v));
+ return isl::pw_multi_aff(*this).flat_range_product(pma2);
}
-isl::multi_aff multi_aff::set_at(int pos, isl::aff el) const
+isl::union_pw_multi_aff pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
{
- if (!ptr || el.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_set_at(copy(), pos, el.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).flat_range_product(upma2);
}
-unsigned multi_aff::size() const
+isl::pw_aff pw_aff::floor() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_size(get());
- if (res < 0)
+ auto res = isl_pw_aff_floor(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-isl::multi_aff multi_aff::sub(isl::multi_aff multi2) const
+void pw_aff::foreach_piece(const std::function<void(isl::set, isl::multi_aff)> &fn) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_sub(copy(), multi2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).foreach_piece(fn);
}
-isl::multi_aff multi_aff::unbind_params_insert_domain(isl::multi_id domain) const
+isl::set pw_aff::ge_set(isl::pw_aff pwaff2) const
{
- if (!ptr || domain.is_null())
+ if (!ptr || pwaff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release());
+ auto res = isl_pw_aff_ge_set(copy(), pwaff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_aff multi_aff::zero(isl::space space)
+isl::pw_aff pw_aff::gist(isl::set context) const
{
- if (space.is_null())
+ if (!ptr || context.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_aff_zero(space.release());
+ auto res = isl_pw_aff_gist(copy(), context.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj)
+isl::union_pw_aff pw_aff::gist(const isl::union_set &context) const
{
- if (!obj.get())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_aff_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_multi_aff_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
-}
-
-// implementations for isl::multi_id
-multi_id manage(__isl_take isl_multi_id *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return multi_id(ptr);
+ return isl::union_pw_aff(*this).gist(context);
}
-multi_id manage_copy(__isl_keep isl_multi_id *ptr) {
+
+isl::pw_aff pw_aff::gist(const isl::basic_set &context) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_id_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_multi_id_copy(ptr);
- if (!ptr)
- exception::throw_last_error(saved_ctx);
- return multi_id(ptr);
+ return this->gist(isl::set(context));
}
-multi_id::multi_id()
- : ptr(nullptr) {}
-
-multi_id::multi_id(const multi_id &obj)
- : ptr(nullptr)
+isl::pw_aff pw_aff::gist(const isl::point &context) const
{
- if (!obj.ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_id_get_ctx(obj.ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
if (!ptr)
- exception::throw_last_error(saved_ctx);
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist(isl::set(context));
}
-multi_id::multi_id(__isl_take isl_multi_id *ptr)
- : ptr(ptr) {}
-
-multi_id::multi_id(isl::space space, isl::id_list list)
+isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const
{
- if (space.is_null() || list.is_null())
+ if (!ptr || pwaff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_id_from_id_list(space.release(), list.release());
+ auto res = isl_pw_aff_gt_set(copy(), pwaff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-multi_id::multi_id(isl::ctx ctx, const std::string &str)
+bool pw_aff::has_range_tuple_id() const
{
- auto saved_ctx = ctx;
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_id_read_from_str(ctx.release(), str.c_str());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-multi_id &multi_id::operator=(multi_id obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-multi_id::~multi_id() {
- if (ptr)
- isl_multi_id_free(ptr);
-}
-
-__isl_give isl_multi_id *multi_id::copy() const & {
- return isl_multi_id_copy(ptr);
-}
-
-__isl_keep isl_multi_id *multi_id::get() const {
- return ptr;
-}
-
-__isl_give isl_multi_id *multi_id::release() {
- isl_multi_id *tmp = ptr;
- ptr = nullptr;
- return tmp;
-}
-
-bool multi_id::is_null() const {
- return ptr == nullptr;
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).has_range_tuple_id();
}
-isl::ctx multi_id::ctx() const {
- return isl::ctx(isl_multi_id_get_ctx(ptr));
+isl::multi_pw_aff pw_aff::identity() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).identity();
}
-isl::multi_id multi_id::flat_range_product(isl::multi_id multi2) const
+isl::pw_aff pw_aff::insert_domain(isl::space domain) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr || domain.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_id_flat_range_product(copy(), multi2.release());
+ auto res = isl_pw_aff_insert_domain(copy(), domain.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::id multi_id::at(int pos) const
+isl::pw_aff pw_aff::intersect_domain(isl::set set) const
{
- if (!ptr)
+ if (!ptr || set.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_id_get_at(get(), pos);
+ auto res = isl_pw_aff_intersect_domain(copy(), set.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::id multi_id::get_at(int pos) const
-{
- return at(pos);
-}
-
-isl::id_list multi_id::list() const
+isl::union_pw_aff pw_aff::intersect_domain(const isl::space &space) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_id_get_list(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).intersect_domain(space);
}
-isl::id_list multi_id::get_list() const
+isl::union_pw_aff pw_aff::intersect_domain(const isl::union_set &uset) const
{
- return list();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_aff(*this).intersect_domain(uset);
}
-isl::space multi_id::space() const
+isl::pw_aff pw_aff::intersect_domain(const isl::basic_set &set) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_id_get_space(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->intersect_domain(isl::set(set));
}
-isl::space multi_id::get_space() const
+isl::pw_aff pw_aff::intersect_domain(const isl::point &set) const
{
- return space();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_domain(isl::set(set));
}
-bool multi_id::plain_is_equal(const isl::multi_id &multi2) const
+isl::union_pw_aff pw_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_id_plain_is_equal(get(), multi2.get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::union_pw_aff(*this).intersect_domain_wrapped_domain(uset);
}
-isl::multi_id multi_id::range_product(isl::multi_id multi2) const
+isl::union_pw_aff pw_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_id_range_product(copy(), multi2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).intersect_domain_wrapped_range(uset);
}
-isl::multi_id multi_id::set_at(int pos, isl::id el) const
+isl::pw_aff pw_aff::intersect_params(isl::set set) const
{
- if (!ptr || el.is_null())
+ if (!ptr || set.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_id_set_at(copy(), pos, el.release());
+ auto res = isl_pw_aff_intersect_params(copy(), set.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_id multi_id::set_at(int pos, const std::string &el) const
+bool pw_aff::involves_locals() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->set_at(pos, isl::id(ctx(), el));
+ return isl::pw_multi_aff(*this).involves_locals();
}
-unsigned multi_id::size() const
+bool pw_aff::involves_nan() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_id_size(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::multi_pw_aff(*this).involves_nan();
}
-inline std::ostream &operator<<(std::ostream &os, const multi_id &obj)
+bool pw_aff::involves_param(const isl::id &id) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_id_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_multi_id_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return isl::pw_multi_aff(*this).involves_param(id);
}
-// implementations for isl::multi_pw_aff
-multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr) {
+bool pw_aff::involves_param(const std::string &id) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return multi_pw_aff(ptr);
+ return this->involves_param(isl::id(ctx(), id));
}
-multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr) {
+
+bool pw_aff::involves_param(const isl::id_list &list) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_pw_aff_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_multi_pw_aff_copy(ptr);
- if (!ptr)
- exception::throw_last_error(saved_ctx);
- return multi_pw_aff(ptr);
+ return isl::pw_multi_aff(*this).involves_param(list);
}
-multi_pw_aff::multi_pw_aff()
- : ptr(nullptr) {}
-
-multi_pw_aff::multi_pw_aff(const multi_pw_aff &obj)
- : ptr(nullptr)
+bool pw_aff::isa_aff() const
{
- if (!obj.ptr)
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_pw_aff_get_ctx(obj.ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
+ auto res = isl_pw_aff_isa_aff(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
+ return res;
}
-multi_pw_aff::multi_pw_aff(__isl_take isl_multi_pw_aff *ptr)
- : ptr(ptr) {}
+bool pw_aff::isa_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).isa_multi_aff();
+}
-multi_pw_aff::multi_pw_aff(isl::aff aff)
+bool pw_aff::isa_pw_multi_aff() const
{
- if (aff.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = aff.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_from_aff(aff.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
+ return isl::union_pw_aff(*this).isa_pw_multi_aff();
}
-multi_pw_aff::multi_pw_aff(isl::multi_aff ma)
+isl::set pw_aff::le_set(isl::pw_aff pwaff2) const
{
- if (ma.is_null())
+ if (!ptr || pwaff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ma.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_from_multi_aff(ma.release());
+ auto res = isl_pw_aff_le_set(copy(), pwaff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-multi_pw_aff::multi_pw_aff(isl::pw_aff pa)
+isl::pw_aff_list pw_aff::list() const
{
- if (pa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = pa.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_from_pw_aff(pa.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
+ return isl::multi_pw_aff(*this).list();
}
-multi_pw_aff::multi_pw_aff(isl::space space, isl::pw_aff_list list)
+isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const
{
- if (space.is_null() || list.is_null())
+ if (!ptr || pwaff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_from_pw_aff_list(space.release(), list.release());
+ auto res = isl_pw_aff_lt_set(copy(), pwaff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-multi_pw_aff::multi_pw_aff(isl::pw_multi_aff pma)
+isl::multi_pw_aff pw_aff::max(const isl::multi_pw_aff &multi2) const
{
- if (pma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = pma.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_from_pw_multi_aff(pma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
+ return isl::pw_multi_aff(*this).max(multi2);
}
-multi_pw_aff::multi_pw_aff(isl::ctx ctx, const std::string &str)
+isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const
{
- auto saved_ctx = ctx;
+ if (!ptr || pwaff2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_read_from_str(ctx.release(), str.c_str());
+ auto res = isl_pw_aff_max(copy(), pwaff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-multi_pw_aff &multi_pw_aff::operator=(multi_pw_aff obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+ return manage(res);
}
-multi_pw_aff::~multi_pw_aff() {
- if (ptr)
- isl_multi_pw_aff_free(ptr);
+isl::pw_aff pw_aff::max(const isl::aff &pwaff2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->max(isl::pw_aff(pwaff2));
}
-__isl_give isl_multi_pw_aff *multi_pw_aff::copy() const & {
- return isl_multi_pw_aff_copy(ptr);
+isl::multi_val pw_aff::max_multi_val() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).max_multi_val();
}
-__isl_keep isl_multi_pw_aff *multi_pw_aff::get() const {
- return ptr;
+isl::multi_pw_aff pw_aff::min(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).min(multi2);
}
-__isl_give isl_multi_pw_aff *multi_pw_aff::release() {
- isl_multi_pw_aff *tmp = ptr;
- ptr = nullptr;
- return tmp;
+isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const
+{
+ if (!ptr || pwaff2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_pw_aff_min(copy(), pwaff2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-bool multi_pw_aff::is_null() const {
- return ptr == nullptr;
+isl::pw_aff pw_aff::min(const isl::aff &pwaff2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->min(isl::pw_aff(pwaff2));
}
-isl::ctx multi_pw_aff::ctx() const {
- return isl::ctx(isl_multi_pw_aff_get_ctx(ptr));
+isl::multi_val pw_aff::min_multi_val() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).min_multi_val();
}
-isl::multi_pw_aff multi_pw_aff::add(isl::multi_pw_aff multi2) const
+isl::pw_aff pw_aff::mod(isl::val mod) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr || mod.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_add(copy(), multi2.release());
+ auto res = isl_pw_aff_mod_val(copy(), mod.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::add_constant(isl::multi_val mv) const
+isl::pw_aff pw_aff::mod(long mod) const
{
- if (!ptr || mv.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->mod(isl::val(ctx(), mod));
}
-isl::multi_pw_aff multi_pw_aff::add_constant(isl::val v) const
+isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const
{
- if (!ptr || v.is_null())
+ if (!ptr || pwaff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release());
+ auto res = isl_pw_aff_mul(copy(), pwaff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::add_constant(long v) const
+unsigned pw_aff::n_piece() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->add_constant(isl::val(ctx(), v));
+ return isl::pw_multi_aff(*this).n_piece();
}
-isl::set multi_pw_aff::bind(isl::multi_id tuple) const
+isl::set pw_aff::ne_set(isl::pw_aff pwaff2) const
{
- if (!ptr || tuple.is_null())
+ if (!ptr || pwaff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_bind(copy(), tuple.release());
+ auto res = isl_pw_aff_ne_set(copy(), pwaff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::bind_domain(isl::multi_id tuple) const
+isl::pw_aff pw_aff::neg() const
{
- if (!ptr || tuple.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release());
+ auto res = isl_pw_aff_neg(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
+isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id)
{
- if (!ptr || tuple.is_null())
+ if (domain.is_null() || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = domain.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
+ auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::coalesce() const
+bool pw_aff::plain_is_empty() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_aff(*this).plain_is_empty();
+}
+
+bool pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).plain_is_equal(multi2);
+}
+
+bool pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_aff(*this).plain_is_equal(multi2);
+}
+
+isl::pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
+}
+
+isl::union_pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_aff(*this).preimage_domain_wrapped_domain(upma2);
+}
+
+isl::multi_pw_aff pw_aff::product(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).product(multi2);
+}
+
+isl::pw_multi_aff pw_aff::product(const isl::pw_multi_aff &pma2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).product(pma2);
+}
+
+isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const
+{
+ if (!ptr || ma.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_coalesce(copy());
+ auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set multi_pw_aff::domain() const
+isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const
{
- if (!ptr)
+ if (!ptr || mpa.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_domain(copy());
+ auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::flat_range_product(isl::multi_pw_aff multi2) const
+isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr || pma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release());
+ auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff multi_pw_aff::at(int pos) const
+isl::union_pw_aff pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_get_at(get(), pos);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).pullback(upma);
}
-isl::pw_aff multi_pw_aff::get_at(int pos) const
+isl::pw_multi_aff_list pw_aff::pw_multi_aff_list() const
{
- return at(pos);
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_aff(*this).pw_multi_aff_list();
}
-isl::pw_aff_list multi_pw_aff::list() const
+isl::pw_multi_aff pw_aff::range_factor_domain() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_get_list(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).range_factor_domain();
}
-isl::pw_aff_list multi_pw_aff::get_list() const
+isl::pw_multi_aff pw_aff::range_factor_range() const
{
- return list();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::pw_multi_aff(*this).range_factor_range();
}
-isl::space multi_pw_aff::space() const
+isl::multi_pw_aff pw_aff::range_product(const isl::multi_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_get_space(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).range_product(multi2);
}
-isl::space multi_pw_aff::get_space() const
+isl::multi_union_pw_aff pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
{
- return space();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_aff(*this).range_product(multi2);
}
-isl::multi_pw_aff multi_pw_aff::gist(isl::set set) const
+isl::pw_multi_aff pw_aff::range_product(const isl::pw_multi_aff &pma2) const
{
- if (!ptr || set.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_gist(copy(), set.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).range_product(pma2);
}
-isl::multi_pw_aff multi_pw_aff::identity() const
+isl::union_pw_multi_aff pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_identity_multi_pw_aff(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).range_product(upma2);
}
-isl::multi_pw_aff multi_pw_aff::identity_on_domain(isl::space space)
+isl::id pw_aff::range_tuple_id() const
{
- if (space.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_identity_on_domain_space(space.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).range_tuple_id();
}
-isl::multi_pw_aff multi_pw_aff::insert_domain(isl::space domain) const
+isl::multi_pw_aff pw_aff::reset_range_tuple_id() const
{
- if (!ptr || domain.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_insert_domain(copy(), domain.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).reset_range_tuple_id();
}
-isl::multi_pw_aff multi_pw_aff::intersect_domain(isl::set domain) const
+isl::multi_pw_aff pw_aff::scale(const isl::multi_val &mv) const
{
- if (!ptr || domain.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).scale(mv);
+}
+
+isl::pw_aff pw_aff::scale(isl::val v) const
+{
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_intersect_domain(copy(), domain.release());
+ auto res = isl_pw_aff_scale_val(copy(), v.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::intersect_params(isl::set set) const
+isl::pw_aff pw_aff::scale(long v) const
{
- if (!ptr || set.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->scale(isl::val(ctx(), v));
+}
+
+isl::multi_pw_aff pw_aff::scale_down(const isl::multi_val &mv) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).scale_down(mv);
+}
+
+isl::pw_aff pw_aff::scale_down(isl::val f) const
+{
+ if (!ptr || f.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_intersect_params(copy(), set.release());
+ auto res = isl_pw_aff_scale_down_val(copy(), f.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool multi_pw_aff::involves_nan() const
+isl::pw_aff pw_aff::scale_down(long f) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_involves_nan(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return this->scale_down(isl::val(ctx(), f));
}
-bool multi_pw_aff::involves_param(const isl::id &id) const
+isl::multi_pw_aff pw_aff::set_at(int pos, const isl::pw_aff &el) const
{
- if (!ptr || id.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_involves_param_id(get(), id.get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::pw_multi_aff(*this).set_at(pos, el);
}
-bool multi_pw_aff::involves_param(const std::string &id) const
+isl::multi_union_pw_aff pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->involves_param(isl::id(ctx(), id));
+ return isl::union_pw_aff(*this).set_at(pos, el);
}
-bool multi_pw_aff::involves_param(const isl::id_list &list) const
+isl::pw_multi_aff pw_aff::set_range_tuple(const isl::id &id) const
{
- if (!ptr || list.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::pw_multi_aff(*this).set_range_tuple(id);
}
-isl::multi_pw_aff multi_pw_aff::max(isl::multi_pw_aff multi2) const
+isl::pw_multi_aff pw_aff::set_range_tuple(const std::string &id) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_max(copy(), multi2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->set_range_tuple(isl::id(ctx(), id));
}
-isl::multi_val multi_pw_aff::max_multi_val() const
+unsigned pw_aff::size() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_max_multi_val(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).size();
}
-isl::multi_pw_aff multi_pw_aff::min(isl::multi_pw_aff multi2) const
+isl::space pw_aff::space() const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_min(copy(), multi2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).space();
}
-isl::multi_val multi_pw_aff::min_multi_val() const
+isl::multi_pw_aff pw_aff::sub(const isl::multi_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_min_multi_val(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).sub(multi2);
}
-isl::multi_pw_aff multi_pw_aff::neg() const
+isl::multi_union_pw_aff pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_aff(*this).sub(multi2);
+}
+
+isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const
+{
+ if (!ptr || pwaff2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_neg(copy());
+ auto res = isl_pw_aff_sub(copy(), pwaff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool multi_pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
+isl::pw_multi_aff pw_aff::sub(const isl::pw_multi_aff &pma2) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::pw_multi_aff(*this).sub(pma2);
}
-isl::multi_pw_aff multi_pw_aff::product(isl::multi_pw_aff multi2) const
+isl::union_pw_aff pw_aff::sub(const isl::union_pw_aff &upa2) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_product(copy(), multi2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).sub(upa2);
}
-isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_aff ma) const
+isl::union_pw_multi_aff pw_aff::sub(const isl::union_pw_multi_aff &upma2) const
{
- if (!ptr || ma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_pullback_multi_aff(copy(), ma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).sub(upma2);
}
-isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_pw_aff mpa2) const
+isl::pw_aff pw_aff::sub(const isl::aff &pwaff2) const
{
- if (!ptr || mpa2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_pullback_multi_pw_aff(copy(), mpa2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->sub(isl::pw_aff(pwaff2));
}
-isl::multi_pw_aff multi_pw_aff::pullback(isl::pw_multi_aff pma) const
+isl::pw_aff pw_aff::subtract_domain(isl::set set) const
{
- if (!ptr || pma.is_null())
+ if (!ptr || set.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
+ auto res = isl_pw_aff_subtract_domain(copy(), set.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::range_product(isl::multi_pw_aff multi2) const
+isl::union_pw_aff pw_aff::subtract_domain(const isl::space &space) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_aff(*this).subtract_domain(space);
+}
+
+isl::union_pw_aff pw_aff::subtract_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_aff(*this).subtract_domain(uset);
+}
+
+isl::pw_aff pw_aff::subtract_domain(const isl::basic_set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->subtract_domain(isl::set(set));
+}
+
+isl::pw_aff pw_aff::subtract_domain(const isl::point &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->subtract_domain(isl::set(set));
+}
+
+isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const
+{
+ if (!ptr || pa2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_range_product(copy(), multi2.release());
+ auto res = isl_pw_aff_tdiv_q(copy(), pa2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::scale(isl::multi_val mv) const
+isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const
{
- if (!ptr || mv.is_null())
+ if (!ptr || pa2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_scale_multi_val(copy(), mv.release());
+ auto res = isl_pw_aff_tdiv_r(copy(), pa2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::scale(isl::val v) const
+isl::pw_aff_list pw_aff::to_list() const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_scale_val(copy(), v.release());
+ auto res = isl_pw_aff_to_list(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::scale(long v) const
+isl::multi_pw_aff pw_aff::to_multi_pw_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale(isl::val(ctx(), v));
+ return isl::pw_multi_aff(*this).to_multi_pw_aff();
}
-isl::multi_pw_aff multi_pw_aff::scale_down(isl::multi_val mv) const
+isl::union_pw_aff pw_aff::to_union_pw_aff() const
{
- if (!ptr || mv.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_scale_down_multi_val(copy(), mv.release());
+ auto res = isl_pw_aff_to_union_pw_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::scale_down(isl::val v) const
+isl::union_pw_multi_aff pw_aff::to_union_pw_multi_aff() const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_scale_down_val(copy(), v.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
}
-isl::multi_pw_aff multi_pw_aff::scale_down(long v) const
+isl::multi_pw_aff pw_aff::unbind_params_insert_domain(const isl::multi_id &domain) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale_down(isl::val(ctx(), v));
+ return isl::pw_multi_aff(*this).unbind_params_insert_domain(domain);
}
-isl::multi_pw_aff multi_pw_aff::set_at(int pos, isl::pw_aff el) const
+isl::multi_pw_aff pw_aff::union_add(const isl::multi_pw_aff &mpa2) const
{
- if (!ptr || el.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_set_at(copy(), pos, el.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).union_add(mpa2);
}
-unsigned multi_pw_aff::size() const
+isl::multi_union_pw_aff pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_size(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::union_pw_aff(*this).union_add(mupa2);
}
-isl::multi_pw_aff multi_pw_aff::sub(isl::multi_pw_aff multi2) const
+isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr || pwaff2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_sub(copy(), multi2.release());
+ auto res = isl_pw_aff_union_add(copy(), pwaff2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::multi_id domain) const
+isl::pw_multi_aff pw_aff::union_add(const isl::pw_multi_aff &pma2) const
{
- if (!ptr || domain.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::pw_multi_aff(*this).union_add(pma2);
}
-isl::multi_pw_aff multi_pw_aff::union_add(isl::multi_pw_aff mpa2) const
+isl::union_pw_aff pw_aff::union_add(const isl::union_pw_aff &upa2) const
{
- if (!ptr || mpa2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).union_add(upa2);
}
-isl::multi_pw_aff multi_pw_aff::zero(isl::space space)
+isl::union_pw_multi_aff pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const
{
- if (space.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_pw_aff_zero(space.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_aff(*this).union_add(upma2);
}
-inline std::ostream &operator<<(std::ostream &os, const multi_pw_aff &obj)
+isl::pw_aff pw_aff::union_add(const isl::aff &pwaff2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->union_add(isl::pw_aff(pwaff2));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_pw_aff_get_ctx(obj.get());
+ auto saved_ctx = isl_pw_aff_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_multi_pw_aff_to_str(obj.get());
+ char *str = isl_pw_aff_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::multi_union_pw_aff
-multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr) {
+// implementations for isl::pw_aff_list
+pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return multi_union_pw_aff(ptr);
+ return pw_aff_list(ptr);
}
-multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr) {
+pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_union_pw_aff_get_ctx(ptr);
+ auto saved_ctx = isl_pw_aff_list_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_multi_union_pw_aff_copy(ptr);
+ ptr = isl_pw_aff_list_copy(ptr);
if (!ptr)
exception::throw_last_error(saved_ctx);
- return multi_union_pw_aff(ptr);
+ return pw_aff_list(ptr);
}
-multi_union_pw_aff::multi_union_pw_aff()
+pw_aff_list::pw_aff_list()
: ptr(nullptr) {}
-multi_union_pw_aff::multi_union_pw_aff(const multi_union_pw_aff &obj)
+pw_aff_list::pw_aff_list(const pw_aff_list &obj)
: ptr(nullptr)
{
if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_union_pw_aff_get_ctx(obj.ptr);
+ auto saved_ctx = isl_pw_aff_list_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
ptr = obj.copy();
if (!ptr)
exception::throw_last_error(saved_ctx);
}
-multi_union_pw_aff::multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr)
+pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr)
: ptr(ptr) {}
-multi_union_pw_aff::multi_union_pw_aff(isl::multi_pw_aff mpa)
-{
- if (mpa.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = mpa.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_from_multi_pw_aff(mpa.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_aff upa)
+pw_aff_list::pw_aff_list(isl::ctx ctx, int n)
{
- if (upa.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = upa.ctx();
+ auto saved_ctx = ctx;
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_from_union_pw_aff(upa.release());
+ auto res = isl_pw_aff_list_alloc(ctx.release(), n);
if (!res)
exception::throw_last_error(saved_ctx);
ptr = res;
}
-multi_union_pw_aff::multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list)
+pw_aff_list::pw_aff_list(isl::pw_aff el)
{
- if (space.is_null() || list.is_null())
+ if (el.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = el.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_from_union_pw_aff_list(space.release(), list.release());
+ auto res = isl_pw_aff_list_from_pw_aff(el.release());
if (!res)
exception::throw_last_error(saved_ctx);
ptr = res;
}
-multi_union_pw_aff::multi_union_pw_aff(isl::ctx ctx, const std::string &str)
+pw_aff_list::pw_aff_list(isl::ctx ctx, const std::string &str)
{
auto saved_ctx = ctx;
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_read_from_str(ctx.release(), str.c_str());
+ auto res = isl_pw_aff_list_read_from_str(ctx.release(), str.c_str());
if (!res)
exception::throw_last_error(saved_ctx);
ptr = res;
}
-multi_union_pw_aff &multi_union_pw_aff::operator=(multi_union_pw_aff obj) {
+pw_aff_list &pw_aff_list::operator=(pw_aff_list obj) {
std::swap(this->ptr, obj.ptr);
return *this;
}
-multi_union_pw_aff::~multi_union_pw_aff() {
+pw_aff_list::~pw_aff_list() {
if (ptr)
- isl_multi_union_pw_aff_free(ptr);
+ isl_pw_aff_list_free(ptr);
}
-__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::copy() const & {
- return isl_multi_union_pw_aff_copy(ptr);
+__isl_give isl_pw_aff_list *pw_aff_list::copy() const & {
+ return isl_pw_aff_list_copy(ptr);
}
-__isl_keep isl_multi_union_pw_aff *multi_union_pw_aff::get() const {
+__isl_keep isl_pw_aff_list *pw_aff_list::get() const {
return ptr;
}
-__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::release() {
- isl_multi_union_pw_aff *tmp = ptr;
+__isl_give isl_pw_aff_list *pw_aff_list::release() {
+ isl_pw_aff_list *tmp = ptr;
ptr = nullptr;
return tmp;
}
-bool multi_union_pw_aff::is_null() const {
+bool pw_aff_list::is_null() const {
return ptr == nullptr;
}
-isl::ctx multi_union_pw_aff::ctx() const {
- return isl::ctx(isl_multi_union_pw_aff_get_ctx(ptr));
-}
-
-isl::multi_union_pw_aff multi_union_pw_aff::add(isl::multi_union_pw_aff multi2) const
-{
- if (!ptr || multi2.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_add(copy(), multi2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::union_set multi_union_pw_aff::bind(isl::multi_id tuple) const
-{
- if (!ptr || tuple.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::multi_union_pw_aff multi_union_pw_aff::coalesce() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_coalesce(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::union_set multi_union_pw_aff::domain() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_domain(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::multi_union_pw_aff multi_union_pw_aff::flat_range_product(isl::multi_union_pw_aff multi2) const
-{
- if (!ptr || multi2.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+isl::ctx pw_aff_list::ctx() const {
+ return isl::ctx(isl_pw_aff_list_get_ctx(ptr));
}
-isl::union_pw_aff multi_union_pw_aff::at(int pos) const
+isl::pw_aff_list pw_aff_list::add(isl::pw_aff el) const
{
- if (!ptr)
+ if (!ptr || el.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_get_at(get(), pos);
+ auto res = isl_pw_aff_list_add(copy(), el.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const
-{
- return at(pos);
-}
-
-isl::union_pw_aff_list multi_union_pw_aff::list() const
+isl::pw_aff pw_aff_list::at(int index) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_get_list(get());
+ auto res = isl_pw_aff_list_get_at(get(), index);
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_pw_aff_list multi_union_pw_aff::get_list() const
+isl::pw_aff pw_aff_list::get_at(int index) const
{
- return list();
+ return at(index);
}
-isl::space multi_union_pw_aff::space() const
+isl::pw_aff_list pw_aff_list::clear() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_get_space(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::space multi_union_pw_aff::get_space() const
-{
- return space();
-}
-
-isl::multi_union_pw_aff multi_union_pw_aff::gist(isl::union_set context) const
-{
- if (!ptr || context.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_gist(copy(), context.release());
+ auto res = isl_pw_aff_list_clear(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::union_set uset) const
+isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const
{
- if (!ptr || uset.is_null())
+ if (!ptr || list2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_intersect_domain(copy(), uset.release());
+ auto res = isl_pw_aff_list_concat(copy(), list2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::set params) const
+isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const
{
- if (!ptr || params.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_intersect_params(copy(), params.release());
+ auto res = isl_pw_aff_list_drop(copy(), first, n);
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool multi_union_pw_aff::involves_nan() const
+void pw_aff_list::foreach(const std::function<void(isl::pw_aff)> &fn) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_involves_nan(get());
+ struct fn_data {
+ std::function<void(isl::pw_aff)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat {
+ auto *data = static_cast<struct fn_data *>(arg_1);
+ ISL_CPP_TRY {
+ (data->func)(manage(arg_0));
+ return isl_stat_ok;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_stat_error;
+ }
+ };
+ auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
if (res < 0)
exception::throw_last_error(saved_ctx);
- return res;
+ return;
}
-isl::multi_union_pw_aff multi_union_pw_aff::neg() const
+isl::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::pw_aff el) const
{
- if (!ptr)
+ if (!ptr || el.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_neg(copy());
+ auto res = isl_pw_aff_list_insert(copy(), pos, el.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
+unsigned pw_aff_list::size() const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get());
+ auto res = isl_pw_aff_list_size(get());
if (res < 0)
exception::throw_last_error(saved_ctx);
return res;
}
-isl::multi_union_pw_aff multi_union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
+inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj)
{
- if (!ptr || upma.is_null())
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_pw_aff_list_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
- if (!res)
+ char *str = isl_pw_aff_list_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ os << str;
+ free(str);
+ return os;
}
-isl::multi_union_pw_aff multi_union_pw_aff::range_product(isl::multi_union_pw_aff multi2) const
-{
- if (!ptr || multi2.is_null())
+// implementations for isl::pw_multi_aff
+pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr) {
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ return pw_multi_aff(ptr);
+}
+pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_pw_multi_aff_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release());
- if (!res)
+ ptr = isl_pw_multi_aff_copy(ptr);
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return pw_multi_aff(ptr);
}
-isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::multi_val mv) const
+pw_multi_aff::pw_multi_aff()
+ : ptr(nullptr) {}
+
+pw_multi_aff::pw_multi_aff(const pw_multi_aff &obj)
+ : ptr(nullptr)
{
- if (!ptr || mv.is_null())
+ if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_pw_multi_aff_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release());
- if (!res)
+ ptr = obj.copy();
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return manage(res);
}
-isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::val v) const
+pw_multi_aff::pw_multi_aff(__isl_take isl_pw_multi_aff *ptr)
+ : ptr(ptr) {}
+
+pw_multi_aff::pw_multi_aff(isl::multi_aff ma)
{
- if (!ptr || v.is_null())
+ if (ma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = ma.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release());
+ auto res = isl_pw_multi_aff_from_multi_aff(ma.release());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ ptr = res;
}
-isl::multi_union_pw_aff multi_union_pw_aff::scale(long v) const
+pw_multi_aff::pw_multi_aff(isl::pw_aff pa)
{
- if (!ptr)
+ if (pa.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale(isl::val(ctx(), v));
+ auto saved_ctx = pa.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_pw_multi_aff_from_pw_aff(pa.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
}
-isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::multi_val mv) const
+pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str)
{
- if (!ptr || mv.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = ctx;
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release());
+ auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ ptr = res;
}
-isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::val v) const
+pw_multi_aff &pw_multi_aff::operator=(pw_multi_aff obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+pw_multi_aff::~pw_multi_aff() {
+ if (ptr)
+ isl_pw_multi_aff_free(ptr);
+}
+
+__isl_give isl_pw_multi_aff *pw_multi_aff::copy() const & {
+ return isl_pw_multi_aff_copy(ptr);
+}
+
+__isl_keep isl_pw_multi_aff *pw_multi_aff::get() const {
+ return ptr;
+}
+
+__isl_give isl_pw_multi_aff *pw_multi_aff::release() {
+ isl_pw_multi_aff *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool pw_multi_aff::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx pw_multi_aff::ctx() const {
+ return isl::ctx(isl_pw_multi_aff_get_ctx(ptr));
+}
+
+isl::multi_pw_aff pw_multi_aff::add(const isl::multi_pw_aff &multi2) const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).add(multi2);
}
-isl::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const
+isl::multi_union_pw_aff pw_multi_aff::add(const isl::multi_union_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale_down(isl::val(ctx(), v));
+ return isl::multi_pw_aff(*this).add(multi2);
}
-isl::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::union_pw_aff el) const
+isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const
{
- if (!ptr || el.is_null())
+ if (!ptr || pma2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release());
+ auto res = isl_pw_multi_aff_add(copy(), pma2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-unsigned multi_union_pw_aff::size() const
+isl::union_pw_multi_aff pw_multi_aff::add(const isl::union_pw_multi_aff &upma2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_size(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::union_pw_multi_aff(*this).add(upma2);
}
-isl::multi_union_pw_aff multi_union_pw_aff::sub(isl::multi_union_pw_aff multi2) const
+isl::pw_multi_aff pw_multi_aff::add(const isl::multi_aff &pma2) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->add(isl::pw_multi_aff(pma2));
}
-isl::multi_union_pw_aff multi_union_pw_aff::union_add(isl::multi_union_pw_aff mupa2) const
+isl::pw_multi_aff pw_multi_aff::add(const isl::pw_aff &pma2) const
{
- if (!ptr || mupa2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_union_add(copy(), mupa2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->add(isl::pw_multi_aff(pma2));
}
-isl::multi_union_pw_aff multi_union_pw_aff::zero(isl::space space)
+isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const
{
- if (space.is_null())
+ if (!ptr || mv.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_union_pw_aff_zero(space.release());
+ auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj)
+isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const
{
- if (!obj.get())
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_union_pw_aff_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_multi_union_pw_aff_to_str(obj.get());
- if (!str)
+ auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::multi_val
-multi_val manage(__isl_take isl_multi_val *ptr) {
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return multi_val(ptr);
-}
-multi_val manage_copy(__isl_keep isl_multi_val *ptr) {
+isl::pw_multi_aff pw_multi_aff::add_constant(long v) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_val_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_multi_val_copy(ptr);
- if (!ptr)
- exception::throw_last_error(saved_ctx);
- return multi_val(ptr);
+ return this->add_constant(isl::val(ctx(), v));
}
-multi_val::multi_val()
- : ptr(nullptr) {}
-
-multi_val::multi_val(const multi_val &obj)
- : ptr(nullptr)
+isl::union_pw_multi_aff pw_multi_aff::apply(const isl::union_pw_multi_aff &upma2) const
{
- if (!obj.ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_val_get_ctx(obj.ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
if (!ptr)
- exception::throw_last_error(saved_ctx);
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).apply(upma2);
}
-multi_val::multi_val(__isl_take isl_multi_val *ptr)
- : ptr(ptr) {}
-
-multi_val::multi_val(isl::space space, isl::val_list list)
+isl::map pw_multi_aff::as_map() const
{
- if (space.is_null() || list.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_from_val_list(space.release(), list.release());
+ auto res = isl_pw_multi_aff_as_map(copy());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-multi_val::multi_val(isl::ctx ctx, const std::string &str)
+isl::multi_aff pw_multi_aff::as_multi_aff() const
{
- auto saved_ctx = ctx;
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str());
+ auto res = isl_pw_multi_aff_as_multi_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-multi_val &multi_val::operator=(multi_val obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::multi_union_pw_aff pw_multi_aff::as_multi_union_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff();
}
-multi_val::~multi_val() {
- if (ptr)
- isl_multi_val_free(ptr);
+isl::pw_multi_aff pw_multi_aff::as_pw_multi_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).as_pw_multi_aff();
}
-__isl_give isl_multi_val *multi_val::copy() const & {
- return isl_multi_val_copy(ptr);
+isl::set pw_multi_aff::as_set() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_pw_multi_aff_as_set(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-__isl_keep isl_multi_val *multi_val::get() const {
- return ptr;
+isl::union_map pw_multi_aff::as_union_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).as_union_map();
}
-__isl_give isl_multi_val *multi_val::release() {
- isl_multi_val *tmp = ptr;
- ptr = nullptr;
- return tmp;
+isl::pw_aff pw_multi_aff::at(int pos) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_pw_multi_aff_get_at(get(), pos);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-bool multi_val::is_null() const {
- return ptr == nullptr;
+isl::pw_aff pw_multi_aff::get_at(int pos) const
+{
+ return at(pos);
}
-isl::ctx multi_val::ctx() const {
- return isl::ctx(isl_multi_val_get_ctx(ptr));
+isl::set pw_multi_aff::bind(const isl::multi_id &tuple) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).bind(tuple);
}
-isl::multi_val multi_val::add(isl::multi_val multi2) const
+isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr || tuple.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_add(copy(), multi2.release());
+ auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_val multi_val::add(isl::val v) const
+isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
{
- if (!ptr || v.is_null())
+ if (!ptr || tuple.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_add_val(copy(), v.release());
+ auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_val multi_val::add(long v) const
+isl::pw_multi_aff pw_multi_aff::coalesce() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->add(isl::val(ctx(), v));
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_pw_multi_aff_coalesce(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::multi_val multi_val::flat_range_product(isl::multi_val multi2) const
+isl::set pw_multi_aff::domain() const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_flat_range_product(copy(), multi2.release());
+ auto res = isl_pw_multi_aff_domain(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::val multi_val::at(int pos) const
+isl::pw_multi_aff pw_multi_aff::domain_map(isl::space space)
{
- if (!ptr)
+ if (space.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = space.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_get_at(get(), pos);
+ auto res = isl_pw_multi_aff_domain_map(space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::val multi_val::get_at(int pos) const
+isl::pw_multi_aff pw_multi_aff::extract_pw_multi_aff(const isl::space &space) const
{
- return at(pos);
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space);
}
-isl::val_list multi_val::list() const
+isl::multi_pw_aff pw_multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).flat_range_product(multi2);
+}
+
+isl::multi_union_pw_aff pw_multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).flat_range_product(multi2);
+}
+
+isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const
+{
+ if (!ptr || pma2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_get_list(get());
+ auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::val_list multi_val::get_list() const
+isl::union_pw_multi_aff pw_multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
{
- return list();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).flat_range_product(upma2);
}
-isl::space multi_val::space() const
+isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::multi_aff &pma2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_get_space(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->flat_range_product(isl::pw_multi_aff(pma2));
}
-isl::space multi_val::get_space() const
+isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::pw_aff &pma2) const
{
- return space();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->flat_range_product(isl::pw_multi_aff(pma2));
}
-bool multi_val::involves_nan() const
+void pw_multi_aff::foreach_piece(const std::function<void(isl::set, isl::multi_aff)> &fn) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_involves_nan(get());
+ struct fn_data {
+ std::function<void(isl::set, isl::multi_aff)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_set *arg_0, isl_multi_aff *arg_1, void *arg_2) -> isl_stat {
+ auto *data = static_cast<struct fn_data *>(arg_2);
+ ISL_CPP_TRY {
+ (data->func)(manage(arg_0), manage(arg_1));
+ return isl_stat_ok;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_stat_error;
+ }
+ };
+ auto res = isl_pw_multi_aff_foreach_piece(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
if (res < 0)
exception::throw_last_error(saved_ctx);
- return res;
+ return;
}
-isl::multi_val multi_val::max(isl::multi_val multi2) const
+isl::pw_multi_aff pw_multi_aff::gist(isl::set set) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr || set.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_max(copy(), multi2.release());
+ auto res = isl_pw_multi_aff_gist(copy(), set.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_val multi_val::min(isl::multi_val multi2) const
+isl::union_pw_multi_aff pw_multi_aff::gist(const isl::union_set &context) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).gist(context);
+}
+
+isl::pw_multi_aff pw_multi_aff::gist(const isl::basic_set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist(isl::set(set));
+}
+
+isl::pw_multi_aff pw_multi_aff::gist(const isl::point &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->gist(isl::set(set));
+}
+
+bool pw_multi_aff::has_range_tuple_id() const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_min(copy(), multi2.release());
- if (!res)
+ auto res = isl_pw_multi_aff_has_range_tuple_id(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::multi_val multi_val::neg() const
+isl::multi_pw_aff pw_multi_aff::identity() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ return isl::multi_pw_aff(*this).identity();
+}
+
+isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space)
+{
+ if (space.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_neg(copy());
+ auto res = isl_pw_multi_aff_identity_on_domain_space(space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool multi_val::plain_is_equal(const isl::multi_val &multi2) const
+isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr || domain.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_plain_is_equal(get(), multi2.get());
- if (res < 0)
+ auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-isl::multi_val multi_val::product(isl::multi_val multi2) const
+isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr || set.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_product(copy(), multi2.release());
+ auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_val multi_val::range_product(isl::multi_val multi2) const
+isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::space &space) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).intersect_domain(space);
+}
+
+isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).intersect_domain(uset);
+}
+
+isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::basic_set &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_domain(isl::set(set));
+}
+
+isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::point &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->intersect_domain(isl::set(set));
+}
+
+isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
+}
+
+isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
+}
+
+isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const
+{
+ if (!ptr || set.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_range_product(copy(), multi2.release());
+ auto res = isl_pw_multi_aff_intersect_params(copy(), set.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_val multi_val::scale(isl::multi_val mv) const
+bool pw_multi_aff::involves_locals() const
{
- if (!ptr || mv.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_scale_multi_val(copy(), mv.release());
- if (!res)
+ auto res = isl_pw_multi_aff_involves_locals(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
+}
+
+bool pw_multi_aff::involves_nan() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).involves_nan();
}
-isl::multi_val multi_val::scale(isl::val v) const
+bool pw_multi_aff::involves_param(const isl::id &id) const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_scale_val(copy(), v.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).involves_param(id);
}
-isl::multi_val multi_val::scale(long v) const
+bool pw_multi_aff::involves_param(const std::string &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale(isl::val(ctx(), v));
+ return this->involves_param(isl::id(ctx(), id));
}
-isl::multi_val multi_val::scale_down(isl::multi_val mv) const
+bool pw_multi_aff::involves_param(const isl::id_list &list) const
{
- if (!ptr || mv.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).involves_param(list);
}
-isl::multi_val multi_val::scale_down(isl::val v) const
+bool pw_multi_aff::isa_multi_aff() const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_scale_down_val(copy(), v.release());
- if (!res)
+ auto res = isl_pw_multi_aff_isa_multi_aff(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::multi_val multi_val::scale_down(long v) const
+bool pw_multi_aff::isa_pw_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale_down(isl::val(ctx(), v));
+ return isl::union_pw_multi_aff(*this).isa_pw_multi_aff();
}
-isl::multi_val multi_val::set_at(int pos, isl::val el) const
+isl::pw_aff_list pw_multi_aff::list() const
{
- if (!ptr || el.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_set_at(copy(), pos, el.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).list();
}
-isl::multi_val multi_val::set_at(int pos, long el) const
+isl::multi_pw_aff pw_multi_aff::max(const isl::multi_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->set_at(pos, isl::val(ctx(), el));
+ return isl::multi_pw_aff(*this).max(multi2);
}
-unsigned multi_val::size() const
+isl::multi_val pw_multi_aff::max_multi_val() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_size(get());
- if (res < 0)
+ auto res = isl_pw_multi_aff_max_multi_val(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-isl::multi_val multi_val::sub(isl::multi_val multi2) const
+isl::multi_pw_aff pw_multi_aff::min(const isl::multi_pw_aff &multi2) const
{
- if (!ptr || multi2.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).min(multi2);
+}
+
+isl::multi_val pw_multi_aff::min_multi_val() const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_sub(copy(), multi2.release());
+ auto res = isl_pw_multi_aff_min_multi_val(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_val multi_val::zero(isl::space space)
+isl::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::set domain, isl::multi_val mv)
{
- if (space.is_null())
+ if (domain.is_null() || mv.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = domain.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_multi_val_zero(space.release());
+ auto res = isl_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const multi_val &obj)
+unsigned pw_multi_aff::n_piece() const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_multi_val_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_multi_val_to_str(obj.get());
- if (!str)
+ auto res = isl_pw_multi_aff_n_piece(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return res;
}
-// implementations for isl::point
-point manage(__isl_take isl_point *ptr) {
+isl::multi_pw_aff pw_multi_aff::neg() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return point(ptr);
+ return isl::multi_pw_aff(*this).neg();
}
-point manage_copy(__isl_keep isl_point *ptr) {
+
+bool pw_multi_aff::plain_is_empty() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_point_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_point_copy(ptr);
- if (!ptr)
- exception::throw_last_error(saved_ctx);
- return point(ptr);
+ return isl::union_pw_multi_aff(*this).plain_is_empty();
}
-point::point()
- : ptr(nullptr) {}
-
-point::point(const point &obj)
- : ptr(nullptr)
+bool pw_multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
{
- if (!obj.ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_point_get_ctx(obj.ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
if (!ptr)
- exception::throw_last_error(saved_ctx);
-}
-
-point::point(__isl_take isl_point *ptr)
- : ptr(ptr) {}
-
-point &point::operator=(point obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-point::~point() {
- if (ptr)
- isl_point_free(ptr);
-}
-
-__isl_give isl_point *point::copy() const & {
- return isl_point_copy(ptr);
-}
-
-__isl_keep isl_point *point::get() const {
- return ptr;
-}
-
-__isl_give isl_point *point::release() {
- isl_point *tmp = ptr;
- ptr = nullptr;
- return tmp;
-}
-
-bool point::is_null() const {
- return ptr == nullptr;
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).plain_is_equal(multi2);
}
-isl::ctx point::ctx() const {
- return isl::ctx(isl_point_get_ctx(ptr));
+bool pw_multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).plain_is_equal(multi2);
}
-isl::multi_val point::multi_val() const
+isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const
{
- if (!ptr)
+ if (!ptr || pma2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_point_get_multi_val(get());
+ auto res = isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(copy(), pma2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_val point::get_multi_val() const
+isl::union_pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
{
- return multi_val();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
}
-inline std::ostream &operator<<(std::ostream &os, const point &obj)
+isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_point_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_point_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
}
-// implementations for isl::pw_aff
-pw_aff manage(__isl_take isl_pw_aff *ptr) {
+isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return pw_aff(ptr);
+ return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
}
-pw_aff manage_copy(__isl_keep isl_pw_aff *ptr) {
+
+isl::multi_pw_aff pw_multi_aff::product(const isl::multi_pw_aff &multi2) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_aff_get_ctx(ptr);
+ return isl::multi_pw_aff(*this).product(multi2);
+}
+
+isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const
+{
+ if (!ptr || pma2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_pw_aff_copy(ptr);
- if (!ptr)
+ auto res = isl_pw_multi_aff_product(copy(), pma2.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return pw_aff(ptr);
+ return manage(res);
}
-pw_aff::pw_aff()
- : ptr(nullptr) {}
-
-pw_aff::pw_aff(const pw_aff &obj)
- : ptr(nullptr)
+isl::pw_multi_aff pw_multi_aff::product(const isl::multi_aff &pma2) const
{
- if (!obj.ptr)
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_aff_get_ctx(obj.ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
+ return this->product(isl::pw_multi_aff(pma2));
+}
+
+isl::pw_multi_aff pw_multi_aff::product(const isl::pw_aff &pma2) const
+{
if (!ptr)
- exception::throw_last_error(saved_ctx);
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->product(isl::pw_multi_aff(pma2));
}
-pw_aff::pw_aff(__isl_take isl_pw_aff *ptr)
- : ptr(ptr) {}
+isl::multi_pw_aff pw_multi_aff::pullback(const isl::multi_pw_aff &mpa2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).pullback(mpa2);
+}
-pw_aff::pw_aff(isl::aff aff)
+isl::pw_multi_aff pw_multi_aff::pullback(isl::multi_aff ma) const
{
- if (aff.is_null())
+ if (!ptr || ma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = aff.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_from_aff(aff.release());
+ auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-pw_aff::pw_aff(isl::ctx ctx, const std::string &str)
+isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const
{
- auto saved_ctx = ctx;
+ if (!ptr || pma2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str());
+ auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-pw_aff &pw_aff::operator=(pw_aff obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-pw_aff::~pw_aff() {
- if (ptr)
- isl_pw_aff_free(ptr);
-}
-
-__isl_give isl_pw_aff *pw_aff::copy() const & {
- return isl_pw_aff_copy(ptr);
-}
-
-__isl_keep isl_pw_aff *pw_aff::get() const {
- return ptr;
-}
-
-__isl_give isl_pw_aff *pw_aff::release() {
- isl_pw_aff *tmp = ptr;
- ptr = nullptr;
- return tmp;
+ return manage(res);
}
-bool pw_aff::is_null() const {
- return ptr == nullptr;
+isl::union_pw_multi_aff pw_multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).pullback(upma2);
}
-isl::ctx pw_aff::ctx() const {
- return isl::ctx(isl_pw_aff_get_ctx(ptr));
+isl::pw_multi_aff_list pw_multi_aff::pw_multi_aff_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).pw_multi_aff_list();
}
-isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const
+isl::pw_multi_aff pw_multi_aff::range_factor_domain() const
{
- if (!ptr || pwaff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_add(copy(), pwaff2.release());
+ auto res = isl_pw_multi_aff_range_factor_domain(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::add_constant(isl::val v) const
+isl::pw_multi_aff pw_multi_aff::range_factor_range() const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_add_constant_val(copy(), v.release());
+ auto res = isl_pw_multi_aff_range_factor_range(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::add_constant(long v) const
+isl::pw_multi_aff pw_multi_aff::range_map(isl::space space)
+{
+ if (space.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_pw_multi_aff_range_map(space.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::multi_pw_aff pw_multi_aff::range_product(const isl::multi_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->add_constant(isl::val(ctx(), v));
+ return isl::multi_pw_aff(*this).range_product(multi2);
}
-isl::aff pw_aff::as_aff() const
+isl::multi_union_pw_aff pw_multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_as_aff(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).range_product(multi2);
}
-isl::set pw_aff::bind(isl::id id) const
+isl::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const
{
- if (!ptr || id.is_null())
+ if (!ptr || pma2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_bind_id(copy(), id.release());
+ auto res = isl_pw_multi_aff_range_product(copy(), pma2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set pw_aff::bind(const std::string &id) const
+isl::union_pw_multi_aff pw_multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->bind(isl::id(ctx(), id));
+ return isl::union_pw_multi_aff(*this).range_product(upma2);
}
-isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const
+isl::pw_multi_aff pw_multi_aff::range_product(const isl::multi_aff &pma2) const
{
- if (!ptr || tuple.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_bind_domain(copy(), tuple.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->range_product(isl::pw_multi_aff(pma2));
}
-isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
+isl::pw_multi_aff pw_multi_aff::range_product(const isl::pw_aff &pma2) const
{
- if (!ptr || tuple.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->range_product(isl::pw_multi_aff(pma2));
}
-isl::pw_aff pw_aff::ceil() const
+isl::id pw_multi_aff::range_tuple_id() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_ceil(copy());
+ auto res = isl_pw_multi_aff_get_range_tuple_id(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::coalesce() const
+isl::id pw_multi_aff::get_range_tuple_id() const
+{
+ return range_tuple_id();
+}
+
+isl::multi_pw_aff pw_multi_aff::reset_range_tuple_id() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_coalesce(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).reset_range_tuple_id();
}
-isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const
+isl::multi_pw_aff pw_multi_aff::scale(const isl::multi_val &mv) const
{
- if (!ptr || pwaff_true.is_null() || pwaff_false.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).scale(mv);
}
-isl::pw_aff pw_aff::div(isl::pw_aff pa2) const
+isl::pw_multi_aff pw_multi_aff::scale(isl::val v) const
{
- if (!ptr || pa2.is_null())
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_div(copy(), pa2.release());
+ auto res = isl_pw_multi_aff_scale_val(copy(), v.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set pw_aff::domain() const
+isl::pw_multi_aff pw_multi_aff::scale(long v) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_domain(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->scale(isl::val(ctx(), v));
}
-isl::set pw_aff::eq_set(isl::pw_aff pwaff2) const
+isl::multi_pw_aff pw_multi_aff::scale_down(const isl::multi_val &mv) const
{
- if (!ptr || pwaff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_eq_set(copy(), pwaff2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).scale_down(mv);
}
-isl::val pw_aff::eval(isl::point pnt) const
+isl::pw_multi_aff pw_multi_aff::scale_down(isl::val v) const
{
- if (!ptr || pnt.is_null())
+ if (!ptr || v.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_eval(copy(), pnt.release());
+ auto res = isl_pw_multi_aff_scale_down_val(copy(), v.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::floor() const
+isl::pw_multi_aff pw_multi_aff::scale_down(long v) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_floor(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->scale_down(isl::val(ctx(), v));
}
-isl::set pw_aff::ge_set(isl::pw_aff pwaff2) const
+isl::multi_pw_aff pw_multi_aff::set_at(int pos, const isl::pw_aff &el) const
{
- if (!ptr || pwaff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_ge_set(copy(), pwaff2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).set_at(pos, el);
}
-isl::pw_aff pw_aff::gist(isl::set context) const
+isl::multi_union_pw_aff pw_multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
{
- if (!ptr || context.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_gist(copy(), context.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_pw_aff(*this).set_at(pos, el);
}
-isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const
+isl::pw_multi_aff pw_multi_aff::set_range_tuple(isl::id id) const
{
- if (!ptr || pwaff2.is_null())
+ if (!ptr || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_gt_set(copy(), pwaff2.release());
+ auto res = isl_pw_multi_aff_set_range_tuple_id(copy(), id.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::insert_domain(isl::space domain) const
+isl::pw_multi_aff pw_multi_aff::set_range_tuple(const std::string &id) const
{
- if (!ptr || domain.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->set_range_tuple(isl::id(ctx(), id));
+}
+
+unsigned pw_multi_aff::size() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).size();
+}
+
+isl::space pw_multi_aff::space() const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_insert_domain(copy(), domain.release());
+ auto res = isl_pw_multi_aff_get_space(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::intersect_domain(isl::set set) const
+isl::space pw_multi_aff::get_space() const
{
- if (!ptr || set.is_null())
+ return space();
+}
+
+isl::multi_pw_aff pw_multi_aff::sub(const isl::multi_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).sub(multi2);
+}
+
+isl::multi_union_pw_aff pw_multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).sub(multi2);
+}
+
+isl::pw_multi_aff pw_multi_aff::sub(isl::pw_multi_aff pma2) const
+{
+ if (!ptr || pma2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_intersect_domain(copy(), set.release());
+ auto res = isl_pw_multi_aff_sub(copy(), pma2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::intersect_params(isl::set set) const
+isl::union_pw_multi_aff pw_multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).sub(upma2);
+}
+
+isl::pw_multi_aff pw_multi_aff::sub(const isl::multi_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->sub(isl::pw_multi_aff(pma2));
+}
+
+isl::pw_multi_aff pw_multi_aff::sub(const isl::pw_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->sub(isl::pw_multi_aff(pma2));
+}
+
+isl::pw_multi_aff pw_multi_aff::subtract_domain(isl::set set) const
{
if (!ptr || set.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_intersect_params(copy(), set.release());
+ auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool pw_aff::isa_aff() const
+isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::space &space) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_isa_aff(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::union_pw_multi_aff(*this).subtract_domain(space);
}
-isl::set pw_aff::le_set(isl::pw_aff pwaff2) const
+isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::union_set &uset) const
{
- if (!ptr || pwaff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_le_set(copy(), pwaff2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).subtract_domain(uset);
}
-isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const
+isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::basic_set &set) const
{
- if (!ptr || pwaff2.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->subtract_domain(isl::set(set));
+}
+
+isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::point &set) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->subtract_domain(isl::set(set));
+}
+
+isl::pw_multi_aff_list pw_multi_aff::to_list() const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_lt_set(copy(), pwaff2.release());
+ auto res = isl_pw_multi_aff_to_list(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const
+isl::multi_pw_aff pw_multi_aff::to_multi_pw_aff() const
{
- if (!ptr || pwaff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_max(copy(), pwaff2.release());
+ auto res = isl_pw_multi_aff_to_multi_pw_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const
+isl::union_pw_multi_aff pw_multi_aff::to_union_pw_multi_aff() const
{
- if (!ptr || pwaff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_min(copy(), pwaff2.release());
+ auto res = isl_pw_multi_aff_to_union_pw_multi_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::mod(isl::val mod) const
+isl::multi_pw_aff pw_multi_aff::unbind_params_insert_domain(const isl::multi_id &domain) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).unbind_params_insert_domain(domain);
+}
+
+isl::multi_pw_aff pw_multi_aff::union_add(const isl::multi_pw_aff &mpa2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).union_add(mpa2);
+}
+
+isl::multi_union_pw_aff pw_multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_pw_aff(*this).union_add(mupa2);
+}
+
+isl::pw_multi_aff pw_multi_aff::union_add(isl::pw_multi_aff pma2) const
{
- if (!ptr || mod.is_null())
+ if (!ptr || pma2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_mod_val(copy(), mod.release());
+ auto res = isl_pw_multi_aff_union_add(copy(), pma2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::mod(long mod) const
+isl::union_pw_multi_aff pw_multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->mod(isl::val(ctx(), mod));
+ return isl::union_pw_multi_aff(*this).union_add(upma2);
}
-isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const
+isl::pw_multi_aff pw_multi_aff::union_add(const isl::multi_aff &pma2) const
{
- if (!ptr || pwaff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ return this->union_add(isl::pw_multi_aff(pma2));
+}
+
+isl::pw_multi_aff pw_multi_aff::union_add(const isl::pw_aff &pma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->union_add(isl::pw_multi_aff(pma2));
+}
+
+isl::pw_multi_aff pw_multi_aff::zero(isl::space space)
+{
+ if (space.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_mul(copy(), pwaff2.release());
+ auto res = isl_pw_multi_aff_zero(space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set pw_aff::ne_set(isl::pw_aff pwaff2) const
+inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff &obj)
{
- if (!ptr || pwaff2.is_null())
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_pw_multi_aff_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_ne_set(copy(), pwaff2.release());
- if (!res)
+ char *str = isl_pw_multi_aff_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ os << str;
+ free(str);
+ return os;
}
-isl::pw_aff pw_aff::neg() const
-{
+// implementations for isl::pw_multi_aff_list
+pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ return pw_multi_aff_list(ptr);
+}
+pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_pw_multi_aff_list_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_neg(copy());
- if (!res)
+ ptr = isl_pw_multi_aff_list_copy(ptr);
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return pw_multi_aff_list(ptr);
}
-isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id)
+pw_multi_aff_list::pw_multi_aff_list()
+ : ptr(nullptr) {}
+
+pw_multi_aff_list::pw_multi_aff_list(const pw_multi_aff_list &obj)
+ : ptr(nullptr)
{
- if (domain.is_null() || id.is_null())
+ if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = domain.ctx();
+ auto saved_ctx = isl_pw_multi_aff_list_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release());
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr)
+ : ptr(ptr) {}
+
+pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, int n)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n);
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ ptr = res;
}
-isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const
+pw_multi_aff_list::pw_multi_aff_list(isl::pw_multi_aff el)
{
- if (!ptr || ma.is_null())
+ if (el.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = el.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release());
+ auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ ptr = res;
}
-isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const
+pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, const std::string &str)
{
- if (!ptr || mpa.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = ctx;
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release());
+ auto res = isl_pw_multi_aff_list_read_from_str(ctx.release(), str.c_str());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ ptr = res;
}
-isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const
+pw_multi_aff_list &pw_multi_aff_list::operator=(pw_multi_aff_list obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+pw_multi_aff_list::~pw_multi_aff_list() {
+ if (ptr)
+ isl_pw_multi_aff_list_free(ptr);
+}
+
+__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & {
+ return isl_pw_multi_aff_list_copy(ptr);
+}
+
+__isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const {
+ return ptr;
+}
+
+__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() {
+ isl_pw_multi_aff_list *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool pw_multi_aff_list::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx pw_multi_aff_list::ctx() const {
+ return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr));
+}
+
+isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const
{
- if (!ptr || pma.is_null())
+ if (!ptr || el.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
+ auto res = isl_pw_multi_aff_list_add(copy(), el.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::scale(isl::val v) const
+isl::pw_multi_aff pw_multi_aff_list::at(int index) const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_scale_val(copy(), v.release());
+ auto res = isl_pw_multi_aff_list_get_at(get(), index);
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::scale(long v) const
+isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const
{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale(isl::val(ctx(), v));
+ return at(index);
}
-isl::pw_aff pw_aff::scale_down(isl::val f) const
+isl::pw_multi_aff_list pw_multi_aff_list::clear() const
{
- if (!ptr || f.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_scale_down_val(copy(), f.release());
+ auto res = isl_pw_multi_aff_list_clear(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::scale_down(long f) const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale_down(isl::val(ctx(), f));
-}
-
-isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const
+isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const
{
- if (!ptr || pwaff2.is_null())
+ if (!ptr || list2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_sub(copy(), pwaff2.release());
+ auto res = isl_pw_multi_aff_list_concat(copy(), list2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::subtract_domain(isl::set set) const
+isl::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const
{
- if (!ptr || set.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_subtract_domain(copy(), set.release());
+ auto res = isl_pw_multi_aff_list_drop(copy(), first, n);
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const
+void pw_multi_aff_list::foreach(const std::function<void(isl::pw_multi_aff)> &fn) const
{
- if (!ptr || pa2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_tdiv_q(copy(), pa2.release());
- if (!res)
+ struct fn_data {
+ std::function<void(isl::pw_multi_aff)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat {
+ auto *data = static_cast<struct fn_data *>(arg_1);
+ ISL_CPP_TRY {
+ (data->func)(manage(arg_0));
+ return isl_stat_ok;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_stat_error;
+ }
+ };
+ auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return;
}
-isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const
+isl::pw_multi_aff_list pw_multi_aff_list::insert(unsigned int pos, isl::pw_multi_aff el) const
{
- if (!ptr || pa2.is_null())
+ if (!ptr || el.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_tdiv_r(copy(), pa2.release());
+ auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const
+unsigned pw_multi_aff_list::size() const
{
- if (!ptr || pwaff2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_union_add(copy(), pwaff2.release());
- if (!res)
+ auto res = isl_pw_multi_aff_list_size(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj)
+inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff_list &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_aff_get_ctx(obj.get());
+ auto saved_ctx = isl_pw_multi_aff_list_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_pw_aff_to_str(obj.get());
+ char *str = isl_pw_multi_aff_list_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::pw_aff_list
-pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) {
+// implementations for isl::schedule
+schedule manage(__isl_take isl_schedule *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return pw_aff_list(ptr);
+ return schedule(ptr);
}
-pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) {
+schedule manage_copy(__isl_keep isl_schedule *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_aff_list_get_ctx(ptr);
+ auto saved_ctx = isl_schedule_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_pw_aff_list_copy(ptr);
+ ptr = isl_schedule_copy(ptr);
if (!ptr)
exception::throw_last_error(saved_ctx);
- return pw_aff_list(ptr);
+ return schedule(ptr);
}
-pw_aff_list::pw_aff_list()
+schedule::schedule()
: ptr(nullptr) {}
-pw_aff_list::pw_aff_list(const pw_aff_list &obj)
+schedule::schedule(const schedule &obj)
: ptr(nullptr)
{
if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_aff_list_get_ctx(obj.ptr);
+ auto saved_ctx = isl_schedule_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
ptr = obj.copy();
if (!ptr)
exception::throw_last_error(saved_ctx);
}
-pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr)
+schedule::schedule(__isl_take isl_schedule *ptr)
: ptr(ptr) {}
-pw_aff_list::pw_aff_list(isl::ctx ctx, int n)
-{
- auto saved_ctx = ctx;
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_list_alloc(ctx.release(), n);
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-pw_aff_list::pw_aff_list(isl::pw_aff el)
+schedule::schedule(isl::ctx ctx, const std::string &str)
{
- if (el.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = el.ctx();
+ auto saved_ctx = ctx;
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_list_from_pw_aff(el.release());
+ auto res = isl_schedule_read_from_str(ctx.release(), str.c_str());
if (!res)
exception::throw_last_error(saved_ctx);
ptr = res;
}
-pw_aff_list &pw_aff_list::operator=(pw_aff_list obj) {
+schedule &schedule::operator=(schedule obj) {
std::swap(this->ptr, obj.ptr);
return *this;
}
-pw_aff_list::~pw_aff_list() {
+schedule::~schedule() {
if (ptr)
- isl_pw_aff_list_free(ptr);
+ isl_schedule_free(ptr);
}
-__isl_give isl_pw_aff_list *pw_aff_list::copy() const & {
- return isl_pw_aff_list_copy(ptr);
+__isl_give isl_schedule *schedule::copy() const & {
+ return isl_schedule_copy(ptr);
}
-__isl_keep isl_pw_aff_list *pw_aff_list::get() const {
+__isl_keep isl_schedule *schedule::get() const {
return ptr;
}
-__isl_give isl_pw_aff_list *pw_aff_list::release() {
- isl_pw_aff_list *tmp = ptr;
+__isl_give isl_schedule *schedule::release() {
+ isl_schedule *tmp = ptr;
ptr = nullptr;
return tmp;
}
-bool pw_aff_list::is_null() const {
+bool schedule::is_null() const {
return ptr == nullptr;
}
-isl::ctx pw_aff_list::ctx() const {
- return isl::ctx(isl_pw_aff_list_get_ctx(ptr));
+isl::ctx schedule::ctx() const {
+ return isl::ctx(isl_schedule_get_ctx(ptr));
}
-isl::pw_aff_list pw_aff_list::add(isl::pw_aff el) const
+isl::union_set schedule::domain() const
{
- if (!ptr || el.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_list_add(copy(), el.release());
+ auto res = isl_schedule_get_domain(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff_list pw_aff_list::clear() const
+isl::union_set schedule::get_domain() const
{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_list_clear(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return domain();
}
-isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const
+isl::schedule schedule::from_domain(isl::union_set domain)
{
- if (!ptr || list2.is_null())
+ if (domain.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = domain.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_list_concat(copy(), list2.release());
+ auto res = isl_schedule_from_domain(domain.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const
+isl::union_map schedule::map() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_list_drop(copy(), first, n);
+ auto res = isl_schedule_get_map(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-void pw_aff_list::foreach(const std::function<void(isl::pw_aff)> &fn) const
+isl::union_map schedule::get_map() const
{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct fn_data {
- std::function<void(isl::pw_aff)> func;
- std::exception_ptr eptr;
- } fn_data = { fn };
- auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat {
- auto *data = static_cast<struct fn_data *>(arg_1);
- ISL_CPP_TRY {
- (data->func)(manage(arg_0));
- return isl_stat_ok;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_stat_error;
- }
- };
- auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
- if (fn_data.eptr)
- std::rethrow_exception(fn_data.eptr);
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return;
+ return map();
}
-isl::pw_aff pw_aff_list::at(int index) const
+isl::schedule schedule::pullback(isl::union_pw_multi_aff upma) const
{
- if (!ptr)
+ if (!ptr || upma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_list_get_at(get(), index);
+ auto res = isl_schedule_pullback_union_pw_multi_aff(copy(), upma.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff pw_aff_list::get_at(int index) const
-{
- return at(index);
-}
-
-isl::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::pw_aff el) const
+isl::schedule_node schedule::root() const
{
- if (!ptr || el.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_list_insert(copy(), pos, el.release());
+ auto res = isl_schedule_get_root(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-unsigned pw_aff_list::size() const
+isl::schedule_node schedule::get_root() const
{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_aff_list_size(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return root();
}
-inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj)
+inline std::ostream &operator<<(std::ostream &os, const schedule &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_aff_list_get_ctx(obj.get());
+ auto saved_ctx = isl_schedule_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_pw_aff_list_to_str(obj.get());
+ char *str = isl_schedule_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::pw_multi_aff
-pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr) {
+// implementations for isl::schedule_constraints
+schedule_constraints manage(__isl_take isl_schedule_constraints *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return pw_multi_aff(ptr);
+ return schedule_constraints(ptr);
}
-pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr) {
+schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_multi_aff_get_ctx(ptr);
+ auto saved_ctx = isl_schedule_constraints_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_pw_multi_aff_copy(ptr);
+ ptr = isl_schedule_constraints_copy(ptr);
if (!ptr)
exception::throw_last_error(saved_ctx);
- return pw_multi_aff(ptr);
+ return schedule_constraints(ptr);
}
-pw_multi_aff::pw_multi_aff()
+schedule_constraints::schedule_constraints()
: ptr(nullptr) {}
-pw_multi_aff::pw_multi_aff(const pw_multi_aff &obj)
+schedule_constraints::schedule_constraints(const schedule_constraints &obj)
: ptr(nullptr)
{
if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_multi_aff_get_ctx(obj.ptr);
+ auto saved_ctx = isl_schedule_constraints_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
ptr = obj.copy();
if (!ptr)
exception::throw_last_error(saved_ctx);
}
-pw_multi_aff::pw_multi_aff(__isl_take isl_pw_multi_aff *ptr)
+schedule_constraints::schedule_constraints(__isl_take isl_schedule_constraints *ptr)
: ptr(ptr) {}
-pw_multi_aff::pw_multi_aff(isl::multi_aff ma)
-{
- if (ma.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ma.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_from_multi_aff(ma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-pw_multi_aff::pw_multi_aff(isl::pw_aff pa)
-{
- if (pa.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = pa.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_from_pw_aff(pa.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str)
+schedule_constraints::schedule_constraints(isl::ctx ctx, const std::string &str)
{
auto saved_ctx = ctx;
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
+ auto res = isl_schedule_constraints_read_from_str(ctx.release(), str.c_str());
if (!res)
exception::throw_last_error(saved_ctx);
ptr = res;
}
-pw_multi_aff &pw_multi_aff::operator=(pw_multi_aff obj) {
+schedule_constraints &schedule_constraints::operator=(schedule_constraints obj) {
std::swap(this->ptr, obj.ptr);
return *this;
}
-pw_multi_aff::~pw_multi_aff() {
+schedule_constraints::~schedule_constraints() {
if (ptr)
- isl_pw_multi_aff_free(ptr);
+ isl_schedule_constraints_free(ptr);
}
-__isl_give isl_pw_multi_aff *pw_multi_aff::copy() const & {
- return isl_pw_multi_aff_copy(ptr);
+__isl_give isl_schedule_constraints *schedule_constraints::copy() const & {
+ return isl_schedule_constraints_copy(ptr);
}
-__isl_keep isl_pw_multi_aff *pw_multi_aff::get() const {
+__isl_keep isl_schedule_constraints *schedule_constraints::get() const {
return ptr;
}
-__isl_give isl_pw_multi_aff *pw_multi_aff::release() {
- isl_pw_multi_aff *tmp = ptr;
+__isl_give isl_schedule_constraints *schedule_constraints::release() {
+ isl_schedule_constraints *tmp = ptr;
ptr = nullptr;
return tmp;
}
-bool pw_multi_aff::is_null() const {
+bool schedule_constraints::is_null() const {
return ptr == nullptr;
}
-isl::ctx pw_multi_aff::ctx() const {
- return isl::ctx(isl_pw_multi_aff_get_ctx(ptr));
+isl::ctx schedule_constraints::ctx() const {
+ return isl::ctx(isl_schedule_constraints_get_ctx(ptr));
}
-isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const
+isl::union_map schedule_constraints::coincidence() const
{
- if (!ptr || pma2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_add(copy(), pma2.release());
+ auto res = isl_schedule_constraints_get_coincidence(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const
+isl::union_map schedule_constraints::get_coincidence() const
{
- if (!ptr || mv.is_null())
+ return coincidence();
+}
+
+isl::schedule schedule_constraints::compute_schedule() const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release());
+ auto res = isl_schedule_constraints_compute_schedule(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const
+isl::union_map schedule_constraints::conditional_validity() const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release());
+ auto res = isl_schedule_constraints_get_conditional_validity(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::add_constant(long v) const
+isl::union_map schedule_constraints::get_conditional_validity() const
+{
+ return conditional_validity();
+}
+
+isl::union_map schedule_constraints::conditional_validity_condition() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->add_constant(isl::val(ctx(), v));
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_constraints_get_conditional_validity_condition(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::multi_aff pw_multi_aff::as_multi_aff() const
+isl::union_map schedule_constraints::get_conditional_validity_condition() const
+{
+ return conditional_validity_condition();
+}
+
+isl::set schedule_constraints::context() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_as_multi_aff(copy());
+ auto res = isl_schedule_constraints_get_context(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::set schedule_constraints::get_context() const
+{
+ return context();
+}
+
+isl::union_set schedule_constraints::domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_constraints_get_domain(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const
+isl::union_set schedule_constraints::get_domain() const
+{
+ return domain();
+}
+
+isl::schedule_constraints schedule_constraints::on_domain(isl::union_set domain)
{
- if (!ptr || tuple.is_null())
+ if (domain.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = domain.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release());
+ auto res = isl_schedule_constraints_on_domain(domain.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
+isl::union_map schedule_constraints::proximity() const
{
- if (!ptr || tuple.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
+ auto res = isl_schedule_constraints_get_proximity(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::coalesce() const
+isl::union_map schedule_constraints::get_proximity() const
{
- if (!ptr)
+ return proximity();
+}
+
+isl::schedule_constraints schedule_constraints::set_coincidence(isl::union_map coincidence) const
+{
+ if (!ptr || coincidence.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_coalesce(copy());
+ auto res = isl_schedule_constraints_set_coincidence(copy(), coincidence.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set pw_multi_aff::domain() const
+isl::schedule_constraints schedule_constraints::set_conditional_validity(isl::union_map condition, isl::union_map validity) const
{
- if (!ptr)
+ if (!ptr || condition.is_null() || validity.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_domain(copy());
+ auto res = isl_schedule_constraints_set_conditional_validity(copy(), condition.release(), validity.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::domain_map(isl::space space)
+isl::schedule_constraints schedule_constraints::set_context(isl::set context) const
{
- if (space.is_null())
+ if (!ptr || context.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_domain_map(space.release());
+ auto res = isl_schedule_constraints_set_context(copy(), context.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const
+isl::schedule_constraints schedule_constraints::set_proximity(isl::union_map proximity) const
{
- if (!ptr || pma2.is_null())
+ if (!ptr || proximity.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release());
+ auto res = isl_schedule_constraints_set_proximity(copy(), proximity.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-void pw_multi_aff::foreach_piece(const std::function<void(isl::set, isl::multi_aff)> &fn) const
+isl::schedule_constraints schedule_constraints::set_validity(isl::union_map validity) const
{
- if (!ptr)
+ if (!ptr || validity.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct fn_data {
- std::function<void(isl::set, isl::multi_aff)> func;
- std::exception_ptr eptr;
- } fn_data = { fn };
- auto fn_lambda = [](isl_set *arg_0, isl_multi_aff *arg_1, void *arg_2) -> isl_stat {
- auto *data = static_cast<struct fn_data *>(arg_2);
- ISL_CPP_TRY {
- (data->func)(manage(arg_0), manage(arg_1));
- return isl_stat_ok;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_stat_error;
- }
- };
- auto res = isl_pw_multi_aff_foreach_piece(get(), fn_lambda, &fn_data);
- if (fn_data.eptr)
- std::rethrow_exception(fn_data.eptr);
- if (res < 0)
+ auto res = isl_schedule_constraints_set_validity(copy(), validity.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return;
+ return manage(res);
}
-isl::space pw_multi_aff::space() const
+isl::union_map schedule_constraints::validity() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_get_space(get());
+ auto res = isl_schedule_constraints_get_validity(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space pw_multi_aff::get_space() const
+isl::union_map schedule_constraints::get_validity() const
{
- return space();
+ return validity();
}
-isl::pw_multi_aff pw_multi_aff::gist(isl::set set) const
+inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj)
{
- if (!ptr || set.is_null())
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_schedule_constraints_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_gist(copy(), set.release());
- if (!res)
+ char *str = isl_schedule_constraints_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ os << str;
+ free(str);
+ return os;
}
-isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space)
-{
- if (space.is_null())
+// implementations for isl::schedule_node
+schedule_node manage(__isl_take isl_schedule_node *ptr) {
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_identity_on_domain_space(space.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return schedule_node(ptr);
}
-
-isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) const
-{
- if (!ptr || domain.is_null())
+schedule_node manage_copy(__isl_keep isl_schedule_node *ptr) {
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_schedule_node_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release());
- if (!res)
+ ptr = isl_schedule_node_copy(ptr);
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return schedule_node(ptr);
}
-isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const
+schedule_node::schedule_node()
+ : ptr(nullptr) {}
+
+schedule_node::schedule_node(const schedule_node &obj)
+ : ptr(nullptr)
{
- if (!ptr || set.is_null())
+ if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release());
- if (!res)
+ ptr = obj.copy();
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const
+schedule_node::schedule_node(__isl_take isl_schedule_node *ptr)
+ : ptr(ptr) {}
+
+schedule_node &schedule_node::operator=(schedule_node obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+schedule_node::~schedule_node() {
+ if (ptr)
+ isl_schedule_node_free(ptr);
+}
+
+__isl_give isl_schedule_node *schedule_node::copy() const & {
+ return isl_schedule_node_copy(ptr);
+}
+
+__isl_keep isl_schedule_node *schedule_node::get() const {
+ return ptr;
+}
+
+__isl_give isl_schedule_node *schedule_node::release() {
+ isl_schedule_node *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool schedule_node::is_null() const {
+ return ptr == nullptr;
+}
+
+template <typename T, typename>
+bool schedule_node::isa_type(T subtype) const
{
- if (!ptr || set.is_null())
+ if (is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_intersect_params(copy(), set.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl_schedule_node_get_type(get()) == subtype;
+}
+template <class T>
+bool schedule_node::isa() const
+{
+ return isa_type<decltype(T::type)>(T::type);
+}
+template <class T>
+T schedule_node::as() const
+{
+ if (!isa<T>())
+ exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__);
+ return T(copy());
}
-bool pw_multi_aff::involves_locals() const
+isl::ctx schedule_node::ctx() const {
+ return isl::ctx(isl_schedule_node_get_ctx(ptr));
+}
+
+isl::schedule_node schedule_node::ancestor(int generation) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_involves_locals(get());
- if (res < 0)
+ auto res = isl_schedule_node_ancestor(copy(), generation);
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool pw_multi_aff::isa_multi_aff() const
+unsigned schedule_node::ancestor_child_position(const isl::schedule_node &ancestor) const
{
- if (!ptr)
+ if (!ptr || ancestor.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_isa_multi_aff(get());
+ auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get());
if (res < 0)
exception::throw_last_error(saved_ctx);
return res;
}
-isl::multi_val pw_multi_aff::max_multi_val() const
+unsigned schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const
{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_max_multi_val(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return ancestor_child_position(ancestor);
}
-isl::multi_val pw_multi_aff::min_multi_val() const
+isl::schedule_node schedule_node::child(int pos) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_min_multi_val(copy());
+ auto res = isl_schedule_node_child(copy(), pos);
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-unsigned pw_multi_aff::n_piece() const
+unsigned schedule_node::child_position() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_n_piece(get());
+ auto res = isl_schedule_node_get_child_position(get());
if (res < 0)
exception::throw_last_error(saved_ctx);
return res;
}
-isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const
+unsigned schedule_node::get_child_position() const
{
- if (!ptr || pma2.is_null())
+ return child_position();
+}
+
+bool schedule_node::every_descendant(const std::function<bool(isl::schedule_node)> &test) const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(copy(), pma2.release());
- if (!res)
+ struct test_data {
+ std::function<bool(isl::schedule_node)> func;
+ std::exception_ptr eptr;
+ } test_data = { test };
+ auto test_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
+ auto *data = static_cast<struct test_data *>(arg_1);
+ ISL_CPP_TRY {
+ auto ret = (data->func)(manage_copy(arg_0));
+ return ret ? isl_bool_true : isl_bool_false;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_bool_error;
+ }
+ };
+ auto res = isl_schedule_node_every_descendant(get(), test_lambda, &test_data);
+ if (test_data.eptr)
+ std::rethrow_exception(test_data.eptr);
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const
+isl::schedule_node schedule_node::first_child() const
{
- if (!ptr || pma2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_product(copy(), pma2.release());
+ auto res = isl_schedule_node_first_child(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::pullback(isl::multi_aff ma) const
+void schedule_node::foreach_ancestor_top_down(const std::function<void(isl::schedule_node)> &fn) const
{
- if (!ptr || ma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release());
- if (!res)
+ struct fn_data {
+ std::function<void(isl::schedule_node)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_stat {
+ auto *data = static_cast<struct fn_data *>(arg_1);
+ ISL_CPP_TRY {
+ (data->func)(manage_copy(arg_0));
+ return isl_stat_ok;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_stat_error;
+ }
+ };
+ auto res = isl_schedule_node_foreach_ancestor_top_down(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return;
}
-isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const
+void schedule_node::foreach_descendant_top_down(const std::function<bool(isl::schedule_node)> &fn) const
{
- if (!ptr || pma2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release());
- if (!res)
+ struct fn_data {
+ std::function<bool(isl::schedule_node)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
+ auto *data = static_cast<struct fn_data *>(arg_1);
+ ISL_CPP_TRY {
+ auto ret = (data->func)(manage_copy(arg_0));
+ return ret ? isl_bool_true : isl_bool_false;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_bool_error;
+ }
+ };
+ auto res = isl_schedule_node_foreach_descendant_top_down(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return;
}
-isl::pw_multi_aff pw_multi_aff::range_factor_domain() const
+isl::schedule_node schedule_node::from_domain(isl::union_set domain)
{
- if (!ptr)
+ if (domain.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = domain.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_range_factor_domain(copy());
+ auto res = isl_schedule_node_from_domain(domain.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::range_factor_range() const
+isl::schedule_node schedule_node::from_extension(isl::union_map extension)
{
- if (!ptr)
+ if (extension.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = extension.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_range_factor_range(copy());
+ auto res = isl_schedule_node_from_extension(extension.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::range_map(isl::space space)
+isl::schedule_node schedule_node::graft_after(isl::schedule_node graft) const
{
- if (space.is_null())
+ if (!ptr || graft.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_range_map(space.release());
+ auto res = isl_schedule_node_graft_after(copy(), graft.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const
+isl::schedule_node schedule_node::graft_before(isl::schedule_node graft) const
{
- if (!ptr || pma2.is_null())
+ if (!ptr || graft.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_range_product(copy(), pma2.release());
+ auto res = isl_schedule_node_graft_before(copy(), graft.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::scale(isl::val v) const
+bool schedule_node::has_children() const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_scale_val(copy(), v.release());
- if (!res)
+ auto res = isl_schedule_node_has_children(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::pw_multi_aff pw_multi_aff::scale(long v) const
+bool schedule_node::has_next_sibling() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale(isl::val(ctx(), v));
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_has_next_sibling(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-isl::pw_multi_aff pw_multi_aff::scale_down(isl::val v) const
+bool schedule_node::has_parent() const
{
- if (!ptr || v.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_scale_down_val(copy(), v.release());
- if (!res)
+ auto res = isl_schedule_node_has_parent(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::pw_multi_aff pw_multi_aff::scale_down(long v) const
+bool schedule_node::has_previous_sibling() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->scale_down(isl::val(ctx(), v));
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_has_previous_sibling(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-isl::pw_multi_aff pw_multi_aff::sub(isl::pw_multi_aff pma2) const
+isl::schedule_node schedule_node::insert_context(isl::set context) const
{
- if (!ptr || pma2.is_null())
+ if (!ptr || context.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_sub(copy(), pma2.release());
+ auto res = isl_schedule_node_insert_context(copy(), context.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::subtract_domain(isl::set set) const
+isl::schedule_node schedule_node::insert_filter(isl::union_set filter) const
{
- if (!ptr || set.is_null())
+ if (!ptr || filter.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release());
+ auto res = isl_schedule_node_insert_filter(copy(), filter.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::union_add(isl::pw_multi_aff pma2) const
+isl::schedule_node schedule_node::insert_guard(isl::set context) const
{
- if (!ptr || pma2.is_null())
+ if (!ptr || context.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_union_add(copy(), pma2.release());
+ auto res = isl_schedule_node_insert_guard(copy(), context.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff::zero(isl::space space)
+isl::schedule_node schedule_node::insert_mark(isl::id mark) const
{
- if (space.is_null())
+ if (!ptr || mark.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_zero(space.release());
+ auto res = isl_schedule_node_insert_mark(copy(), mark.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff &obj)
+isl::schedule_node schedule_node::insert_mark(const std::string &mark) const
{
- if (!obj.get())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_multi_aff_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_pw_multi_aff_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
-}
-
-// implementations for isl::pw_multi_aff_list
-pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) {
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return pw_multi_aff_list(ptr);
-}
-pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) {
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_multi_aff_list_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_pw_multi_aff_list_copy(ptr);
if (!ptr)
- exception::throw_last_error(saved_ctx);
- return pw_multi_aff_list(ptr);
-}
-
-pw_multi_aff_list::pw_multi_aff_list()
- : ptr(nullptr) {}
-
-pw_multi_aff_list::pw_multi_aff_list(const pw_multi_aff_list &obj)
- : ptr(nullptr)
-{
- if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_multi_aff_list_get_ctx(obj.ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
- exception::throw_last_error(saved_ctx);
-}
-
-pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr)
- : ptr(ptr) {}
-
-pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, int n)
-{
- auto saved_ctx = ctx;
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n);
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
+ return this->insert_mark(isl::id(ctx(), mark));
}
-pw_multi_aff_list::pw_multi_aff_list(isl::pw_multi_aff el)
+isl::schedule_node schedule_node::insert_partial_schedule(isl::multi_union_pw_aff schedule) const
{
- if (el.is_null())
+ if (!ptr || schedule.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = el.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release());
+ auto res = isl_schedule_node_insert_partial_schedule(copy(), schedule.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-pw_multi_aff_list &pw_multi_aff_list::operator=(pw_multi_aff_list obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-pw_multi_aff_list::~pw_multi_aff_list() {
- if (ptr)
- isl_pw_multi_aff_list_free(ptr);
-}
-
-__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & {
- return isl_pw_multi_aff_list_copy(ptr);
-}
-
-__isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const {
- return ptr;
-}
-
-__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() {
- isl_pw_multi_aff_list *tmp = ptr;
- ptr = nullptr;
- return tmp;
-}
-
-bool pw_multi_aff_list::is_null() const {
- return ptr == nullptr;
-}
-
-isl::ctx pw_multi_aff_list::ctx() const {
- return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr));
+ return manage(res);
}
-isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const
+isl::schedule_node schedule_node::insert_sequence(isl::union_set_list filters) const
{
- if (!ptr || el.is_null())
+ if (!ptr || filters.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_list_add(copy(), el.release());
+ auto res = isl_schedule_node_insert_sequence(copy(), filters.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff_list pw_multi_aff_list::clear() const
+isl::schedule_node schedule_node::insert_set(isl::union_set_list filters) const
{
- if (!ptr)
+ if (!ptr || filters.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_list_clear(copy());
+ auto res = isl_schedule_node_insert_set(copy(), filters.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const
+bool schedule_node::is_equal(const isl::schedule_node &node2) const
{
- if (!ptr || list2.is_null())
+ if (!ptr || node2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_list_concat(copy(), list2.release());
- if (!res)
+ auto res = isl_schedule_node_is_equal(get(), node2.get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const
+bool schedule_node::is_subtree_anchored() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_list_drop(copy(), first, n);
- if (!res)
+ auto res = isl_schedule_node_is_subtree_anchored(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-void pw_multi_aff_list::foreach(const std::function<void(isl::pw_multi_aff)> &fn) const
+isl::schedule_node schedule_node::map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
struct fn_data {
- std::function<void(isl::pw_multi_aff)> func;
+ std::function<isl::schedule_node(isl::schedule_node)> func;
std::exception_ptr eptr;
} fn_data = { fn };
- auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat {
+ auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * {
auto *data = static_cast<struct fn_data *>(arg_1);
ISL_CPP_TRY {
- (data->func)(manage(arg_0));
- return isl_stat_ok;
+ auto ret = (data->func)(manage(arg_0));
+ return ret.release();
} ISL_CPP_CATCH_ALL {
data->eptr = std::current_exception();
- return isl_stat_error;
+ return NULL;
}
};
- auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data);
+ auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data);
if (fn_data.eptr)
std::rethrow_exception(fn_data.eptr);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+unsigned schedule_node::n_children() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_n_children(get());
if (res < 0)
exception::throw_last_error(saved_ctx);
- return;
+ return res;
}
-isl::pw_multi_aff pw_multi_aff_list::at(int index) const
+isl::schedule_node schedule_node::next_sibling() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_list_get_at(get(), index);
+ auto res = isl_schedule_node_next_sibling(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const
+isl::schedule_node schedule_node::order_after(isl::union_set filter) const
{
- return at(index);
+ if (!ptr || filter.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_order_after(copy(), filter.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::pw_multi_aff_list pw_multi_aff_list::insert(unsigned int pos, isl::pw_multi_aff el) const
+isl::schedule_node schedule_node::order_before(isl::union_set filter) const
{
- if (!ptr || el.is_null())
+ if (!ptr || filter.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release());
+ auto res = isl_schedule_node_order_before(copy(), filter.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-unsigned pw_multi_aff_list::size() const
+isl::schedule_node schedule_node::parent() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_pw_multi_aff_list_size(get());
- if (res < 0)
+ auto res = isl_schedule_node_parent(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff_list &obj)
+isl::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_pw_multi_aff_list_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_pw_multi_aff_list_to_str(obj.get());
- if (!str)
+ auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::schedule
-schedule manage(__isl_take isl_schedule *ptr) {
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return schedule(ptr);
+isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const
+{
+ return prefix_schedule_multi_union_pw_aff();
}
-schedule manage_copy(__isl_keep isl_schedule *ptr) {
+
+isl::union_map schedule_node::prefix_schedule_union_map() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_get_ctx(ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_schedule_copy(ptr);
- if (!ptr)
+ auto res = isl_schedule_node_get_prefix_schedule_union_map(get());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return schedule(ptr);
+ return manage(res);
}
-schedule::schedule()
- : ptr(nullptr) {}
+isl::union_map schedule_node::get_prefix_schedule_union_map() const
+{
+ return prefix_schedule_union_map();
+}
-schedule::schedule(const schedule &obj)
- : ptr(nullptr)
+isl::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const
{
- if (!obj.ptr)
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_get_ctx(obj.ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
+ auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get());
+ if (!res)
exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-schedule::schedule(__isl_take isl_schedule *ptr)
- : ptr(ptr) {}
+isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const
+{
+ return prefix_schedule_union_pw_multi_aff();
+}
-schedule::schedule(isl::ctx ctx, const std::string &str)
+isl::schedule_node schedule_node::previous_sibling() const
{
- auto saved_ctx = ctx;
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_read_from_str(ctx.release(), str.c_str());
+ auto res = isl_schedule_node_previous_sibling(copy());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-schedule &schedule::operator=(schedule obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::schedule_node schedule_node::root() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_root(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-schedule::~schedule() {
- if (ptr)
- isl_schedule_free(ptr);
+isl::schedule schedule_node::schedule() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_get_schedule(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-__isl_give isl_schedule *schedule::copy() const & {
- return isl_schedule_copy(ptr);
+isl::schedule schedule_node::get_schedule() const
+{
+ return schedule();
}
-__isl_keep isl_schedule *schedule::get() const {
- return ptr;
+isl::schedule_node schedule_node::shared_ancestor(const isl::schedule_node &node2) const
+{
+ if (!ptr || node2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-__isl_give isl_schedule *schedule::release() {
- isl_schedule *tmp = ptr;
- ptr = nullptr;
- return tmp;
+isl::schedule_node schedule_node::get_shared_ancestor(const isl::schedule_node &node2) const
+{
+ return shared_ancestor(node2);
}
-bool schedule::is_null() const {
- return ptr == nullptr;
+unsigned schedule_node::tree_depth() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_get_tree_depth(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-isl::ctx schedule::ctx() const {
- return isl::ctx(isl_schedule_get_ctx(ptr));
+unsigned schedule_node::get_tree_depth() const
+{
+ return tree_depth();
}
-isl::schedule schedule::from_domain(isl::union_set domain)
+inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj)
{
- if (domain.is_null())
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = domain.ctx();
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_from_domain(domain.release());
- if (!res)
+ char *str = isl_schedule_node_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::schedule_node_band
+schedule_node_band::schedule_node_band()
+ : schedule_node() {}
+
+schedule_node_band::schedule_node_band(const schedule_node_band &obj)
+ : schedule_node(obj)
+{
+}
+
+schedule_node_band::schedule_node_band(__isl_take isl_schedule_node *ptr)
+ : schedule_node(ptr) {}
+
+schedule_node_band &schedule_node_band::operator=(schedule_node_band obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx schedule_node_band::ctx() const {
+ return isl::ctx(isl_schedule_node_get_ctx(ptr));
}
-isl::union_set schedule::domain() const
+isl::union_set schedule_node_band::ast_build_options() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_get_domain(get());
+ auto res = isl_schedule_node_band_get_ast_build_options(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_set schedule::get_domain() const
+isl::union_set schedule_node_band::get_ast_build_options() const
{
- return domain();
+ return ast_build_options();
}
-isl::union_map schedule::map() const
+isl::set schedule_node_band::ast_isolate_option() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_get_map(get());
+ auto res = isl_schedule_node_band_get_ast_isolate_option(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map schedule::get_map() const
+isl::set schedule_node_band::get_ast_isolate_option() const
{
- return map();
+ return ast_isolate_option();
}
-isl::schedule_node schedule::root() const
+bool schedule_node_band::member_get_coincident(int pos) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_get_root(get());
- if (!res)
+ auto res = isl_schedule_node_band_member_get_coincident(get(), pos);
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::schedule_node schedule::get_root() const
-{
- return root();
+ return res;
}
-isl::schedule schedule::pullback(isl::union_pw_multi_aff upma) const
+schedule_node_band schedule_node_band::member_set_coincident(int pos, int coincident) const
{
- if (!ptr || upma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_pullback_union_pw_multi_aff(copy(), upma.release());
+ auto res = isl_schedule_node_band_member_set_coincident(copy(), pos, coincident);
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return manage(res).as<schedule_node_band>();
}
-inline std::ostream &operator<<(std::ostream &os, const schedule &obj)
+schedule_node_band schedule_node_band::mod(isl::multi_val mv) const
{
- if (!obj.get())
+ if (!ptr || mv.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_to_str(obj.get());
- if (!str)
+ auto res = isl_schedule_node_band_mod(copy(), mv.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res).as<schedule_node_band>();
}
-// implementations for isl::schedule_constraints
-schedule_constraints manage(__isl_take isl_schedule_constraints *ptr) {
+unsigned schedule_node_band::n_member() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return schedule_constraints(ptr);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_band_n_member(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr) {
+
+isl::multi_union_pw_aff schedule_node_band::partial_schedule() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_constraints_get_ctx(ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_schedule_constraints_copy(ptr);
- if (!ptr)
+ auto res = isl_schedule_node_band_get_partial_schedule(get());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return schedule_constraints(ptr);
+ return manage(res);
}
-schedule_constraints::schedule_constraints()
- : ptr(nullptr) {}
+isl::multi_union_pw_aff schedule_node_band::get_partial_schedule() const
+{
+ return partial_schedule();
+}
-schedule_constraints::schedule_constraints(const schedule_constraints &obj)
- : ptr(nullptr)
+bool schedule_node_band::permutable() const
{
- if (!obj.ptr)
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_constraints_get_ctx(obj.ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
+ auto res = isl_schedule_node_band_get_permutable(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
+ return res;
}
-schedule_constraints::schedule_constraints(__isl_take isl_schedule_constraints *ptr)
- : ptr(ptr) {}
+bool schedule_node_band::get_permutable() const
+{
+ return permutable();
+}
-schedule_constraints::schedule_constraints(isl::ctx ctx, const std::string &str)
+schedule_node_band schedule_node_band::scale(isl::multi_val mv) const
{
- auto saved_ctx = ctx;
+ if (!ptr || mv.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_read_from_str(ctx.release(), str.c_str());
+ auto res = isl_schedule_node_band_scale(copy(), mv.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-schedule_constraints &schedule_constraints::operator=(schedule_constraints obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-schedule_constraints::~schedule_constraints() {
- if (ptr)
- isl_schedule_constraints_free(ptr);
-}
-
-__isl_give isl_schedule_constraints *schedule_constraints::copy() const & {
- return isl_schedule_constraints_copy(ptr);
-}
-
-__isl_keep isl_schedule_constraints *schedule_constraints::get() const {
- return ptr;
-}
-
-__isl_give isl_schedule_constraints *schedule_constraints::release() {
- isl_schedule_constraints *tmp = ptr;
- ptr = nullptr;
- return tmp;
+ return manage(res).as<schedule_node_band>();
}
-bool schedule_constraints::is_null() const {
- return ptr == nullptr;
+schedule_node_band schedule_node_band::scale_down(isl::multi_val mv) const
+{
+ if (!ptr || mv.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_band_scale_down(copy(), mv.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res).as<schedule_node_band>();
}
-isl::ctx schedule_constraints::ctx() const {
- return isl::ctx(isl_schedule_constraints_get_ctx(ptr));
+schedule_node_band schedule_node_band::set_ast_build_options(isl::union_set options) const
+{
+ if (!ptr || options.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res).as<schedule_node_band>();
}
-isl::schedule schedule_constraints::compute_schedule() const
+schedule_node_band schedule_node_band::set_permutable(int permutable) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_compute_schedule(copy());
+ auto res = isl_schedule_node_band_set_permutable(copy(), permutable);
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return manage(res).as<schedule_node_band>();
}
-isl::union_map schedule_constraints::coincidence() const
+schedule_node_band schedule_node_band::shift(isl::multi_union_pw_aff shift) const
{
- if (!ptr)
+ if (!ptr || shift.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_get_coincidence(get());
+ auto res = isl_schedule_node_band_shift(copy(), shift.release());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return manage(res).as<schedule_node_band>();
}
-isl::union_map schedule_constraints::get_coincidence() const
+schedule_node_band schedule_node_band::split(int pos) const
{
- return coincidence();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_band_split(copy(), pos);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res).as<schedule_node_band>();
}
-isl::union_map schedule_constraints::conditional_validity() const
+schedule_node_band schedule_node_band::tile(isl::multi_val sizes) const
{
- if (!ptr)
+ if (!ptr || sizes.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_get_conditional_validity(get());
+ auto res = isl_schedule_node_band_tile(copy(), sizes.release());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return manage(res).as<schedule_node_band>();
}
-isl::union_map schedule_constraints::get_conditional_validity() const
+schedule_node_band schedule_node_band::member_set_ast_loop_default(int pos) const
{
- return conditional_validity();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_default);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res).as<schedule_node_band>();
}
-isl::union_map schedule_constraints::conditional_validity_condition() const
+schedule_node_band schedule_node_band::member_set_ast_loop_atomic(int pos) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_get_conditional_validity_condition(get());
+ auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_atomic);
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return manage(res).as<schedule_node_band>();
}
-isl::union_map schedule_constraints::get_conditional_validity_condition() const
+schedule_node_band schedule_node_band::member_set_ast_loop_unroll(int pos) const
{
- return conditional_validity_condition();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_unroll);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res).as<schedule_node_band>();
}
-isl::set schedule_constraints::context() const
+schedule_node_band schedule_node_band::member_set_ast_loop_separate(int pos) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_get_context(get());
+ auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_separate);
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return manage(res).as<schedule_node_band>();
}
-isl::set schedule_constraints::get_context() const
+inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj)
{
- return context();
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_schedule_node_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::schedule_node_context
+schedule_node_context::schedule_node_context()
+ : schedule_node() {}
+
+schedule_node_context::schedule_node_context(const schedule_node_context &obj)
+ : schedule_node(obj)
+{
+}
+
+schedule_node_context::schedule_node_context(__isl_take isl_schedule_node *ptr)
+ : schedule_node(ptr) {}
+
+schedule_node_context &schedule_node_context::operator=(schedule_node_context obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx schedule_node_context::ctx() const {
+ return isl::ctx(isl_schedule_node_get_ctx(ptr));
}
-isl::union_set schedule_constraints::domain() const
+isl::set schedule_node_context::context() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_get_domain(get());
+ auto res = isl_schedule_node_context_get_context(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_set schedule_constraints::get_domain() const
+isl::set schedule_node_context::get_context() const
{
- return domain();
+ return context();
}
-isl::union_map schedule_constraints::proximity() const
+inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj)
{
- if (!ptr)
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_get_proximity(get());
- if (!res)
+ char *str = isl_schedule_node_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ os << str;
+ free(str);
+ return os;
}
-isl::union_map schedule_constraints::get_proximity() const
+// implementations for isl::schedule_node_domain
+schedule_node_domain::schedule_node_domain()
+ : schedule_node() {}
+
+schedule_node_domain::schedule_node_domain(const schedule_node_domain &obj)
+ : schedule_node(obj)
{
- return proximity();
}
-isl::union_map schedule_constraints::validity() const
+schedule_node_domain::schedule_node_domain(__isl_take isl_schedule_node *ptr)
+ : schedule_node(ptr) {}
+
+schedule_node_domain &schedule_node_domain::operator=(schedule_node_domain obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx schedule_node_domain::ctx() const {
+ return isl::ctx(isl_schedule_node_get_ctx(ptr));
+}
+
+isl::union_set schedule_node_domain::domain() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_get_validity(get());
+ auto res = isl_schedule_node_domain_get_domain(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map schedule_constraints::get_validity() const
+isl::union_set schedule_node_domain::get_domain() const
{
- return validity();
+ return domain();
}
-isl::schedule_constraints schedule_constraints::on_domain(isl::union_set domain)
+inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj)
{
- if (domain.is_null())
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = domain.ctx();
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_on_domain(domain.release());
- if (!res)
+ char *str = isl_schedule_node_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ os << str;
+ free(str);
+ return os;
}
-isl::schedule_constraints schedule_constraints::set_coincidence(isl::union_map coincidence) const
+// implementations for isl::schedule_node_expansion
+schedule_node_expansion::schedule_node_expansion()
+ : schedule_node() {}
+
+schedule_node_expansion::schedule_node_expansion(const schedule_node_expansion &obj)
+ : schedule_node(obj)
{
- if (!ptr || coincidence.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_set_coincidence(copy(), coincidence.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
}
-isl::schedule_constraints schedule_constraints::set_conditional_validity(isl::union_map condition, isl::union_map validity) const
+schedule_node_expansion::schedule_node_expansion(__isl_take isl_schedule_node *ptr)
+ : schedule_node(ptr) {}
+
+schedule_node_expansion &schedule_node_expansion::operator=(schedule_node_expansion obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx schedule_node_expansion::ctx() const {
+ return isl::ctx(isl_schedule_node_get_ctx(ptr));
+}
+
+isl::union_pw_multi_aff schedule_node_expansion::contraction() const
{
- if (!ptr || condition.is_null() || validity.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_set_conditional_validity(copy(), condition.release(), validity.release());
+ auto res = isl_schedule_node_expansion_get_contraction(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::schedule_constraints schedule_constraints::set_context(isl::set context) const
+isl::union_pw_multi_aff schedule_node_expansion::get_contraction() const
{
- if (!ptr || context.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_set_context(copy(), context.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return contraction();
}
-isl::schedule_constraints schedule_constraints::set_proximity(isl::union_map proximity) const
+isl::union_map schedule_node_expansion::expansion() const
{
- if (!ptr || proximity.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_set_proximity(copy(), proximity.release());
+ auto res = isl_schedule_node_expansion_get_expansion(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::schedule_constraints schedule_constraints::set_validity(isl::union_map validity) const
+isl::union_map schedule_node_expansion::get_expansion() const
{
- if (!ptr || validity.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_constraints_set_validity(copy(), validity.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return expansion();
}
-inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj)
+inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_constraints_get_ctx(obj.get());
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_constraints_to_str(obj.get());
+ char *str = isl_schedule_node_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::schedule_node
-schedule_node manage(__isl_take isl_schedule_node *ptr) {
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return schedule_node(ptr);
+// implementations for isl::schedule_node_extension
+schedule_node_extension::schedule_node_extension()
+ : schedule_node() {}
+
+schedule_node_extension::schedule_node_extension(const schedule_node_extension &obj)
+ : schedule_node(obj)
+{
}
-schedule_node manage_copy(__isl_keep isl_schedule_node *ptr) {
+
+schedule_node_extension::schedule_node_extension(__isl_take isl_schedule_node *ptr)
+ : schedule_node(ptr) {}
+
+schedule_node_extension &schedule_node_extension::operator=(schedule_node_extension obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx schedule_node_extension::ctx() const {
+ return isl::ctx(isl_schedule_node_get_ctx(ptr));
+}
+
+isl::union_map schedule_node_extension::extension() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_schedule_node_copy(ptr);
- if (!ptr)
+ auto res = isl_schedule_node_extension_get_extension(get());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return schedule_node(ptr);
+ return manage(res);
}
-schedule_node::schedule_node()
- : ptr(nullptr) {}
+isl::union_map schedule_node_extension::get_extension() const
+{
+ return extension();
+}
-schedule_node::schedule_node(const schedule_node &obj)
- : ptr(nullptr)
+inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj)
{
- if (!obj.ptr)
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.ptr);
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
+ char *str = isl_schedule_node_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
}
-schedule_node::schedule_node(__isl_take isl_schedule_node *ptr)
- : ptr(ptr) {}
+// implementations for isl::schedule_node_filter
+schedule_node_filter::schedule_node_filter()
+ : schedule_node() {}
-schedule_node &schedule_node::operator=(schedule_node obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+schedule_node_filter::schedule_node_filter(const schedule_node_filter &obj)
+ : schedule_node(obj)
+{
}
-schedule_node::~schedule_node() {
- if (ptr)
- isl_schedule_node_free(ptr);
-}
+schedule_node_filter::schedule_node_filter(__isl_take isl_schedule_node *ptr)
+ : schedule_node(ptr) {}
-__isl_give isl_schedule_node *schedule_node::copy() const & {
- return isl_schedule_node_copy(ptr);
+schedule_node_filter &schedule_node_filter::operator=(schedule_node_filter obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
}
-__isl_keep isl_schedule_node *schedule_node::get() const {
- return ptr;
+isl::ctx schedule_node_filter::ctx() const {
+ return isl::ctx(isl_schedule_node_get_ctx(ptr));
}
-__isl_give isl_schedule_node *schedule_node::release() {
- isl_schedule_node *tmp = ptr;
- ptr = nullptr;
- return tmp;
+isl::union_set schedule_node_filter::filter() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_schedule_node_filter_get_filter(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-bool schedule_node::is_null() const {
- return ptr == nullptr;
+isl::union_set schedule_node_filter::get_filter() const
+{
+ return filter();
}
-template <typename T, typename>
-bool schedule_node::isa_type(T subtype) const
+inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj)
{
- if (is_null())
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return isl_schedule_node_get_type(get()) == subtype;
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_schedule_node_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
}
-template <class T>
-bool schedule_node::isa() const
+
+// implementations for isl::schedule_node_guard
+schedule_node_guard::schedule_node_guard()
+ : schedule_node() {}
+
+schedule_node_guard::schedule_node_guard(const schedule_node_guard &obj)
+ : schedule_node(obj)
{
- return isa_type<decltype(T::type)>(T::type);
}
-template <class T>
-T schedule_node::as() const
-{
- if (!isa<T>())
- exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__);
- return T(copy());
+
+schedule_node_guard::schedule_node_guard(__isl_take isl_schedule_node *ptr)
+ : schedule_node(ptr) {}
+
+schedule_node_guard &schedule_node_guard::operator=(schedule_node_guard obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
}
-isl::ctx schedule_node::ctx() const {
+isl::ctx schedule_node_guard::ctx() const {
return isl::ctx(isl_schedule_node_get_ctx(ptr));
}
-isl::schedule_node schedule_node::ancestor(int generation) const
+isl::set schedule_node_guard::guard() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_ancestor(copy(), generation);
+ auto res = isl_schedule_node_guard_get_guard(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::schedule_node schedule_node::child(int pos) const
+isl::set schedule_node_guard::get_guard() const
{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_child(copy(), pos);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return guard();
}
-bool schedule_node::every_descendant(const std::function<bool(isl::schedule_node)> &test) const
+inline std::ostream &operator<<(std::ostream &os, const schedule_node_guard &obj)
{
- if (!ptr)
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct test_data {
- std::function<bool(isl::schedule_node)> func;
- std::exception_ptr eptr;
- } test_data = { test };
- auto test_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
- auto *data = static_cast<struct test_data *>(arg_1);
- ISL_CPP_TRY {
- auto ret = (data->func)(manage_copy(arg_0));
- return ret ? isl_bool_true : isl_bool_false;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_bool_error;
- }
- };
- auto res = isl_schedule_node_every_descendant(get(), test_lambda, &test_data);
- if (test_data.eptr)
- std::rethrow_exception(test_data.eptr);
- if (res < 0)
+ char *str = isl_schedule_node_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return res;
+ os << str;
+ free(str);
+ return os;
}
-isl::schedule_node schedule_node::first_child() const
+// implementations for isl::schedule_node_leaf
+schedule_node_leaf::schedule_node_leaf()
+ : schedule_node() {}
+
+schedule_node_leaf::schedule_node_leaf(const schedule_node_leaf &obj)
+ : schedule_node(obj)
{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_first_child(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
}
-void schedule_node::foreach_ancestor_top_down(const std::function<void(isl::schedule_node)> &fn) const
+schedule_node_leaf::schedule_node_leaf(__isl_take isl_schedule_node *ptr)
+ : schedule_node(ptr) {}
+
+schedule_node_leaf &schedule_node_leaf::operator=(schedule_node_leaf obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx schedule_node_leaf::ctx() const {
+ return isl::ctx(isl_schedule_node_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const schedule_node_leaf &obj)
{
- if (!ptr)
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct fn_data {
- std::function<void(isl::schedule_node)> func;
- std::exception_ptr eptr;
- } fn_data = { fn };
- auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_stat {
- auto *data = static_cast<struct fn_data *>(arg_1);
- ISL_CPP_TRY {
- (data->func)(manage_copy(arg_0));
- return isl_stat_ok;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_stat_error;
- }
- };
- auto res = isl_schedule_node_foreach_ancestor_top_down(get(), fn_lambda, &fn_data);
- if (fn_data.eptr)
- std::rethrow_exception(fn_data.eptr);
- if (res < 0)
+ char *str = isl_schedule_node_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return;
+ os << str;
+ free(str);
+ return os;
}
-void schedule_node::foreach_descendant_top_down(const std::function<bool(isl::schedule_node)> &fn) const
+// implementations for isl::schedule_node_mark
+schedule_node_mark::schedule_node_mark()
+ : schedule_node() {}
+
+schedule_node_mark::schedule_node_mark(const schedule_node_mark &obj)
+ : schedule_node(obj)
{
- if (!ptr)
+}
+
+schedule_node_mark::schedule_node_mark(__isl_take isl_schedule_node *ptr)
+ : schedule_node(ptr) {}
+
+schedule_node_mark &schedule_node_mark::operator=(schedule_node_mark obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx schedule_node_mark::ctx() const {
+ return isl::ctx(isl_schedule_node_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const schedule_node_mark &obj)
+{
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct fn_data {
- std::function<bool(isl::schedule_node)> func;
- std::exception_ptr eptr;
- } fn_data = { fn };
- auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
- auto *data = static_cast<struct fn_data *>(arg_1);
- ISL_CPP_TRY {
- auto ret = (data->func)(manage_copy(arg_0));
- return ret ? isl_bool_true : isl_bool_false;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_bool_error;
- }
- };
- auto res = isl_schedule_node_foreach_descendant_top_down(get(), fn_lambda, &fn_data);
- if (fn_data.eptr)
- std::rethrow_exception(fn_data.eptr);
- if (res < 0)
+ char *str = isl_schedule_node_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return;
+ os << str;
+ free(str);
+ return os;
}
-isl::schedule_node schedule_node::from_domain(isl::union_set domain)
+// implementations for isl::schedule_node_sequence
+schedule_node_sequence::schedule_node_sequence()
+ : schedule_node() {}
+
+schedule_node_sequence::schedule_node_sequence(const schedule_node_sequence &obj)
+ : schedule_node(obj)
{
- if (domain.is_null())
+}
+
+schedule_node_sequence::schedule_node_sequence(__isl_take isl_schedule_node *ptr)
+ : schedule_node(ptr) {}
+
+schedule_node_sequence &schedule_node_sequence::operator=(schedule_node_sequence obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx schedule_node_sequence::ctx() const {
+ return isl::ctx(isl_schedule_node_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const schedule_node_sequence &obj)
+{
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = domain.ctx();
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_from_domain(domain.release());
- if (!res)
+ char *str = isl_schedule_node_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ os << str;
+ free(str);
+ return os;
}
-isl::schedule_node schedule_node::from_extension(isl::union_map extension)
+// implementations for isl::schedule_node_set
+schedule_node_set::schedule_node_set()
+ : schedule_node() {}
+
+schedule_node_set::schedule_node_set(const schedule_node_set &obj)
+ : schedule_node(obj)
{
- if (extension.is_null())
+}
+
+schedule_node_set::schedule_node_set(__isl_take isl_schedule_node *ptr)
+ : schedule_node(ptr) {}
+
+schedule_node_set &schedule_node_set::operator=(schedule_node_set obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+isl::ctx schedule_node_set::ctx() const {
+ return isl::ctx(isl_schedule_node_get_ctx(ptr));
+}
+
+inline std::ostream &operator<<(std::ostream &os, const schedule_node_set &obj)
+{
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = extension.ctx();
+ auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_from_extension(extension.release());
- if (!res)
+ char *str = isl_schedule_node_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ os << str;
+ free(str);
+ return os;
}
-unsigned schedule_node::ancestor_child_position(const isl::schedule_node &ancestor) const
-{
- if (!ptr || ancestor.is_null())
+// implementations for isl::set
+set manage(__isl_take isl_set *ptr) {
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ return set(ptr);
+}
+set manage_copy(__isl_keep isl_set *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_set_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get());
- if (res < 0)
+ ptr = isl_set_copy(ptr);
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return res;
+ return set(ptr);
}
-unsigned schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const
-{
- return ancestor_child_position(ancestor);
-}
+set::set()
+ : ptr(nullptr) {}
-unsigned schedule_node::child_position() const
+set::set(const set &obj)
+ : ptr(nullptr)
{
- if (!ptr)
+ if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_set_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_get_child_position(get());
- if (res < 0)
+ ptr = obj.copy();
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return res;
}
-unsigned schedule_node::get_child_position() const
-{
- return child_position();
-}
+set::set(__isl_take isl_set *ptr)
+ : ptr(ptr) {}
-isl::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const
+set::set(isl::basic_set bset)
{
- if (!ptr)
+ if (bset.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = bset.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get());
+ auto res = isl_set_from_basic_set(bset.release());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const
-{
- return prefix_schedule_multi_union_pw_aff();
+ ptr = res;
}
-isl::union_map schedule_node::prefix_schedule_union_map() const
+set::set(isl::point pnt)
{
- if (!ptr)
+ if (pnt.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = pnt.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_get_prefix_schedule_union_map(get());
+ auto res = isl_set_from_point(pnt.release());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::union_map schedule_node::get_prefix_schedule_union_map() const
-{
- return prefix_schedule_union_map();
+ ptr = res;
}
-isl::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const
+set::set(isl::ctx ctx, const std::string &str)
{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = ctx;
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get());
+ auto res = isl_set_read_from_str(ctx.release(), str.c_str());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ ptr = res;
}
-isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const
-{
- return prefix_schedule_union_pw_multi_aff();
+set &set::operator=(set obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
}
-isl::schedule schedule_node::schedule() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_get_schedule(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+set::~set() {
+ if (ptr)
+ isl_set_free(ptr);
}
-isl::schedule schedule_node::get_schedule() const
-{
- return schedule();
+__isl_give isl_set *set::copy() const & {
+ return isl_set_copy(ptr);
}
-isl::schedule_node schedule_node::shared_ancestor(const isl::schedule_node &node2) const
-{
- if (!ptr || node2.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+__isl_keep isl_set *set::get() const {
+ return ptr;
}
-isl::schedule_node schedule_node::get_shared_ancestor(const isl::schedule_node &node2) const
-{
- return shared_ancestor(node2);
+__isl_give isl_set *set::release() {
+ isl_set *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
}
-unsigned schedule_node::tree_depth() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_get_tree_depth(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+bool set::is_null() const {
+ return ptr == nullptr;
}
-unsigned schedule_node::get_tree_depth() const
-{
- return tree_depth();
+isl::ctx set::ctx() const {
+ return isl::ctx(isl_set_get_ctx(ptr));
}
-isl::schedule_node schedule_node::graft_after(isl::schedule_node graft) const
+isl::basic_set set::affine_hull() const
{
- if (!ptr || graft.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_graft_after(copy(), graft.release());
+ auto res = isl_set_affine_hull(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::schedule_node schedule_node::graft_before(isl::schedule_node graft) const
+isl::set set::apply(isl::map map) const
{
- if (!ptr || graft.is_null())
+ if (!ptr || map.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_graft_before(copy(), graft.release());
+ auto res = isl_set_apply(copy(), map.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool schedule_node::has_children() const
+isl::union_set set::apply(const isl::union_map &umap) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_has_children(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::union_set(*this).apply(umap);
}
-bool schedule_node::has_next_sibling() const
+isl::set set::apply(const isl::basic_map &map) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_has_next_sibling(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return this->apply(isl::map(map));
}
-bool schedule_node::has_parent() const
+isl::pw_multi_aff set::as_pw_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_has_parent(get());
- if (res < 0)
+ auto res = isl_set_as_pw_multi_aff(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool schedule_node::has_previous_sibling() const
+isl::set set::as_set() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_has_previous_sibling(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::union_set(*this).as_set();
}
-isl::schedule_node schedule_node::insert_context(isl::set context) const
+isl::set set::bind(isl::multi_id tuple) const
{
- if (!ptr || context.is_null())
+ if (!ptr || tuple.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_insert_context(copy(), context.release());
+ auto res = isl_set_bind(copy(), tuple.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::schedule_node schedule_node::insert_filter(isl::union_set filter) const
+isl::set set::coalesce() const
{
- if (!ptr || filter.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_insert_filter(copy(), filter.release());
+ auto res = isl_set_coalesce(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::schedule_node schedule_node::insert_guard(isl::set context) const
+isl::set set::complement() const
{
- if (!ptr || context.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_insert_guard(copy(), context.release());
+ auto res = isl_set_complement(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::schedule_node schedule_node::insert_mark(isl::id mark) const
+isl::union_set set::compute_divs() const
{
- if (!ptr || mark.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_set(*this).compute_divs();
+}
+
+isl::set set::detect_equalities() const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_insert_mark(copy(), mark.release());
+ auto res = isl_set_detect_equalities(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::schedule_node schedule_node::insert_mark(const std::string &mark) const
+isl::val set::dim_max_val(int pos) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->insert_mark(isl::id(ctx(), mark));
-}
-
-isl::schedule_node schedule_node::insert_partial_schedule(isl::multi_union_pw_aff schedule) const
-{
- if (!ptr || schedule.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_insert_partial_schedule(copy(), schedule.release());
+ auto res = isl_set_dim_max_val(copy(), pos);
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::schedule_node schedule_node::insert_sequence(isl::union_set_list filters) const
+isl::val set::dim_min_val(int pos) const
{
- if (!ptr || filters.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_insert_sequence(copy(), filters.release());
+ auto res = isl_set_dim_min_val(copy(), pos);
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::schedule_node schedule_node::insert_set(isl::union_set_list filters) const
+isl::set set::empty(isl::space space)
{
- if (!ptr || filters.is_null())
+ if (space.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = space.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_insert_set(copy(), filters.release());
+ auto res = isl_set_empty(space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool schedule_node::is_equal(const isl::schedule_node &node2) const
+bool set::every_set(const std::function<bool(isl::set)> &test) const
{
- if (!ptr || node2.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_set(*this).every_set(test);
+}
+
+isl::set set::extract_set(const isl::space &space) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_set(*this).extract_set(space);
+}
+
+isl::set set::flatten() const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_is_equal(get(), node2.get());
- if (res < 0)
+ auto res = isl_set_flatten(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool schedule_node::is_subtree_anchored() const
+void set::foreach_basic_set(const std::function<void(isl::basic_set)> &fn) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_is_subtree_anchored(get());
+ struct fn_data {
+ std::function<void(isl::basic_set)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat {
+ auto *data = static_cast<struct fn_data *>(arg_1);
+ ISL_CPP_TRY {
+ (data->func)(manage(arg_0));
+ return isl_stat_ok;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_stat_error;
+ }
+ };
+ auto res = isl_set_foreach_basic_set(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
if (res < 0)
exception::throw_last_error(saved_ctx);
- return res;
+ return;
}
-isl::schedule_node schedule_node::map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const
+void set::foreach_point(const std::function<void(isl::point)> &fn) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
struct fn_data {
- std::function<isl::schedule_node(isl::schedule_node)> func;
+ std::function<void(isl::point)> func;
std::exception_ptr eptr;
} fn_data = { fn };
- auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * {
+ auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat {
auto *data = static_cast<struct fn_data *>(arg_1);
ISL_CPP_TRY {
- auto ret = (data->func)(manage(arg_0));
- return ret.release();
+ (data->func)(manage(arg_0));
+ return isl_stat_ok;
} ISL_CPP_CATCH_ALL {
data->eptr = std::current_exception();
- return NULL;
+ return isl_stat_error;
}
};
- auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data);
+ auto res = isl_set_foreach_point(get(), fn_lambda, &fn_data);
if (fn_data.eptr)
std::rethrow_exception(fn_data.eptr);
- if (!res)
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return;
}
-unsigned schedule_node::n_children() const
+void set::foreach_set(const std::function<void(isl::set)> &fn) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_n_children(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::union_set(*this).foreach_set(fn);
}
-isl::schedule_node schedule_node::next_sibling() const
+isl::set set::gist(isl::set context) const
{
- if (!ptr)
+ if (!ptr || context.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_next_sibling(copy());
+ auto res = isl_set_gist(copy(), context.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::schedule_node schedule_node::order_after(isl::union_set filter) const
+isl::union_set set::gist(const isl::union_set &context) const
{
- if (!ptr || filter.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_order_after(copy(), filter.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_set(*this).gist(context);
}
-isl::schedule_node schedule_node::order_before(isl::union_set filter) const
+isl::set set::gist(const isl::basic_set &context) const
{
- if (!ptr || filter.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_order_before(copy(), filter.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->gist(isl::set(context));
}
-isl::schedule_node schedule_node::parent() const
+isl::set set::gist(const isl::point &context) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_parent(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->gist(isl::set(context));
}
-isl::schedule_node schedule_node::previous_sibling() const
+isl::union_set set::gist_params(const isl::set &set) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_previous_sibling(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_set(*this).gist_params(set);
}
-isl::schedule_node schedule_node::root() const
+isl::map set::identity() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_root(copy());
+ auto res = isl_set_identity(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj)
-{
- if (!obj.get())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
-}
-
-// implementations for isl::schedule_node_band
-schedule_node_band::schedule_node_band()
- : schedule_node() {}
-
-schedule_node_band::schedule_node_band(const schedule_node_band &obj)
- : schedule_node(obj)
-{
-}
-
-schedule_node_band::schedule_node_band(__isl_take isl_schedule_node *ptr)
- : schedule_node(ptr) {}
-
-schedule_node_band &schedule_node_band::operator=(schedule_node_band obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx schedule_node_band::ctx() const {
- return isl::ctx(isl_schedule_node_get_ctx(ptr));
-}
-
-isl::union_set schedule_node_band::ast_build_options() const
+isl::pw_aff set::indicator_function() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_get_ast_build_options(get());
+ auto res = isl_set_indicator_function(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_set schedule_node_band::get_ast_build_options() const
-{
- return ast_build_options();
-}
-
-isl::set schedule_node_band::ast_isolate_option() const
+isl::map set::insert_domain(isl::space domain) const
{
- if (!ptr)
+ if (!ptr || domain.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_get_ast_isolate_option(get());
+ auto res = isl_set_insert_domain(copy(), domain.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set schedule_node_band::get_ast_isolate_option() const
-{
- return ast_isolate_option();
-}
-
-isl::multi_union_pw_aff schedule_node_band::partial_schedule() const
+isl::set set::intersect(isl::set set2) const
{
- if (!ptr)
+ if (!ptr || set2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_get_partial_schedule(get());
+ auto res = isl_set_intersect(copy(), set2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_union_pw_aff schedule_node_band::get_partial_schedule() const
-{
- return partial_schedule();
-}
-
-bool schedule_node_band::permutable() const
+isl::union_set set::intersect(const isl::union_set &uset2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_get_permutable(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
-}
-
-bool schedule_node_band::get_permutable() const
-{
- return permutable();
+ return isl::union_set(*this).intersect(uset2);
}
-bool schedule_node_band::member_get_coincident(int pos) const
+isl::set set::intersect(const isl::basic_set &set2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_member_get_coincident(get(), pos);
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return this->intersect(isl::set(set2));
}
-schedule_node_band schedule_node_band::member_set_coincident(int pos, int coincident) const
+isl::set set::intersect(const isl::point &set2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_member_set_coincident(copy(), pos, coincident);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return this->intersect(isl::set(set2));
}
-schedule_node_band schedule_node_band::mod(isl::multi_val mv) const
+isl::set set::intersect_params(isl::set params) const
{
- if (!ptr || mv.is_null())
+ if (!ptr || params.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_mod(copy(), mv.release());
+ auto res = isl_set_intersect_params(copy(), params.release());
if (!res)
exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return manage(res);
}
-unsigned schedule_node_band::n_member() const
+bool set::involves_locals() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_n_member(get());
+ auto res = isl_set_involves_locals(get());
if (res < 0)
exception::throw_last_error(saved_ctx);
return res;
}
-schedule_node_band schedule_node_band::scale(isl::multi_val mv) const
+bool set::is_disjoint(const isl::set &set2) const
{
- if (!ptr || mv.is_null())
+ if (!ptr || set2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_scale(copy(), mv.release());
- if (!res)
+ auto res = isl_set_is_disjoint(get(), set2.get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return res;
}
-schedule_node_band schedule_node_band::scale_down(isl::multi_val mv) const
+bool set::is_disjoint(const isl::union_set &uset2) const
{
- if (!ptr || mv.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_scale_down(copy(), mv.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return isl::union_set(*this).is_disjoint(uset2);
}
-schedule_node_band schedule_node_band::set_ast_build_options(isl::union_set options) const
+bool set::is_disjoint(const isl::basic_set &set2) const
{
- if (!ptr || options.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return this->is_disjoint(isl::set(set2));
}
-schedule_node_band schedule_node_band::set_permutable(int permutable) const
+bool set::is_disjoint(const isl::point &set2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_set_permutable(copy(), permutable);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return this->is_disjoint(isl::set(set2));
}
-schedule_node_band schedule_node_band::shift(isl::multi_union_pw_aff shift) const
+bool set::is_empty() const
{
- if (!ptr || shift.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_shift(copy(), shift.release());
- if (!res)
+ auto res = isl_set_is_empty(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return res;
}
-schedule_node_band schedule_node_band::split(int pos) const
+bool set::is_equal(const isl::set &set2) const
{
- if (!ptr)
+ if (!ptr || set2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_split(copy(), pos);
- if (!res)
+ auto res = isl_set_is_equal(get(), set2.get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return res;
}
-schedule_node_band schedule_node_band::tile(isl::multi_val sizes) const
+bool set::is_equal(const isl::union_set &uset2) const
{
- if (!ptr || sizes.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_tile(copy(), sizes.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return isl::union_set(*this).is_equal(uset2);
}
-schedule_node_band schedule_node_band::member_set_ast_loop_default(int pos) const
+bool set::is_equal(const isl::basic_set &set2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_default);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return this->is_equal(isl::set(set2));
}
-schedule_node_band schedule_node_band::member_set_ast_loop_atomic(int pos) const
+bool set::is_equal(const isl::point &set2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_atomic);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return this->is_equal(isl::set(set2));
}
-schedule_node_band schedule_node_band::member_set_ast_loop_unroll(int pos) const
+bool set::is_singleton() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_unroll);
- if (!res)
+ auto res = isl_set_is_singleton(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return res;
}
-schedule_node_band schedule_node_band::member_set_ast_loop_separate(int pos) const
+bool set::is_strict_subset(const isl::set &set2) const
{
- if (!ptr)
+ if (!ptr || set2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_separate);
- if (!res)
+ auto res = isl_set_is_strict_subset(get(), set2.get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res).as<schedule_node_band>();
+ return res;
}
-inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj)
+bool set::is_strict_subset(const isl::union_set &uset2) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return isl::union_set(*this).is_strict_subset(uset2);
}
-// implementations for isl::schedule_node_context
-schedule_node_context::schedule_node_context()
- : schedule_node() {}
-
-schedule_node_context::schedule_node_context(const schedule_node_context &obj)
- : schedule_node(obj)
+bool set::is_strict_subset(const isl::basic_set &set2) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->is_strict_subset(isl::set(set2));
}
-schedule_node_context::schedule_node_context(__isl_take isl_schedule_node *ptr)
- : schedule_node(ptr) {}
-
-schedule_node_context &schedule_node_context::operator=(schedule_node_context obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx schedule_node_context::ctx() const {
- return isl::ctx(isl_schedule_node_get_ctx(ptr));
+bool set::is_strict_subset(const isl::point &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->is_strict_subset(isl::set(set2));
}
-isl::set schedule_node_context::context() const
+bool set::is_subset(const isl::set &set2) const
{
- if (!ptr)
+ if (!ptr || set2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_context_get_context(get());
- if (!res)
+ auto res = isl_set_is_subset(get(), set2.get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::set schedule_node_context::get_context() const
+bool set::is_subset(const isl::union_set &uset2) const
{
- return context();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_set(*this).is_subset(uset2);
}
-inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj)
+bool set::is_subset(const isl::basic_set &set2) const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return this->is_subset(isl::set(set2));
}
-// implementations for isl::schedule_node_domain
-schedule_node_domain::schedule_node_domain()
- : schedule_node() {}
-
-schedule_node_domain::schedule_node_domain(const schedule_node_domain &obj)
- : schedule_node(obj)
+bool set::is_subset(const isl::point &set2) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->is_subset(isl::set(set2));
}
-schedule_node_domain::schedule_node_domain(__isl_take isl_schedule_node *ptr)
- : schedule_node(ptr) {}
-
-schedule_node_domain &schedule_node_domain::operator=(schedule_node_domain obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx schedule_node_domain::ctx() const {
- return isl::ctx(isl_schedule_node_get_ctx(ptr));
-}
-
-isl::union_set schedule_node_domain::domain() const
+bool set::is_wrapping() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_domain_get_domain(get());
- if (!res)
+ auto res = isl_set_is_wrapping(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::union_set schedule_node_domain::get_domain() const
+bool set::isa_set() const
{
- return domain();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_set(*this).isa_set();
}
-inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj)
+isl::set set::lexmax() const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
+ auto res = isl_set_lexmax(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
-}
-
-// implementations for isl::schedule_node_expansion
-schedule_node_expansion::schedule_node_expansion()
- : schedule_node() {}
-
-schedule_node_expansion::schedule_node_expansion(const schedule_node_expansion &obj)
- : schedule_node(obj)
-{
-}
-
-schedule_node_expansion::schedule_node_expansion(__isl_take isl_schedule_node *ptr)
- : schedule_node(ptr) {}
-
-schedule_node_expansion &schedule_node_expansion::operator=(schedule_node_expansion obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx schedule_node_expansion::ctx() const {
- return isl::ctx(isl_schedule_node_get_ctx(ptr));
+ return manage(res);
}
-isl::union_pw_multi_aff schedule_node_expansion::contraction() const
+isl::pw_multi_aff set::lexmax_pw_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_expansion_get_contraction(get());
+ auto res = isl_set_lexmax_pw_multi_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_pw_multi_aff schedule_node_expansion::get_contraction() const
-{
- return contraction();
-}
-
-isl::union_map schedule_node_expansion::expansion() const
+isl::set set::lexmin() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_expansion_get_expansion(get());
+ auto res = isl_set_lexmin(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map schedule_node_expansion::get_expansion() const
+isl::pw_multi_aff set::lexmin_pw_multi_aff() const
{
- return expansion();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_set_lexmin_pw_multi_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj)
+isl::set set::lower_bound(isl::multi_pw_aff lower) const
{
- if (!obj.get())
+ if (!ptr || lower.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
+ auto res = isl_set_lower_bound_multi_pw_aff(copy(), lower.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::schedule_node_extension
-schedule_node_extension::schedule_node_extension()
- : schedule_node() {}
-
-schedule_node_extension::schedule_node_extension(const schedule_node_extension &obj)
- : schedule_node(obj)
+isl::set set::lower_bound(isl::multi_val lower) const
{
+ if (!ptr || lower.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_set_lower_bound_multi_val(copy(), lower.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-schedule_node_extension::schedule_node_extension(__isl_take isl_schedule_node *ptr)
- : schedule_node(ptr) {}
-
-schedule_node_extension &schedule_node_extension::operator=(schedule_node_extension obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx schedule_node_extension::ctx() const {
- return isl::ctx(isl_schedule_node_get_ctx(ptr));
-}
-
-isl::union_map schedule_node_extension::extension() const
+isl::multi_pw_aff set::max_multi_pw_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_extension_get_extension(get());
+ auto res = isl_set_max_multi_pw_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map schedule_node_extension::get_extension() const
-{
- return extension();
-}
-
-inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj)
+isl::val set::max_val(const isl::aff &obj) const
{
- if (!obj.get())
+ if (!ptr || obj.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
+ auto res = isl_set_max_val(get(), obj.get());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::schedule_node_filter
-schedule_node_filter::schedule_node_filter()
- : schedule_node() {}
-
-schedule_node_filter::schedule_node_filter(const schedule_node_filter &obj)
- : schedule_node(obj)
+isl::multi_pw_aff set::min_multi_pw_aff() const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_set_min_multi_pw_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-schedule_node_filter::schedule_node_filter(__isl_take isl_schedule_node *ptr)
- : schedule_node(ptr) {}
-
-schedule_node_filter &schedule_node_filter::operator=(schedule_node_filter obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx schedule_node_filter::ctx() const {
- return isl::ctx(isl_schedule_node_get_ctx(ptr));
-}
-
-isl::union_set schedule_node_filter::filter() const
+isl::val set::min_val(const isl::aff &obj) const
{
- if (!ptr)
+ if (!ptr || obj.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_filter_get_filter(get());
+ auto res = isl_set_min_val(get(), obj.get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_set schedule_node_filter::get_filter() const
+isl::set set::params() const
{
- return filter();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_set_params(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj)
+isl::multi_val set::plain_multi_val_if_fixed() const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
+ auto res = isl_set_get_plain_multi_val_if_fixed(get());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::schedule_node_guard
-schedule_node_guard::schedule_node_guard()
- : schedule_node() {}
-
-schedule_node_guard::schedule_node_guard(const schedule_node_guard &obj)
- : schedule_node(obj)
+isl::multi_val set::get_plain_multi_val_if_fixed() const
{
+ return plain_multi_val_if_fixed();
}
-schedule_node_guard::schedule_node_guard(__isl_take isl_schedule_node *ptr)
- : schedule_node(ptr) {}
-
-schedule_node_guard &schedule_node_guard::operator=(schedule_node_guard obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx schedule_node_guard::ctx() const {
- return isl::ctx(isl_schedule_node_get_ctx(ptr));
-}
-
-isl::set schedule_node_guard::guard() const
+isl::basic_set set::polyhedral_hull() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_schedule_node_guard_get_guard(get());
+ auto res = isl_set_polyhedral_hull(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set schedule_node_guard::get_guard() const
-{
- return guard();
-}
-
-inline std::ostream &operator<<(std::ostream &os, const schedule_node_guard &obj)
+isl::set set::preimage(isl::multi_aff ma) const
{
- if (!obj.get())
+ if (!ptr || ma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
+ auto res = isl_set_preimage_multi_aff(copy(), ma.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::schedule_node_leaf
-schedule_node_leaf::schedule_node_leaf()
- : schedule_node() {}
-
-schedule_node_leaf::schedule_node_leaf(const schedule_node_leaf &obj)
- : schedule_node(obj)
+isl::set set::preimage(isl::multi_pw_aff mpa) const
{
+ if (!ptr || mpa.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_set_preimage_multi_pw_aff(copy(), mpa.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-schedule_node_leaf::schedule_node_leaf(__isl_take isl_schedule_node *ptr)
- : schedule_node(ptr) {}
-
-schedule_node_leaf &schedule_node_leaf::operator=(schedule_node_leaf obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx schedule_node_leaf::ctx() const {
- return isl::ctx(isl_schedule_node_get_ctx(ptr));
-}
-
-inline std::ostream &operator<<(std::ostream &os, const schedule_node_leaf &obj)
+isl::set set::preimage(isl::pw_multi_aff pma) const
{
- if (!obj.get())
+ if (!ptr || pma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
+ auto res = isl_set_preimage_pw_multi_aff(copy(), pma.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::schedule_node_mark
-schedule_node_mark::schedule_node_mark()
- : schedule_node() {}
-
-schedule_node_mark::schedule_node_mark(const schedule_node_mark &obj)
- : schedule_node(obj)
+isl::union_set set::preimage(const isl::union_pw_multi_aff &upma) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_set(*this).preimage(upma);
}
-schedule_node_mark::schedule_node_mark(__isl_take isl_schedule_node *ptr)
- : schedule_node(ptr) {}
-
-schedule_node_mark &schedule_node_mark::operator=(schedule_node_mark obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx schedule_node_mark::ctx() const {
- return isl::ctx(isl_schedule_node_get_ctx(ptr));
-}
-
-inline std::ostream &operator<<(std::ostream &os, const schedule_node_mark &obj)
+isl::set set::product(isl::set set2) const
{
- if (!obj.get())
+ if (!ptr || set2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
+ auto res = isl_set_product(copy(), set2.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::schedule_node_sequence
-schedule_node_sequence::schedule_node_sequence()
- : schedule_node() {}
-
-schedule_node_sequence::schedule_node_sequence(const schedule_node_sequence &obj)
- : schedule_node(obj)
+isl::set set::project_out_all_params() const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_set_project_out_all_params(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-schedule_node_sequence::schedule_node_sequence(__isl_take isl_schedule_node *ptr)
- : schedule_node(ptr) {}
-
-schedule_node_sequence &schedule_node_sequence::operator=(schedule_node_sequence obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx schedule_node_sequence::ctx() const {
- return isl::ctx(isl_schedule_node_get_ctx(ptr));
-}
-
-inline std::ostream &operator<<(std::ostream &os, const schedule_node_sequence &obj)
+isl::set set::project_out_param(isl::id id) const
{
- if (!obj.get())
+ if (!ptr || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
+ auto res = isl_set_project_out_param_id(copy(), id.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::schedule_node_set
-schedule_node_set::schedule_node_set()
- : schedule_node() {}
-
-schedule_node_set::schedule_node_set(const schedule_node_set &obj)
- : schedule_node(obj)
+isl::set set::project_out_param(const std::string &id) const
{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->project_out_param(isl::id(ctx(), id));
}
-schedule_node_set::schedule_node_set(__isl_take isl_schedule_node *ptr)
- : schedule_node(ptr) {}
-
-schedule_node_set &schedule_node_set::operator=(schedule_node_set obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-isl::ctx schedule_node_set::ctx() const {
- return isl::ctx(isl_schedule_node_get_ctx(ptr));
-}
-
-inline std::ostream &operator<<(std::ostream &os, const schedule_node_set &obj)
+isl::set set::project_out_param(isl::id_list list) const
{
- if (!obj.get())
+ if (!ptr || list.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_schedule_node_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_schedule_node_to_str(obj.get());
- if (!str)
+ auto res = isl_set_project_out_param_id_list(copy(), list.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::set
-set manage(__isl_take isl_set *ptr) {
- if (!ptr)
+isl::pw_multi_aff set::pw_multi_aff_on_domain(isl::multi_val mv) const
+{
+ if (!ptr || mv.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return set(ptr);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_set_pw_multi_aff_on_domain_multi_val(copy(), mv.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-set manage_copy(__isl_keep isl_set *ptr) {
+
+isl::basic_set set::sample() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_set_get_ctx(ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_set_copy(ptr);
- if (!ptr)
+ auto res = isl_set_sample(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return set(ptr);
+ return manage(res);
}
-set::set()
- : ptr(nullptr) {}
-
-set::set(const set &obj)
- : ptr(nullptr)
+isl::point set::sample_point() const
{
- if (!obj.ptr)
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_set_get_ctx(obj.ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
+ auto res = isl_set_sample_point(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-set::set(__isl_take isl_set *ptr)
- : ptr(ptr) {}
-
-set::set(isl::basic_set bset)
+isl::fixed_box set::simple_fixed_box_hull() const
{
- if (bset.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = bset.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_from_basic_set(bset.release());
+ auto res = isl_set_get_simple_fixed_box_hull(get());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-set::set(isl::point pnt)
+isl::fixed_box set::get_simple_fixed_box_hull() const
{
- if (pnt.is_null())
+ return simple_fixed_box_hull();
+}
+
+isl::space set::space() const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = pnt.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_from_point(pnt.release());
+ auto res = isl_set_get_space(get());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-set::set(isl::ctx ctx, const std::string &str)
+isl::space set::get_space() const
{
- auto saved_ctx = ctx;
+ return space();
+}
+
+isl::val set::stride(int pos) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_read_from_str(ctx.release(), str.c_str());
+ auto res = isl_set_get_stride(get(), pos);
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-set &set::operator=(set obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+ return manage(res);
}
-set::~set() {
- if (ptr)
- isl_set_free(ptr);
+isl::val set::get_stride(int pos) const
+{
+ return stride(pos);
}
-__isl_give isl_set *set::copy() const & {
- return isl_set_copy(ptr);
+isl::set set::subtract(isl::set set2) const
+{
+ if (!ptr || set2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_set_subtract(copy(), set2.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-__isl_keep isl_set *set::get() const {
- return ptr;
+isl::union_set set::subtract(const isl::union_set &uset2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_set(*this).subtract(uset2);
}
-__isl_give isl_set *set::release() {
- isl_set *tmp = ptr;
- ptr = nullptr;
- return tmp;
+isl::set set::subtract(const isl::basic_set &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->subtract(isl::set(set2));
}
-bool set::is_null() const {
- return ptr == nullptr;
+isl::set set::subtract(const isl::point &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->subtract(isl::set(set2));
}
-isl::ctx set::ctx() const {
- return isl::ctx(isl_set_get_ctx(ptr));
+isl::union_set_list set::to_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_set(*this).to_list();
}
-isl::basic_set set::affine_hull() const
+isl::union_set set::to_union_set() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_affine_hull(copy());
+ auto res = isl_set_to_union_set(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::apply(isl::map map) const
+isl::map set::translation() const
{
- if (!ptr || map.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_apply(copy(), map.release());
+ auto res = isl_set_translation(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::bind(isl::multi_id tuple) const
+unsigned set::tuple_dim() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_set_tuple_dim(get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+isl::set set::unbind_params(isl::multi_id tuple) const
{
if (!ptr || tuple.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_bind(copy(), tuple.release());
+ auto res = isl_set_unbind_params(copy(), tuple.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::coalesce() const
+isl::map set::unbind_params_insert_domain(isl::multi_id domain) const
{
- if (!ptr)
+ if (!ptr || domain.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_coalesce(copy());
+ auto res = isl_set_unbind_params_insert_domain(copy(), domain.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::complement() const
+isl::set set::unite(isl::set set2) const
{
- if (!ptr)
+ if (!ptr || set2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_complement(copy());
+ auto res = isl_set_union(copy(), set2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::detect_equalities() const
+isl::union_set set::unite(const isl::union_set &uset2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ return isl::union_set(*this).unite(uset2);
+}
+
+isl::set set::unite(const isl::basic_set &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->unite(isl::set(set2));
+}
+
+isl::set set::unite(const isl::point &set2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->unite(isl::set(set2));
+}
+
+isl::set set::universe(isl::space space)
+{
+ if (space.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = space.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_detect_equalities(copy());
+ auto res = isl_set_universe(space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::val set::dim_max_val(int pos) const
+isl::basic_set set::unshifted_simple_hull() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_dim_max_val(copy(), pos);
+ auto res = isl_set_unshifted_simple_hull(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::val set::dim_min_val(int pos) const
+isl::map set::unwrap() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_dim_min_val(copy(), pos);
+ auto res = isl_set_unwrap(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::empty(isl::space space)
+isl::set set::upper_bound(isl::multi_pw_aff upper) const
{
- if (space.is_null())
+ if (!ptr || upper.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_empty(space.release());
+ auto res = isl_set_upper_bound_multi_pw_aff(copy(), upper.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::flatten() const
+isl::set set::upper_bound(isl::multi_val upper) const
{
- if (!ptr)
+ if (!ptr || upper.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_flatten(copy());
+ auto res = isl_set_upper_bound_multi_val(copy(), upper.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-void set::foreach_basic_set(const std::function<void(isl::basic_set)> &fn) const
+inline std::ostream &operator<<(std::ostream &os, const set &obj)
{
+ if (!obj.get())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_set_get_ctx(obj.get());
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ char *str = isl_set_to_str(obj.get());
+ if (!str)
+ exception::throw_last_error(saved_ctx);
+ os << str;
+ free(str);
+ return os;
+}
+
+// implementations for isl::space
+space manage(__isl_take isl_space *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ return space(ptr);
+}
+space manage_copy(__isl_keep isl_space *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_space_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct fn_data {
- std::function<void(isl::basic_set)> func;
- std::exception_ptr eptr;
- } fn_data = { fn };
- auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat {
- auto *data = static_cast<struct fn_data *>(arg_1);
- ISL_CPP_TRY {
- (data->func)(manage(arg_0));
- return isl_stat_ok;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_stat_error;
- }
- };
- auto res = isl_set_foreach_basic_set(get(), fn_lambda, &fn_data);
- if (fn_data.eptr)
- std::rethrow_exception(fn_data.eptr);
- if (res < 0)
+ ptr = isl_space_copy(ptr);
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return;
+ return space(ptr);
+}
+
+space::space()
+ : ptr(nullptr) {}
+
+space::space(const space &obj)
+ : ptr(nullptr)
+{
+ if (!obj.ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_space_get_ctx(obj.ptr);
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ ptr = obj.copy();
+ if (!ptr)
+ exception::throw_last_error(saved_ctx);
+}
+
+space::space(__isl_take isl_space *ptr)
+ : ptr(ptr) {}
+
+space &space::operator=(space obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+space::~space() {
+ if (ptr)
+ isl_space_free(ptr);
+}
+
+__isl_give isl_space *space::copy() const & {
+ return isl_space_copy(ptr);
+}
+
+__isl_keep isl_space *space::get() const {
+ return ptr;
+}
+
+__isl_give isl_space *space::release() {
+ isl_space *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
}
-void set::foreach_point(const std::function<void(isl::point)> &fn) const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct fn_data {
- std::function<void(isl::point)> func;
- std::exception_ptr eptr;
- } fn_data = { fn };
- auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat {
- auto *data = static_cast<struct fn_data *>(arg_1);
- ISL_CPP_TRY {
- (data->func)(manage(arg_0));
- return isl_stat_ok;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_stat_error;
- }
- };
- auto res = isl_set_foreach_point(get(), fn_lambda, &fn_data);
- if (fn_data.eptr)
- std::rethrow_exception(fn_data.eptr);
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return;
+bool space::is_null() const {
+ return ptr == nullptr;
}
-isl::multi_val set::plain_multi_val_if_fixed() const
+isl::ctx space::ctx() const {
+ return isl::ctx(isl_space_get_ctx(ptr));
+}
+
+isl::space space::add_named_tuple(isl::id tuple_id, unsigned int dim) const
{
- if (!ptr)
+ if (!ptr || tuple_id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_get_plain_multi_val_if_fixed(get());
+ auto res = isl_space_add_named_tuple_id_ui(copy(), tuple_id.release(), dim);
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_val set::get_plain_multi_val_if_fixed() const
+isl::space space::add_named_tuple(const std::string &tuple_id, unsigned int dim) const
{
- return plain_multi_val_if_fixed();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add_named_tuple(isl::id(ctx(), tuple_id), dim);
}
-isl::fixed_box set::simple_fixed_box_hull() const
+isl::space space::add_param(isl::id id) const
{
- if (!ptr)
+ if (!ptr || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_get_simple_fixed_box_hull(get());
+ auto res = isl_space_add_param_id(copy(), id.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::fixed_box set::get_simple_fixed_box_hull() const
+isl::space space::add_param(const std::string &id) const
{
- return simple_fixed_box_hull();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->add_param(isl::id(ctx(), id));
}
-isl::space set::space() const
+isl::space space::add_unnamed_tuple(unsigned int dim) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_get_space(get());
+ auto res = isl_space_add_unnamed_tuple_ui(copy(), dim);
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space set::get_space() const
-{
- return space();
-}
-
-isl::val set::stride(int pos) const
+isl::space space::curry() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_get_stride(get(), pos);
+ auto res = isl_space_curry(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::val set::get_stride(int pos) const
-{
- return stride(pos);
-}
-
-isl::set set::gist(isl::set context) const
+isl::space space::domain() const
{
- if (!ptr || context.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_gist(copy(), context.release());
+ auto res = isl_space_domain(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::map set::identity() const
+isl::multi_aff space::domain_map_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_identity(copy());
+ auto res = isl_space_domain_map_multi_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_aff set::indicator_function() const
+isl::pw_multi_aff space::domain_map_pw_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_indicator_function(copy());
+ auto res = isl_space_domain_map_pw_multi_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::map set::insert_domain(isl::space domain) const
+isl::id space::domain_tuple_id() const
{
- if (!ptr || domain.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_insert_domain(copy(), domain.release());
+ auto res = isl_space_get_domain_tuple_id(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::intersect(isl::set set2) const
+isl::id space::get_domain_tuple_id() const
{
- if (!ptr || set2.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_intersect(copy(), set2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return domain_tuple_id();
}
-isl::set set::intersect_params(isl::set params) const
+isl::space space::flatten_domain() const
{
- if (!ptr || params.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_intersect_params(copy(), params.release());
+ auto res = isl_space_flatten_domain(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool set::involves_locals() const
+isl::space space::flatten_range() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_involves_locals(get());
- if (res < 0)
+ auto res = isl_space_flatten_range(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool set::is_disjoint(const isl::set &set2) const
+bool space::has_domain_tuple_id() const
{
- if (!ptr || set2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_is_disjoint(get(), set2.get());
+ auto res = isl_space_has_domain_tuple_id(get());
if (res < 0)
exception::throw_last_error(saved_ctx);
return res;
}
-bool set::is_empty() const
+bool space::has_range_tuple_id() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_is_empty(get());
+ auto res = isl_space_has_range_tuple_id(get());
if (res < 0)
exception::throw_last_error(saved_ctx);
return res;
}
-bool set::is_equal(const isl::set &set2) const
+isl::multi_aff space::identity_multi_aff_on_domain() const
{
- if (!ptr || set2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_is_equal(get(), set2.get());
- if (res < 0)
+ auto res = isl_space_identity_multi_aff_on_domain(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool set::is_singleton() const
+isl::multi_pw_aff space::identity_multi_pw_aff_on_domain() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_is_singleton(get());
- if (res < 0)
+ auto res = isl_space_identity_multi_pw_aff_on_domain(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool set::is_strict_subset(const isl::set &set2) const
+isl::pw_multi_aff space::identity_pw_multi_aff_on_domain() const
{
- if (!ptr || set2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_is_strict_subset(get(), set2.get());
- if (res < 0)
+ auto res = isl_space_identity_pw_multi_aff_on_domain(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool set::is_subset(const isl::set &set2) const
+bool space::is_equal(const isl::space &space2) const
{
- if (!ptr || set2.is_null())
+ if (!ptr || space2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_is_subset(get(), set2.get());
+ auto res = isl_space_is_equal(get(), space2.get());
if (res < 0)
exception::throw_last_error(saved_ctx);
return res;
}
-bool set::is_wrapping() const
+bool space::is_wrapping() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_is_wrapping(get());
+ auto res = isl_space_is_wrapping(get());
if (res < 0)
exception::throw_last_error(saved_ctx);
return res;
}
-isl::set set::lexmax() const
+isl::space space::map_from_set() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_lexmax(copy());
+ auto res = isl_space_map_from_set(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff set::lexmax_pw_multi_aff() const
+isl::multi_aff space::multi_aff(isl::aff_list list) const
{
- if (!ptr)
+ if (!ptr || list.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_lexmax_pw_multi_aff(copy());
+ auto res = isl_space_multi_aff(copy(), list.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::lexmin() const
+isl::multi_aff space::multi_aff_on_domain(isl::multi_val mv) const
{
- if (!ptr)
+ if (!ptr || mv.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_lexmin(copy());
+ auto res = isl_space_multi_aff_on_domain_multi_val(copy(), mv.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::pw_multi_aff set::lexmin_pw_multi_aff() const
+isl::multi_id space::multi_id(isl::id_list list) const
{
- if (!ptr)
+ if (!ptr || list.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_lexmin_pw_multi_aff(copy());
+ auto res = isl_space_multi_id(copy(), list.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::lower_bound(isl::multi_pw_aff lower) const
+isl::multi_pw_aff space::multi_pw_aff(isl::pw_aff_list list) const
{
- if (!ptr || lower.is_null())
+ if (!ptr || list.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_lower_bound_multi_pw_aff(copy(), lower.release());
+ auto res = isl_space_multi_pw_aff(copy(), list.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::lower_bound(isl::multi_val lower) const
+isl::multi_union_pw_aff space::multi_union_pw_aff(isl::union_pw_aff_list list) const
{
- if (!ptr || lower.is_null())
+ if (!ptr || list.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_lower_bound_multi_val(copy(), lower.release());
+ auto res = isl_space_multi_union_pw_aff(copy(), list.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff set::max_multi_pw_aff() const
+isl::multi_val space::multi_val(isl::val_list list) const
{
- if (!ptr)
+ if (!ptr || list.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_max_multi_pw_aff(copy());
+ auto res = isl_space_multi_val(copy(), list.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::val set::max_val(const isl::aff &obj) const
+isl::aff space::param_aff_on_domain(isl::id id) const
{
- if (!ptr || obj.is_null())
+ if (!ptr || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_max_val(get(), obj.get());
+ auto res = isl_space_param_aff_on_domain_id(copy(), id.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::multi_pw_aff set::min_multi_pw_aff() const
+isl::aff space::param_aff_on_domain(const std::string &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_min_multi_pw_aff(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->param_aff_on_domain(isl::id(ctx(), id));
}
-isl::val set::min_val(const isl::aff &obj) const
+isl::space space::params() const
{
- if (!ptr || obj.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_min_val(get(), obj.get());
+ auto res = isl_space_params(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::params() const
+isl::space space::product(isl::space right) const
{
- if (!ptr)
+ if (!ptr || right.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_params(copy());
+ auto res = isl_space_product(copy(), right.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_set set::polyhedral_hull() const
+isl::space space::range() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_polyhedral_hull(copy());
+ auto res = isl_space_range(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::preimage(isl::multi_aff ma) const
+isl::multi_aff space::range_map_multi_aff() const
{
- if (!ptr || ma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_preimage_multi_aff(copy(), ma.release());
+ auto res = isl_space_range_map_multi_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::preimage(isl::multi_pw_aff mpa) const
+isl::pw_multi_aff space::range_map_pw_multi_aff() const
{
- if (!ptr || mpa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_preimage_multi_pw_aff(copy(), mpa.release());
+ auto res = isl_space_range_map_pw_multi_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::preimage(isl::pw_multi_aff pma) const
+isl::space space::range_reverse() const
{
- if (!ptr || pma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_preimage_pw_multi_aff(copy(), pma.release());
+ auto res = isl_space_range_reverse(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::product(isl::set set2) const
+isl::id space::range_tuple_id() const
{
- if (!ptr || set2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_product(copy(), set2.release());
+ auto res = isl_space_get_range_tuple_id(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::project_out_all_params() const
+isl::id space::get_range_tuple_id() const
+{
+ return range_tuple_id();
+}
+
+isl::space space::reverse() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_project_out_all_params(copy());
+ auto res = isl_space_reverse(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::project_out_param(isl::id id) const
+isl::space space::set_domain_tuple(isl::id id) const
{
if (!ptr || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_project_out_param_id(copy(), id.release());
+ auto res = isl_space_set_domain_tuple_id(copy(), id.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::project_out_param(const std::string &id) const
+isl::space space::set_domain_tuple(const std::string &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->project_out_param(isl::id(ctx(), id));
+ return this->set_domain_tuple(isl::id(ctx(), id));
}
-isl::set set::project_out_param(isl::id_list list) const
+isl::space space::set_range_tuple(isl::id id) const
{
- if (!ptr || list.is_null())
+ if (!ptr || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_project_out_param_id_list(copy(), list.release());
+ auto res = isl_space_set_range_tuple_id(copy(), id.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_set set::sample() const
+isl::space space::set_range_tuple(const std::string &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_sample(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->set_range_tuple(isl::id(ctx(), id));
}
-isl::point set::sample_point() const
+isl::space space::uncurry() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_sample_point(copy());
+ auto res = isl_space_uncurry(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::subtract(isl::set set2) const
+isl::space space::unit(isl::ctx ctx)
{
- if (!ptr || set2.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = ctx;
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_subtract(copy(), set2.release());
+ auto res = isl_space_unit(ctx.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::map set::translation() const
+isl::map space::universe_map() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_translation(copy());
+ auto res = isl_space_universe_map(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::unbind_params(isl::multi_id tuple) const
+isl::set space::universe_set() const
{
- if (!ptr || tuple.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_unbind_params(copy(), tuple.release());
+ auto res = isl_space_universe_set(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::map set::unbind_params_insert_domain(isl::multi_id domain) const
+isl::space space::unwrap() const
{
- if (!ptr || domain.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_unbind_params_insert_domain(copy(), domain.release());
+ auto res = isl_space_unwrap(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::unite(isl::set set2) const
+isl::space space::wrap() const
{
- if (!ptr || set2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_union(copy(), set2.release());
+ auto res = isl_space_wrap(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::universe(isl::space space)
+isl::aff space::zero_aff_on_domain() const
{
- if (space.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = space.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_universe(space.release());
+ auto res = isl_space_zero_aff_on_domain(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::basic_set set::unshifted_simple_hull() const
+isl::multi_aff space::zero_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_unshifted_simple_hull(copy());
+ auto res = isl_space_zero_multi_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::map set::unwrap() const
+isl::multi_pw_aff space::zero_multi_pw_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_unwrap(copy());
+ auto res = isl_space_zero_multi_pw_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::upper_bound(isl::multi_pw_aff upper) const
+isl::multi_union_pw_aff space::zero_multi_union_pw_aff() const
{
- if (!ptr || upper.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_upper_bound_multi_pw_aff(copy(), upper.release());
+ auto res = isl_space_zero_multi_union_pw_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::set set::upper_bound(isl::multi_val upper) const
+isl::multi_val space::zero_multi_val() const
{
- if (!ptr || upper.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_set_upper_bound_multi_val(copy(), upper.release());
+ auto res = isl_space_zero_multi_val(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const set &obj)
+inline std::ostream &operator<<(std::ostream &os, const space &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_set_get_ctx(obj.get());
+ auto saved_ctx = isl_space_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_set_to_str(obj.get());
+ char *str = isl_space_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::space
-space manage(__isl_take isl_space *ptr) {
+// implementations for isl::union_access_info
+union_access_info manage(__isl_take isl_union_access_info *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return space(ptr);
+ return union_access_info(ptr);
}
-space manage_copy(__isl_keep isl_space *ptr) {
+union_access_info manage_copy(__isl_keep isl_union_access_info *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_space_get_ctx(ptr);
+ auto saved_ctx = isl_union_access_info_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_space_copy(ptr);
+ ptr = isl_union_access_info_copy(ptr);
if (!ptr)
exception::throw_last_error(saved_ctx);
- return space(ptr);
+ return union_access_info(ptr);
}
-space::space()
+union_access_info::union_access_info()
: ptr(nullptr) {}
-space::space(const space &obj)
+union_access_info::union_access_info(const union_access_info &obj)
: ptr(nullptr)
{
if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_space_get_ctx(obj.ptr);
+ auto saved_ctx = isl_union_access_info_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
ptr = obj.copy();
if (!ptr)
exception::throw_last_error(saved_ctx);
}
-space::space(__isl_take isl_space *ptr)
+union_access_info::union_access_info(__isl_take isl_union_access_info *ptr)
: ptr(ptr) {}
-space &space::operator=(space obj) {
+union_access_info::union_access_info(isl::union_map sink)
+{
+ if (sink.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = sink.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_access_info_from_sink(sink.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+union_access_info &union_access_info::operator=(union_access_info obj) {
std::swap(this->ptr, obj.ptr);
return *this;
}
-space::~space() {
+union_access_info::~union_access_info() {
if (ptr)
- isl_space_free(ptr);
+ isl_union_access_info_free(ptr);
}
-__isl_give isl_space *space::copy() const & {
- return isl_space_copy(ptr);
+__isl_give isl_union_access_info *union_access_info::copy() const & {
+ return isl_union_access_info_copy(ptr);
}
-__isl_keep isl_space *space::get() const {
+__isl_keep isl_union_access_info *union_access_info::get() const {
return ptr;
}
-__isl_give isl_space *space::release() {
- isl_space *tmp = ptr;
+__isl_give isl_union_access_info *union_access_info::release() {
+ isl_union_access_info *tmp = ptr;
ptr = nullptr;
return tmp;
}
-bool space::is_null() const {
+bool union_access_info::is_null() const {
return ptr == nullptr;
}
-isl::ctx space::ctx() const {
- return isl::ctx(isl_space_get_ctx(ptr));
+isl::ctx union_access_info::ctx() const {
+ return isl::ctx(isl_union_access_info_get_ctx(ptr));
}
-isl::space space::add_named_tuple(isl::id tuple_id, unsigned int dim) const
+isl::union_flow union_access_info::compute_flow() const
{
- if (!ptr || tuple_id.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_add_named_tuple_id_ui(copy(), tuple_id.release(), dim);
+ auto res = isl_union_access_info_compute_flow(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space space::add_named_tuple(const std::string &tuple_id, unsigned int dim) const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->add_named_tuple(isl::id(ctx(), tuple_id), dim);
-}
-
-isl::space space::add_unnamed_tuple(unsigned int dim) const
+isl::union_access_info union_access_info::set_kill(isl::union_map kill) const
{
- if (!ptr)
+ if (!ptr || kill.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_add_unnamed_tuple_ui(copy(), dim);
+ auto res = isl_union_access_info_set_kill(copy(), kill.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space space::curry() const
+isl::union_access_info union_access_info::set_may_source(isl::union_map may_source) const
{
- if (!ptr)
+ if (!ptr || may_source.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_curry(copy());
+ auto res = isl_union_access_info_set_may_source(copy(), may_source.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space space::domain() const
+isl::union_access_info union_access_info::set_must_source(isl::union_map must_source) const
{
- if (!ptr)
+ if (!ptr || must_source.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_domain(copy());
+ auto res = isl_union_access_info_set_must_source(copy(), must_source.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space space::flatten_domain() const
+isl::union_access_info union_access_info::set_schedule(isl::schedule schedule) const
{
- if (!ptr)
+ if (!ptr || schedule.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_flatten_domain(copy());
+ auto res = isl_union_access_info_set_schedule(copy(), schedule.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space space::flatten_range() const
+isl::union_access_info union_access_info::set_schedule_map(isl::union_map schedule_map) const
{
- if (!ptr)
+ if (!ptr || schedule_map.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_flatten_range(copy());
+ auto res = isl_union_access_info_set_schedule_map(copy(), schedule_map.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool space::is_equal(const isl::space &space2) const
+inline std::ostream &operator<<(std::ostream &os, const union_access_info &obj)
{
- if (!ptr || space2.is_null())
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_union_access_info_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_is_equal(get(), space2.get());
- if (res < 0)
+ char *str = isl_union_access_info_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return res;
+ os << str;
+ free(str);
+ return os;
}
-bool space::is_wrapping() const
-{
+// implementations for isl::union_flow
+union_flow manage(__isl_take isl_union_flow *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ return union_flow(ptr);
+}
+union_flow manage_copy(__isl_keep isl_union_flow *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_union_flow_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_is_wrapping(get());
- if (res < 0)
+ ptr = isl_union_flow_copy(ptr);
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return res;
+ return union_flow(ptr);
}
-isl::space space::map_from_set() const
+union_flow::union_flow()
+ : ptr(nullptr) {}
+
+union_flow::union_flow(const union_flow &obj)
+ : ptr(nullptr)
{
- if (!ptr)
+ if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_union_flow_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_map_from_set(copy());
- if (!res)
+ ptr = obj.copy();
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return manage(res);
}
-isl::space space::params() const
+union_flow::union_flow(__isl_take isl_union_flow *ptr)
+ : ptr(ptr) {}
+
+union_flow &union_flow::operator=(union_flow obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+union_flow::~union_flow() {
+ if (ptr)
+ isl_union_flow_free(ptr);
+}
+
+__isl_give isl_union_flow *union_flow::copy() const & {
+ return isl_union_flow_copy(ptr);
+}
+
+__isl_keep isl_union_flow *union_flow::get() const {
+ return ptr;
+}
+
+__isl_give isl_union_flow *union_flow::release() {
+ isl_union_flow *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool union_flow::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx union_flow::ctx() const {
+ return isl::ctx(isl_union_flow_get_ctx(ptr));
+}
+
+isl::union_map union_flow::full_may_dependence() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_params(copy());
+ auto res = isl_union_flow_get_full_may_dependence(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space space::product(isl::space right) const
+isl::union_map union_flow::get_full_may_dependence() const
{
- if (!ptr || right.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_product(copy(), right.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return full_may_dependence();
}
-isl::space space::range() const
+isl::union_map union_flow::full_must_dependence() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_range(copy());
+ auto res = isl_union_flow_get_full_must_dependence(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space space::range_reverse() const
+isl::union_map union_flow::get_full_must_dependence() const
+{
+ return full_must_dependence();
+}
+
+isl::union_map union_flow::may_dependence() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_range_reverse(copy());
+ auto res = isl_union_flow_get_may_dependence(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space space::reverse() const
+isl::union_map union_flow::get_may_dependence() const
+{
+ return may_dependence();
+}
+
+isl::union_map union_flow::may_no_source() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_reverse(copy());
+ auto res = isl_union_flow_get_may_no_source(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space space::uncurry() const
+isl::union_map union_flow::get_may_no_source() const
+{
+ return may_no_source();
+}
+
+isl::union_map union_flow::must_dependence() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_uncurry(copy());
+ auto res = isl_union_flow_get_must_dependence(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space space::unit(isl::ctx ctx)
+isl::union_map union_flow::get_must_dependence() const
{
- auto saved_ctx = ctx;
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_unit(ctx.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return must_dependence();
}
-isl::space space::unwrap() const
+isl::union_map union_flow::must_no_source() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_unwrap(copy());
+ auto res = isl_union_flow_get_must_no_source(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space space::wrap() const
+isl::union_map union_flow::get_must_no_source() const
{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_space_wrap(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return must_no_source();
}
-inline std::ostream &operator<<(std::ostream &os, const space &obj)
+inline std::ostream &operator<<(std::ostream &os, const union_flow &obj)
{
if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_space_get_ctx(obj.get());
+ auto saved_ctx = isl_union_flow_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_space_to_str(obj.get());
+ char *str = isl_union_flow_to_str(obj.get());
if (!str)
exception::throw_last_error(saved_ctx);
os << str;
return os;
}
-// implementations for isl::union_access_info
-union_access_info manage(__isl_take isl_union_access_info *ptr) {
+// implementations for isl::union_map
+union_map manage(__isl_take isl_union_map *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return union_access_info(ptr);
+ return union_map(ptr);
}
-union_access_info manage_copy(__isl_keep isl_union_access_info *ptr) {
+union_map manage_copy(__isl_keep isl_union_map *ptr) {
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_union_access_info_get_ctx(ptr);
+ auto saved_ctx = isl_union_map_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_union_access_info_copy(ptr);
+ ptr = isl_union_map_copy(ptr);
if (!ptr)
exception::throw_last_error(saved_ctx);
- return union_access_info(ptr);
+ return union_map(ptr);
}
-union_access_info::union_access_info()
+union_map::union_map()
: ptr(nullptr) {}
-union_access_info::union_access_info(const union_access_info &obj)
+union_map::union_map(const union_map &obj)
: ptr(nullptr)
{
if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_union_access_info_get_ctx(obj.ptr);
+ auto saved_ctx = isl_union_map_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
ptr = obj.copy();
if (!ptr)
exception::throw_last_error(saved_ctx);
}
-union_access_info::union_access_info(__isl_take isl_union_access_info *ptr)
+union_map::union_map(__isl_take isl_union_map *ptr)
: ptr(ptr) {}
-union_access_info::union_access_info(isl::union_map sink)
+union_map::union_map(isl::basic_map bmap)
{
- if (sink.is_null())
+ if (bmap.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = sink.ctx();
+ auto saved_ctx = bmap.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_access_info_from_sink(sink.release());
+ auto res = isl_union_map_from_basic_map(bmap.release());
if (!res)
exception::throw_last_error(saved_ctx);
ptr = res;
}
-union_access_info &union_access_info::operator=(union_access_info obj) {
+union_map::union_map(isl::map map)
+{
+ if (map.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = map.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_from_map(map.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+union_map::union_map(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
+union_map &union_map::operator=(union_map obj) {
std::swap(this->ptr, obj.ptr);
return *this;
}
-union_access_info::~union_access_info() {
+union_map::~union_map() {
if (ptr)
- isl_union_access_info_free(ptr);
+ isl_union_map_free(ptr);
}
-__isl_give isl_union_access_info *union_access_info::copy() const & {
- return isl_union_access_info_copy(ptr);
+__isl_give isl_union_map *union_map::copy() const & {
+ return isl_union_map_copy(ptr);
}
-__isl_keep isl_union_access_info *union_access_info::get() const {
+__isl_keep isl_union_map *union_map::get() const {
return ptr;
}
-__isl_give isl_union_access_info *union_access_info::release() {
- isl_union_access_info *tmp = ptr;
+__isl_give isl_union_map *union_map::release() {
+ isl_union_map *tmp = ptr;
ptr = nullptr;
return tmp;
}
-bool union_access_info::is_null() const {
+bool union_map::is_null() const {
return ptr == nullptr;
}
-isl::ctx union_access_info::ctx() const {
- return isl::ctx(isl_union_access_info_get_ctx(ptr));
+isl::ctx union_map::ctx() const {
+ return isl::ctx(isl_union_map_get_ctx(ptr));
}
-isl::union_flow union_access_info::compute_flow() const
+isl::union_map union_map::affine_hull() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_access_info_compute_flow(copy());
+ auto res = isl_union_map_affine_hull(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_access_info union_access_info::set_kill(isl::union_map kill) const
+isl::union_map union_map::apply_domain(isl::union_map umap2) const
{
- if (!ptr || kill.is_null())
+ if (!ptr || umap2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_access_info_set_kill(copy(), kill.release());
+ auto res = isl_union_map_apply_domain(copy(), umap2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_access_info union_access_info::set_may_source(isl::union_map may_source) const
+isl::union_map union_map::apply_range(isl::union_map umap2) const
{
- if (!ptr || may_source.is_null())
+ if (!ptr || umap2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_access_info_set_may_source(copy(), may_source.release());
+ auto res = isl_union_map_apply_range(copy(), umap2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_access_info union_access_info::set_must_source(isl::union_map must_source) const
+isl::map union_map::as_map() const
{
- if (!ptr || must_source.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_access_info_set_must_source(copy(), must_source.release());
+ auto res = isl_union_map_as_map(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_access_info union_access_info::set_schedule(isl::schedule schedule) const
+isl::multi_union_pw_aff union_map::as_multi_union_pw_aff() const
{
- if (!ptr || schedule.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_access_info_set_schedule(copy(), schedule.release());
+ auto res = isl_union_map_as_multi_union_pw_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_access_info union_access_info::set_schedule_map(isl::union_map schedule_map) const
+isl::union_pw_multi_aff union_map::as_union_pw_multi_aff() const
{
- if (!ptr || schedule_map.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_access_info_set_schedule_map(copy(), schedule_map.release());
+ auto res = isl_union_map_as_union_pw_multi_aff(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const union_access_info &obj)
+isl::union_set union_map::bind_range(isl::multi_id tuple) const
{
- if (!obj.get())
+ if (!ptr || tuple.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_union_access_info_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_union_access_info_to_str(obj.get());
- if (!str)
+ auto res = isl_union_map_bind_range(copy(), tuple.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::union_flow
-union_flow manage(__isl_take isl_union_flow *ptr) {
+isl::union_map union_map::coalesce() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return union_flow(ptr);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_coalesce(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-union_flow manage_copy(__isl_keep isl_union_flow *ptr) {
+
+isl::union_map union_map::compute_divs() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_union_flow_get_ctx(ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_union_flow_copy(ptr);
- if (!ptr)
+ auto res = isl_union_map_compute_divs(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return union_flow(ptr);
+ return manage(res);
}
-union_flow::union_flow()
- : ptr(nullptr) {}
-
-union_flow::union_flow(const union_flow &obj)
- : ptr(nullptr)
+isl::union_map union_map::curry() const
{
- if (!obj.ptr)
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_union_flow_get_ctx(obj.ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
+ auto res = isl_union_map_curry(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-union_flow::union_flow(__isl_take isl_union_flow *ptr)
- : ptr(ptr) {}
-
-union_flow &union_flow::operator=(union_flow obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-union_flow::~union_flow() {
- if (ptr)
- isl_union_flow_free(ptr);
-}
-
-__isl_give isl_union_flow *union_flow::copy() const & {
- return isl_union_flow_copy(ptr);
-}
-
-__isl_keep isl_union_flow *union_flow::get() const {
- return ptr;
-}
-
-__isl_give isl_union_flow *union_flow::release() {
- isl_union_flow *tmp = ptr;
- ptr = nullptr;
- return tmp;
+isl::union_set union_map::deltas() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_deltas(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-bool union_flow::is_null() const {
- return ptr == nullptr;
+isl::union_map union_map::detect_equalities() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_detect_equalities(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::ctx union_flow::ctx() const {
- return isl::ctx(isl_union_flow_get_ctx(ptr));
+isl::union_set union_map::domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_domain(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::union_map union_flow::full_may_dependence() const
+isl::union_map union_map::domain_factor_domain() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_flow_get_full_may_dependence(get());
+ auto res = isl_union_map_domain_factor_domain(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_flow::get_full_may_dependence() const
+isl::union_map union_map::domain_factor_range() const
{
- return full_may_dependence();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_domain_factor_range(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::union_map union_flow::full_must_dependence() const
+isl::union_map union_map::domain_map() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_flow_get_full_must_dependence(get());
+ auto res = isl_union_map_domain_map(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_flow::get_full_must_dependence() const
+isl::union_pw_multi_aff union_map::domain_map_union_pw_multi_aff() const
{
- return full_must_dependence();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_domain_map_union_pw_multi_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::union_map union_flow::may_dependence() const
+isl::union_map union_map::domain_product(isl::union_map umap2) const
{
- if (!ptr)
+ if (!ptr || umap2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_flow_get_may_dependence(get());
+ auto res = isl_union_map_domain_product(copy(), umap2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_flow::get_may_dependence() const
+isl::union_map union_map::empty(isl::ctx ctx)
{
- return may_dependence();
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_empty_ctx(ctx.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::union_map union_flow::may_no_source() const
+isl::union_map union_map::eq_at(isl::multi_union_pw_aff mupa) const
{
- if (!ptr)
+ if (!ptr || mupa.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_flow_get_may_no_source(get());
+ auto res = isl_union_map_eq_at_multi_union_pw_aff(copy(), mupa.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_flow::get_may_no_source() const
+bool union_map::every_map(const std::function<bool(isl::map)> &test) const
{
- return may_no_source();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ struct test_data {
+ std::function<bool(isl::map)> func;
+ std::exception_ptr eptr;
+ } test_data = { test };
+ auto test_lambda = [](isl_map *arg_0, void *arg_1) -> isl_bool {
+ auto *data = static_cast<struct test_data *>(arg_1);
+ ISL_CPP_TRY {
+ auto ret = (data->func)(manage_copy(arg_0));
+ return ret ? isl_bool_true : isl_bool_false;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_bool_error;
+ }
+ };
+ auto res = isl_union_map_every_map(get(), test_lambda, &test_data);
+ if (test_data.eptr)
+ std::rethrow_exception(test_data.eptr);
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
}
-isl::union_map union_flow::must_dependence() const
+isl::map union_map::extract_map(isl::space space) const
{
- if (!ptr)
+ if (!ptr || space.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_flow_get_must_dependence(get());
+ auto res = isl_union_map_extract_map(get(), space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_flow::get_must_dependence() const
-{
- return must_dependence();
-}
-
-isl::union_map union_flow::must_no_source() const
+isl::union_map union_map::factor_domain() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_flow_get_must_no_source(get());
+ auto res = isl_union_map_factor_domain(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_flow::get_must_no_source() const
+isl::union_map union_map::factor_range() const
{
- return must_no_source();
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_factor_range(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-inline std::ostream &operator<<(std::ostream &os, const union_flow &obj)
+isl::union_map union_map::fixed_power(isl::val exp) const
{
- if (!obj.get())
+ if (!ptr || exp.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_union_flow_get_ctx(obj.get());
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_union_flow_to_str(obj.get());
- if (!str)
+ auto res = isl_union_map_fixed_power_val(copy(), exp.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return manage(res);
}
-// implementations for isl::union_map
-union_map manage(__isl_take isl_union_map *ptr) {
+isl::union_map union_map::fixed_power(long exp) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return union_map(ptr);
+ return this->fixed_power(isl::val(ctx(), exp));
}
-union_map manage_copy(__isl_keep isl_union_map *ptr) {
+
+void union_map::foreach_map(const std::function<void(isl::map)> &fn) const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_union_map_get_ctx(ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_union_map_copy(ptr);
- if (!ptr)
+ struct fn_data {
+ std::function<void(isl::map)> func;
+ std::exception_ptr eptr;
+ } fn_data = { fn };
+ auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
+ auto *data = static_cast<struct fn_data *>(arg_1);
+ ISL_CPP_TRY {
+ (data->func)(manage(arg_0));
+ return isl_stat_ok;
+ } ISL_CPP_CATCH_ALL {
+ data->eptr = std::current_exception();
+ return isl_stat_error;
+ }
+ };
+ auto res = isl_union_map_foreach_map(get(), fn_lambda, &fn_data);
+ if (fn_data.eptr)
+ std::rethrow_exception(fn_data.eptr);
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return union_map(ptr);
+ return;
}
-union_map::union_map()
- : ptr(nullptr) {}
-
-union_map::union_map(const union_map &obj)
- : ptr(nullptr)
+isl::union_map union_map::from(isl::multi_union_pw_aff mupa)
{
- if (!obj.ptr)
+ if (mupa.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_union_map_get_ctx(obj.ptr);
+ auto saved_ctx = mupa.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
+ auto res = isl_union_map_from_multi_union_pw_aff(mupa.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-union_map::union_map(__isl_take isl_union_map *ptr)
- : ptr(ptr) {}
-
-union_map::union_map(isl::basic_map bmap)
+isl::union_map union_map::from(isl::union_pw_multi_aff upma)
{
- if (bmap.is_null())
+ if (upma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = bmap.ctx();
+ auto saved_ctx = upma.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_from_basic_map(bmap.release());
+ auto res = isl_union_map_from_union_pw_multi_aff(upma.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-union_map::union_map(isl::map map)
+isl::union_map union_map::from_domain(isl::union_set uset)
{
- if (map.is_null())
+ if (uset.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = map.ctx();
+ auto saved_ctx = uset.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_from_map(map.release());
+ auto res = isl_union_map_from_domain(uset.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
+ return manage(res);
}
-union_map::union_map(isl::ctx ctx, const std::string &str)
+isl::union_map union_map::from_domain_and_range(isl::union_set domain, isl::union_set range)
{
- auto saved_ctx = ctx;
+ if (domain.is_null() || range.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = domain.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_read_from_str(ctx.release(), str.c_str());
+ auto res = isl_union_map_from_domain_and_range(domain.release(), range.release());
if (!res)
exception::throw_last_error(saved_ctx);
- ptr = res;
-}
-
-union_map &union_map::operator=(union_map obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
-}
-
-union_map::~union_map() {
- if (ptr)
- isl_union_map_free(ptr);
-}
-
-__isl_give isl_union_map *union_map::copy() const & {
- return isl_union_map_copy(ptr);
-}
-
-__isl_keep isl_union_map *union_map::get() const {
- return ptr;
+ return manage(res);
}
-__isl_give isl_union_map *union_map::release() {
- isl_union_map *tmp = ptr;
- ptr = nullptr;
- return tmp;
+isl::union_map union_map::from_range(isl::union_set uset)
+{
+ if (uset.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = uset.ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_from_range(uset.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-bool union_map::is_null() const {
- return ptr == nullptr;
+isl::union_map union_map::gist(isl::union_map context) const
+{
+ if (!ptr || context.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_gist(copy(), context.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::ctx union_map::ctx() const {
- return isl::ctx(isl_union_map_get_ctx(ptr));
+isl::union_map union_map::gist_domain(isl::union_set uset) const
+{
+ if (!ptr || uset.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_gist_domain(copy(), uset.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-isl::union_map union_map::affine_hull() const
+isl::union_map union_map::gist_params(isl::set set) const
{
- if (!ptr)
+ if (!ptr || set.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_affine_hull(copy());
+ auto res = isl_union_map_gist_params(copy(), set.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::apply_domain(isl::union_map umap2) const
+isl::union_map union_map::gist_range(isl::union_set uset) const
{
- if (!ptr || umap2.is_null())
+ if (!ptr || uset.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_apply_domain(copy(), umap2.release());
+ auto res = isl_union_map_gist_range(copy(), uset.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::apply_range(isl::union_map umap2) const
+isl::union_map union_map::intersect(isl::union_map umap2) const
{
if (!ptr || umap2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_apply_range(copy(), umap2.release());
+ auto res = isl_union_map_intersect(copy(), umap2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_set union_map::bind_range(isl::multi_id tuple) const
+isl::union_map union_map::intersect_domain(isl::space space) const
{
- if (!ptr || tuple.is_null())
+ if (!ptr || space.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_bind_range(copy(), tuple.release());
+ auto res = isl_union_map_intersect_domain_space(copy(), space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::coalesce() const
+isl::union_map union_map::intersect_domain(isl::union_set uset) const
{
- if (!ptr)
+ if (!ptr || uset.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_coalesce(copy());
+ auto res = isl_union_map_intersect_domain_union_set(copy(), uset.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::compute_divs() const
+isl::union_map union_map::intersect_domain_factor_domain(isl::union_map factor) const
{
- if (!ptr)
+ if (!ptr || factor.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_compute_divs(copy());
+ auto res = isl_union_map_intersect_domain_factor_domain(copy(), factor.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::curry() const
+isl::union_map union_map::intersect_domain_factor_range(isl::union_map factor) const
{
- if (!ptr)
+ if (!ptr || factor.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_curry(copy());
+ auto res = isl_union_map_intersect_domain_factor_range(copy(), factor.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_set union_map::deltas() const
+isl::union_map union_map::intersect_params(isl::set set) const
{
- if (!ptr)
+ if (!ptr || set.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_deltas(copy());
+ auto res = isl_union_map_intersect_params(copy(), set.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::detect_equalities() const
+isl::union_map union_map::intersect_range(isl::space space) const
{
- if (!ptr)
+ if (!ptr || space.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_detect_equalities(copy());
+ auto res = isl_union_map_intersect_range_space(copy(), space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_set union_map::domain() const
+isl::union_map union_map::intersect_range(isl::union_set uset) const
{
- if (!ptr)
+ if (!ptr || uset.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_domain(copy());
+ auto res = isl_union_map_intersect_range_union_set(copy(), uset.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::domain_factor_domain() const
+isl::union_map union_map::intersect_range_factor_domain(isl::union_map factor) const
{
- if (!ptr)
+ if (!ptr || factor.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_domain_factor_domain(copy());
+ auto res = isl_union_map_intersect_range_factor_domain(copy(), factor.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::domain_factor_range() const
+isl::union_map union_map::intersect_range_factor_range(isl::union_map factor) const
{
- if (!ptr)
+ if (!ptr || factor.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_domain_factor_range(copy());
+ auto res = isl_union_map_intersect_range_factor_range(copy(), factor.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::domain_map() const
+bool union_map::is_bijective() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_domain_map(copy());
- if (!res)
+ auto res = isl_union_map_is_bijective(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::union_pw_multi_aff union_map::domain_map_union_pw_multi_aff() const
+bool union_map::is_disjoint(const isl::union_map &umap2) const
+{
+ if (!ptr || umap2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_is_disjoint(get(), umap2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool union_map::is_empty() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_domain_map_union_pw_multi_aff(copy());
- if (!res)
+ auto res = isl_union_map_is_empty(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::union_map union_map::domain_product(isl::union_map umap2) const
+bool union_map::is_equal(const isl::union_map &umap2) const
{
if (!ptr || umap2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_domain_product(copy(), umap2.release());
- if (!res)
+ auto res = isl_union_map_is_equal(get(), umap2.get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::union_map union_map::empty(isl::ctx ctx)
+bool union_map::is_injective() const
{
- auto saved_ctx = ctx;
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_empty_ctx(ctx.release());
- if (!res)
+ auto res = isl_union_map_is_injective(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-isl::union_map union_map::eq_at(isl::multi_union_pw_aff mupa) const
+bool union_map::is_single_valued() const
{
- if (!ptr || mupa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_eq_at_multi_union_pw_aff(copy(), mupa.release());
- if (!res)
+ auto res = isl_union_map_is_single_valued(get());
+ if (res < 0)
exception::throw_last_error(saved_ctx);
- return manage(res);
+ return res;
}
-bool union_map::every_map(const std::function<bool(isl::map)> &test) const
+bool union_map::is_strict_subset(const isl::union_map &umap2) const
+{
+ if (!ptr || umap2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_is_strict_subset(get(), umap2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool union_map::is_subset(const isl::union_map &umap2) const
+{
+ if (!ptr || umap2.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_is_subset(get(), umap2.get());
+ if (res < 0)
+ exception::throw_last_error(saved_ctx);
+ return res;
+}
+
+bool union_map::isa_map() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct test_data {
- std::function<bool(isl::map)> func;
- std::exception_ptr eptr;
- } test_data = { test };
- auto test_lambda = [](isl_map *arg_0, void *arg_1) -> isl_bool {
- auto *data = static_cast<struct test_data *>(arg_1);
- ISL_CPP_TRY {
- auto ret = (data->func)(manage_copy(arg_0));
- return ret ? isl_bool_true : isl_bool_false;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_bool_error;
- }
- };
- auto res = isl_union_map_every_map(get(), test_lambda, &test_data);
- if (test_data.eptr)
- std::rethrow_exception(test_data.eptr);
+ auto res = isl_union_map_isa_map(get());
if (res < 0)
exception::throw_last_error(saved_ctx);
return res;
}
-isl::map union_map::extract_map(isl::space space) const
+isl::union_map union_map::lexmax() const
{
- if (!ptr || space.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_extract_map(get(), space.release());
+ auto res = isl_union_map_lexmax(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::factor_domain() const
+isl::union_map union_map::lexmin() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_factor_domain(copy());
+ auto res = isl_union_map_lexmin(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::factor_range() const
+isl::map_list union_map::map_list() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_factor_range(copy());
+ auto res = isl_union_map_get_map_list(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::fixed_power(isl::val exp) const
+isl::map_list union_map::get_map_list() const
{
- if (!ptr || exp.is_null())
+ return map_list();
+}
+
+isl::union_map union_map::polyhedral_hull() const
+{
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_fixed_power_val(copy(), exp.release());
+ auto res = isl_union_map_polyhedral_hull(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::fixed_power(long exp) const
+isl::union_map union_map::preimage_domain(isl::multi_aff ma) const
{
- if (!ptr)
+ if (!ptr || ma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->fixed_power(isl::val(ctx(), exp));
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_preimage_domain_multi_aff(copy(), ma.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
}
-void union_map::foreach_map(const std::function<void(isl::map)> &fn) const
+isl::union_map union_map::preimage_domain(isl::multi_pw_aff mpa) const
{
- if (!ptr)
+ if (!ptr || mpa.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- struct fn_data {
- std::function<void(isl::map)> func;
- std::exception_ptr eptr;
- } fn_data = { fn };
- auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
- auto *data = static_cast<struct fn_data *>(arg_1);
- ISL_CPP_TRY {
- (data->func)(manage(arg_0));
- return isl_stat_ok;
- } ISL_CPP_CATCH_ALL {
- data->eptr = std::current_exception();
- return isl_stat_error;
- }
- };
- auto res = isl_union_map_foreach_map(get(), fn_lambda, &fn_data);
- if (fn_data.eptr)
- std::rethrow_exception(fn_data.eptr);
- if (res < 0)
+ auto res = isl_union_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return;
+ return manage(res);
}
-isl::union_map union_map::from(isl::multi_union_pw_aff mupa)
+isl::union_map union_map::preimage_domain(isl::pw_multi_aff pma) const
{
- if (mupa.is_null())
+ if (!ptr || pma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = mupa.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_from_multi_union_pw_aff(mupa.release());
+ auto res = isl_union_map_preimage_domain_pw_multi_aff(copy(), pma.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::from(isl::union_pw_multi_aff upma)
+isl::union_map union_map::preimage_domain(isl::union_pw_multi_aff upma) const
{
- if (upma.is_null())
+ if (!ptr || upma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = upma.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_from_union_pw_multi_aff(upma.release());
+ auto res = isl_union_map_preimage_domain_union_pw_multi_aff(copy(), upma.release());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map union_map::preimage_range(isl::multi_aff ma) const
+{
+ if (!ptr || ma.is_null())
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_map_preimage_range_multi_aff(copy(), ma.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::from_domain(isl::union_set uset)
+isl::union_map union_map::preimage_range(isl::pw_multi_aff pma) const
{
- if (uset.is_null())
+ if (!ptr || pma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = uset.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_from_domain(uset.release());
+ auto res = isl_union_map_preimage_range_pw_multi_aff(copy(), pma.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::from_domain_and_range(isl::union_set domain, isl::union_set range)
+isl::union_map union_map::preimage_range(isl::union_pw_multi_aff upma) const
{
- if (domain.is_null() || range.is_null())
+ if (!ptr || upma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = domain.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_from_domain_and_range(domain.release(), range.release());
+ auto res = isl_union_map_preimage_range_union_pw_multi_aff(copy(), upma.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::from_range(isl::union_set uset)
+isl::union_map union_map::product(isl::union_map umap2) const
{
- if (uset.is_null())
+ if (!ptr || umap2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = uset.ctx();
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_from_range(uset.release());
+ auto res = isl_union_map_product(copy(), umap2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space union_map::space() const
+isl::union_map union_map::project_out_all_params() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_get_space(get());
+ auto res = isl_union_map_project_out_all_params(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::space union_map::get_space() const
-{
- return space();
-}
-
-isl::union_map union_map::gist(isl::union_map context) const
+isl::union_set union_map::range() const
{
- if (!ptr || context.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_gist(copy(), context.release());
+ auto res = isl_union_map_range(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::gist_domain(isl::union_set uset) const
+isl::union_map union_map::range_factor_domain() const
{
- if (!ptr || uset.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_gist_domain(copy(), uset.release());
+ auto res = isl_union_map_range_factor_domain(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::gist_params(isl::set set) const
+isl::union_map union_map::range_factor_range() const
{
- if (!ptr || set.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_gist_params(copy(), set.release());
+ auto res = isl_union_map_range_factor_range(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::gist_range(isl::union_set uset) const
+isl::union_map union_map::range_map() const
{
- if (!ptr || uset.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_gist_range(copy(), uset.release());
+ auto res = isl_union_map_range_map(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::intersect(isl::union_map umap2) const
+isl::union_map union_map::range_product(isl::union_map umap2) const
{
if (!ptr || umap2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_intersect(copy(), umap2.release());
+ auto res = isl_union_map_range_product(copy(), umap2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::intersect_domain(isl::space space) const
+isl::union_map union_map::range_reverse() const
{
- if (!ptr || space.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_intersect_domain_space(copy(), space.release());
+ auto res = isl_union_map_range_reverse(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::intersect_domain(isl::union_set uset) const
+isl::union_map union_map::reverse() const
{
- if (!ptr || uset.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_intersect_domain_union_set(copy(), uset.release());
+ auto res = isl_union_map_reverse(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::intersect_domain_factor_domain(isl::union_map factor) const
+isl::space union_map::space() const
{
- if (!ptr || factor.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_intersect_domain_factor_domain(copy(), factor.release());
+ auto res = isl_union_map_get_space(get());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::intersect_domain_factor_range(isl::union_map factor) const
+isl::space union_map::get_space() const
{
- if (!ptr || factor.is_null())
+ return space();
+}
+
+isl::union_map union_map::subtract(isl::union_map umap2) const
+{
+ if (!ptr || umap2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_intersect_domain_factor_range(copy(), factor.release());
+ auto res = isl_union_map_subtract(copy(), umap2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::intersect_params(isl::set set) const
+isl::union_map union_map::subtract_domain(isl::union_set dom) const
{
- if (!ptr || set.is_null())
+ if (!ptr || dom.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_intersect_params(copy(), set.release());
+ auto res = isl_union_map_subtract_domain(copy(), dom.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::intersect_range(isl::space space) const
+isl::union_map union_map::subtract_range(isl::union_set dom) const
{
- if (!ptr || space.is_null())
+ if (!ptr || dom.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_intersect_range_space(copy(), space.release());
+ auto res = isl_union_map_subtract_range(copy(), dom.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::intersect_range(isl::union_set uset) const
+isl::union_map union_map::uncurry() const
{
- if (!ptr || uset.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_intersect_range_union_set(copy(), uset.release());
+ auto res = isl_union_map_uncurry(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::intersect_range_factor_domain(isl::union_map factor) const
+isl::union_map union_map::unite(isl::union_map umap2) const
{
- if (!ptr || factor.is_null())
+ if (!ptr || umap2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_intersect_range_factor_domain(copy(), factor.release());
+ auto res = isl_union_map_union(copy(), umap2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::intersect_range_factor_range(isl::union_map factor) const
+isl::union_map union_map::universe() const
{
- if (!ptr || factor.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_intersect_range_factor_range(copy(), factor.release());
+ auto res = isl_union_map_universe(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-bool union_map::is_bijective() const
+isl::union_set union_map::wrap() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_is_bijective(get());
- if (res < 0)
+ auto res = isl_union_map_wrap(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool union_map::is_disjoint(const isl::union_map &umap2) const
+isl::union_map union_map::zip() const
{
- if (!ptr || umap2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_is_disjoint(get(), umap2.get());
- if (res < 0)
+ auto res = isl_union_map_zip(copy());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ return manage(res);
}
-bool union_map::is_empty() const
+inline std::ostream &operator<<(std::ostream &os, const union_map &obj)
{
- if (!ptr)
+ if (!obj.get())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_union_map_get_ctx(obj.get());
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_is_empty(get());
- if (res < 0)
+ char *str = isl_union_map_to_str(obj.get());
+ if (!str)
exception::throw_last_error(saved_ctx);
- return res;
+ os << str;
+ free(str);
+ return os;
}
-bool union_map::is_equal(const isl::union_map &umap2) const
-{
- if (!ptr || umap2.is_null())
+// implementations for isl::union_pw_aff
+union_pw_aff manage(__isl_take isl_union_pw_aff *ptr) {
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ return union_pw_aff(ptr);
+}
+union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr) {
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = isl_union_pw_aff_get_ctx(ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_is_equal(get(), umap2.get());
- if (res < 0)
+ ptr = isl_union_pw_aff_copy(ptr);
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return res;
+ return union_pw_aff(ptr);
}
-bool union_map::is_injective() const
+union_pw_aff::union_pw_aff()
+ : ptr(nullptr) {}
+
+union_pw_aff::union_pw_aff(const union_pw_aff &obj)
+ : ptr(nullptr)
{
- if (!ptr)
+ if (!obj.ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = isl_union_pw_aff_get_ctx(obj.ptr);
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_is_injective(get());
- if (res < 0)
+ ptr = obj.copy();
+ if (!ptr)
exception::throw_last_error(saved_ctx);
- return res;
}
-bool union_map::is_single_valued() const
+union_pw_aff::union_pw_aff(__isl_take isl_union_pw_aff *ptr)
+ : ptr(ptr) {}
+
+union_pw_aff::union_pw_aff(isl::aff aff)
{
- if (!ptr)
+ if (aff.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = aff.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_is_single_valued(get());
- if (res < 0)
+ auto res = isl_union_pw_aff_from_aff(aff.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ ptr = res;
}
-bool union_map::is_strict_subset(const isl::union_map &umap2) const
+union_pw_aff::union_pw_aff(isl::pw_aff pa)
{
- if (!ptr || umap2.is_null())
+ if (pa.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = pa.ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_is_strict_subset(get(), umap2.get());
- if (res < 0)
+ auto res = isl_union_pw_aff_from_pw_aff(pa.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ ptr = res;
}
-bool union_map::is_subset(const isl::union_map &umap2) const
+union_pw_aff::union_pw_aff(isl::ctx ctx, const std::string &str)
{
- if (!ptr || umap2.is_null())
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
+ auto saved_ctx = ctx;
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_is_subset(get(), umap2.get());
- if (res < 0)
+ auto res = isl_union_pw_aff_read_from_str(ctx.release(), str.c_str());
+ if (!res)
exception::throw_last_error(saved_ctx);
- return res;
+ ptr = res;
+}
+
+union_pw_aff &union_pw_aff::operator=(union_pw_aff obj) {
+ std::swap(this->ptr, obj.ptr);
+ return *this;
+}
+
+union_pw_aff::~union_pw_aff() {
+ if (ptr)
+ isl_union_pw_aff_free(ptr);
+}
+
+__isl_give isl_union_pw_aff *union_pw_aff::copy() const & {
+ return isl_union_pw_aff_copy(ptr);
+}
+
+__isl_keep isl_union_pw_aff *union_pw_aff::get() const {
+ return ptr;
+}
+
+__isl_give isl_union_pw_aff *union_pw_aff::release() {
+ isl_union_pw_aff *tmp = ptr;
+ ptr = nullptr;
+ return tmp;
+}
+
+bool union_pw_aff::is_null() const {
+ return ptr == nullptr;
+}
+
+isl::ctx union_pw_aff::ctx() const {
+ return isl::ctx(isl_union_pw_aff_get_ctx(ptr));
}
-bool union_map::isa_map() const
+isl::multi_union_pw_aff union_pw_aff::add(const isl::multi_union_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_isa_map(get());
- if (res < 0)
- exception::throw_last_error(saved_ctx);
- return res;
+ return isl::multi_union_pw_aff(*this).add(multi2);
}
-isl::union_map union_map::lexmax() const
+isl::union_pw_aff union_pw_aff::add(isl::union_pw_aff upa2) const
{
- if (!ptr)
+ if (!ptr || upa2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_lexmax(copy());
+ auto res = isl_union_pw_aff_add(copy(), upa2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::lexmin() const
+isl::union_pw_multi_aff union_pw_aff::add(const isl::union_pw_multi_aff &upma2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_lexmin(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).add(upma2);
}
-isl::union_map union_map::polyhedral_hull() const
+isl::union_pw_aff union_pw_aff::add(const isl::aff &upa2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_polyhedral_hull(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->add(isl::union_pw_aff(upa2));
}
-isl::union_map union_map::preimage_domain(isl::multi_aff ma) const
+isl::union_pw_aff union_pw_aff::add(const isl::pw_aff &upa2) const
{
- if (!ptr || ma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_preimage_domain_multi_aff(copy(), ma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->add(isl::union_pw_aff(upa2));
}
-isl::union_map union_map::preimage_domain(isl::multi_pw_aff mpa) const
+isl::union_pw_multi_aff union_pw_aff::apply(const isl::union_pw_multi_aff &upma2) const
{
- if (!ptr || mpa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).apply(upma2);
}
-isl::union_map union_map::preimage_domain(isl::pw_multi_aff pma) const
+isl::multi_union_pw_aff union_pw_aff::as_multi_union_pw_aff() const
{
- if (!ptr || pma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_preimage_domain_pw_multi_aff(copy(), pma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff();
}
-isl::union_map union_map::preimage_domain(isl::union_pw_multi_aff upma) const
+isl::pw_multi_aff union_pw_aff::as_pw_multi_aff() const
{
- if (!ptr || upma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_preimage_domain_union_pw_multi_aff(copy(), upma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).as_pw_multi_aff();
}
-isl::union_map union_map::preimage_range(isl::multi_aff ma) const
+isl::union_map union_pw_aff::as_union_map() const
{
- if (!ptr || ma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_preimage_range_multi_aff(copy(), ma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).as_union_map();
}
-isl::union_map union_map::preimage_range(isl::pw_multi_aff pma) const
+isl::union_pw_aff union_pw_aff::at(int pos) const
{
- if (!ptr || pma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_preimage_range_pw_multi_aff(copy(), pma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_union_pw_aff(*this).at(pos);
}
-isl::union_map union_map::preimage_range(isl::union_pw_multi_aff upma) const
+isl::union_set union_pw_aff::bind(const isl::multi_id &tuple) const
{
- if (!ptr || upma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_preimage_range_union_pw_multi_aff(copy(), upma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_union_pw_aff(*this).bind(tuple);
}
-isl::union_map union_map::product(isl::union_map umap2) const
+isl::union_set union_pw_aff::bind(isl::id id) const
{
- if (!ptr || umap2.is_null())
+ if (!ptr || id.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_product(copy(), umap2.release());
+ auto res = isl_union_pw_aff_bind_id(copy(), id.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::project_out_all_params() const
+isl::union_set union_pw_aff::bind(const std::string &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_project_out_all_params(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->bind(isl::id(ctx(), id));
}
-isl::union_set union_map::range() const
+isl::union_pw_aff union_pw_aff::coalesce() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_range(copy());
+ auto res = isl_union_pw_aff_coalesce(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::range_factor_domain() const
+isl::union_set union_pw_aff::domain() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_range_factor_domain(copy());
+ auto res = isl_union_pw_aff_domain(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::range_factor_range() const
+isl::pw_multi_aff union_pw_aff::extract_pw_multi_aff(const isl::space &space) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_range_factor_range(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space);
}
-isl::union_map union_map::range_map() const
+isl::multi_union_pw_aff union_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_range_map(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_union_pw_aff(*this).flat_range_product(multi2);
}
-isl::union_map union_map::range_product(isl::union_map umap2) const
+isl::union_pw_multi_aff union_pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
{
- if (!ptr || umap2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_range_product(copy(), umap2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).flat_range_product(upma2);
}
-isl::union_map union_map::range_reverse() const
+isl::union_pw_aff union_pw_aff::gist(isl::union_set context) const
{
- if (!ptr)
+ if (!ptr || context.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_range_reverse(copy());
+ auto res = isl_union_pw_aff_gist(copy(), context.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::reverse() const
+bool union_pw_aff::has_range_tuple_id() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_reverse(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_union_pw_aff(*this).has_range_tuple_id();
}
-isl::union_map union_map::subtract(isl::union_map umap2) const
+isl::union_pw_aff union_pw_aff::intersect_domain(isl::space space) const
{
- if (!ptr || umap2.is_null())
+ if (!ptr || space.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_subtract(copy(), umap2.release());
+ auto res = isl_union_pw_aff_intersect_domain_space(copy(), space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::subtract_domain(isl::union_set dom) const
+isl::union_pw_aff union_pw_aff::intersect_domain(isl::union_set uset) const
{
- if (!ptr || dom.is_null())
+ if (!ptr || uset.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_subtract_domain(copy(), dom.release());
+ auto res = isl_union_pw_aff_intersect_domain_union_set(copy(), uset.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::subtract_range(isl::union_set dom) const
+isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_domain(isl::union_set uset) const
{
- if (!ptr || dom.is_null())
+ if (!ptr || uset.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_subtract_range(copy(), dom.release());
+ auto res = isl_union_pw_aff_intersect_domain_wrapped_domain(copy(), uset.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::uncurry() const
+isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_range(isl::union_set uset) const
{
- if (!ptr)
+ if (!ptr || uset.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_uncurry(copy());
+ auto res = isl_union_pw_aff_intersect_domain_wrapped_range(copy(), uset.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::unite(isl::union_map umap2) const
+isl::union_pw_aff union_pw_aff::intersect_params(isl::set set) const
{
- if (!ptr || umap2.is_null())
+ if (!ptr || set.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_union(copy(), umap2.release());
+ auto res = isl_union_pw_aff_intersect_params(copy(), set.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_map union_map::universe() const
+bool union_pw_aff::involves_locals() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_universe(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).involves_locals();
}
-isl::union_set union_map::wrap() const
+bool union_pw_aff::involves_nan() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_wrap(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_union_pw_aff(*this).involves_nan();
}
-isl::union_map union_map::zip() const
+bool union_pw_aff::isa_pw_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_map_zip(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).isa_pw_multi_aff();
}
-inline std::ostream &operator<<(std::ostream &os, const union_map &obj)
+isl::union_pw_aff_list union_pw_aff::list() const
{
- if (!obj.get())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_union_map_get_ctx(obj.get());
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- char *str = isl_union_map_to_str(obj.get());
- if (!str)
- exception::throw_last_error(saved_ctx);
- os << str;
- free(str);
- return os;
+ return isl::multi_union_pw_aff(*this).list();
}
-// implementations for isl::union_pw_aff
-union_pw_aff manage(__isl_take isl_union_pw_aff *ptr) {
+isl::multi_union_pw_aff union_pw_aff::neg() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return union_pw_aff(ptr);
+ return isl::multi_union_pw_aff(*this).neg();
}
-union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr) {
+
+bool union_pw_aff::plain_is_empty() const
+{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_union_pw_aff_get_ctx(ptr);
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = isl_union_pw_aff_copy(ptr);
+ return isl::union_pw_multi_aff(*this).plain_is_empty();
+}
+
+bool union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
+{
if (!ptr)
- exception::throw_last_error(saved_ctx);
- return union_pw_aff(ptr);
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).plain_is_equal(multi2);
}
-union_pw_aff::union_pw_aff()
- : ptr(nullptr) {}
+isl::union_pw_multi_aff union_pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
+}
-union_pw_aff::union_pw_aff(const union_pw_aff &obj)
- : ptr(nullptr)
+isl::union_pw_aff union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
{
- if (!obj.ptr)
+ if (!ptr || upma.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = isl_union_pw_aff_get_ctx(obj.ptr);
+ auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- ptr = obj.copy();
- if (!ptr)
+ auto res = isl_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
+ if (!res)
exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff_list union_pw_aff::pw_multi_aff_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).pw_multi_aff_list();
+}
+
+isl::union_pw_multi_aff union_pw_aff::range_factor_domain() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).range_factor_domain();
}
-union_pw_aff::union_pw_aff(__isl_take isl_union_pw_aff *ptr)
- : ptr(ptr) {}
-
-union_pw_aff::union_pw_aff(isl::aff aff)
+isl::union_pw_multi_aff union_pw_aff::range_factor_range() const
{
- if (aff.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = aff.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_from_aff(aff.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
+ return isl::union_pw_multi_aff(*this).range_factor_range();
}
-union_pw_aff::union_pw_aff(isl::pw_aff pa)
+isl::multi_union_pw_aff union_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
{
- if (pa.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = pa.ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_from_pw_aff(pa.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
+ return isl::multi_union_pw_aff(*this).range_product(multi2);
}
-union_pw_aff::union_pw_aff(isl::ctx ctx, const std::string &str)
+isl::union_pw_multi_aff union_pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const
{
- auto saved_ctx = ctx;
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_read_from_str(ctx.release(), str.c_str());
- if (!res)
- exception::throw_last_error(saved_ctx);
- ptr = res;
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::union_pw_multi_aff(*this).range_product(upma2);
}
-union_pw_aff &union_pw_aff::operator=(union_pw_aff obj) {
- std::swap(this->ptr, obj.ptr);
- return *this;
+isl::id union_pw_aff::range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).range_tuple_id();
}
-union_pw_aff::~union_pw_aff() {
- if (ptr)
- isl_union_pw_aff_free(ptr);
+isl::multi_union_pw_aff union_pw_aff::reset_range_tuple_id() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).reset_range_tuple_id();
}
-__isl_give isl_union_pw_aff *union_pw_aff::copy() const & {
- return isl_union_pw_aff_copy(ptr);
+isl::multi_union_pw_aff union_pw_aff::scale(const isl::multi_val &mv) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).scale(mv);
}
-__isl_keep isl_union_pw_aff *union_pw_aff::get() const {
- return ptr;
+isl::multi_union_pw_aff union_pw_aff::scale(const isl::val &v) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).scale(v);
}
-__isl_give isl_union_pw_aff *union_pw_aff::release() {
- isl_union_pw_aff *tmp = ptr;
- ptr = nullptr;
- return tmp;
+isl::multi_union_pw_aff union_pw_aff::scale(long v) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->scale(isl::val(ctx(), v));
}
-bool union_pw_aff::is_null() const {
- return ptr == nullptr;
+isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::multi_val &mv) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).scale_down(mv);
}
-isl::ctx union_pw_aff::ctx() const {
- return isl::ctx(isl_union_pw_aff_get_ctx(ptr));
+isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::val &v) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return isl::multi_union_pw_aff(*this).scale_down(v);
}
-isl::union_pw_aff union_pw_aff::add(isl::union_pw_aff upa2) const
+isl::multi_union_pw_aff union_pw_aff::scale_down(long v) const
{
- if (!ptr || upa2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_add(copy(), upa2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->scale_down(isl::val(ctx(), v));
}
-isl::union_set union_pw_aff::bind(isl::id id) const
+isl::multi_union_pw_aff union_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
{
- if (!ptr || id.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_bind_id(copy(), id.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_union_pw_aff(*this).set_at(pos, el);
}
-isl::union_set union_pw_aff::bind(const std::string &id) const
+isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const isl::id &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- return this->bind(isl::id(ctx(), id));
+ return isl::multi_union_pw_aff(*this).set_range_tuple(id);
}
-isl::union_pw_aff union_pw_aff::coalesce() const
+isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const std::string &id) const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_coalesce(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->set_range_tuple(isl::id(ctx(), id));
}
-isl::union_set union_pw_aff::domain() const
+unsigned union_pw_aff::size() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_domain(copy());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_union_pw_aff(*this).size();
}
isl::space union_pw_aff::space() const
return space();
}
-isl::union_pw_aff union_pw_aff::gist(isl::union_set context) const
+isl::multi_union_pw_aff union_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
{
- if (!ptr || context.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_gist(copy(), context.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_union_pw_aff(*this).sub(multi2);
}
-isl::union_pw_aff union_pw_aff::intersect_domain(isl::space space) const
+isl::union_pw_aff union_pw_aff::sub(isl::union_pw_aff upa2) const
{
- if (!ptr || space.is_null())
+ if (!ptr || upa2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_intersect_domain_space(copy(), space.release());
+ auto res = isl_union_pw_aff_sub(copy(), upa2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_pw_aff union_pw_aff::intersect_domain(isl::union_set uset) const
+isl::union_pw_multi_aff union_pw_aff::sub(const isl::union_pw_multi_aff &upma2) const
{
- if (!ptr || uset.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_intersect_domain_union_set(copy(), uset.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).sub(upma2);
}
-isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_domain(isl::union_set uset) const
+isl::union_pw_aff union_pw_aff::sub(const isl::aff &upa2) const
{
- if (!ptr || uset.is_null())
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->sub(isl::union_pw_aff(upa2));
+}
+
+isl::union_pw_aff union_pw_aff::sub(const isl::pw_aff &upa2) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ return this->sub(isl::union_pw_aff(upa2));
+}
+
+isl::union_pw_aff union_pw_aff::subtract_domain(isl::space space) const
+{
+ if (!ptr || space.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_intersect_domain_wrapped_domain(copy(), uset.release());
+ auto res = isl_union_pw_aff_subtract_domain_space(copy(), space.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_range(isl::union_set uset) const
+isl::union_pw_aff union_pw_aff::subtract_domain(isl::union_set uset) const
{
if (!ptr || uset.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_intersect_domain_wrapped_range(copy(), uset.release());
+ auto res = isl_union_pw_aff_subtract_domain_union_set(copy(), uset.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_pw_aff union_pw_aff::intersect_params(isl::set set) const
+isl::union_pw_aff_list union_pw_aff::to_list() const
{
- if (!ptr || set.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_intersect_params(copy(), set.release());
+ auto res = isl_union_pw_aff_to_list(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_pw_aff union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
+isl::multi_union_pw_aff union_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
{
- if (!ptr || upma.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::multi_union_pw_aff(*this).union_add(mupa2);
}
-isl::union_pw_aff union_pw_aff::sub(isl::union_pw_aff upa2) const
+isl::union_pw_aff union_pw_aff::union_add(isl::union_pw_aff upa2) const
{
if (!ptr || upa2.is_null())
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_sub(copy(), upa2.release());
+ auto res = isl_union_pw_aff_union_add(copy(), upa2.release());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
}
-isl::union_pw_aff union_pw_aff::subtract_domain(isl::space space) const
+isl::union_pw_multi_aff union_pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const
{
- if (!ptr || space.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_subtract_domain_space(copy(), space.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return isl::union_pw_multi_aff(*this).union_add(upma2);
}
-isl::union_pw_aff union_pw_aff::subtract_domain(isl::union_set uset) const
+isl::union_pw_aff union_pw_aff::union_add(const isl::aff &upa2) const
{
- if (!ptr || uset.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_subtract_domain_union_set(copy(), uset.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->union_add(isl::union_pw_aff(upa2));
}
-isl::union_pw_aff union_pw_aff::union_add(isl::union_pw_aff upa2) const
+isl::union_pw_aff union_pw_aff::union_add(const isl::pw_aff &upa2) const
{
- if (!ptr || upa2.is_null())
+ if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_union_add(copy(), upa2.release());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
+ return this->union_add(isl::union_pw_aff(upa2));
}
inline std::ostream &operator<<(std::ostream &os, const union_pw_aff &obj)
ptr = res;
}
+union_pw_aff_list::union_pw_aff_list(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_pw_aff_list_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
union_pw_aff_list &union_pw_aff_list::operator=(union_pw_aff_list obj) {
std::swap(this->ptr, obj.ptr);
return *this;
return manage(res);
}
+isl::union_pw_aff union_pw_aff_list::at(int index) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_pw_aff_list_get_at(get(), index);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_pw_aff union_pw_aff_list::get_at(int index) const
+{
+ return at(index);
+}
+
isl::union_pw_aff_list union_pw_aff_list::clear() const
{
if (!ptr)
return;
}
-isl::union_pw_aff union_pw_aff_list::at(int index) const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_aff_list_get_at(get(), index);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::union_pw_aff union_pw_aff_list::get_at(int index) const
-{
- return at(index);
-}
-
isl::union_pw_aff_list union_pw_aff_list::insert(unsigned int pos, isl::union_pw_aff el) const
{
if (!ptr || el.is_null())
return manage(res);
}
+isl::multi_union_pw_aff union_pw_multi_aff::as_multi_union_pw_aff() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_pw_multi_aff_as_multi_union_pw_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
isl::pw_multi_aff union_pw_multi_aff::as_pw_multi_aff() const
{
if (!ptr)
exception::throw_invalid("NULL input", __FILE__, __LINE__);
auto saved_ctx = ctx();
options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_multi_aff_as_pw_multi_aff(copy());
+ auto res = isl_union_pw_multi_aff_as_pw_multi_aff(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_map union_pw_multi_aff::as_union_map() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_pw_multi_aff_as_union_map(copy());
if (!res)
exception::throw_last_error(saved_ctx);
return manage(res);
return manage(res);
}
-isl::space union_pw_multi_aff::space() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_pw_multi_aff_get_space(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::space union_pw_multi_aff::get_space() const
-{
- return space();
-}
-
isl::union_pw_multi_aff union_pw_multi_aff::gist(isl::union_set context) const
{
if (!ptr || context.is_null())
return manage(res);
}
+isl::pw_multi_aff_list union_pw_multi_aff::pw_multi_aff_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_pw_multi_aff_get_pw_multi_aff_list(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::pw_multi_aff_list union_pw_multi_aff::get_pw_multi_aff_list() const
+{
+ return pw_multi_aff_list();
+}
+
isl::union_pw_multi_aff union_pw_multi_aff::range_factor_domain() const
{
if (!ptr)
return manage(res);
}
+isl::space union_pw_multi_aff::space() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_pw_multi_aff_get_space(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::space union_pw_multi_aff::get_space() const
+{
+ return space();
+}
+
isl::union_pw_multi_aff union_pw_multi_aff::sub(isl::union_pw_multi_aff upma2) const
{
if (!ptr || upma2.is_null())
return manage(res);
}
+isl::set union_set::as_set() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_set_as_set(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
isl::union_set union_set::coalesce() const
{
if (!ptr)
return;
}
-isl::space union_set::space() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_set_get_space(get());
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::space union_set::get_space() const
-{
- return space();
-}
-
isl::union_set union_set::gist(isl::union_set context) const
{
if (!ptr || context.is_null())
return manage(res);
}
+isl::space union_set::space() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_set_get_space(get());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::space union_set::get_space() const
+{
+ return space();
+}
+
isl::union_set union_set::subtract(isl::union_set uset2) const
{
if (!ptr || uset2.is_null())
return manage(res);
}
+isl::union_set_list union_set::to_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_set_to_list(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
isl::union_set union_set::unite(isl::union_set uset2) const
{
if (!ptr || uset2.is_null())
ptr = res;
}
+union_set_list::union_set_list(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_set_list_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
union_set_list &union_set_list::operator=(union_set_list obj) {
std::swap(this->ptr, obj.ptr);
return *this;
return manage(res);
}
+isl::union_set union_set_list::at(int index) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_union_set_list_get_at(get(), index);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::union_set union_set_list::get_at(int index) const
+{
+ return at(index);
+}
+
isl::union_set_list union_set_list::clear() const
{
if (!ptr)
return;
}
-isl::union_set union_set_list::at(int index) const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_union_set_list_get_at(get(), index);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::union_set union_set_list::get_at(int index) const
-{
- return at(index);
-}
-
isl::union_set_list union_set_list::insert(unsigned int pos, isl::union_set el) const
{
if (!ptr || el.is_null())
return res;
}
+long val::den_si() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_val_get_den_si(get());
+ return res;
+}
+
+long val::get_den_si() const
+{
+ return den_si();
+}
+
isl::val val::div(isl::val v2) const
{
if (!ptr || v2.is_null())
return this->ge(isl::val(ctx(), v2));
}
-long val::den_si() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_val_get_den_si(get());
- return res;
-}
-
-long val::get_den_si() const
-{
- return den_si();
-}
-
-long val::num_si() const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_val_get_num_si(get());
- return res;
-}
-
-long val::get_num_si() const
-{
- return num_si();
-}
-
bool val::gt(const isl::val &v2) const
{
if (!ptr || v2.is_null())
return manage(res);
}
+long val::num_si() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_val_get_num_si(get());
+ return res;
+}
+
+long val::get_num_si() const
+{
+ return num_si();
+}
+
isl::val val::one(isl::ctx ctx)
{
auto saved_ctx = ctx;
return this->sub(isl::val(ctx(), v2));
}
+isl::val_list val::to_list() const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_val_to_list(copy());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
isl::val val::trunc() const
{
if (!ptr)
ptr = res;
}
+val_list::val_list(isl::ctx ctx, const std::string &str)
+{
+ auto saved_ctx = ctx;
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_val_list_read_from_str(ctx.release(), str.c_str());
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ ptr = res;
+}
+
val_list &val_list::operator=(val_list obj) {
std::swap(this->ptr, obj.ptr);
return *this;
return this->add(isl::val(ctx(), el));
}
+isl::val val_list::at(int index) const
+{
+ if (!ptr)
+ exception::throw_invalid("NULL input", __FILE__, __LINE__);
+ auto saved_ctx = ctx();
+ options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
+ auto res = isl_val_list_get_at(get(), index);
+ if (!res)
+ exception::throw_last_error(saved_ctx);
+ return manage(res);
+}
+
+isl::val val_list::get_at(int index) const
+{
+ return at(index);
+}
+
isl::val_list val_list::clear() const
{
if (!ptr)
return;
}
-isl::val val_list::at(int index) const
-{
- if (!ptr)
- exception::throw_invalid("NULL input", __FILE__, __LINE__);
- auto saved_ctx = ctx();
- options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error);
- auto res = isl_val_list_get_at(get(), index);
- if (!res)
- exception::throw_last_error(saved_ctx);
- return manage(res);
-}
-
-isl::val val_list::get_at(int index) const
-{
- return at(index);
-}
-
isl::val_list val_list::insert(unsigned int pos, isl::val el) const
{
if (!ptr || el.is_null())
--- /dev/null
+/// These are automatically generated templated C++ bindings for isl.
+///
+/// isl is a library for computing with integer sets and maps described by
+/// Presburger formulas. On top of this, isl provides various tools for
+/// polyhedral compilation, ranging from dependence analysis over scheduling
+/// to AST generation.
+
+#ifndef ISL_TYPED_CPP
+#define ISL_TYPED_CPP
+
+#include <type_traits>
+
+#include <isl/cpp.h>
+
+namespace isl {
+namespace typed {
+
+template <typename Domain, typename Range>
+struct pair {};
+
+struct Anonymous;
+
+
+template <typename...>
+struct aff;
+
+template <typename...Ts>
+using aff_on = aff<Ts..., Anonymous>;
+
+template <typename...>
+struct aff_list;
+
+template <typename...Ts>
+using aff_list_on = aff_list<Ts..., Anonymous>;
+
+template <typename...>
+struct basic_map;
+
+template <typename...>
+struct basic_set;
+
+template <typename...>
+struct fixed_box;
+
+template <typename...>
+struct id;
+
+template <typename...>
+struct id_list;
+
+template <typename...>
+struct map;
+
+template <typename...>
+struct map_list;
+
+template <typename...>
+struct multi_aff;
+
+template <typename...>
+struct multi_id;
+
+template <typename...>
+struct multi_pw_aff;
+
+template <typename...>
+struct multi_union_pw_aff;
+
+template <typename...>
+struct multi_val;
+
+template <typename...>
+struct point;
+
+template <typename...>
+struct pw_aff;
+
+template <typename...Ts>
+using pw_aff_on = pw_aff<Ts..., Anonymous>;
+
+template <typename...>
+struct pw_aff_list;
+
+template <typename...Ts>
+using pw_aff_list_on = pw_aff_list<Ts..., Anonymous>;
+
+template <typename...>
+struct pw_multi_aff;
+
+template <typename...>
+struct pw_multi_aff_list;
+
+template <typename...>
+struct set;
+
+template <typename...>
+struct space;
+
+template <typename...>
+struct union_map;
+
+template <typename...>
+struct union_pw_aff;
+
+template <typename...Ts>
+using union_pw_aff_on = union_pw_aff<Ts..., Anonymous>;
+
+template <typename...>
+struct union_pw_aff_list;
+
+template <typename...Ts>
+using union_pw_aff_list_on = union_pw_aff_list<Ts..., Anonymous>;
+
+template <typename...>
+struct union_pw_multi_aff;
+
+template <typename...>
+struct union_set;
+
+template <typename...>
+struct union_set_list;
+
+template <typename...>
+struct val;
+
+template <typename...>
+struct val_list;
+
+template <>
+struct aff<Anonymous> : public isl::aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ aff() = default;
+ aff(const isl::aff &obj) : isl::aff(obj) {}
+ static aff from(const isl::aff &obj) {
+ return aff(obj);
+ }
+ inline explicit aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::aff<Anonymous> add(const typed::aff<Anonymous> &aff2) const;
+ inline typed::multi_aff<Anonymous> add(const typed::multi_aff<Anonymous> &multi2) const;
+ inline typed::multi_pw_aff<Anonymous> add(const typed::multi_pw_aff<Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<Anonymous> add(const typed::multi_union_pw_aff<Anonymous> &multi2) const;
+ inline typed::pw_aff<Anonymous> add(const typed::pw_aff<Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Anonymous> add(const typed::pw_multi_aff<Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Anonymous> add(const typed::union_pw_aff<Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Anonymous> add(const typed::union_pw_multi_aff<Anonymous> &upma2) const;
+ inline typed::aff<Anonymous> add_constant(const typed::val<Anonymous> &v) const;
+ inline typed::aff<Anonymous> add_constant(long v) const;
+ inline typed::multi_aff<Anonymous> add_constant(const typed::multi_val<Anonymous> &mv) const;
+ template <typename Range>
+ inline typed::union_pw_multi_aff<Range> apply(const typed::union_pw_multi_aff<Anonymous, Range> &upma2) const;
+ inline typed::aff<Anonymous> as_aff() const;
+ inline typed::map<Anonymous> as_map() const = delete;
+ inline typed::multi_aff<Anonymous> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<Anonymous> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Anonymous> as_pw_multi_aff() const;
+ inline typed::set<Anonymous> as_set() const;
+ inline typed::union_map<Anonymous> as_union_map() const = delete;
+ inline typed::aff<Anonymous> at(int pos) const;
+ inline typed::basic_set<> bind(const typed::id<Anonymous> &id) const;
+ inline typed::basic_set<> bind(const std::string &id) const;
+ inline typed::basic_set<> bind(const typed::multi_id<Anonymous> &tuple) const;
+ inline typed::pw_aff<Anonymous> bind_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::pw_aff<Anonymous> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::aff<Anonymous> ceil() const;
+ inline typed::pw_aff<Anonymous> coalesce() const;
+ inline typed::pw_aff<Anonymous> cond(const typed::pw_aff<Anonymous> &pwaff_true, const typed::pw_aff<Anonymous> &pwaff_false) const;
+ inline typed::multi_val<Anonymous> constant_multi_val() const;
+ inline typed::val<Anonymous> get_constant_val() const = delete;
+ inline typed::set<> domain() const;
+ inline typed::pw_multi_aff<Anonymous> extract_pw_multi_aff(const typed::space<Anonymous> &space) const;
+ inline typed::aff<Anonymous> floor() const;
+ inline typed::set<Anonymous> ge_set(const typed::aff<> &aff2) const = delete;
+ inline typed::set<Anonymous> ge_set(const typed::pw_aff<> &pwaff2) const = delete;
+ inline typed::aff<Anonymous> gist(const typed::set<> &context) const;
+ inline typed::union_pw_aff<Anonymous> gist(const typed::union_set<> &context) const;
+ inline typed::aff<Anonymous> gist(const typed::basic_set<> &context) const;
+ inline typed::aff<Anonymous> gist(const typed::point<> &context) const;
+ inline typed::set<Anonymous> gt_set(const typed::aff<> &aff2) const = delete;
+ inline typed::set<Anonymous> gt_set(const typed::pw_aff<> &pwaff2) const = delete;
+ inline typed::multi_aff<Anonymous, Anonymous> identity() const;
+ template <typename Domain>
+ inline typed::pw_aff<Domain, Anonymous> insert_domain(const typed::space<Domain> &domain) const;
+ inline typed::pw_aff<Anonymous> intersect_domain(const typed::set<> &set) const = delete;
+ inline typed::union_pw_aff<Anonymous> intersect_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_aff<Anonymous> intersect_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::pw_aff<Anonymous> intersect_params(const typed::set<> &set) const;
+ inline typed::set<Anonymous> le_set(const typed::aff<> &aff2) const = delete;
+ inline typed::set<Anonymous> le_set(const typed::pw_aff<> &pwaff2) const = delete;
+ inline typed::aff_list<Anonymous> list() const;
+ inline typed::set<Anonymous> lt_set(const typed::aff<> &aff2) const = delete;
+ inline typed::set<Anonymous> lt_set(const typed::pw_aff<> &pwaff2) const = delete;
+ inline typed::multi_pw_aff<Anonymous> max(const typed::multi_pw_aff<Anonymous> &multi2) const;
+ inline typed::pw_aff<Anonymous> max(const typed::pw_aff<Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> max_multi_val() const;
+ inline typed::multi_pw_aff<Anonymous> min(const typed::multi_pw_aff<Anonymous> &multi2) const;
+ inline typed::pw_aff<Anonymous> min(const typed::pw_aff<Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> min_multi_val() const;
+ inline typed::aff<Anonymous> mod(const typed::val<Anonymous> &mod) const;
+ inline typed::aff<Anonymous> mod(long mod) const;
+ inline typed::aff<Anonymous> neg() const;
+ inline typed::pw_multi_aff<Anonymous> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ template <typename Range>
+ inline typed::multi_aff<pair<Anonymous, Range>> product(const typed::multi_aff<Range> &multi2) const;
+ template <typename Range>
+ inline typed::multi_pw_aff<pair<Anonymous, Range>> product(const typed::multi_pw_aff<Range> &multi2) const;
+ template <typename Range>
+ inline typed::pw_multi_aff<pair<Anonymous, Range>> product(const typed::pw_multi_aff<Range> &pma2) const;
+ inline typed::aff<Anonymous> pullback(const typed::multi_aff<> &ma) const = delete;
+ inline typed::pw_aff<Anonymous> pullback(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::pw_aff<Anonymous> pullback(const typed::pw_multi_aff<> &pma) const = delete;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_multi_aff<> &upma) const = delete;
+ inline typed::aff<Anonymous> pullback(const typed::aff<> &ma) const = delete;
+ inline typed::pw_multi_aff_list<Anonymous> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<Anonymous> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<Anonymous> range_factor_range() const = delete;
+ inline typed::multi_aff<Anonymous> range_product(const typed::multi_aff<> &multi2) const = delete;
+ inline typed::multi_pw_aff<Anonymous> range_product(const typed::multi_pw_aff<> &multi2) const = delete;
+ inline typed::multi_union_pw_aff<Anonymous> range_product(const typed::multi_union_pw_aff<> &multi2) const = delete;
+ inline typed::pw_multi_aff<Anonymous> range_product(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Anonymous> range_product(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::aff<Anonymous> scale(const typed::val<Anonymous> &v) const;
+ inline typed::aff<Anonymous> scale(long v) const;
+ inline typed::multi_aff<Anonymous> scale(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::aff<Anonymous> scale_down(const typed::val<Anonymous> &v) const;
+ inline typed::aff<Anonymous> scale_down(long v) const;
+ inline typed::multi_aff<Anonymous> scale_down(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::multi_aff<Anonymous> set_at(int pos, const typed::aff<Anonymous> &el) const;
+ inline typed::multi_pw_aff<Anonymous> set_at(int pos, const typed::pw_aff<Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Anonymous> set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const;
+ template <typename Domain2>
+ inline typed::multi_aff<Domain2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::multi_aff<Domain2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Anonymous> space() const;
+ inline typed::aff<Anonymous> sub(const typed::aff<Anonymous> &aff2) const;
+ inline typed::multi_aff<Anonymous> sub(const typed::multi_aff<Anonymous> &multi2) const;
+ inline typed::multi_pw_aff<Anonymous> sub(const typed::multi_pw_aff<Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<Anonymous> sub(const typed::multi_union_pw_aff<Anonymous> &multi2) const;
+ inline typed::pw_aff<Anonymous> sub(const typed::pw_aff<Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Anonymous> sub(const typed::pw_multi_aff<Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Anonymous> sub(const typed::union_pw_aff<Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Anonymous> sub(const typed::union_pw_multi_aff<Anonymous> &upma2) const;
+ inline typed::pw_aff<Anonymous> subtract_domain(const typed::set<> &set) const = delete;
+ inline typed::union_pw_aff<Anonymous> subtract_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_aff<Anonymous> subtract_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::multi_pw_aff<Anonymous> to_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<Anonymous> to_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Anonymous> to_pw_multi_aff() const;
+ inline typed::union_pw_aff<Anonymous> to_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<Anonymous> to_union_pw_multi_aff() const;
+ template <typename Domain>
+ inline typed::aff<Domain, Anonymous> unbind_params_insert_domain(const typed::multi_id<Domain> &domain) const;
+ inline typed::multi_pw_aff<Anonymous> union_add(const typed::multi_pw_aff<Anonymous> &mpa2) const;
+ inline typed::multi_union_pw_aff<Anonymous> union_add(const typed::multi_union_pw_aff<Anonymous> &mupa2) const;
+ inline typed::pw_aff<Anonymous> union_add(const typed::pw_aff<Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Anonymous> union_add(const typed::pw_multi_aff<Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Anonymous> union_add(const typed::union_pw_aff<Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Anonymous> union_add(const typed::union_pw_multi_aff<Anonymous> &upma2) const;
+};
+
+template <typename Domain>
+struct aff<Domain, Anonymous> : public isl::aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ aff() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ aff(const aff<Arg1, Anonymous> &obj) : isl::aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::aff>{}, bool>::type = true>
+ aff(const base &obj) : isl::aff(obj) {}
+ public:
+ static aff from(const isl::aff &obj) {
+ return aff(obj);
+ }
+ inline explicit aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::aff<Domain, Anonymous> add(const typed::aff<Domain, Anonymous> &aff2) const;
+ inline typed::multi_aff<Domain, Anonymous> add(const typed::multi_aff<Domain, Anonymous> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Anonymous> add(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> add(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::pw_aff<Domain, Anonymous> add(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Domain, Anonymous> add(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const;
+ inline typed::aff<Domain, Anonymous> add_constant(const typed::val<Anonymous> &v) const;
+ inline typed::aff<Domain, Anonymous> add_constant(long v) const;
+ inline typed::multi_aff<Domain, Anonymous> add_constant(const typed::multi_val<Anonymous> &mv) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, Range2> apply(const typed::union_pw_multi_aff<Anonymous, Range2> &upma2) const;
+ inline typed::aff<Domain, Anonymous> as_aff() const;
+ inline typed::map<Domain, Anonymous> as_map() const;
+ inline typed::multi_aff<Domain, Anonymous> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Anonymous> as_pw_multi_aff() const;
+ inline typed::set<Domain, Anonymous> as_set() const = delete;
+ inline typed::union_map<Domain, Anonymous> as_union_map() const;
+ inline typed::aff<Domain, Anonymous> at(int pos) const;
+ inline typed::basic_set<Domain> bind(const typed::id<Anonymous> &id) const;
+ inline typed::basic_set<Domain> bind(const std::string &id) const;
+ inline typed::basic_set<Domain> bind(const typed::multi_id<Anonymous> &tuple) const;
+ inline typed::pw_aff<Anonymous> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::pw_aff<Domain, Anonymous> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::aff<Domain, Anonymous> ceil() const;
+ inline typed::pw_aff<Domain, Anonymous> coalesce() const;
+ inline typed::pw_aff<Domain, Anonymous> cond(const typed::pw_aff<Domain, Anonymous> &pwaff_true, const typed::pw_aff<Domain, Anonymous> &pwaff_false) const;
+ inline typed::multi_val<Anonymous> constant_multi_val() const;
+ inline typed::val<Domain, Anonymous> get_constant_val() const = delete;
+ inline typed::set<Domain> domain() const;
+ inline typed::pw_multi_aff<Domain, Anonymous> extract_pw_multi_aff(const typed::space<Domain, Anonymous> &space) const;
+ inline typed::aff<Domain, Anonymous> floor() const;
+ inline typed::set<Domain> ge_set(const typed::aff<Domain, Anonymous> &aff2) const;
+ inline typed::set<Domain> ge_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::aff<Domain, Anonymous> gist(const typed::set<Domain> &context) const;
+ inline typed::union_pw_aff<Domain, Anonymous> gist(const typed::union_set<Domain> &context) const;
+ inline typed::aff<Domain, Anonymous> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::aff<Domain, Anonymous> gist(const typed::point<Domain> &context) const;
+ inline typed::set<Domain> gt_set(const typed::aff<Domain, Anonymous> &aff2) const;
+ inline typed::set<Domain> gt_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::multi_aff<Domain, Anonymous> identity() const;
+ inline typed::pw_aff<Domain, Anonymous> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_aff<Domain, Anonymous> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_aff<Domain, Anonymous> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_aff<Domain, Anonymous> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::pw_aff<Domain, Anonymous> intersect_params(const typed::set<> &set) const;
+ inline typed::set<Domain> le_set(const typed::aff<Domain, Anonymous> &aff2) const;
+ inline typed::set<Domain> le_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::aff_list<Domain, Anonymous> list() const;
+ inline typed::set<Domain> lt_set(const typed::aff<Domain, Anonymous> &aff2) const;
+ inline typed::set<Domain> lt_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::multi_pw_aff<Domain, Anonymous> max(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::pw_aff<Domain, Anonymous> max(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> max_multi_val() const;
+ inline typed::multi_pw_aff<Domain, Anonymous> min(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::pw_aff<Domain, Anonymous> min(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> min_multi_val() const;
+ inline typed::aff<Domain, Anonymous> mod(const typed::val<Anonymous> &mod) const;
+ inline typed::aff<Domain, Anonymous> mod(long mod) const;
+ inline typed::aff<Domain, Anonymous> neg() const;
+ inline typed::pw_multi_aff<Domain, Anonymous> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> product(const typed::multi_aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_pw_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> product(const typed::multi_pw_aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> product(const typed::pw_multi_aff<Domain2, Range2> &pma2) const;
+ template <typename Domain2>
+ inline typed::aff<Domain2, Anonymous> pullback(const typed::multi_aff<Domain2, Domain> &ma) const;
+ inline typed::aff<Anonymous> pullback(const typed::multi_aff<Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::pw_aff<Domain2, Anonymous> pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ inline typed::pw_aff<Anonymous> pullback(const typed::multi_pw_aff<Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::pw_aff<Domain2, Anonymous> pullback(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ inline typed::pw_aff<Anonymous> pullback(const typed::pw_multi_aff<Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_pw_aff<Domain2, Anonymous> pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_multi_aff<Domain> &upma) const;
+ template <typename Domain2>
+ inline typed::aff<Domain2, Anonymous> pullback(const typed::aff<Domain2, Domain> &ma) const;
+ inline typed::aff<Anonymous> pullback(const typed::aff<Domain> &ma) const;
+ inline typed::pw_multi_aff_list<Domain, Anonymous> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<Domain, Anonymous> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<Domain, Anonymous> range_factor_range() const = delete;
+ template <typename Range2>
+ inline typed::multi_aff<Domain, pair<Anonymous, Range2>> range_product(const typed::multi_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_pw_aff<Domain, pair<Anonymous, Range2>> range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, pair<Anonymous, Range2>> range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::pw_multi_aff<Domain, pair<Anonymous, Range2>> range_product(const typed::pw_multi_aff<Domain, Range2> &pma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, pair<Anonymous, Range2>> range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const;
+ inline typed::aff<Domain, Anonymous> scale(const typed::val<Anonymous> &v) const;
+ inline typed::aff<Domain, Anonymous> scale(long v) const;
+ inline typed::multi_aff<Domain, Anonymous> scale(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::aff<Domain, Anonymous> scale_down(const typed::val<Anonymous> &v) const;
+ inline typed::aff<Domain, Anonymous> scale_down(long v) const;
+ inline typed::multi_aff<Domain, Anonymous> scale_down(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::multi_aff<Domain, Anonymous> set_at(int pos, const typed::aff<Domain, Anonymous> &el) const;
+ inline typed::multi_pw_aff<Domain, Anonymous> set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const;
+ template <typename Range2>
+ inline typed::multi_aff<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::multi_aff<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain, Anonymous> space() const;
+ inline typed::aff<Domain, Anonymous> sub(const typed::aff<Domain, Anonymous> &aff2) const;
+ inline typed::multi_aff<Domain, Anonymous> sub(const typed::multi_aff<Domain, Anonymous> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Anonymous> sub(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> sub(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::pw_aff<Domain, Anonymous> sub(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Domain, Anonymous> sub(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> sub(const typed::union_pw_aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> sub(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const;
+ inline typed::pw_aff<Domain, Anonymous> subtract_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_aff<Domain, Anonymous> subtract_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_aff<Domain, Anonymous> subtract_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::multi_pw_aff<Domain, Anonymous> to_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> to_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Anonymous> to_pw_multi_aff() const;
+ inline typed::union_pw_aff<Domain, Anonymous> to_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> to_union_pw_multi_aff() const;
+ inline typed::aff<Domain, Anonymous> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<Domain, Anonymous> union_add(const typed::multi_pw_aff<Domain, Anonymous> &mpa2) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> union_add(const typed::multi_union_pw_aff<Domain, Anonymous> &mupa2) const;
+ inline typed::pw_aff<Domain, Anonymous> union_add(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Domain, Anonymous> union_add(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> union_add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> union_add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const;
+};
+
+template <typename Domain2, typename Range2>
+struct aff<pair<Domain2, Range2>, Anonymous> : public isl::aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ aff() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain2, Arg1>{} &&
+ std::is_base_of<Range2, Arg2>{},
+ bool>::type = true>
+ aff(const aff<pair<Arg1, Arg2>, Anonymous> &obj) : isl::aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::aff>{}, bool>::type = true>
+ aff(const base &obj) : isl::aff(obj) {}
+ public:
+ static aff from(const isl::aff &obj) {
+ return aff(obj);
+ }
+ inline explicit aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> add(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Anonymous> add(const typed::multi_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> add(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> add(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> add(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> add(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> add_constant(const typed::val<Anonymous> &v) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> add_constant(long v) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Anonymous> add_constant(const typed::multi_val<Anonymous> &mv) const;
+ template <typename Arg1>
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg1> apply(const typed::union_pw_multi_aff<Anonymous, Arg1> &upma2) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> as_aff() const;
+ inline typed::map<pair<Domain2, Range2>, Anonymous> as_map() const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Anonymous> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> as_pw_multi_aff() const;
+ inline typed::set<pair<Domain2, Range2>, Anonymous> as_set() const = delete;
+ inline typed::union_map<pair<Domain2, Range2>, Anonymous> as_union_map() const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> at(int pos) const;
+ inline typed::basic_set<pair<Domain2, Range2>> bind(const typed::id<Anonymous> &id) const;
+ inline typed::basic_set<pair<Domain2, Range2>> bind(const std::string &id) const;
+ inline typed::basic_set<pair<Domain2, Range2>> bind(const typed::multi_id<Anonymous> &tuple) const;
+ inline typed::pw_aff<Anonymous> bind_domain(const typed::multi_id<pair<Domain2, Range2>> &tuple) const;
+ inline typed::pw_aff<Range2, Anonymous> bind_domain_wrapped_domain(const typed::multi_id<Domain2> &tuple) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> ceil() const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> coalesce() const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> cond(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff_true, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff_false) const;
+ inline typed::multi_val<Anonymous> constant_multi_val() const;
+ inline typed::val<pair<Domain2, Range2>, Anonymous> get_constant_val() const = delete;
+ inline typed::set<pair<Domain2, Range2>> domain() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> extract_pw_multi_aff(const typed::space<pair<Domain2, Range2>, Anonymous> &space) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> floor() const;
+ inline typed::set<pair<Domain2, Range2>> ge_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const;
+ inline typed::set<pair<Domain2, Range2>> ge_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> gist(const typed::set<pair<Domain2, Range2>> &context) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> gist(const typed::union_set<pair<Domain2, Range2>> &context) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> gist(const typed::basic_set<pair<Domain2, Range2>> &context) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> gist(const typed::point<pair<Domain2, Range2>> &context) const;
+ inline typed::set<pair<Domain2, Range2>> gt_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const;
+ inline typed::set<pair<Domain2, Range2>> gt_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Anonymous> identity() const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> intersect_domain(const typed::set<pair<Domain2, Range2>> &set) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> intersect_domain(const typed::space<pair<Domain2, Range2>> &space) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> intersect_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> intersect_params(const typed::set<> &set) const;
+ inline typed::set<pair<Domain2, Range2>> le_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const;
+ inline typed::set<pair<Domain2, Range2>> le_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::aff_list<pair<Domain2, Range2>, Anonymous> list() const;
+ inline typed::set<pair<Domain2, Range2>> lt_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const;
+ inline typed::set<pair<Domain2, Range2>> lt_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> max(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> max(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> max_multi_val() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> min(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> min(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> min_multi_val() const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> mod(const typed::val<Anonymous> &mod) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> mod(long mod) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> neg() const;
+ template <typename Domain3>
+ inline typed::pw_multi_aff<pair<Domain3, Range2>, Anonymous> preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, Domain2> &pma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, Range2>, Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain2> &upma2) const;
+ template <typename Arg1, typename Arg2>
+ inline typed::multi_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>> product(const typed::multi_aff<Arg1, Arg2> &multi2) const;
+ template <typename Arg1, typename Arg2>
+ inline typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>> product(const typed::multi_pw_aff<Arg1, Arg2> &multi2) const;
+ template <typename Arg1, typename Arg2>
+ inline typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>> product(const typed::pw_multi_aff<Arg1, Arg2> &pma2) const;
+ template <typename Arg1>
+ inline typed::aff<Arg1, Anonymous> pullback(const typed::multi_aff<Arg1, pair<Domain2, Range2>> &ma) const;
+ inline typed::aff<Anonymous> pullback(const typed::multi_aff<pair<Domain2, Range2>> &ma) const;
+ template <typename Arg1>
+ inline typed::pw_aff<Arg1, Anonymous> pullback(const typed::multi_pw_aff<Arg1, pair<Domain2, Range2>> &mpa) const;
+ inline typed::pw_aff<Anonymous> pullback(const typed::multi_pw_aff<pair<Domain2, Range2>> &mpa) const;
+ template <typename Arg1>
+ inline typed::pw_aff<Arg1, Anonymous> pullback(const typed::pw_multi_aff<Arg1, pair<Domain2, Range2>> &pma) const;
+ inline typed::pw_aff<Anonymous> pullback(const typed::pw_multi_aff<pair<Domain2, Range2>> &pma) const;
+ template <typename Arg1>
+ inline typed::union_pw_aff<Arg1, Anonymous> pullback(const typed::union_pw_multi_aff<Arg1, pair<Domain2, Range2>> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_multi_aff<pair<Domain2, Range2>> &upma) const;
+ template <typename Arg1>
+ inline typed::aff<Arg1, Anonymous> pullback(const typed::aff<Arg1, pair<Domain2, Range2>> &ma) const;
+ inline typed::aff<Anonymous> pullback(const typed::aff<pair<Domain2, Range2>> &ma) const;
+ inline typed::pw_multi_aff_list<pair<Domain2, Range2>, Anonymous> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> range_factor_range() const = delete;
+ template <typename Arg1>
+ inline typed::multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> range_product(const typed::multi_aff<pair<Domain2, Range2>, Arg1> &multi2) const;
+ template <typename Arg1>
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> range_product(const typed::multi_pw_aff<pair<Domain2, Range2>, Arg1> &multi2) const;
+ template <typename Arg1>
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> range_product(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Arg1> &multi2) const;
+ template <typename Arg1>
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> range_product(const typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> &pma2) const;
+ template <typename Arg1>
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> range_product(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg1> &upma2) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> scale(const typed::val<Anonymous> &v) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> scale(long v) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Anonymous> scale(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> scale_down(const typed::val<Anonymous> &v) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> scale_down(long v) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Anonymous> scale_down(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Anonymous> set_at(int pos, const typed::aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> set_at(int pos, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> set_at(int pos, const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ template <typename Arg1>
+ inline typed::multi_aff<pair<Domain2, Range2>, Arg1> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Arg1>
+ inline typed::multi_aff<pair<Domain2, Range2>, Arg1> set_range_tuple(const std::string &id) const;
+ inline typed::space<pair<Domain2, Range2>, Anonymous> space() const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> sub(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::multi_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> subtract_domain(const typed::set<pair<Domain2, Range2>> &set) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> subtract_domain(const typed::space<pair<Domain2, Range2>> &space) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> subtract_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> to_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> to_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> to_pw_multi_aff() const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> to_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> to_union_pw_multi_aff() const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &mpa2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &mupa2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const;
+};
+
+template <>
+struct aff_list<Anonymous> : public isl::aff_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ aff_list() = default;
+ aff_list(const isl::aff_list &obj) : isl::aff_list(obj) {}
+ static aff_list from(const isl::aff_list &obj) {
+ return aff_list(obj);
+ }
+ inline explicit aff_list(const isl::ctx &ctx, int n);
+ inline explicit aff_list(const typed::aff<Anonymous> &el);
+ inline explicit aff_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::aff_list<Anonymous> add(const typed::aff<Anonymous> &el) const;
+ inline typed::aff<Anonymous> at(int index) const;
+ inline typed::aff<Anonymous> get_at(int index) const = delete;
+ inline typed::aff_list<Anonymous> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::aff<Anonymous>)> &fn) const;
+};
+
+template <typename Domain>
+struct aff_list<Domain, Anonymous> : public isl::aff_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ aff_list() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ aff_list(const aff_list<Arg1, Anonymous> &obj) : isl::aff_list(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::aff_list>{}, bool>::type = true>
+ aff_list(const base &obj) : isl::aff_list(obj) {}
+ public:
+ static aff_list from(const isl::aff_list &obj) {
+ return aff_list(obj);
+ }
+ inline explicit aff_list(const isl::ctx &ctx, int n);
+ inline explicit aff_list(const typed::aff<Domain, Anonymous> &el);
+ inline explicit aff_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::aff_list<Domain, Anonymous> add(const typed::aff<Domain, Anonymous> &el) const;
+ inline typed::aff<Domain, Anonymous> at(int index) const;
+ inline typed::aff<Domain, Anonymous> get_at(int index) const = delete;
+ inline typed::aff_list<Domain, Anonymous> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::aff<Domain, Anonymous>)> &fn) const;
+};
+
+template <typename Domain, typename Range>
+struct basic_map<Domain, Range> : public isl::basic_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ basic_map() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ basic_map(const basic_map<Arg1, Arg2> &obj) : isl::basic_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::basic_map>{}, bool>::type = true>
+ basic_map(const base &obj) : isl::basic_map(obj) {}
+ public:
+ static basic_map from(const isl::basic_map &obj) {
+ return basic_map(obj);
+ }
+ inline explicit basic_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::basic_map<Domain2, Range> apply_domain(const typed::basic_map<Domain, Domain2> &bmap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> apply_domain(const typed::map<Domain, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range> apply_domain(const typed::union_map<Domain, Domain2> &umap2) const;
+ template <typename Range2>
+ inline typed::basic_map<Domain, Range2> apply_range(const typed::basic_map<Range, Range2> &bmap2) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> apply_range(const typed::map<Range, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> apply_range(const typed::union_map<Range, Range2> &umap2) const;
+ inline typed::map<Domain, Range> as_map() const;
+ inline typed::multi_union_pw_aff<Domain, Range> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Range> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<Domain, Range> as_union_pw_multi_aff() const;
+ inline typed::set<Range> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::set<Domain> bind_range(const typed::multi_id<Range> &tuple) const;
+ inline typed::map<Domain, Range> coalesce() const;
+ inline typed::map<Domain, Range> curry() const = delete;
+ inline typed::basic_set<Domain, Range> deltas() const = delete;
+ inline typed::basic_map<Domain, Range> detect_equalities() const;
+ inline typed::set<Domain> domain() const;
+ inline typed::map<Domain, Range> domain_factor_domain() const = delete;
+ inline typed::map<Domain, Range> domain_factor_range() const = delete;
+ inline typed::union_map<pair<Domain, Range>, Domain> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<Domain, Range>, Domain> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<Domain, Domain2>, Range> domain_product(const typed::map<Domain2, Range> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, Range> domain_product(const typed::union_map<Domain2, Range> &umap2) const;
+ inline typed::map<Domain, Range> eq_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::union_map<Domain, Range> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<Domain, Range>)> &test) const;
+ inline typed::map<Domain, Range> extract_map(const typed::space<Domain, Range> &space) const;
+ inline typed::basic_map<Domain, Range> flatten_domain() const = delete;
+ inline typed::basic_map<Domain, Range> flatten_range() const = delete;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<Domain, Range>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<Domain, Range>)> &fn) const;
+ inline typed::basic_map<Domain, Range> gist(const typed::basic_map<Domain, Range> &context) const;
+ inline typed::map<Domain, Range> gist(const typed::map<Domain, Range> &context) const;
+ inline typed::union_map<Domain, Range> gist(const typed::union_map<Domain, Range> &context) const;
+ inline typed::map<Domain, Range> gist_domain(const typed::set<Domain> &context) const;
+ inline typed::union_map<Domain, Range> gist_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::basic_map<Domain, Range> intersect(const typed::basic_map<Domain, Range> &bmap2) const;
+ inline typed::map<Domain, Range> intersect(const typed::map<Domain, Range> &map2) const;
+ inline typed::union_map<Domain, Range> intersect(const typed::union_map<Domain, Range> &umap2) const;
+ inline typed::basic_map<Domain, Range> intersect_domain(const typed::basic_set<Domain> &bset) const;
+ inline typed::map<Domain, Range> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_map<Domain, Range> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, Range> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::basic_map<Domain, Range> intersect_domain(const typed::point<Domain> &bset) const;
+ inline typed::map<Domain, Range> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::basic_map<Domain, Range> intersect_range(const typed::basic_set<Range> &bset) const;
+ inline typed::map<Domain, Range> intersect_range(const typed::set<Range> &set) const;
+ inline typed::union_map<Domain, Range> intersect_range(const typed::space<Range> &space) const;
+ inline typed::union_map<Domain, Range> intersect_range(const typed::union_set<Range> &uset) const;
+ inline typed::basic_map<Domain, Range> intersect_range(const typed::point<Range> &bset) const;
+ inline typed::map<Domain, Range> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lexmax() const;
+ inline typed::pw_multi_aff<Domain, Range> lexmax_pw_multi_aff() const;
+ inline typed::map<Domain, Range> lexmin() const;
+ inline typed::pw_multi_aff<Domain, Range> lexmin_pw_multi_aff() const;
+ inline typed::map<Domain, Range> lower_bound(const typed::multi_pw_aff<Domain, Range> &lower) const;
+ inline typed::map_list<Domain, Range> map_list() const;
+ inline typed::multi_pw_aff<Domain, Range> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<Domain, Range> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range> preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> preimage_range(const typed::multi_aff<Range2, Range> &ma) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> preimage_range(const typed::pw_multi_aff<Range2, Range> &pma) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> preimage_range(const typed::union_pw_multi_aff<Range2, Range> &upma) const;
+ template <typename Domain2, typename Range2>
+ inline typed::map<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::map<Domain2, Range2> &map2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::union_map<Domain2, Range2> &umap2) const;
+ inline typed::map<Domain, Range> project_out_all_params() const;
+ inline typed::set<Range> range() const;
+ inline typed::map<Domain, Range> range_factor_domain() const = delete;
+ inline typed::map<Domain, Range> range_factor_range() const = delete;
+ inline typed::fixed_box<Domain, Range> range_lattice_tile() const;
+ inline typed::union_map<pair<Domain, Range>, Range> range_map() const;
+ template <typename Range2>
+ inline typed::map<Domain, pair<Range, Range2>> range_product(const typed::map<Domain, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, pair<Range, Range2>> range_product(const typed::union_map<Domain, Range2> &umap2) const;
+ inline typed::map<Domain, Range> range_reverse() const = delete;
+ inline typed::fixed_box<Domain, Range> range_simple_fixed_box_hull() const;
+ inline typed::basic_map<Range, Domain> reverse() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> set_domain_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> set_domain_tuple(const std::string &id) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain, Range> space() const;
+ inline typed::map<Domain, Range> subtract(const typed::map<Domain, Range> &map2) const;
+ inline typed::union_map<Domain, Range> subtract(const typed::union_map<Domain, Range> &umap2) const;
+ inline typed::union_map<Domain, Range> subtract_domain(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Range> subtract_range(const typed::union_set<Range> &dom) const;
+ inline typed::union_map<Domain, Range> to_union_map() const;
+ inline typed::map<Domain, Range> uncurry() const = delete;
+ inline typed::map<Domain, Range> unite(const typed::basic_map<Domain, Range> &bmap2) const;
+ inline typed::map<Domain, Range> unite(const typed::map<Domain, Range> &map2) const;
+ inline typed::union_map<Domain, Range> unite(const typed::union_map<Domain, Range> &umap2) const;
+ inline typed::map<Domain, Range> upper_bound(const typed::multi_pw_aff<Domain, Range> &upper) const;
+ inline typed::set<pair<Domain, Range>> wrap() const;
+};
+
+template <typename Domain, typename Range, typename Range2>
+struct basic_map<pair<Domain, Range>, Range2> : public isl::basic_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ basic_map() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{} &&
+ std::is_base_of<Range2, Arg3>{},
+ bool>::type = true>
+ basic_map(const basic_map<pair<Arg1, Arg2>, Arg3> &obj) : isl::basic_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::basic_map>{}, bool>::type = true>
+ basic_map(const base &obj) : isl::basic_map(obj) {}
+ public:
+ static basic_map from(const isl::basic_map &obj) {
+ return basic_map(obj);
+ }
+ inline explicit basic_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::basic_map<Domain2, Range2> apply_domain(const typed::basic_map<pair<Domain, Range>, Domain2> &bmap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range2> apply_domain(const typed::map<pair<Domain, Range>, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range2> apply_domain(const typed::union_map<pair<Domain, Range>, Domain2> &umap2) const;
+ template <typename Arg3>
+ inline typed::basic_map<pair<Domain, Range>, Arg3> apply_range(const typed::basic_map<Range2, Arg3> &bmap2) const;
+ template <typename Arg3>
+ inline typed::map<pair<Domain, Range>, Arg3> apply_range(const typed::map<Range2, Arg3> &map2) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, Arg3> apply_range(const typed::union_map<Range2, Arg3> &umap2) const;
+ inline typed::map<pair<Domain, Range>, Range2> as_map() const;
+ inline typed::multi_union_pw_aff<pair<Domain, Range>, Range2> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>, Range2> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<pair<Domain, Range>, Range2> as_union_pw_multi_aff() const;
+ inline typed::set<Range2> bind_domain(const typed::multi_id<pair<Domain, Range>> &tuple) const;
+ inline typed::set<pair<Domain, Range>> bind_range(const typed::multi_id<Range2> &tuple) const;
+ inline typed::map<pair<Domain, Range>, Range2> coalesce() const;
+ inline typed::map<Domain, pair<Range, Range2>> curry() const;
+ inline typed::basic_set<pair<Domain, Range>, Range2> deltas() const = delete;
+ inline typed::basic_map<pair<Domain, Range>, Range2> detect_equalities() const;
+ inline typed::set<pair<Domain, Range>> domain() const;
+ inline typed::map<Domain, Range2> domain_factor_domain() const;
+ inline typed::map<Range, Range2> domain_factor_range() const;
+ inline typed::union_map<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<pair<Domain, Range>, Domain2>, Range2> domain_product(const typed::map<Domain2, Range2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2> domain_product(const typed::union_map<Domain2, Range2> &umap2) const;
+ inline typed::map<pair<Domain, Range>, Range2> eq_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::union_map<pair<Domain, Range>, Range2> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<pair<Domain, Range>, Range2>)> &test) const;
+ inline typed::map<pair<Domain, Range>, Range2> extract_map(const typed::space<pair<Domain, Range>, Range2> &space) const;
+ inline typed::basic_map<Anonymous, Range2> flatten_domain() const;
+ inline typed::basic_map<pair<Domain, Range>, Range2> flatten_range() const = delete;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<pair<Domain, Range>, Range2>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<pair<Domain, Range>, Range2>)> &fn) const;
+ inline typed::basic_map<pair<Domain, Range>, Range2> gist(const typed::basic_map<pair<Domain, Range>, Range2> &context) const;
+ inline typed::map<pair<Domain, Range>, Range2> gist(const typed::map<pair<Domain, Range>, Range2> &context) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> gist(const typed::union_map<pair<Domain, Range>, Range2> &context) const;
+ inline typed::map<pair<Domain, Range>, Range2> gist_domain(const typed::set<pair<Domain, Range>> &context) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> gist_domain(const typed::union_set<pair<Domain, Range>> &uset) const;
+ inline typed::basic_map<pair<Domain, Range>, Range2> intersect(const typed::basic_map<pair<Domain, Range>, Range2> &bmap2) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect(const typed::map<pair<Domain, Range>, Range2> &map2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::basic_map<pair<Domain, Range>, Range2> intersect_domain(const typed::basic_set<pair<Domain, Range>> &bset) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_domain(const typed::set<pair<Domain, Range>> &set) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_domain(const typed::space<pair<Domain, Range>> &space) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_domain(const typed::union_set<pair<Domain, Range>> &uset) const;
+ inline typed::basic_map<pair<Domain, Range>, Range2> intersect_domain(const typed::point<pair<Domain, Range>> &bset) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::basic_map<pair<Domain, Range>, Range2> intersect_range(const typed::basic_set<Range2> &bset) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_range(const typed::set<Range2> &set) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_range(const typed::space<Range2> &space) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_range(const typed::union_set<Range2> &uset) const;
+ inline typed::basic_map<pair<Domain, Range>, Range2> intersect_range(const typed::point<Range2> &bset) const;
+ inline typed::map<pair<Domain, Range>, Range2> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lexmax() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>, Range2> lexmax_pw_multi_aff() const;
+ inline typed::map<pair<Domain, Range>, Range2> lexmin() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>, Range2> lexmin_pw_multi_aff() const;
+ inline typed::map<pair<Domain, Range>, Range2> lower_bound(const typed::multi_pw_aff<pair<Domain, Range>, Range2> &lower) const;
+ inline typed::map_list<pair<Domain, Range>, Range2> map_list() const;
+ inline typed::multi_pw_aff<pair<Domain, Range>, Range2> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<pair<Domain, Range>, Range2> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range2> preimage_domain(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range2> preimage_domain(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range2> preimage_domain(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range2> preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const;
+ template <typename Arg3>
+ inline typed::map<pair<Domain, Range>, Arg3> preimage_range(const typed::multi_aff<Arg3, Range2> &ma) const;
+ template <typename Arg3>
+ inline typed::map<pair<Domain, Range>, Arg3> preimage_range(const typed::pw_multi_aff<Arg3, Range2> &pma) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, Arg3> preimage_range(const typed::union_pw_multi_aff<Arg3, Range2> &upma) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> product(const typed::map<Domain2, Arg3> &map2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> product(const typed::union_map<Domain2, Arg3> &umap2) const;
+ inline typed::map<pair<Domain, Range>, Range2> project_out_all_params() const;
+ inline typed::set<Range2> range() const;
+ inline typed::map<pair<Domain, Range>, Range2> range_factor_domain() const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> range_factor_range() const = delete;
+ inline typed::fixed_box<pair<Domain, Range>, Range2> range_lattice_tile() const;
+ inline typed::union_map<pair<pair<Domain, Range>, Range2>, Range2> range_map() const;
+ template <typename Arg3>
+ inline typed::map<pair<Domain, Range>, pair<Range2, Arg3>> range_product(const typed::map<pair<Domain, Range>, Arg3> &map2) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>> range_product(const typed::union_map<pair<Domain, Range>, Arg3> &umap2) const;
+ inline typed::map<pair<Domain, Range>, Range2> range_reverse() const = delete;
+ inline typed::fixed_box<pair<Domain, Range>, Range2> range_simple_fixed_box_hull() const;
+ inline typed::basic_map<Range2, pair<Domain, Range>> reverse() const;
+ inline typed::map<pair<Domain, Range>, Range2> set_domain_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> set_domain_tuple(const std::string &id) const = delete;
+ template <typename Arg2>
+ inline typed::map<pair<Domain, Range>, Arg2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Arg2>
+ inline typed::map<pair<Domain, Range>, Arg2> set_range_tuple(const std::string &id) const;
+ inline typed::space<pair<Domain, Range>, Range2> space() const;
+ inline typed::map<pair<Domain, Range>, Range2> subtract(const typed::map<pair<Domain, Range>, Range2> &map2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_domain(const typed::union_set<pair<Domain, Range>> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_range(const typed::union_set<Range2> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> to_union_map() const;
+ inline typed::map<pair<Domain, Range>, Range2> uncurry() const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> unite(const typed::basic_map<pair<Domain, Range>, Range2> &bmap2) const;
+ inline typed::map<pair<Domain, Range>, Range2> unite(const typed::map<pair<Domain, Range>, Range2> &map2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> unite(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::map<pair<Domain, Range>, Range2> upper_bound(const typed::multi_pw_aff<pair<Domain, Range>, Range2> &upper) const;
+ inline typed::set<pair<pair<Domain, Range>, Range2>> wrap() const;
+};
+
+template <typename Domain>
+struct basic_map<Domain, Domain> : public isl::basic_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ basic_map() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ basic_map(const basic_map<Arg1, Arg1> &obj) : isl::basic_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::basic_map>{}, bool>::type = true>
+ basic_map(const base &obj) : isl::basic_map(obj) {}
+ public:
+ static basic_map from(const isl::basic_map &obj) {
+ return basic_map(obj);
+ }
+ inline explicit basic_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::basic_map<Domain2, Domain> apply_domain(const typed::basic_map<Domain, Domain2> &bmap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> apply_domain(const typed::map<Domain, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Domain> apply_domain(const typed::union_map<Domain, Domain2> &umap2) const;
+ template <typename Range2>
+ inline typed::basic_map<Domain, Range2> apply_range(const typed::basic_map<Domain, Range2> &bmap2) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> apply_range(const typed::map<Domain, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> apply_range(const typed::union_map<Domain, Range2> &umap2) const;
+ inline typed::map<Domain, Domain> as_map() const;
+ inline typed::multi_union_pw_aff<Domain, Domain> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Domain> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<Domain, Domain> as_union_pw_multi_aff() const;
+ inline typed::set<Domain> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::set<Domain> bind_range(const typed::multi_id<Domain> &tuple) const;
+ inline typed::map<Domain, Domain> coalesce() const;
+ inline typed::map<Domain, Domain> curry() const = delete;
+ inline typed::basic_set<Domain> deltas() const;
+ inline typed::basic_map<Domain, Domain> detect_equalities() const;
+ inline typed::set<Domain> domain() const;
+ inline typed::map<Domain, Domain> domain_factor_domain() const = delete;
+ inline typed::map<Domain, Domain> domain_factor_range() const = delete;
+ inline typed::union_map<pair<Domain, Domain>, Domain> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain>, Domain> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<Domain, Domain2>, Domain> domain_product(const typed::map<Domain2, Domain> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, Domain> domain_product(const typed::union_map<Domain2, Domain> &umap2) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> eq_at(const typed::multi_pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::union_map<Domain, Domain> eq_at(const typed::multi_union_pw_aff<Domain, Range> &mupa) const;
+ inline bool every_map(const std::function<bool(typed::map<Domain, Domain>)> &test) const;
+ inline typed::map<Domain, Domain> extract_map(const typed::space<Domain, Domain> &space) const;
+ inline typed::basic_map<Domain, Domain> flatten_domain() const = delete;
+ inline typed::basic_map<Domain, Domain> flatten_range() const = delete;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<Domain, Domain>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<Domain, Domain>)> &fn) const;
+ inline typed::basic_map<Domain, Domain> gist(const typed::basic_map<Domain, Domain> &context) const;
+ inline typed::map<Domain, Domain> gist(const typed::map<Domain, Domain> &context) const;
+ inline typed::union_map<Domain, Domain> gist(const typed::union_map<Domain, Domain> &context) const;
+ inline typed::map<Domain, Domain> gist_domain(const typed::set<Domain> &context) const;
+ inline typed::union_map<Domain, Domain> gist_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::basic_map<Domain, Domain> intersect(const typed::basic_map<Domain, Domain> &bmap2) const;
+ inline typed::map<Domain, Domain> intersect(const typed::map<Domain, Domain> &map2) const;
+ inline typed::union_map<Domain, Domain> intersect(const typed::union_map<Domain, Domain> &umap2) const;
+ inline typed::basic_map<Domain, Domain> intersect_domain(const typed::basic_set<Domain> &bset) const;
+ inline typed::map<Domain, Domain> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_map<Domain, Domain> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, Domain> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::basic_map<Domain, Domain> intersect_domain(const typed::point<Domain> &bset) const;
+ inline typed::map<Domain, Domain> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::basic_map<Domain, Domain> intersect_range(const typed::basic_set<Domain> &bset) const;
+ inline typed::map<Domain, Domain> intersect_range(const typed::set<Domain> &set) const;
+ inline typed::union_map<Domain, Domain> intersect_range(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, Domain> intersect_range(const typed::union_set<Domain> &uset) const;
+ inline typed::basic_map<Domain, Domain> intersect_range(const typed::point<Domain> &bset) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_ge_at(const typed::multi_pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_gt_at(const typed::multi_pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_le_at(const typed::multi_pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_lt_at(const typed::multi_pw_aff<Domain, Range> &mpa) const;
+ inline typed::map<Domain, Domain> lexmax() const;
+ inline typed::pw_multi_aff<Domain, Domain> lexmax_pw_multi_aff() const;
+ inline typed::map<Domain, Domain> lexmin() const;
+ inline typed::pw_multi_aff<Domain, Domain> lexmin_pw_multi_aff() const;
+ inline typed::map<Domain, Domain> lower_bound(const typed::multi_pw_aff<Domain, Domain> &lower) const;
+ inline typed::map_list<Domain, Domain> map_list() const;
+ inline typed::multi_pw_aff<Domain, Domain> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<Domain, Domain> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Domain> preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> preimage_range(const typed::multi_aff<Range2, Domain> &ma) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> preimage_range(const typed::pw_multi_aff<Range2, Domain> &pma) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> preimage_range(const typed::union_pw_multi_aff<Range2, Domain> &upma) const;
+ template <typename Domain2, typename Range2>
+ inline typed::map<pair<Domain, Domain2>, pair<Domain, Range2>> product(const typed::map<Domain2, Range2> &map2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>> product(const typed::union_map<Domain2, Range2> &umap2) const;
+ inline typed::map<Domain, Domain> project_out_all_params() const;
+ inline typed::set<Domain> range() const;
+ inline typed::map<Domain, Domain> range_factor_domain() const = delete;
+ inline typed::map<Domain, Domain> range_factor_range() const = delete;
+ inline typed::fixed_box<Domain, Domain> range_lattice_tile() const;
+ inline typed::union_map<pair<Domain, Domain>, Domain> range_map() const;
+ template <typename Range2>
+ inline typed::map<Domain, pair<Domain, Range2>> range_product(const typed::map<Domain, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, pair<Domain, Range2>> range_product(const typed::union_map<Domain, Range2> &umap2) const;
+ inline typed::map<Domain, Domain> range_reverse() const = delete;
+ inline typed::fixed_box<Domain, Domain> range_simple_fixed_box_hull() const;
+ inline typed::basic_map<Domain, Domain> reverse() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> set_domain_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> set_domain_tuple(const std::string &id) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain, Domain> space() const;
+ inline typed::map<Domain, Domain> subtract(const typed::map<Domain, Domain> &map2) const;
+ inline typed::union_map<Domain, Domain> subtract(const typed::union_map<Domain, Domain> &umap2) const;
+ inline typed::union_map<Domain, Domain> subtract_domain(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> subtract_range(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> to_union_map() const;
+ inline typed::map<Domain, Domain> uncurry() const = delete;
+ inline typed::map<Domain, Domain> unite(const typed::basic_map<Domain, Domain> &bmap2) const;
+ inline typed::map<Domain, Domain> unite(const typed::map<Domain, Domain> &map2) const;
+ inline typed::union_map<Domain, Domain> unite(const typed::union_map<Domain, Domain> &umap2) const;
+ inline typed::map<Domain, Domain> upper_bound(const typed::multi_pw_aff<Domain, Domain> &upper) const;
+ inline typed::set<pair<Domain, Domain>> wrap() const;
+};
+
+template <typename Domain, typename Range, typename Range2>
+struct basic_map<Domain, pair<Range, Range2>> : public isl::basic_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ basic_map() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{} &&
+ std::is_base_of<Range2, Arg3>{},
+ bool>::type = true>
+ basic_map(const basic_map<Arg1, pair<Arg2, Arg3>> &obj) : isl::basic_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::basic_map>{}, bool>::type = true>
+ basic_map(const base &obj) : isl::basic_map(obj) {}
+ public:
+ static basic_map from(const isl::basic_map &obj) {
+ return basic_map(obj);
+ }
+ inline explicit basic_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::basic_map<Domain2, pair<Range, Range2>> apply_domain(const typed::basic_map<Domain, Domain2> &bmap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> apply_domain(const typed::map<Domain, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> apply_domain(const typed::union_map<Domain, Domain2> &umap2) const;
+ template <typename Arg3>
+ inline typed::basic_map<Domain, Arg3> apply_range(const typed::basic_map<pair<Range, Range2>, Arg3> &bmap2) const;
+ template <typename Arg3>
+ inline typed::map<Domain, Arg3> apply_range(const typed::map<pair<Range, Range2>, Arg3> &map2) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, Arg3> apply_range(const typed::union_map<pair<Range, Range2>, Arg3> &umap2) const;
+ inline typed::map<Domain, pair<Range, Range2>> as_map() const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> as_union_pw_multi_aff() const;
+ inline typed::set<pair<Range, Range2>> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::set<Domain> bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const;
+ inline typed::map<Domain, pair<Range, Range2>> coalesce() const;
+ inline typed::map<Domain, pair<Range, Range2>> curry() const = delete;
+ inline typed::basic_set<Domain, pair<Range, Range2>> deltas() const = delete;
+ inline typed::basic_map<Domain, pair<Range, Range2>> detect_equalities() const;
+ inline typed::set<Domain> domain() const;
+ inline typed::map<Domain, pair<Range, Range2>> domain_factor_domain() const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> domain_factor_range() const = delete;
+ inline typed::union_map<pair<Domain, pair<Range, Range2>>, Domain> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<Domain, Domain2>, pair<Range, Range2>> domain_product(const typed::map<Domain2, pair<Range, Range2>> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const;
+ inline typed::map<Domain, pair<Range, Range2>> eq_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::union_map<Domain, pair<Range, Range2>> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<Domain, pair<Range, Range2>>)> &test) const;
+ inline typed::map<Domain, pair<Range, Range2>> extract_map(const typed::space<Domain, pair<Range, Range2>> &space) const;
+ inline typed::basic_map<Domain, pair<Range, Range2>> flatten_domain() const = delete;
+ inline typed::basic_map<Domain, Anonymous> flatten_range() const;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<Domain, pair<Range, Range2>>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<Domain, pair<Range, Range2>>)> &fn) const;
+ inline typed::basic_map<Domain, pair<Range, Range2>> gist(const typed::basic_map<Domain, pair<Range, Range2>> &context) const;
+ inline typed::map<Domain, pair<Range, Range2>> gist(const typed::map<Domain, pair<Range, Range2>> &context) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> gist(const typed::union_map<Domain, pair<Range, Range2>> &context) const;
+ inline typed::map<Domain, pair<Range, Range2>> gist_domain(const typed::set<Domain> &context) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> gist_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::basic_map<Domain, pair<Range, Range2>> intersect(const typed::basic_map<Domain, pair<Range, Range2>> &bmap2) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect(const typed::map<Domain, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::basic_map<Domain, pair<Range, Range2>> intersect_domain(const typed::basic_set<Domain> &bset) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::basic_map<Domain, pair<Range, Range2>> intersect_domain(const typed::point<Domain> &bset) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::basic_map<Domain, pair<Range, Range2>> intersect_range(const typed::basic_set<pair<Range, Range2>> &bset) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_range(const typed::set<pair<Range, Range2>> &set) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_range(const typed::space<pair<Range, Range2>> &space) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const;
+ inline typed::basic_map<Domain, pair<Range, Range2>> intersect_range(const typed::point<pair<Range, Range2>> &bset) const;
+ inline typed::map<Domain, pair<Range, Range2>> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lexmax() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> lexmax_pw_multi_aff() const;
+ inline typed::map<Domain, pair<Range, Range2>> lexmin() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> lexmin_pw_multi_aff() const;
+ inline typed::map<Domain, pair<Range, Range2>> lower_bound(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &lower) const;
+ inline typed::map_list<Domain, pair<Range, Range2>> map_list() const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Arg3>
+ inline typed::map<Domain, Arg3> preimage_range(const typed::multi_aff<Arg3, pair<Range, Range2>> &ma) const;
+ template <typename Arg3>
+ inline typed::map<Domain, Arg3> preimage_range(const typed::pw_multi_aff<Arg3, pair<Range, Range2>> &pma) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, Arg3> preimage_range(const typed::union_pw_multi_aff<Arg3, pair<Range, Range2>> &upma) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::map<Domain2, Arg3> &map2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::union_map<Domain2, Arg3> &umap2) const;
+ inline typed::map<Domain, pair<Range, Range2>> project_out_all_params() const;
+ inline typed::set<pair<Range, Range2>> range() const;
+ inline typed::map<Domain, Range> range_factor_domain() const;
+ inline typed::map<Domain, Range2> range_factor_range() const;
+ inline typed::fixed_box<Domain, pair<Range, Range2>> range_lattice_tile() const;
+ inline typed::union_map<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>> range_map() const;
+ template <typename Arg3>
+ inline typed::map<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::map<Domain, Arg3> &map2) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::union_map<Domain, Arg3> &umap2) const;
+ inline typed::map<Domain, pair<Range2, Range>> range_reverse() const;
+ inline typed::fixed_box<Domain, pair<Range, Range2>> range_simple_fixed_box_hull() const;
+ inline typed::basic_map<pair<Range, Range2>, Domain> reverse() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> set_domain_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> set_domain_tuple(const std::string &id) const;
+ inline typed::map<Domain, pair<Range, Range2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> space() const;
+ inline typed::map<Domain, pair<Range, Range2>> subtract(const typed::map<Domain, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_domain(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> to_union_map() const;
+ inline typed::map<pair<Domain, Range>, Range2> uncurry() const;
+ inline typed::map<Domain, pair<Range, Range2>> unite(const typed::basic_map<Domain, pair<Range, Range2>> &bmap2) const;
+ inline typed::map<Domain, pair<Range, Range2>> unite(const typed::map<Domain, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> unite(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::map<Domain, pair<Range, Range2>> upper_bound(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &upper) const;
+ inline typed::set<pair<Domain, pair<Range, Range2>>> wrap() const;
+};
+
+template <typename T1, typename T2>
+struct basic_map<pair<T1, T2>, pair<T1, T2>> : public isl::basic_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ basic_map() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<T1, Arg1>{} &&
+ std::is_base_of<T2, Arg2>{},
+ bool>::type = true>
+ basic_map(const basic_map<pair<Arg1, Arg2>, pair<Arg1, Arg2>> &obj) : isl::basic_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::basic_map>{}, bool>::type = true>
+ basic_map(const base &obj) : isl::basic_map(obj) {}
+ public:
+ static basic_map from(const isl::basic_map &obj) {
+ return basic_map(obj);
+ }
+ inline explicit basic_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::basic_map<Domain2, pair<T1, T2>> apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &bmap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<T1, T2>> apply_domain(const typed::map<pair<T1, T2>, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<T1, T2>> apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const;
+ template <typename Range2>
+ inline typed::basic_map<pair<T1, T2>, Range2> apply_range(const typed::basic_map<pair<T1, T2>, Range2> &bmap2) const;
+ template <typename Range2>
+ inline typed::map<pair<T1, T2>, Range2> apply_range(const typed::map<pair<T1, T2>, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, Range2> apply_range(const typed::union_map<pair<T1, T2>, Range2> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> as_map() const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<T1, T2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<T1, T2>> as_union_pw_multi_aff() const;
+ inline typed::set<pair<T1, T2>> bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const;
+ inline typed::set<pair<T1, T2>> bind_range(const typed::multi_id<pair<T1, T2>> &tuple) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> coalesce() const;
+ inline typed::map<T1, pair<T2, pair<T1, T2>>> curry() const;
+ inline typed::basic_set<pair<T1, T2>> deltas() const;
+ inline typed::basic_map<pair<T1, T2>, pair<T1, T2>> detect_equalities() const;
+ inline typed::set<pair<T1, T2>> domain() const;
+ inline typed::map<T1, pair<T1, T2>> domain_factor_domain() const;
+ inline typed::map<T2, pair<T1, T2>> domain_factor_range() const;
+ inline typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> domain_product(const typed::map<Domain2, pair<T1, T2>> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> domain_product(const typed::union_map<Domain2, pair<T1, T2>> &umap2) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> eq_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> eq_at(const typed::multi_union_pw_aff<pair<T1, T2>, Range> &mupa) const;
+ inline bool every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<T1, T2>>)> &test) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> extract_map(const typed::space<pair<T1, T2>, pair<T1, T2>> &space) const;
+ inline typed::basic_map<Anonymous, pair<T1, T2>> flatten_domain() const;
+ inline typed::basic_map<pair<T1, T2>, Anonymous> flatten_range() const;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<pair<T1, T2>, pair<T1, T2>>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<T1, T2>>)> &fn) const;
+ inline typed::basic_map<pair<T1, T2>, pair<T1, T2>> gist(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> gist(const typed::map<pair<T1, T2>, pair<T1, T2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> gist(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> gist_domain(const typed::set<pair<T1, T2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> gist_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::basic_map<pair<T1, T2>, pair<T1, T2>> intersect(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &bmap2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::basic_map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::basic_set<pair<T1, T2>> &bset) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::set<pair<T1, T2>> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::basic_map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::point<pair<T1, T2>> &bset) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::basic_map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::basic_set<pair<T1, T2>> &bset) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::set<pair<T1, T2>> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::basic_map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::point<pair<T1, T2>> &bset) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_ge_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_gt_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_le_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_lt_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lexmax() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> lexmax_pw_multi_aff() const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lexmin() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> lexmin_pw_multi_aff() const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lower_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> &lower) const;
+ inline typed::map_list<pair<T1, T2>, pair<T1, T2>> map_list() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<T1, T2>> preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<T1, T2>> preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<T1, T2>> preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<T1, T2>> preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const;
+ template <typename Range2>
+ inline typed::map<pair<T1, T2>, Range2> preimage_range(const typed::multi_aff<Range2, pair<T1, T2>> &ma) const;
+ template <typename Range2>
+ inline typed::map<pair<T1, T2>, Range2> preimage_range(const typed::pw_multi_aff<Range2, pair<T1, T2>> &pma) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, Range2> preimage_range(const typed::union_pw_multi_aff<Range2, pair<T1, T2>> &upma) const;
+ template <typename Domain2, typename Range2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> product(const typed::map<Domain2, Range2> &map2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> product(const typed::union_map<Domain2, Range2> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> project_out_all_params() const;
+ inline typed::set<pair<T1, T2>> range() const;
+ inline typed::map<pair<T1, T2>, T1> range_factor_domain() const;
+ inline typed::map<pair<T1, T2>, T2> range_factor_range() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<T1, T2>> range_lattice_tile() const;
+ inline typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> range_map() const;
+ template <typename Range2>
+ inline typed::map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> range_product(const typed::map<pair<T1, T2>, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> range_product(const typed::union_map<pair<T1, T2>, Range2> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<T2, T1>> range_reverse() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<T1, T2>> range_simple_fixed_box_hull() const;
+ inline typed::basic_map<pair<T1, T2>, pair<T1, T2>> reverse() const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> set_domain_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> set_domain_tuple(const std::string &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<pair<T1, T2>, pair<T1, T2>> space() const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> subtract(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_range(const typed::union_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> to_union_map() const;
+ inline typed::map<pair<pair<T1, T2>, T1>, T2> uncurry() const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> unite(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &bmap2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> unite(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> unite(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> upper_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> &upper) const;
+ inline typed::set<pair<pair<T1, T2>, pair<T1, T2>>> wrap() const;
+};
+
+template <typename T1, typename T2, typename Range, typename Range2>
+struct basic_map<pair<T1, T2>, pair<Range, Range2>> : public isl::basic_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ basic_map() = default;
+ template <typename Arg1, typename Arg2, typename Arg3, typename Arg4,
+ typename std::enable_if<
+ std::is_base_of<T1, Arg1>{} &&
+ std::is_base_of<T2, Arg2>{} &&
+ std::is_base_of<Range, Arg3>{} &&
+ std::is_base_of<Range2, Arg4>{},
+ bool>::type = true>
+ basic_map(const basic_map<pair<Arg1, Arg2>, pair<Arg3, Arg4>> &obj) : isl::basic_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::basic_map>{}, bool>::type = true>
+ basic_map(const base &obj) : isl::basic_map(obj) {}
+ public:
+ static basic_map from(const isl::basic_map &obj) {
+ return basic_map(obj);
+ }
+ inline explicit basic_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::basic_map<Domain2, pair<Range, Range2>> apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &bmap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> apply_domain(const typed::map<pair<T1, T2>, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const;
+ template <typename Arg2>
+ inline typed::basic_map<pair<T1, T2>, Arg2> apply_range(const typed::basic_map<pair<Range, Range2>, Arg2> &bmap2) const;
+ template <typename Arg2>
+ inline typed::map<pair<T1, T2>, Arg2> apply_range(const typed::map<pair<Range, Range2>, Arg2> &map2) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, Arg2> apply_range(const typed::union_map<pair<Range, Range2>, Arg2> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> as_map() const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> as_union_pw_multi_aff() const;
+ inline typed::set<pair<Range, Range2>> bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const;
+ inline typed::set<pair<T1, T2>> bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> coalesce() const;
+ inline typed::map<T1, pair<T2, pair<Range, Range2>>> curry() const;
+ inline typed::basic_set<pair<T1, T2>, pair<Range, Range2>> deltas() const = delete;
+ inline typed::basic_map<pair<T1, T2>, pair<Range, Range2>> detect_equalities() const;
+ inline typed::set<pair<T1, T2>> domain() const;
+ inline typed::map<T1, pair<Range, Range2>> domain_factor_domain() const;
+ inline typed::map<T2, pair<Range, Range2>> domain_factor_range() const;
+ inline typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> domain_product(const typed::map<Domain2, pair<Range, Range2>> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> eq_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &test) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> extract_map(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const;
+ inline typed::basic_map<Anonymous, pair<Range, Range2>> flatten_domain() const;
+ inline typed::basic_map<pair<T1, T2>, Anonymous> flatten_range() const;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<pair<T1, T2>, pair<Range, Range2>>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &fn) const;
+ inline typed::basic_map<pair<T1, T2>, pair<Range, Range2>> gist(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> gist(const typed::map<pair<T1, T2>, pair<Range, Range2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> gist(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> gist_domain(const typed::set<pair<T1, T2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> gist_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::basic_map<pair<T1, T2>, pair<Range, Range2>> intersect(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &bmap2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::basic_map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::basic_set<pair<T1, T2>> &bset) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::set<pair<T1, T2>> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::basic_map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::point<pair<T1, T2>> &bset) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::basic_map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::basic_set<pair<Range, Range2>> &bset) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::set<pair<Range, Range2>> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::space<pair<Range, Range2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const;
+ inline typed::basic_map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::point<pair<Range, Range2>> &bset) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lexmax() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> lexmax_pw_multi_aff() const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lexmin() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> lexmin_pw_multi_aff() const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lower_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &lower) const;
+ inline typed::map_list<pair<T1, T2>, pair<Range, Range2>> map_list() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const;
+ template <typename Arg2>
+ inline typed::map<pair<T1, T2>, Arg2> preimage_range(const typed::multi_aff<Arg2, pair<Range, Range2>> &ma) const;
+ template <typename Arg2>
+ inline typed::map<pair<T1, T2>, Arg2> preimage_range(const typed::pw_multi_aff<Arg2, pair<Range, Range2>> &pma) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, Arg2> preimage_range(const typed::union_pw_multi_aff<Arg2, pair<Range, Range2>> &upma) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::map<Domain2, Arg2> &map2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::union_map<Domain2, Arg2> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> project_out_all_params() const;
+ inline typed::set<pair<Range, Range2>> range() const;
+ inline typed::map<pair<T1, T2>, Range> range_factor_domain() const;
+ inline typed::map<pair<T1, T2>, Range2> range_factor_range() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<Range, Range2>> range_lattice_tile() const;
+ inline typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>> range_map() const;
+ template <typename Arg2>
+ inline typed::map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::map<pair<T1, T2>, Arg2> &map2) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::union_map<pair<T1, T2>, Arg2> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<Range2, Range>> range_reverse() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<Range, Range2>> range_simple_fixed_box_hull() const;
+ inline typed::basic_map<pair<Range, Range2>, pair<T1, T2>> reverse() const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> set_domain_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> set_domain_tuple(const std::string &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> space() const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> subtract(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> to_union_map() const;
+ inline typed::map<pair<pair<T1, T2>, Range>, Range2> uncurry() const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> unite(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &bmap2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> unite(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> unite(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> upper_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upper) const;
+ inline typed::set<pair<pair<T1, T2>, pair<Range, Range2>>> wrap() const;
+};
+
+template <>
+struct basic_set<> : public isl::basic_set {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ basic_set() = default;
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::basic_set>{}, bool>::type = true>
+ basic_set(const base &obj) : isl::basic_set(obj) {}
+ public:
+ static basic_set from(const isl::basic_set &obj) {
+ return basic_set(obj);
+ }
+ inline /* implicit */ basic_set(const typed::point<> &pnt);
+ inline explicit basic_set(const isl::ctx &ctx, const std::string &str);
+ inline typed::basic_set<> apply(const typed::basic_map<> &bmap) const = delete;
+ inline typed::set<> apply(const typed::map<> &map) const = delete;
+ inline typed::union_set<> apply(const typed::union_map<> &umap) const = delete;
+ inline typed::pw_multi_aff<> as_pw_multi_aff() const = delete;
+ inline typed::set<> as_set() const = delete;
+ inline typed::set<> bind(const typed::multi_id<> &tuple) const = delete;
+ inline typed::set<> coalesce() const;
+ inline typed::basic_set<> detect_equalities() const;
+ inline bool every_set(const std::function<bool(typed::set<>)> &test) const;
+ inline typed::set<> extract_set(const typed::space<> &space) const;
+ inline void foreach_basic_set(const std::function<void(typed::basic_set<>)> &fn) const;
+ inline void foreach_point(const std::function<void(typed::point<>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<>)> &fn) const;
+ inline typed::basic_set<> gist(const typed::basic_set<> &context) const;
+ inline typed::set<> gist(const typed::set<> &context) const;
+ inline typed::union_set<> gist(const typed::union_set<> &context) const;
+ inline typed::basic_set<> gist(const typed::point<> &context) const;
+ inline typed::map<> identity() const = delete;
+ inline typed::pw_aff<Anonymous> indicator_function() const;
+ inline typed::map<> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::basic_set<> intersect(const typed::basic_set<> &bset2) const;
+ inline typed::set<> intersect(const typed::set<> &set2) const;
+ inline typed::union_set<> intersect(const typed::union_set<> &uset2) const;
+ inline typed::basic_set<> intersect(const typed::point<> &bset2) const;
+ inline typed::basic_set<> intersect_params(const typed::basic_set<> &bset2) const = delete;
+ inline typed::set<> intersect_params(const typed::set<> ¶ms) const = delete;
+ inline typed::basic_set<> intersect_params(const typed::point<> &bset2) const = delete;
+ inline typed::set<> lexmax() const = delete;
+ inline typed::pw_multi_aff<> lexmax_pw_multi_aff() const = delete;
+ inline typed::set<> lexmin() const = delete;
+ inline typed::pw_multi_aff<> lexmin_pw_multi_aff() const = delete;
+ inline typed::set<> lower_bound(const typed::multi_pw_aff<> &lower) const = delete;
+ inline typed::set<> lower_bound(const typed::multi_val<> &lower) const = delete;
+ inline typed::multi_pw_aff<> max_multi_pw_aff() const = delete;
+ inline typed::val<> max_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_pw_aff<> min_multi_pw_aff() const = delete;
+ inline typed::val<> min_val(const typed::aff<> &obj) const = delete;
+ inline typed::basic_set<> params() const = delete;
+ inline typed::multi_val<> plain_multi_val_if_fixed() const = delete;
+ inline typed::set<> preimage(const typed::multi_aff<> &ma) const = delete;
+ inline typed::set<> preimage(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::set<> preimage(const typed::pw_multi_aff<> &pma) const = delete;
+ inline typed::union_set<> preimage(const typed::union_pw_multi_aff<> &upma) const = delete;
+ inline typed::set<> product(const typed::set<> &set2) const = delete;
+ inline typed::set<> project_out_all_params() const;
+ inline typed::set<> project_out_param(const typed::id<Anonymous> &id) const;
+ inline typed::set<> project_out_param(const std::string &id) const;
+ inline typed::set<> project_out_param(const typed::id_list<Anonymous> &list) const;
+ inline typed::pw_multi_aff<> pw_multi_aff_on_domain(const typed::multi_val<> &mv) const = delete;
+ inline typed::fixed_box<> simple_fixed_box_hull() const = delete;
+ inline typed::space<> space() const;
+ inline typed::set<> subtract(const typed::set<> &set2) const;
+ inline typed::union_set<> subtract(const typed::union_set<> &uset2) const;
+ inline typed::set<> to_set() const;
+ inline typed::union_set<> to_union_set() const;
+ inline typed::map<> translation() const = delete;
+ template <typename Domain>
+ inline typed::set<Domain> unbind_params(const typed::multi_id<Domain> &tuple) const;
+ inline typed::map<> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::set<> unite(const typed::basic_set<> &bset2) const;
+ inline typed::set<> unite(const typed::set<> &set2) const;
+ inline typed::union_set<> unite(const typed::union_set<> &uset2) const;
+ inline typed::set<> unite(const typed::point<> &bset2) const;
+ inline typed::map<> unwrap() const = delete;
+ inline typed::set<> upper_bound(const typed::multi_pw_aff<> &upper) const = delete;
+ inline typed::set<> upper_bound(const typed::multi_val<> &upper) const = delete;
+};
+
+template <typename Domain>
+struct basic_set<Domain> : public isl::basic_set {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ basic_set() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ basic_set(const basic_set<Arg1> &obj) : isl::basic_set(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::basic_set>{}, bool>::type = true>
+ basic_set(const base &obj) : isl::basic_set(obj) {}
+ public:
+ static basic_set from(const isl::basic_set &obj) {
+ return basic_set(obj);
+ }
+ inline /* implicit */ basic_set(const typed::point<Domain> &pnt);
+ inline explicit basic_set(const isl::ctx &ctx, const std::string &str);
+ template <typename Range>
+ inline typed::basic_set<Range> apply(const typed::basic_map<Domain, Range> &bmap) const;
+ template <typename Range>
+ inline typed::set<Range> apply(const typed::map<Domain, Range> &map) const;
+ template <typename Range>
+ inline typed::union_set<Range> apply(const typed::union_map<Domain, Range> &umap) const;
+ inline typed::pw_multi_aff<Domain> as_pw_multi_aff() const;
+ inline typed::set<Domain> as_set() const;
+ inline typed::set<> bind(const typed::multi_id<Domain> &tuple) const;
+ inline typed::set<Domain> coalesce() const;
+ inline typed::basic_set<Domain> detect_equalities() const;
+ inline bool every_set(const std::function<bool(typed::set<Domain>)> &test) const;
+ inline typed::set<Domain> extract_set(const typed::space<Domain> &space) const;
+ inline void foreach_basic_set(const std::function<void(typed::basic_set<Domain>)> &fn) const;
+ inline void foreach_point(const std::function<void(typed::point<Domain>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<Domain>)> &fn) const;
+ inline typed::basic_set<Domain> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::set<Domain> gist(const typed::set<Domain> &context) const;
+ inline typed::union_set<Domain> gist(const typed::union_set<Domain> &context) const;
+ inline typed::basic_set<Domain> gist(const typed::point<Domain> &context) const;
+ inline typed::map<Domain, Domain> identity() const;
+ inline typed::pw_aff<Domain, Anonymous> indicator_function() const;
+ template <typename Arg1>
+ inline typed::map<Arg1, Domain> insert_domain(const typed::space<Arg1> &domain) const;
+ inline typed::basic_set<Domain> intersect(const typed::basic_set<Domain> &bset2) const;
+ inline typed::set<Domain> intersect(const typed::set<Domain> &set2) const;
+ inline typed::union_set<Domain> intersect(const typed::union_set<Domain> &uset2) const;
+ inline typed::basic_set<Domain> intersect(const typed::point<Domain> &bset2) const;
+ inline typed::basic_set<Domain> intersect_params(const typed::basic_set<> &bset2) const;
+ inline typed::set<Domain> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::basic_set<Domain> intersect_params(const typed::point<> &bset2) const;
+ inline typed::set<Domain> lexmax() const;
+ inline typed::pw_multi_aff<Domain> lexmax_pw_multi_aff() const;
+ inline typed::set<Domain> lexmin() const;
+ inline typed::pw_multi_aff<Domain> lexmin_pw_multi_aff() const;
+ inline typed::set<Domain> lower_bound(const typed::multi_pw_aff<Domain> &lower) const;
+ inline typed::set<Domain> lower_bound(const typed::multi_val<Domain> &lower) const;
+ inline typed::multi_pw_aff<Domain> max_multi_pw_aff() const;
+ inline typed::val<Domain> max_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_pw_aff<Domain> min_multi_pw_aff() const;
+ inline typed::val<Domain> min_val(const typed::aff<> &obj) const = delete;
+ inline typed::basic_set<> params() const;
+ inline typed::multi_val<Domain> plain_multi_val_if_fixed() const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Range>
+ inline typed::set<pair<Domain, Range>> product(const typed::set<Range> &set2) const;
+ inline typed::set<Domain> project_out_all_params() const;
+ inline typed::set<Domain> project_out_param(const typed::id<Anonymous> &id) const;
+ inline typed::set<Domain> project_out_param(const std::string &id) const;
+ inline typed::set<Domain> project_out_param(const typed::id_list<Anonymous> &list) const;
+ template <typename Range>
+ inline typed::pw_multi_aff<Domain, Range> pw_multi_aff_on_domain(const typed::multi_val<Range> &mv) const;
+ inline typed::fixed_box<Domain> simple_fixed_box_hull() const;
+ inline typed::space<Domain> space() const;
+ inline typed::set<Domain> subtract(const typed::set<Domain> &set2) const;
+ inline typed::union_set<Domain> subtract(const typed::union_set<Domain> &uset2) const;
+ inline typed::set<Domain> to_set() const;
+ inline typed::union_set<Domain> to_union_set() const;
+ inline typed::map<Domain, Domain> translation() const;
+ inline typed::set<Domain> unbind_params(const typed::multi_id<> &tuple) const = delete;
+ template <typename Arg1>
+ inline typed::map<Arg1, Domain> unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const;
+ inline typed::set<Domain> unite(const typed::basic_set<Domain> &bset2) const;
+ inline typed::set<Domain> unite(const typed::set<Domain> &set2) const;
+ inline typed::union_set<Domain> unite(const typed::union_set<Domain> &uset2) const;
+ inline typed::set<Domain> unite(const typed::point<Domain> &bset2) const;
+ inline typed::map<Domain> unwrap() const = delete;
+ inline typed::set<Domain> upper_bound(const typed::multi_pw_aff<Domain> &upper) const;
+ inline typed::set<Domain> upper_bound(const typed::multi_val<Domain> &upper) const;
+};
+
+template <typename Domain, typename Range>
+struct basic_set<pair<Domain, Range>> : public isl::basic_set {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ basic_set() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ basic_set(const basic_set<pair<Arg1, Arg2>> &obj) : isl::basic_set(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::basic_set>{}, bool>::type = true>
+ basic_set(const base &obj) : isl::basic_set(obj) {}
+ public:
+ static basic_set from(const isl::basic_set &obj) {
+ return basic_set(obj);
+ }
+ inline /* implicit */ basic_set(const typed::point<pair<Domain, Range>> &pnt);
+ inline explicit basic_set(const isl::ctx &ctx, const std::string &str);
+ template <typename Arg2>
+ inline typed::basic_set<Arg2> apply(const typed::basic_map<pair<Domain, Range>, Arg2> &bmap) const;
+ template <typename Arg2>
+ inline typed::set<Arg2> apply(const typed::map<pair<Domain, Range>, Arg2> &map) const;
+ template <typename Arg2>
+ inline typed::union_set<Arg2> apply(const typed::union_map<pair<Domain, Range>, Arg2> &umap) const;
+ inline typed::pw_multi_aff<pair<Domain, Range>> as_pw_multi_aff() const;
+ inline typed::set<pair<Domain, Range>> as_set() const;
+ inline typed::set<> bind(const typed::multi_id<pair<Domain, Range>> &tuple) const;
+ inline typed::set<pair<Domain, Range>> coalesce() const;
+ inline typed::basic_set<pair<Domain, Range>> detect_equalities() const;
+ inline bool every_set(const std::function<bool(typed::set<pair<Domain, Range>>)> &test) const;
+ inline typed::set<pair<Domain, Range>> extract_set(const typed::space<pair<Domain, Range>> &space) const;
+ inline void foreach_basic_set(const std::function<void(typed::basic_set<pair<Domain, Range>>)> &fn) const;
+ inline void foreach_point(const std::function<void(typed::point<pair<Domain, Range>>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<pair<Domain, Range>>)> &fn) const;
+ inline typed::basic_set<pair<Domain, Range>> gist(const typed::basic_set<pair<Domain, Range>> &context) const;
+ inline typed::set<pair<Domain, Range>> gist(const typed::set<pair<Domain, Range>> &context) const;
+ inline typed::union_set<pair<Domain, Range>> gist(const typed::union_set<pair<Domain, Range>> &context) const;
+ inline typed::basic_set<pair<Domain, Range>> gist(const typed::point<pair<Domain, Range>> &context) const;
+ inline typed::map<pair<Domain, Range>, pair<Domain, Range>> identity() const;
+ inline typed::pw_aff<pair<Domain, Range>, Anonymous> indicator_function() const;
+ template <typename Arg2>
+ inline typed::map<Arg2, pair<Domain, Range>> insert_domain(const typed::space<Arg2> &domain) const;
+ inline typed::basic_set<pair<Domain, Range>> intersect(const typed::basic_set<pair<Domain, Range>> &bset2) const;
+ inline typed::set<pair<Domain, Range>> intersect(const typed::set<pair<Domain, Range>> &set2) const;
+ inline typed::union_set<pair<Domain, Range>> intersect(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::basic_set<pair<Domain, Range>> intersect(const typed::point<pair<Domain, Range>> &bset2) const;
+ inline typed::basic_set<pair<Domain, Range>> intersect_params(const typed::basic_set<> &bset2) const;
+ inline typed::set<pair<Domain, Range>> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::basic_set<pair<Domain, Range>> intersect_params(const typed::point<> &bset2) const;
+ inline typed::set<pair<Domain, Range>> lexmax() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>> lexmax_pw_multi_aff() const;
+ inline typed::set<pair<Domain, Range>> lexmin() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>> lexmin_pw_multi_aff() const;
+ inline typed::set<pair<Domain, Range>> lower_bound(const typed::multi_pw_aff<pair<Domain, Range>> &lower) const;
+ inline typed::set<pair<Domain, Range>> lower_bound(const typed::multi_val<pair<Domain, Range>> &lower) const;
+ inline typed::multi_pw_aff<pair<Domain, Range>> max_multi_pw_aff() const;
+ inline typed::val<pair<Domain, Range>> max_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_pw_aff<pair<Domain, Range>> min_multi_pw_aff() const;
+ inline typed::val<pair<Domain, Range>> min_val(const typed::aff<> &obj) const = delete;
+ inline typed::basic_set<> params() const;
+ inline typed::multi_val<pair<Domain, Range>> plain_multi_val_if_fixed() const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const;
+ template <typename Arg2>
+ inline typed::set<pair<pair<Domain, Range>, Arg2>> product(const typed::set<Arg2> &set2) const;
+ inline typed::set<pair<Domain, Range>> project_out_all_params() const;
+ inline typed::set<pair<Domain, Range>> project_out_param(const typed::id<Anonymous> &id) const;
+ inline typed::set<pair<Domain, Range>> project_out_param(const std::string &id) const;
+ inline typed::set<pair<Domain, Range>> project_out_param(const typed::id_list<Anonymous> &list) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<pair<Domain, Range>, Arg2> pw_multi_aff_on_domain(const typed::multi_val<Arg2> &mv) const;
+ inline typed::fixed_box<pair<Domain, Range>> simple_fixed_box_hull() const;
+ inline typed::space<pair<Domain, Range>> space() const;
+ inline typed::set<pair<Domain, Range>> subtract(const typed::set<pair<Domain, Range>> &set2) const;
+ inline typed::union_set<pair<Domain, Range>> subtract(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::set<pair<Domain, Range>> to_set() const;
+ inline typed::union_set<pair<Domain, Range>> to_union_set() const;
+ inline typed::map<pair<Domain, Range>, pair<Domain, Range>> translation() const;
+ inline typed::set<pair<Domain, Range>> unbind_params(const typed::multi_id<> &tuple) const = delete;
+ template <typename Arg2>
+ inline typed::map<Arg2, pair<Domain, Range>> unbind_params_insert_domain(const typed::multi_id<Arg2> &domain) const;
+ inline typed::set<pair<Domain, Range>> unite(const typed::basic_set<pair<Domain, Range>> &bset2) const;
+ inline typed::set<pair<Domain, Range>> unite(const typed::set<pair<Domain, Range>> &set2) const;
+ inline typed::union_set<pair<Domain, Range>> unite(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::set<pair<Domain, Range>> unite(const typed::point<pair<Domain, Range>> &bset2) const;
+ inline typed::map<Domain, Range> unwrap() const;
+ inline typed::set<pair<Domain, Range>> upper_bound(const typed::multi_pw_aff<pair<Domain, Range>> &upper) const;
+ inline typed::set<pair<Domain, Range>> upper_bound(const typed::multi_val<pair<Domain, Range>> &upper) const;
+};
+
+template <typename Domain>
+struct fixed_box<Domain> : public isl::fixed_box {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ fixed_box() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ fixed_box(const fixed_box<Arg1> &obj) : isl::fixed_box(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::fixed_box>{}, bool>::type = true>
+ fixed_box(const base &obj) : isl::fixed_box(obj) {}
+ public:
+ static fixed_box from(const isl::fixed_box &obj) {
+ return fixed_box(obj);
+ }
+ inline typed::multi_aff<Domain> offset() const;
+ inline typed::multi_aff<Domain> get_offset() const = delete;
+ inline typed::multi_val<Domain> size() const;
+ inline typed::multi_val<Domain> get_size() const = delete;
+ inline typed::space<Domain> space() const;
+ inline typed::space<Domain> get_space() const = delete;
+};
+
+template <typename Domain, typename Range>
+struct fixed_box<Domain, Range> : public isl::fixed_box {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ fixed_box() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ fixed_box(const fixed_box<Arg1, Arg2> &obj) : isl::fixed_box(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::fixed_box>{}, bool>::type = true>
+ fixed_box(const base &obj) : isl::fixed_box(obj) {}
+ public:
+ static fixed_box from(const isl::fixed_box &obj) {
+ return fixed_box(obj);
+ }
+ inline typed::multi_aff<Domain, Range> offset() const;
+ inline typed::multi_aff<Domain, Range> get_offset() const = delete;
+ inline typed::multi_val<Range> size() const;
+ inline typed::multi_val<Domain, Range> get_size() const = delete;
+ inline typed::space<Domain, Range> space() const;
+ inline typed::space<Domain, Range> get_space() const = delete;
+};
+
+template <>
+struct id<Anonymous> : public isl::id {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ id() = default;
+ id(const isl::id &obj) : isl::id(obj) {}
+ static id from(const isl::id &obj) {
+ return id(obj);
+ }
+ inline explicit id(const isl::ctx &ctx, const std::string &str);
+ inline std::string get_name() const = delete;
+};
+
+template <>
+struct id_list<Anonymous> : public isl::id_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ id_list() = default;
+ id_list(const isl::id_list &obj) : isl::id_list(obj) {}
+ static id_list from(const isl::id_list &obj) {
+ return id_list(obj);
+ }
+ inline explicit id_list(const isl::ctx &ctx, int n);
+ inline explicit id_list(const typed::id<Anonymous> &el);
+ inline explicit id_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::id_list<Anonymous> add(const typed::id<Anonymous> &el) const;
+ inline typed::id_list<Anonymous> add(const std::string &el) const;
+ inline typed::id<Anonymous> at(int index) const;
+ inline typed::id<Anonymous> get_at(int index) const = delete;
+ inline typed::id_list<Anonymous> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::id<Anonymous>)> &fn) const;
+};
+
+template <typename Domain, typename Range>
+struct map<Domain, Range> : public isl::map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ map() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ map(const map<Arg1, Arg2> &obj) : isl::map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::map>{}, bool>::type = true>
+ map(const base &obj) : isl::map(obj) {}
+ public:
+ static map from(const isl::map &obj) {
+ return map(obj);
+ }
+ inline /* implicit */ map(const typed::basic_map<Domain, Range> &bmap);
+ inline explicit map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> apply_domain(const typed::map<Domain, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range> apply_domain(const typed::union_map<Domain, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> apply_domain(const typed::basic_map<Domain, Domain2> &map2) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> apply_range(const typed::map<Range, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> apply_range(const typed::union_map<Range, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> apply_range(const typed::basic_map<Range, Range2> &map2) const;
+ inline typed::map<Domain, Range> as_map() const;
+ inline typed::multi_union_pw_aff<Domain, Range> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Range> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<Domain, Range> as_union_pw_multi_aff() const;
+ inline typed::set<Range> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::set<Domain> bind_range(const typed::multi_id<Range> &tuple) const;
+ inline typed::map<Domain, Range> coalesce() const;
+ inline typed::map<Domain, Range> curry() const = delete;
+ inline typed::set<Domain, Range> deltas() const = delete;
+ inline typed::map<Domain, Range> detect_equalities() const;
+ inline typed::set<Domain> domain() const;
+ inline typed::map<Domain, Range> domain_factor_domain() const = delete;
+ inline typed::map<Domain, Range> domain_factor_range() const = delete;
+ inline typed::union_map<pair<Domain, Range>, Domain> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<Domain, Range>, Domain> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<Domain, Domain2>, Range> domain_product(const typed::map<Domain2, Range> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, Range> domain_product(const typed::union_map<Domain2, Range> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<pair<Domain, Domain2>, Range> domain_product(const typed::basic_map<Domain2, Range> &map2) const;
+ inline typed::id<Domain, Range> get_domain_tuple_id() const = delete;
+ inline typed::map<Domain, Range> eq_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::union_map<Domain, Range> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline typed::map<Domain, Range> eq_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> eq_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> eq_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> eq_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<Domain, Range>)> &test) const;
+ inline typed::map<Domain, Range> extract_map(const typed::space<Domain, Range> &space) const;
+ inline typed::map<Domain, Range> flatten_domain() const = delete;
+ inline typed::map<Domain, Range> flatten_range() const = delete;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<Domain, Range>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<Domain, Range>)> &fn) const;
+ inline typed::map<Domain, Range> gist(const typed::map<Domain, Range> &context) const;
+ inline typed::union_map<Domain, Range> gist(const typed::union_map<Domain, Range> &context) const;
+ inline typed::map<Domain, Range> gist(const typed::basic_map<Domain, Range> &context) const;
+ inline typed::map<Domain, Range> gist_domain(const typed::set<Domain> &context) const;
+ inline typed::union_map<Domain, Range> gist_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::map<Domain, Range> gist_domain(const typed::basic_set<Domain> &context) const;
+ inline typed::map<Domain, Range> gist_domain(const typed::point<Domain> &context) const;
+ inline typed::map<Domain, Range> intersect(const typed::map<Domain, Range> &map2) const;
+ inline typed::union_map<Domain, Range> intersect(const typed::union_map<Domain, Range> &umap2) const;
+ inline typed::map<Domain, Range> intersect(const typed::basic_map<Domain, Range> &map2) const;
+ inline typed::map<Domain, Range> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_map<Domain, Range> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, Range> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::map<Domain, Range> intersect_domain(const typed::basic_set<Domain> &set) const;
+ inline typed::map<Domain, Range> intersect_domain(const typed::point<Domain> &set) const;
+ inline typed::map<Domain, Range> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::map<Domain, Range> intersect_params(const typed::basic_set<> ¶ms) const;
+ inline typed::map<Domain, Range> intersect_params(const typed::point<> ¶ms) const;
+ inline typed::map<Domain, Range> intersect_range(const typed::set<Range> &set) const;
+ inline typed::union_map<Domain, Range> intersect_range(const typed::space<Range> &space) const;
+ inline typed::union_map<Domain, Range> intersect_range(const typed::union_set<Range> &uset) const;
+ inline typed::map<Domain, Range> intersect_range(const typed::basic_set<Range> &set) const;
+ inline typed::map<Domain, Range> intersect_range(const typed::point<Range> &set) const;
+ inline typed::map<Domain, Range> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_ge_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_ge_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_ge_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_ge_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_gt_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_gt_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_gt_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_gt_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_le_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_le_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_le_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_le_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_lt_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_lt_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_lt_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lex_lt_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, Range> lexmax() const;
+ inline typed::pw_multi_aff<Domain, Range> lexmax_pw_multi_aff() const;
+ inline typed::map<Domain, Range> lexmin() const;
+ inline typed::pw_multi_aff<Domain, Range> lexmin_pw_multi_aff() const;
+ inline typed::map<Domain, Range> lower_bound(const typed::multi_pw_aff<Domain, Range> &lower) const;
+ inline typed::map<Domain, Range> lower_bound(const typed::aff<Domain, Range> &lower) const;
+ inline typed::map<Domain, Range> lower_bound(const typed::multi_aff<Domain, Range> &lower) const;
+ inline typed::map<Domain, Range> lower_bound(const typed::pw_aff<Domain, Range> &lower) const;
+ inline typed::map<Domain, Range> lower_bound(const typed::pw_multi_aff<Domain, Range> &lower) const;
+ inline typed::map_list<Domain, Range> map_list() const;
+ inline typed::multi_pw_aff<Domain, Range> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<Domain, Range> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range> preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> preimage_range(const typed::multi_aff<Range2, Range> &ma) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> preimage_range(const typed::pw_multi_aff<Range2, Range> &pma) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> preimage_range(const typed::union_pw_multi_aff<Range2, Range> &upma) const;
+ template <typename Domain2, typename Range2>
+ inline typed::map<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::map<Domain2, Range2> &map2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::union_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::map<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::basic_map<Domain2, Range2> &map2) const;
+ inline typed::map<Domain, Range> project_out_all_params() const;
+ inline typed::set<Range> range() const;
+ inline typed::map<Domain, Range> range_factor_domain() const = delete;
+ inline typed::map<Domain, Range> range_factor_range() const = delete;
+ inline typed::fixed_box<Domain, Range> range_lattice_tile() const;
+ inline typed::fixed_box<Domain, Range> get_range_lattice_tile() const = delete;
+ inline typed::union_map<pair<Domain, Range>, Range> range_map() const;
+ template <typename Range2>
+ inline typed::map<Domain, pair<Range, Range2>> range_product(const typed::map<Domain, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, pair<Range, Range2>> range_product(const typed::union_map<Domain, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::map<Domain, pair<Range, Range2>> range_product(const typed::basic_map<Domain, Range2> &map2) const;
+ inline typed::map<Domain, Range> range_reverse() const = delete;
+ inline typed::fixed_box<Domain, Range> range_simple_fixed_box_hull() const;
+ inline typed::fixed_box<Domain, Range> get_range_simple_fixed_box_hull() const = delete;
+ inline typed::id<Domain, Range> get_range_tuple_id() const = delete;
+ inline typed::map<Range, Domain> reverse() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> set_domain_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range> set_domain_tuple(const std::string &id) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain, Range> space() const;
+ inline typed::space<Domain, Range> get_space() const = delete;
+ inline typed::map<Domain, Range> subtract(const typed::map<Domain, Range> &map2) const;
+ inline typed::union_map<Domain, Range> subtract(const typed::union_map<Domain, Range> &umap2) const;
+ inline typed::map<Domain, Range> subtract(const typed::basic_map<Domain, Range> &map2) const;
+ inline typed::union_map<Domain, Range> subtract_domain(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Range> subtract_range(const typed::union_set<Range> &dom) const;
+ inline typed::union_map<Domain, Range> to_union_map() const;
+ inline typed::map<Domain, Range> uncurry() const = delete;
+ inline typed::map<Domain, Range> unite(const typed::map<Domain, Range> &map2) const;
+ inline typed::union_map<Domain, Range> unite(const typed::union_map<Domain, Range> &umap2) const;
+ inline typed::map<Domain, Range> unite(const typed::basic_map<Domain, Range> &map2) const;
+ static inline typed::map<Domain, Range> universe(const typed::space<Domain, Range> &space);
+ inline typed::map<Domain, Range> upper_bound(const typed::multi_pw_aff<Domain, Range> &upper) const;
+ inline typed::map<Domain, Range> upper_bound(const typed::aff<Domain, Range> &upper) const;
+ inline typed::map<Domain, Range> upper_bound(const typed::multi_aff<Domain, Range> &upper) const;
+ inline typed::map<Domain, Range> upper_bound(const typed::pw_aff<Domain, Range> &upper) const;
+ inline typed::map<Domain, Range> upper_bound(const typed::pw_multi_aff<Domain, Range> &upper) const;
+ inline typed::set<pair<Domain, Range>> wrap() const;
+};
+
+template <typename Domain, typename Range, typename Range2>
+struct map<pair<Domain, Range>, Range2> : public isl::map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ map() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{} &&
+ std::is_base_of<Range2, Arg3>{},
+ bool>::type = true>
+ map(const map<pair<Arg1, Arg2>, Arg3> &obj) : isl::map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::map>{}, bool>::type = true>
+ map(const base &obj) : isl::map(obj) {}
+ public:
+ static map from(const isl::map &obj) {
+ return map(obj);
+ }
+ inline /* implicit */ map(const typed::basic_map<pair<Domain, Range>, Range2> &bmap);
+ inline explicit map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::map<Domain2, Range2> apply_domain(const typed::map<pair<Domain, Range>, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range2> apply_domain(const typed::union_map<pair<Domain, Range>, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range2> apply_domain(const typed::basic_map<pair<Domain, Range>, Domain2> &map2) const;
+ template <typename Arg3>
+ inline typed::map<pair<Domain, Range>, Arg3> apply_range(const typed::map<Range2, Arg3> &map2) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, Arg3> apply_range(const typed::union_map<Range2, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::map<pair<Domain, Range>, Arg3> apply_range(const typed::basic_map<Range2, Arg3> &map2) const;
+ inline typed::map<pair<Domain, Range>, Range2> as_map() const;
+ inline typed::multi_union_pw_aff<pair<Domain, Range>, Range2> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>, Range2> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<pair<Domain, Range>, Range2> as_union_pw_multi_aff() const;
+ inline typed::set<Range2> bind_domain(const typed::multi_id<pair<Domain, Range>> &tuple) const;
+ inline typed::set<pair<Domain, Range>> bind_range(const typed::multi_id<Range2> &tuple) const;
+ inline typed::map<pair<Domain, Range>, Range2> coalesce() const;
+ inline typed::map<Domain, pair<Range, Range2>> curry() const;
+ inline typed::set<pair<Domain, Range>, Range2> deltas() const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> detect_equalities() const;
+ inline typed::set<pair<Domain, Range>> domain() const;
+ inline typed::map<Domain, Range2> domain_factor_domain() const;
+ inline typed::map<Range, Range2> domain_factor_range() const;
+ inline typed::union_map<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<pair<Domain, Range>, Domain2>, Range2> domain_product(const typed::map<Domain2, Range2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2> domain_product(const typed::union_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<pair<pair<Domain, Range>, Domain2>, Range2> domain_product(const typed::basic_map<Domain2, Range2> &map2) const;
+ inline typed::id<pair<Domain, Range>, Range2> get_domain_tuple_id() const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> eq_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::union_map<pair<Domain, Range>, Range2> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> eq_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> eq_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> eq_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> eq_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<pair<Domain, Range>, Range2>)> &test) const;
+ inline typed::map<pair<Domain, Range>, Range2> extract_map(const typed::space<pair<Domain, Range>, Range2> &space) const;
+ inline typed::map<Anonymous, Range2> flatten_domain() const;
+ inline typed::map<pair<Domain, Range>, Range2> flatten_range() const = delete;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<pair<Domain, Range>, Range2>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<pair<Domain, Range>, Range2>)> &fn) const;
+ inline typed::map<pair<Domain, Range>, Range2> gist(const typed::map<pair<Domain, Range>, Range2> &context) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> gist(const typed::union_map<pair<Domain, Range>, Range2> &context) const;
+ inline typed::map<pair<Domain, Range>, Range2> gist(const typed::basic_map<pair<Domain, Range>, Range2> &context) const;
+ inline typed::map<pair<Domain, Range>, Range2> gist_domain(const typed::set<pair<Domain, Range>> &context) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> gist_domain(const typed::union_set<pair<Domain, Range>> &uset) const;
+ inline typed::map<pair<Domain, Range>, Range2> gist_domain(const typed::basic_set<pair<Domain, Range>> &context) const;
+ inline typed::map<pair<Domain, Range>, Range2> gist_domain(const typed::point<pair<Domain, Range>> &context) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect(const typed::map<pair<Domain, Range>, Range2> &map2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect(const typed::basic_map<pair<Domain, Range>, Range2> &map2) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_domain(const typed::set<pair<Domain, Range>> &set) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_domain(const typed::space<pair<Domain, Range>> &space) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_domain(const typed::union_set<pair<Domain, Range>> &uset) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_domain(const typed::basic_set<pair<Domain, Range>> &set) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_domain(const typed::point<pair<Domain, Range>> &set) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_params(const typed::basic_set<> ¶ms) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_params(const typed::point<> ¶ms) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_range(const typed::set<Range2> &set) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_range(const typed::space<Range2> &space) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_range(const typed::union_set<Range2> &uset) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_range(const typed::basic_set<Range2> &set) const;
+ inline typed::map<pair<Domain, Range>, Range2> intersect_range(const typed::point<Range2> &set) const;
+ inline typed::map<pair<Domain, Range>, Range2> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_ge_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_ge_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_ge_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_ge_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_gt_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_gt_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_gt_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_gt_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_le_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_le_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_le_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_le_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_lt_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_lt_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_lt_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lex_lt_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> lexmax() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>, Range2> lexmax_pw_multi_aff() const;
+ inline typed::map<pair<Domain, Range>, Range2> lexmin() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>, Range2> lexmin_pw_multi_aff() const;
+ inline typed::map<pair<Domain, Range>, Range2> lower_bound(const typed::multi_pw_aff<pair<Domain, Range>, Range2> &lower) const;
+ inline typed::map<pair<Domain, Range>, Range2> lower_bound(const typed::aff<pair<Domain, Range>, Range2> &lower) const;
+ inline typed::map<pair<Domain, Range>, Range2> lower_bound(const typed::multi_aff<pair<Domain, Range>, Range2> &lower) const;
+ inline typed::map<pair<Domain, Range>, Range2> lower_bound(const typed::pw_aff<pair<Domain, Range>, Range2> &lower) const;
+ inline typed::map<pair<Domain, Range>, Range2> lower_bound(const typed::pw_multi_aff<pair<Domain, Range>, Range2> &lower) const;
+ inline typed::map_list<pair<Domain, Range>, Range2> map_list() const;
+ inline typed::multi_pw_aff<pair<Domain, Range>, Range2> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<pair<Domain, Range>, Range2> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range2> preimage_domain(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range2> preimage_domain(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Range2> preimage_domain(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range2> preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const;
+ template <typename Arg3>
+ inline typed::map<pair<Domain, Range>, Arg3> preimage_range(const typed::multi_aff<Arg3, Range2> &ma) const;
+ template <typename Arg3>
+ inline typed::map<pair<Domain, Range>, Arg3> preimage_range(const typed::pw_multi_aff<Arg3, Range2> &pma) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, Arg3> preimage_range(const typed::union_pw_multi_aff<Arg3, Range2> &upma) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> product(const typed::map<Domain2, Arg3> &map2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> product(const typed::union_map<Domain2, Arg3> &umap2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> product(const typed::basic_map<Domain2, Arg3> &map2) const;
+ inline typed::map<pair<Domain, Range>, Range2> project_out_all_params() const;
+ inline typed::set<Range2> range() const;
+ inline typed::map<pair<Domain, Range>, Range2> range_factor_domain() const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> range_factor_range() const = delete;
+ inline typed::fixed_box<pair<Domain, Range>, Range2> range_lattice_tile() const;
+ inline typed::fixed_box<pair<Domain, Range>, Range2> get_range_lattice_tile() const = delete;
+ inline typed::union_map<pair<pair<Domain, Range>, Range2>, Range2> range_map() const;
+ template <typename Arg3>
+ inline typed::map<pair<Domain, Range>, pair<Range2, Arg3>> range_product(const typed::map<pair<Domain, Range>, Arg3> &map2) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>> range_product(const typed::union_map<pair<Domain, Range>, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::map<pair<Domain, Range>, pair<Range2, Arg3>> range_product(const typed::basic_map<pair<Domain, Range>, Arg3> &map2) const;
+ inline typed::map<pair<Domain, Range>, Range2> range_reverse() const = delete;
+ inline typed::fixed_box<pair<Domain, Range>, Range2> range_simple_fixed_box_hull() const;
+ inline typed::fixed_box<pair<Domain, Range>, Range2> get_range_simple_fixed_box_hull() const = delete;
+ inline typed::id<pair<Domain, Range>, Range2> get_range_tuple_id() const = delete;
+ inline typed::map<Range2, pair<Domain, Range>> reverse() const;
+ inline typed::map<pair<Domain, Range>, Range2> set_domain_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> set_domain_tuple(const std::string &id) const = delete;
+ template <typename Arg2>
+ inline typed::map<pair<Domain, Range>, Arg2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Arg2>
+ inline typed::map<pair<Domain, Range>, Arg2> set_range_tuple(const std::string &id) const;
+ inline typed::space<pair<Domain, Range>, Range2> space() const;
+ inline typed::space<pair<Domain, Range>, Range2> get_space() const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> subtract(const typed::map<pair<Domain, Range>, Range2> &map2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::map<pair<Domain, Range>, Range2> subtract(const typed::basic_map<pair<Domain, Range>, Range2> &map2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_domain(const typed::union_set<pair<Domain, Range>> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_range(const typed::union_set<Range2> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> to_union_map() const;
+ inline typed::map<pair<Domain, Range>, Range2> uncurry() const = delete;
+ inline typed::map<pair<Domain, Range>, Range2> unite(const typed::map<pair<Domain, Range>, Range2> &map2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> unite(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::map<pair<Domain, Range>, Range2> unite(const typed::basic_map<pair<Domain, Range>, Range2> &map2) const;
+ static inline typed::map<pair<Domain, Range>, Range2> universe(const typed::space<pair<Domain, Range>, Range2> &space);
+ inline typed::map<pair<Domain, Range>, Range2> upper_bound(const typed::multi_pw_aff<pair<Domain, Range>, Range2> &upper) const;
+ inline typed::map<pair<Domain, Range>, Range2> upper_bound(const typed::aff<pair<Domain, Range>, Range2> &upper) const;
+ inline typed::map<pair<Domain, Range>, Range2> upper_bound(const typed::multi_aff<pair<Domain, Range>, Range2> &upper) const;
+ inline typed::map<pair<Domain, Range>, Range2> upper_bound(const typed::pw_aff<pair<Domain, Range>, Range2> &upper) const;
+ inline typed::map<pair<Domain, Range>, Range2> upper_bound(const typed::pw_multi_aff<pair<Domain, Range>, Range2> &upper) const;
+ inline typed::set<pair<pair<Domain, Range>, Range2>> wrap() const;
+};
+
+template <typename Domain>
+struct map<Domain, Domain> : public isl::map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ map() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ map(const map<Arg1, Arg1> &obj) : isl::map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::map>{}, bool>::type = true>
+ map(const base &obj) : isl::map(obj) {}
+ public:
+ static map from(const isl::map &obj) {
+ return map(obj);
+ }
+ inline /* implicit */ map(const typed::basic_map<Domain, Domain> &bmap);
+ inline explicit map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> apply_domain(const typed::map<Domain, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Domain> apply_domain(const typed::union_map<Domain, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> apply_domain(const typed::basic_map<Domain, Domain2> &map2) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> apply_range(const typed::map<Domain, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> apply_range(const typed::union_map<Domain, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> apply_range(const typed::basic_map<Domain, Range2> &map2) const;
+ inline typed::map<Domain, Domain> as_map() const;
+ inline typed::multi_union_pw_aff<Domain, Domain> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Domain> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<Domain, Domain> as_union_pw_multi_aff() const;
+ inline typed::set<Domain> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::set<Domain> bind_range(const typed::multi_id<Domain> &tuple) const;
+ inline typed::map<Domain, Domain> coalesce() const;
+ inline typed::map<Domain, Domain> curry() const = delete;
+ inline typed::set<Domain> deltas() const;
+ inline typed::map<Domain, Domain> detect_equalities() const;
+ inline typed::set<Domain> domain() const;
+ inline typed::map<Domain, Domain> domain_factor_domain() const = delete;
+ inline typed::map<Domain, Domain> domain_factor_range() const = delete;
+ inline typed::union_map<pair<Domain, Domain>, Domain> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain>, Domain> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<Domain, Domain2>, Domain> domain_product(const typed::map<Domain2, Domain> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, Domain> domain_product(const typed::union_map<Domain2, Domain> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<pair<Domain, Domain2>, Domain> domain_product(const typed::basic_map<Domain2, Domain> &map2) const;
+ inline typed::id<Domain, Domain> get_domain_tuple_id() const = delete;
+ template <typename Range>
+ inline typed::map<Domain, Domain> eq_at(const typed::multi_pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::union_map<Domain, Domain> eq_at(const typed::multi_union_pw_aff<Domain, Range> &mupa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> eq_at(const typed::aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> eq_at(const typed::multi_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> eq_at(const typed::pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> eq_at(const typed::pw_multi_aff<Domain, Range> &mpa) const;
+ inline bool every_map(const std::function<bool(typed::map<Domain, Domain>)> &test) const;
+ inline typed::map<Domain, Domain> extract_map(const typed::space<Domain, Domain> &space) const;
+ inline typed::map<Domain, Domain> flatten_domain() const = delete;
+ inline typed::map<Domain, Domain> flatten_range() const = delete;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<Domain, Domain>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<Domain, Domain>)> &fn) const;
+ inline typed::map<Domain, Domain> gist(const typed::map<Domain, Domain> &context) const;
+ inline typed::union_map<Domain, Domain> gist(const typed::union_map<Domain, Domain> &context) const;
+ inline typed::map<Domain, Domain> gist(const typed::basic_map<Domain, Domain> &context) const;
+ inline typed::map<Domain, Domain> gist_domain(const typed::set<Domain> &context) const;
+ inline typed::union_map<Domain, Domain> gist_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::map<Domain, Domain> gist_domain(const typed::basic_set<Domain> &context) const;
+ inline typed::map<Domain, Domain> gist_domain(const typed::point<Domain> &context) const;
+ inline typed::map<Domain, Domain> intersect(const typed::map<Domain, Domain> &map2) const;
+ inline typed::union_map<Domain, Domain> intersect(const typed::union_map<Domain, Domain> &umap2) const;
+ inline typed::map<Domain, Domain> intersect(const typed::basic_map<Domain, Domain> &map2) const;
+ inline typed::map<Domain, Domain> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_map<Domain, Domain> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, Domain> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::map<Domain, Domain> intersect_domain(const typed::basic_set<Domain> &set) const;
+ inline typed::map<Domain, Domain> intersect_domain(const typed::point<Domain> &set) const;
+ inline typed::map<Domain, Domain> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::map<Domain, Domain> intersect_params(const typed::basic_set<> ¶ms) const;
+ inline typed::map<Domain, Domain> intersect_params(const typed::point<> ¶ms) const;
+ inline typed::map<Domain, Domain> intersect_range(const typed::set<Domain> &set) const;
+ inline typed::union_map<Domain, Domain> intersect_range(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, Domain> intersect_range(const typed::union_set<Domain> &uset) const;
+ inline typed::map<Domain, Domain> intersect_range(const typed::basic_set<Domain> &set) const;
+ inline typed::map<Domain, Domain> intersect_range(const typed::point<Domain> &set) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_ge_at(const typed::multi_pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_ge_at(const typed::aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_ge_at(const typed::multi_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_ge_at(const typed::pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_ge_at(const typed::pw_multi_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_gt_at(const typed::multi_pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_gt_at(const typed::aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_gt_at(const typed::multi_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_gt_at(const typed::pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_gt_at(const typed::pw_multi_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_le_at(const typed::multi_pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_le_at(const typed::aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_le_at(const typed::multi_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_le_at(const typed::pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_le_at(const typed::pw_multi_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_lt_at(const typed::multi_pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_lt_at(const typed::aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_lt_at(const typed::multi_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_lt_at(const typed::pw_aff<Domain, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<Domain, Domain> lex_lt_at(const typed::pw_multi_aff<Domain, Range> &mpa) const;
+ inline typed::map<Domain, Domain> lexmax() const;
+ inline typed::pw_multi_aff<Domain, Domain> lexmax_pw_multi_aff() const;
+ inline typed::map<Domain, Domain> lexmin() const;
+ inline typed::pw_multi_aff<Domain, Domain> lexmin_pw_multi_aff() const;
+ inline typed::map<Domain, Domain> lower_bound(const typed::multi_pw_aff<Domain, Domain> &lower) const;
+ inline typed::map<Domain, Domain> lower_bound(const typed::aff<Domain, Domain> &lower) const;
+ inline typed::map<Domain, Domain> lower_bound(const typed::multi_aff<Domain, Domain> &lower) const;
+ inline typed::map<Domain, Domain> lower_bound(const typed::pw_aff<Domain, Domain> &lower) const;
+ inline typed::map<Domain, Domain> lower_bound(const typed::pw_multi_aff<Domain, Domain> &lower) const;
+ inline typed::map_list<Domain, Domain> map_list() const;
+ inline typed::multi_pw_aff<Domain, Domain> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<Domain, Domain> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Domain> preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> preimage_range(const typed::multi_aff<Range2, Domain> &ma) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> preimage_range(const typed::pw_multi_aff<Range2, Domain> &pma) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> preimage_range(const typed::union_pw_multi_aff<Range2, Domain> &upma) const;
+ template <typename Domain2, typename Range2>
+ inline typed::map<pair<Domain, Domain2>, pair<Domain, Range2>> product(const typed::map<Domain2, Range2> &map2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>> product(const typed::union_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::map<pair<Domain, Domain2>, pair<Domain, Range2>> product(const typed::basic_map<Domain2, Range2> &map2) const;
+ inline typed::map<Domain, Domain> project_out_all_params() const;
+ inline typed::set<Domain> range() const;
+ inline typed::map<Domain, Domain> range_factor_domain() const = delete;
+ inline typed::map<Domain, Domain> range_factor_range() const = delete;
+ inline typed::fixed_box<Domain, Domain> range_lattice_tile() const;
+ inline typed::fixed_box<Domain, Domain> get_range_lattice_tile() const = delete;
+ inline typed::union_map<pair<Domain, Domain>, Domain> range_map() const;
+ template <typename Range2>
+ inline typed::map<Domain, pair<Domain, Range2>> range_product(const typed::map<Domain, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, pair<Domain, Range2>> range_product(const typed::union_map<Domain, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::map<Domain, pair<Domain, Range2>> range_product(const typed::basic_map<Domain, Range2> &map2) const;
+ inline typed::map<Domain, Domain> range_reverse() const = delete;
+ inline typed::fixed_box<Domain, Domain> range_simple_fixed_box_hull() const;
+ inline typed::fixed_box<Domain, Domain> get_range_simple_fixed_box_hull() const = delete;
+ inline typed::id<Domain, Domain> get_range_tuple_id() const = delete;
+ inline typed::map<Domain, Domain> reverse() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> set_domain_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, Domain> set_domain_tuple(const std::string &id) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::map<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain, Domain> space() const;
+ inline typed::space<Domain, Domain> get_space() const = delete;
+ inline typed::map<Domain, Domain> subtract(const typed::map<Domain, Domain> &map2) const;
+ inline typed::union_map<Domain, Domain> subtract(const typed::union_map<Domain, Domain> &umap2) const;
+ inline typed::map<Domain, Domain> subtract(const typed::basic_map<Domain, Domain> &map2) const;
+ inline typed::union_map<Domain, Domain> subtract_domain(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> subtract_range(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> to_union_map() const;
+ inline typed::map<Domain, Domain> uncurry() const = delete;
+ inline typed::map<Domain, Domain> unite(const typed::map<Domain, Domain> &map2) const;
+ inline typed::union_map<Domain, Domain> unite(const typed::union_map<Domain, Domain> &umap2) const;
+ inline typed::map<Domain, Domain> unite(const typed::basic_map<Domain, Domain> &map2) const;
+ static inline typed::map<Domain, Domain> universe(const typed::space<Domain, Domain> &space);
+ inline typed::map<Domain, Domain> upper_bound(const typed::multi_pw_aff<Domain, Domain> &upper) const;
+ inline typed::map<Domain, Domain> upper_bound(const typed::aff<Domain, Domain> &upper) const;
+ inline typed::map<Domain, Domain> upper_bound(const typed::multi_aff<Domain, Domain> &upper) const;
+ inline typed::map<Domain, Domain> upper_bound(const typed::pw_aff<Domain, Domain> &upper) const;
+ inline typed::map<Domain, Domain> upper_bound(const typed::pw_multi_aff<Domain, Domain> &upper) const;
+ inline typed::set<pair<Domain, Domain>> wrap() const;
+};
+
+template <typename Domain, typename Range, typename Range2>
+struct map<Domain, pair<Range, Range2>> : public isl::map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ map() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{} &&
+ std::is_base_of<Range2, Arg3>{},
+ bool>::type = true>
+ map(const map<Arg1, pair<Arg2, Arg3>> &obj) : isl::map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::map>{}, bool>::type = true>
+ map(const base &obj) : isl::map(obj) {}
+ public:
+ static map from(const isl::map &obj) {
+ return map(obj);
+ }
+ inline /* implicit */ map(const typed::basic_map<Domain, pair<Range, Range2>> &bmap);
+ inline explicit map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> apply_domain(const typed::map<Domain, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> apply_domain(const typed::union_map<Domain, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> apply_domain(const typed::basic_map<Domain, Domain2> &map2) const;
+ template <typename Arg3>
+ inline typed::map<Domain, Arg3> apply_range(const typed::map<pair<Range, Range2>, Arg3> &map2) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, Arg3> apply_range(const typed::union_map<pair<Range, Range2>, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::map<Domain, Arg3> apply_range(const typed::basic_map<pair<Range, Range2>, Arg3> &map2) const;
+ inline typed::map<Domain, pair<Range, Range2>> as_map() const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> as_union_pw_multi_aff() const;
+ inline typed::set<pair<Range, Range2>> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::set<Domain> bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const;
+ inline typed::map<Domain, pair<Range, Range2>> coalesce() const;
+ inline typed::map<Domain, pair<Range, Range2>> curry() const = delete;
+ inline typed::set<Domain, pair<Range, Range2>> deltas() const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> detect_equalities() const;
+ inline typed::set<Domain> domain() const;
+ inline typed::map<Domain, pair<Range, Range2>> domain_factor_domain() const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> domain_factor_range() const = delete;
+ inline typed::union_map<pair<Domain, pair<Range, Range2>>, Domain> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<Domain, Domain2>, pair<Range, Range2>> domain_product(const typed::map<Domain2, pair<Range, Range2>> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<pair<Domain, Domain2>, pair<Range, Range2>> domain_product(const typed::basic_map<Domain2, pair<Range, Range2>> &map2) const;
+ inline typed::id<Domain, pair<Range, Range2>> get_domain_tuple_id() const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> eq_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::union_map<Domain, pair<Range, Range2>> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> eq_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> eq_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> eq_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> eq_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<Domain, pair<Range, Range2>>)> &test) const;
+ inline typed::map<Domain, pair<Range, Range2>> extract_map(const typed::space<Domain, pair<Range, Range2>> &space) const;
+ inline typed::map<Domain, pair<Range, Range2>> flatten_domain() const = delete;
+ inline typed::map<Domain, Anonymous> flatten_range() const;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<Domain, pair<Range, Range2>>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<Domain, pair<Range, Range2>>)> &fn) const;
+ inline typed::map<Domain, pair<Range, Range2>> gist(const typed::map<Domain, pair<Range, Range2>> &context) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> gist(const typed::union_map<Domain, pair<Range, Range2>> &context) const;
+ inline typed::map<Domain, pair<Range, Range2>> gist(const typed::basic_map<Domain, pair<Range, Range2>> &context) const;
+ inline typed::map<Domain, pair<Range, Range2>> gist_domain(const typed::set<Domain> &context) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> gist_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::map<Domain, pair<Range, Range2>> gist_domain(const typed::basic_set<Domain> &context) const;
+ inline typed::map<Domain, pair<Range, Range2>> gist_domain(const typed::point<Domain> &context) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect(const typed::map<Domain, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect(const typed::basic_map<Domain, pair<Range, Range2>> &map2) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_domain(const typed::basic_set<Domain> &set) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_domain(const typed::point<Domain> &set) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_params(const typed::basic_set<> ¶ms) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_params(const typed::point<> ¶ms) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_range(const typed::set<pair<Range, Range2>> &set) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_range(const typed::space<pair<Range, Range2>> &space) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_range(const typed::basic_set<pair<Range, Range2>> &set) const;
+ inline typed::map<Domain, pair<Range, Range2>> intersect_range(const typed::point<pair<Range, Range2>> &set) const;
+ inline typed::map<Domain, pair<Range, Range2>> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_ge_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_ge_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_ge_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_ge_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_gt_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_gt_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_gt_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_gt_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_le_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_le_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_le_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_le_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_lt_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_lt_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_lt_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lex_lt_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> lexmax() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> lexmax_pw_multi_aff() const;
+ inline typed::map<Domain, pair<Range, Range2>> lexmin() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> lexmin_pw_multi_aff() const;
+ inline typed::map<Domain, pair<Range, Range2>> lower_bound(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &lower) const;
+ inline typed::map<Domain, pair<Range, Range2>> lower_bound(const typed::aff<Domain, pair<Range, Range2>> &lower) const;
+ inline typed::map<Domain, pair<Range, Range2>> lower_bound(const typed::multi_aff<Domain, pair<Range, Range2>> &lower) const;
+ inline typed::map<Domain, pair<Range, Range2>> lower_bound(const typed::pw_aff<Domain, pair<Range, Range2>> &lower) const;
+ inline typed::map<Domain, pair<Range, Range2>> lower_bound(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &lower) const;
+ inline typed::map_list<Domain, pair<Range, Range2>> map_list() const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Arg3>
+ inline typed::map<Domain, Arg3> preimage_range(const typed::multi_aff<Arg3, pair<Range, Range2>> &ma) const;
+ template <typename Arg3>
+ inline typed::map<Domain, Arg3> preimage_range(const typed::pw_multi_aff<Arg3, pair<Range, Range2>> &pma) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, Arg3> preimage_range(const typed::union_pw_multi_aff<Arg3, pair<Range, Range2>> &upma) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::map<Domain2, Arg3> &map2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::union_map<Domain2, Arg3> &umap2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::basic_map<Domain2, Arg3> &map2) const;
+ inline typed::map<Domain, pair<Range, Range2>> project_out_all_params() const;
+ inline typed::set<pair<Range, Range2>> range() const;
+ inline typed::map<Domain, Range> range_factor_domain() const;
+ inline typed::map<Domain, Range2> range_factor_range() const;
+ inline typed::fixed_box<Domain, pair<Range, Range2>> range_lattice_tile() const;
+ inline typed::fixed_box<Domain, pair<Range, Range2>> get_range_lattice_tile() const = delete;
+ inline typed::union_map<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>> range_map() const;
+ template <typename Arg3>
+ inline typed::map<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::map<Domain, Arg3> &map2) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::union_map<Domain, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::map<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::basic_map<Domain, Arg3> &map2) const;
+ inline typed::map<Domain, pair<Range2, Range>> range_reverse() const;
+ inline typed::fixed_box<Domain, pair<Range, Range2>> range_simple_fixed_box_hull() const;
+ inline typed::fixed_box<Domain, pair<Range, Range2>> get_range_simple_fixed_box_hull() const = delete;
+ inline typed::id<Domain, pair<Range, Range2>> get_range_tuple_id() const = delete;
+ inline typed::map<pair<Range, Range2>, Domain> reverse() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> set_domain_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> set_domain_tuple(const std::string &id) const;
+ inline typed::map<Domain, pair<Range, Range2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> space() const;
+ inline typed::space<Domain, pair<Range, Range2>> get_space() const = delete;
+ inline typed::map<Domain, pair<Range, Range2>> subtract(const typed::map<Domain, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::map<Domain, pair<Range, Range2>> subtract(const typed::basic_map<Domain, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_domain(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> to_union_map() const;
+ inline typed::map<pair<Domain, Range>, Range2> uncurry() const;
+ inline typed::map<Domain, pair<Range, Range2>> unite(const typed::map<Domain, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> unite(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::map<Domain, pair<Range, Range2>> unite(const typed::basic_map<Domain, pair<Range, Range2>> &map2) const;
+ static inline typed::map<Domain, pair<Range, Range2>> universe(const typed::space<Domain, pair<Range, Range2>> &space);
+ inline typed::map<Domain, pair<Range, Range2>> upper_bound(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &upper) const;
+ inline typed::map<Domain, pair<Range, Range2>> upper_bound(const typed::aff<Domain, pair<Range, Range2>> &upper) const;
+ inline typed::map<Domain, pair<Range, Range2>> upper_bound(const typed::multi_aff<Domain, pair<Range, Range2>> &upper) const;
+ inline typed::map<Domain, pair<Range, Range2>> upper_bound(const typed::pw_aff<Domain, pair<Range, Range2>> &upper) const;
+ inline typed::map<Domain, pair<Range, Range2>> upper_bound(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &upper) const;
+ inline typed::set<pair<Domain, pair<Range, Range2>>> wrap() const;
+};
+
+template <typename T1, typename T2>
+struct map<pair<T1, T2>, pair<T1, T2>> : public isl::map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ map() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<T1, Arg1>{} &&
+ std::is_base_of<T2, Arg2>{},
+ bool>::type = true>
+ map(const map<pair<Arg1, Arg2>, pair<Arg1, Arg2>> &obj) : isl::map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::map>{}, bool>::type = true>
+ map(const base &obj) : isl::map(obj) {}
+ public:
+ static map from(const isl::map &obj) {
+ return map(obj);
+ }
+ inline /* implicit */ map(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &bmap);
+ inline explicit map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<T1, T2>> apply_domain(const typed::map<pair<T1, T2>, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<T1, T2>> apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<T1, T2>> apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &map2) const;
+ template <typename Range2>
+ inline typed::map<pair<T1, T2>, Range2> apply_range(const typed::map<pair<T1, T2>, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, Range2> apply_range(const typed::union_map<pair<T1, T2>, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::map<pair<T1, T2>, Range2> apply_range(const typed::basic_map<pair<T1, T2>, Range2> &map2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> as_map() const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<T1, T2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<T1, T2>> as_union_pw_multi_aff() const;
+ inline typed::set<pair<T1, T2>> bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const;
+ inline typed::set<pair<T1, T2>> bind_range(const typed::multi_id<pair<T1, T2>> &tuple) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> coalesce() const;
+ inline typed::map<T1, pair<T2, pair<T1, T2>>> curry() const;
+ inline typed::set<pair<T1, T2>> deltas() const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> detect_equalities() const;
+ inline typed::set<pair<T1, T2>> domain() const;
+ inline typed::map<T1, pair<T1, T2>> domain_factor_domain() const;
+ inline typed::map<T2, pair<T1, T2>> domain_factor_range() const;
+ inline typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> domain_product(const typed::map<Domain2, pair<T1, T2>> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> domain_product(const typed::union_map<Domain2, pair<T1, T2>> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> domain_product(const typed::basic_map<Domain2, pair<T1, T2>> &map2) const;
+ inline typed::id<pair<T1, T2>, pair<T1, T2>> get_domain_tuple_id() const = delete;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> eq_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> eq_at(const typed::multi_union_pw_aff<pair<T1, T2>, Range> &mupa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> eq_at(const typed::aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> eq_at(const typed::multi_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> eq_at(const typed::pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> eq_at(const typed::pw_multi_aff<pair<T1, T2>, Range> &mpa) const;
+ inline bool every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<T1, T2>>)> &test) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> extract_map(const typed::space<pair<T1, T2>, pair<T1, T2>> &space) const;
+ inline typed::map<Anonymous, pair<T1, T2>> flatten_domain() const;
+ inline typed::map<pair<T1, T2>, Anonymous> flatten_range() const;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<pair<T1, T2>, pair<T1, T2>>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<T1, T2>>)> &fn) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> gist(const typed::map<pair<T1, T2>, pair<T1, T2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> gist(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> gist(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> gist_domain(const typed::set<pair<T1, T2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> gist_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> gist_domain(const typed::basic_set<pair<T1, T2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> gist_domain(const typed::point<pair<T1, T2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &map2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::set<pair<T1, T2>> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::basic_set<pair<T1, T2>> &set) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::point<pair<T1, T2>> &set) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_params(const typed::basic_set<> ¶ms) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_params(const typed::point<> ¶ms) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::set<pair<T1, T2>> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::basic_set<pair<T1, T2>> &set) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::point<pair<T1, T2>> &set) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_ge_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_ge_at(const typed::aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_ge_at(const typed::multi_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_ge_at(const typed::pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_ge_at(const typed::pw_multi_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_gt_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_gt_at(const typed::aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_gt_at(const typed::multi_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_gt_at(const typed::pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_gt_at(const typed::pw_multi_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_le_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_le_at(const typed::aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_le_at(const typed::multi_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_le_at(const typed::pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_le_at(const typed::pw_multi_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_lt_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_lt_at(const typed::aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_lt_at(const typed::multi_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_lt_at(const typed::pw_aff<pair<T1, T2>, Range> &mpa) const;
+ template <typename Range>
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lex_lt_at(const typed::pw_multi_aff<pair<T1, T2>, Range> &mpa) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lexmax() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> lexmax_pw_multi_aff() const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lexmin() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> lexmin_pw_multi_aff() const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lower_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> &lower) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lower_bound(const typed::aff<pair<T1, T2>, pair<T1, T2>> &lower) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lower_bound(const typed::multi_aff<pair<T1, T2>, pair<T1, T2>> &lower) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lower_bound(const typed::pw_aff<pair<T1, T2>, pair<T1, T2>> &lower) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> lower_bound(const typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> &lower) const;
+ inline typed::map_list<pair<T1, T2>, pair<T1, T2>> map_list() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<T1, T2>> preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<T1, T2>> preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<T1, T2>> preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<T1, T2>> preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const;
+ template <typename Range2>
+ inline typed::map<pair<T1, T2>, Range2> preimage_range(const typed::multi_aff<Range2, pair<T1, T2>> &ma) const;
+ template <typename Range2>
+ inline typed::map<pair<T1, T2>, Range2> preimage_range(const typed::pw_multi_aff<Range2, pair<T1, T2>> &pma) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, Range2> preimage_range(const typed::union_pw_multi_aff<Range2, pair<T1, T2>> &upma) const;
+ template <typename Domain2, typename Range2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> product(const typed::map<Domain2, Range2> &map2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> product(const typed::union_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> product(const typed::basic_map<Domain2, Range2> &map2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> project_out_all_params() const;
+ inline typed::set<pair<T1, T2>> range() const;
+ inline typed::map<pair<T1, T2>, T1> range_factor_domain() const;
+ inline typed::map<pair<T1, T2>, T2> range_factor_range() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<T1, T2>> range_lattice_tile() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<T1, T2>> get_range_lattice_tile() const = delete;
+ inline typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> range_map() const;
+ template <typename Range2>
+ inline typed::map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> range_product(const typed::map<pair<T1, T2>, Range2> &map2) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> range_product(const typed::union_map<pair<T1, T2>, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> range_product(const typed::basic_map<pair<T1, T2>, Range2> &map2) const;
+ inline typed::map<pair<T1, T2>, pair<T2, T1>> range_reverse() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<T1, T2>> range_simple_fixed_box_hull() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<T1, T2>> get_range_simple_fixed_box_hull() const = delete;
+ inline typed::id<pair<T1, T2>, pair<T1, T2>> get_range_tuple_id() const = delete;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> reverse() const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> set_domain_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> set_domain_tuple(const std::string &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<pair<T1, T2>, pair<T1, T2>> space() const;
+ inline typed::space<pair<T1, T2>, pair<T1, T2>> get_space() const = delete;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> subtract(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> subtract(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_range(const typed::union_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> to_union_map() const;
+ inline typed::map<pair<pair<T1, T2>, T1>, T2> uncurry() const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> unite(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> unite(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> unite(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &map2) const;
+ static inline typed::map<pair<T1, T2>, pair<T1, T2>> universe(const typed::space<pair<T1, T2>, pair<T1, T2>> &space);
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> upper_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> &upper) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> upper_bound(const typed::aff<pair<T1, T2>, pair<T1, T2>> &upper) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> upper_bound(const typed::multi_aff<pair<T1, T2>, pair<T1, T2>> &upper) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> upper_bound(const typed::pw_aff<pair<T1, T2>, pair<T1, T2>> &upper) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> upper_bound(const typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> &upper) const;
+ inline typed::set<pair<pair<T1, T2>, pair<T1, T2>>> wrap() const;
+};
+
+template <typename T1, typename T2, typename Range, typename Range2>
+struct map<pair<T1, T2>, pair<Range, Range2>> : public isl::map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ map() = default;
+ template <typename Arg1, typename Arg2, typename Arg3, typename Arg4,
+ typename std::enable_if<
+ std::is_base_of<T1, Arg1>{} &&
+ std::is_base_of<T2, Arg2>{} &&
+ std::is_base_of<Range, Arg3>{} &&
+ std::is_base_of<Range2, Arg4>{},
+ bool>::type = true>
+ map(const map<pair<Arg1, Arg2>, pair<Arg3, Arg4>> &obj) : isl::map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::map>{}, bool>::type = true>
+ map(const base &obj) : isl::map(obj) {}
+ public:
+ static map from(const isl::map &obj) {
+ return map(obj);
+ }
+ inline /* implicit */ map(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &bmap);
+ inline explicit map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> apply_domain(const typed::map<pair<T1, T2>, Domain2> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &map2) const;
+ template <typename Arg2>
+ inline typed::map<pair<T1, T2>, Arg2> apply_range(const typed::map<pair<Range, Range2>, Arg2> &map2) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, Arg2> apply_range(const typed::union_map<pair<Range, Range2>, Arg2> &umap2) const;
+ template <typename Arg2>
+ inline typed::map<pair<T1, T2>, Arg2> apply_range(const typed::basic_map<pair<Range, Range2>, Arg2> &map2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> as_map() const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> as_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> as_union_pw_multi_aff() const;
+ inline typed::set<pair<Range, Range2>> bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const;
+ inline typed::set<pair<T1, T2>> bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> coalesce() const;
+ inline typed::map<T1, pair<T2, pair<Range, Range2>>> curry() const;
+ inline typed::set<pair<T1, T2>, pair<Range, Range2>> deltas() const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> detect_equalities() const;
+ inline typed::set<pair<T1, T2>> domain() const;
+ inline typed::map<T1, pair<Range, Range2>> domain_factor_domain() const;
+ inline typed::map<T2, pair<Range, Range2>> domain_factor_range() const;
+ inline typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> domain_product(const typed::map<Domain2, pair<Range, Range2>> &map2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const;
+ template <typename Domain2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> domain_product(const typed::basic_map<Domain2, pair<Range, Range2>> &map2) const;
+ inline typed::id<pair<T1, T2>, pair<Range, Range2>> get_domain_tuple_id() const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> eq_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> eq_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> eq_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> eq_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> eq_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &test) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> extract_map(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const;
+ inline typed::map<Anonymous, pair<Range, Range2>> flatten_domain() const;
+ inline typed::map<pair<T1, T2>, Anonymous> flatten_range() const;
+ inline void foreach_basic_map(const std::function<void(typed::basic_map<pair<T1, T2>, pair<Range, Range2>>)> &fn) const;
+ inline void foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &fn) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> gist(const typed::map<pair<T1, T2>, pair<Range, Range2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> gist(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> gist(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> gist_domain(const typed::set<pair<T1, T2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> gist_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> gist_domain(const typed::basic_set<pair<T1, T2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> gist_domain(const typed::point<pair<T1, T2>> &context) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &map2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::set<pair<T1, T2>> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::basic_set<pair<T1, T2>> &set) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::point<pair<T1, T2>> &set) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::basic_set<> ¶ms) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::point<> ¶ms) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::set<pair<Range, Range2>> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::space<pair<Range, Range2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::basic_set<pair<Range, Range2>> &set) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::point<pair<Range, Range2>> &set) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_ge_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_ge_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_ge_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_ge_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_gt_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_gt_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_gt_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_gt_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_le_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_le_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_le_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_le_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_lt_at(const typed::aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_lt_at(const typed::multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_lt_at(const typed::pw_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lex_lt_at(const typed::pw_multi_aff<> &mpa) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lexmax() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> lexmax_pw_multi_aff() const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lexmin() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> lexmin_pw_multi_aff() const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lower_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &lower) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lower_bound(const typed::aff<pair<T1, T2>, pair<Range, Range2>> &lower) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lower_bound(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &lower) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lower_bound(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &lower) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> lower_bound(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &lower) const;
+ inline typed::map_list<pair<T1, T2>, pair<Range, Range2>> map_list() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> max_multi_pw_aff() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> min_multi_pw_aff() const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const;
+ template <typename Domain2>
+ inline typed::map<Domain2, pair<Range, Range2>> preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const;
+ template <typename Arg2>
+ inline typed::map<pair<T1, T2>, Arg2> preimage_range(const typed::multi_aff<Arg2, pair<Range, Range2>> &ma) const;
+ template <typename Arg2>
+ inline typed::map<pair<T1, T2>, Arg2> preimage_range(const typed::pw_multi_aff<Arg2, pair<Range, Range2>> &pma) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, Arg2> preimage_range(const typed::union_pw_multi_aff<Arg2, pair<Range, Range2>> &upma) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::map<Domain2, Arg2> &map2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::union_map<Domain2, Arg2> &umap2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::basic_map<Domain2, Arg2> &map2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> project_out_all_params() const;
+ inline typed::set<pair<Range, Range2>> range() const;
+ inline typed::map<pair<T1, T2>, Range> range_factor_domain() const;
+ inline typed::map<pair<T1, T2>, Range2> range_factor_range() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<Range, Range2>> range_lattice_tile() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<Range, Range2>> get_range_lattice_tile() const = delete;
+ inline typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>> range_map() const;
+ template <typename Arg2>
+ inline typed::map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::map<pair<T1, T2>, Arg2> &map2) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::union_map<pair<T1, T2>, Arg2> &umap2) const;
+ template <typename Arg2>
+ inline typed::map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::basic_map<pair<T1, T2>, Arg2> &map2) const;
+ inline typed::map<pair<T1, T2>, pair<Range2, Range>> range_reverse() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<Range, Range2>> range_simple_fixed_box_hull() const;
+ inline typed::fixed_box<pair<T1, T2>, pair<Range, Range2>> get_range_simple_fixed_box_hull() const = delete;
+ inline typed::id<pair<T1, T2>, pair<Range, Range2>> get_range_tuple_id() const = delete;
+ inline typed::map<pair<Range, Range2>, pair<T1, T2>> reverse() const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> set_domain_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> set_domain_tuple(const std::string &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> space() const;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> get_space() const = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> subtract(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> subtract(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> to_union_map() const;
+ inline typed::map<pair<pair<T1, T2>, Range>, Range2> uncurry() const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> unite(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> unite(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> unite(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &map2) const;
+ static inline typed::map<pair<T1, T2>, pair<Range, Range2>> universe(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space);
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> upper_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upper) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> upper_bound(const typed::aff<pair<T1, T2>, pair<Range, Range2>> &upper) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> upper_bound(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &upper) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> upper_bound(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &upper) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> upper_bound(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upper) const;
+ inline typed::set<pair<pair<T1, T2>, pair<Range, Range2>>> wrap() const;
+};
+
+template <typename Domain, typename Range>
+struct map_list<Domain, Range> : public isl::map_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ map_list() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ map_list(const map_list<Arg1, Arg2> &obj) : isl::map_list(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::map_list>{}, bool>::type = true>
+ map_list(const base &obj) : isl::map_list(obj) {}
+ public:
+ static map_list from(const isl::map_list &obj) {
+ return map_list(obj);
+ }
+ inline explicit map_list(const isl::ctx &ctx, int n);
+ inline explicit map_list(const typed::map<Domain, Range> &el);
+ inline explicit map_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::map_list<Domain, Range> add(const typed::map<Domain, Range> &el) const;
+ inline typed::map_list<Domain, Range> add(const typed::basic_map<Domain, Range> &el) const;
+ inline typed::map<Domain, Range> at(int index) const;
+ inline typed::map<Domain, Range> get_at(int index) const = delete;
+ inline typed::map_list<Domain, Range> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::map<Domain, Range>)> &fn) const;
+};
+
+template <typename Domain>
+struct multi_aff<Domain> : public isl::multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_aff() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ multi_aff(const multi_aff<Arg1> &obj) : isl::multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_aff>{}, bool>::type = true>
+ multi_aff(const base &obj) : isl::multi_aff(obj) {}
+ public:
+ static multi_aff from(const isl::multi_aff &obj) {
+ return multi_aff(obj);
+ }
+ inline /* implicit */ multi_aff(const typed::aff<Domain> &aff);
+ inline explicit multi_aff(const typed::space<Domain> &space, const typed::aff_list<Anonymous> &list);
+ inline explicit multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_aff<Domain> add(const typed::multi_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> add(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain> add(const typed::multi_union_pw_aff<Domain> &multi2) const;
+ inline typed::pw_multi_aff<Domain> add(const typed::pw_multi_aff<Domain> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain> add(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ inline typed::multi_aff<Domain> add(const typed::aff<Domain> &multi2) const;
+ inline typed::multi_aff<Domain> add_constant(const typed::multi_val<Domain> &mv) const;
+ inline typed::multi_aff<Domain> add_constant(const typed::val<Domain> &v) const;
+ inline typed::multi_aff<Domain> add_constant(long v) const;
+ template <typename Range>
+ inline typed::union_pw_multi_aff<Range> apply(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::map<Domain> as_map() const = delete;
+ inline typed::multi_aff<Domain> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<Domain> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain> as_pw_multi_aff() const;
+ inline typed::set<Domain> as_set() const;
+ inline typed::union_map<Domain> as_union_map() const = delete;
+ inline typed::aff<Anonymous> at(int pos) const;
+ inline typed::aff<Domain> get_at(int pos) const = delete;
+ inline typed::basic_set<> bind(const typed::multi_id<Domain> &tuple) const;
+ inline typed::multi_aff<Domain> bind_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::multi_aff<Domain> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::pw_multi_aff<Domain> coalesce() const;
+ inline typed::multi_val<Domain> constant_multi_val() const;
+ inline typed::multi_val<Domain> get_constant_multi_val() const = delete;
+ inline typed::set<> domain() const;
+ inline typed::pw_multi_aff<Domain> extract_pw_multi_aff(const typed::space<Domain> &space) const;
+ inline typed::multi_aff<Domain> floor() const;
+ inline typed::multi_aff<Domain> gist(const typed::set<> &context) const;
+ inline typed::union_pw_multi_aff<Domain> gist(const typed::union_set<> &context) const;
+ inline typed::multi_aff<Domain> gist(const typed::basic_set<> &context) const;
+ inline typed::multi_aff<Domain> gist(const typed::point<> &context) const;
+ inline typed::multi_aff<Domain, Domain> identity() const;
+ template <typename Arg1>
+ inline typed::multi_aff<Arg1, Domain> insert_domain(const typed::space<Arg1> &domain) const;
+ inline typed::pw_multi_aff<Domain> intersect_domain(const typed::set<> &set) const = delete;
+ inline typed::union_pw_multi_aff<Domain> intersect_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_multi_aff<Domain> intersect_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::pw_multi_aff<Domain> intersect_params(const typed::set<> &set) const;
+ inline typed::aff_list<Anonymous> list() const;
+ inline typed::aff_list<Domain> get_list() const = delete;
+ inline typed::multi_pw_aff<Domain> max(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_val<Domain> max_multi_val() const;
+ inline typed::multi_pw_aff<Domain> min(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_val<Domain> min_multi_val() const;
+ inline typed::multi_aff<Domain> neg() const;
+ inline typed::pw_multi_aff<Domain> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ template <typename Range>
+ inline typed::multi_aff<pair<Domain, Range>> product(const typed::multi_aff<Range> &multi2) const;
+ template <typename Range>
+ inline typed::multi_pw_aff<pair<Domain, Range>> product(const typed::multi_pw_aff<Range> &multi2) const;
+ template <typename Range>
+ inline typed::pw_multi_aff<pair<Domain, Range>> product(const typed::pw_multi_aff<Range> &pma2) const;
+ template <typename Range>
+ inline typed::multi_aff<pair<Domain, Range>> product(const typed::aff<Range> &multi2) const;
+ inline typed::multi_aff<Domain> pullback(const typed::multi_aff<> &ma2) const = delete;
+ inline typed::multi_pw_aff<Domain> pullback(const typed::multi_pw_aff<> &mpa2) const = delete;
+ inline typed::pw_multi_aff<Domain> pullback(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> pullback(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::multi_aff<Domain> pullback(const typed::aff<> &ma2) const = delete;
+ inline typed::pw_multi_aff_list<Domain> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<Domain> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<Domain> range_factor_range() const = delete;
+ inline typed::multi_aff<Domain> range_product(const typed::multi_aff<> &multi2) const = delete;
+ inline typed::multi_pw_aff<Domain> range_product(const typed::multi_pw_aff<> &multi2) const = delete;
+ inline typed::multi_union_pw_aff<Domain> range_product(const typed::multi_union_pw_aff<> &multi2) const = delete;
+ inline typed::pw_multi_aff<Domain> range_product(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> range_product(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::multi_aff<Domain> range_product(const typed::aff<> &multi2) const = delete;
+ inline typed::id<Domain> get_range_tuple_id() const = delete;
+ inline typed::multi_aff<Domain> scale(const typed::multi_val<Domain> &mv) const;
+ inline typed::multi_aff<Domain> scale(const typed::val<Domain> &v) const;
+ inline typed::multi_aff<Domain> scale(long v) const;
+ inline typed::multi_aff<Domain> scale_down(const typed::multi_val<Domain> &mv) const;
+ inline typed::multi_aff<Domain> scale_down(const typed::val<Domain> &v) const;
+ inline typed::multi_aff<Domain> scale_down(long v) const;
+ inline typed::multi_aff<Domain> set_at(int pos, const typed::aff<Anonymous> &el) const;
+ inline typed::multi_pw_aff<Domain> set_at(int pos, const typed::pw_aff<Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Domain> set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const;
+ template <typename Domain2>
+ inline typed::multi_aff<Domain2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::multi_aff<Domain2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain> space() const;
+ inline typed::space<Domain> get_space() const = delete;
+ inline typed::multi_aff<Domain> sub(const typed::multi_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> sub(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain> sub(const typed::multi_union_pw_aff<Domain> &multi2) const;
+ inline typed::pw_multi_aff<Domain> sub(const typed::pw_multi_aff<Domain> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain> sub(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ inline typed::multi_aff<Domain> sub(const typed::aff<Domain> &multi2) const;
+ inline typed::pw_multi_aff<Domain> subtract_domain(const typed::set<> &set) const = delete;
+ inline typed::union_pw_multi_aff<Domain> subtract_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_multi_aff<Domain> subtract_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::multi_pw_aff<Domain> to_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<Domain> to_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain> to_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<Domain> to_union_pw_multi_aff() const;
+ template <typename Arg1>
+ inline typed::multi_aff<Arg1, Domain> unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const;
+ inline typed::multi_pw_aff<Domain> union_add(const typed::multi_pw_aff<Domain> &mpa2) const;
+ inline typed::multi_union_pw_aff<Domain> union_add(const typed::multi_union_pw_aff<Domain> &mupa2) const;
+ inline typed::pw_multi_aff<Domain> union_add(const typed::pw_multi_aff<Domain> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain> union_add(const typed::union_pw_multi_aff<Domain> &upma2) const;
+};
+
+template <typename Domain, typename Range>
+struct multi_aff<Domain, Range> : public isl::multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_aff() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ multi_aff(const multi_aff<Arg1, Arg2> &obj) : isl::multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_aff>{}, bool>::type = true>
+ multi_aff(const base &obj) : isl::multi_aff(obj) {}
+ public:
+ static multi_aff from(const isl::multi_aff &obj) {
+ return multi_aff(obj);
+ }
+ inline /* implicit */ multi_aff(const typed::aff<Domain, Range> &aff);
+ inline explicit multi_aff(const typed::space<Domain, Range> &space, const typed::aff_list<Domain, Anonymous> &list);
+ inline explicit multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_aff<Domain, Range> add(const typed::multi_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> add(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> add(const typed::multi_union_pw_aff<Domain, Range> &multi2) const;
+ inline typed::pw_multi_aff<Domain, Range> add(const typed::pw_multi_aff<Domain, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::multi_aff<Domain, Range> add(const typed::aff<Domain, Range> &multi2) const;
+ inline typed::multi_aff<Domain, Range> add_constant(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_aff<Domain, Range> add_constant(const typed::val<Range> &v) const;
+ inline typed::multi_aff<Domain, Range> add_constant(long v) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, Range2> apply(const typed::union_pw_multi_aff<Range, Range2> &upma2) const;
+ inline typed::map<Domain, Range> as_map() const;
+ inline typed::multi_aff<Domain, Range> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<Domain, Range> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Range> as_pw_multi_aff() const;
+ inline typed::set<Domain, Range> as_set() const = delete;
+ inline typed::union_map<Domain, Range> as_union_map() const;
+ inline typed::aff<Domain, Anonymous> at(int pos) const;
+ inline typed::aff<Domain, Range> get_at(int pos) const = delete;
+ inline typed::basic_set<Domain> bind(const typed::multi_id<Range> &tuple) const;
+ inline typed::multi_aff<Range> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::multi_aff<Domain, Range> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::pw_multi_aff<Domain, Range> coalesce() const;
+ inline typed::multi_val<Range> constant_multi_val() const;
+ inline typed::multi_val<Domain, Range> get_constant_multi_val() const = delete;
+ inline typed::set<Domain> domain() const;
+ inline typed::pw_multi_aff<Domain, Range> extract_pw_multi_aff(const typed::space<Domain, Range> &space) const;
+ inline typed::multi_aff<Domain, Range> floor() const;
+ inline typed::multi_aff<Domain, Range> gist(const typed::set<Domain> &context) const;
+ inline typed::union_pw_multi_aff<Domain, Range> gist(const typed::union_set<Domain> &context) const;
+ inline typed::multi_aff<Domain, Range> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::multi_aff<Domain, Range> gist(const typed::point<Domain> &context) const;
+ inline typed::multi_aff<Domain, Range> identity() const;
+ inline typed::multi_aff<Domain, Range> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_multi_aff<Domain, Range> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_multi_aff<Domain, Range> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, Range> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::pw_multi_aff<Domain, Range> intersect_params(const typed::set<> &set) const;
+ inline typed::aff_list<Domain, Anonymous> list() const;
+ inline typed::aff_list<Domain, Range> get_list() const = delete;
+ inline typed::multi_pw_aff<Domain, Range> max(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_val<Range> max_multi_val() const;
+ inline typed::multi_pw_aff<Domain, Range> min(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_val<Range> min_multi_val() const;
+ inline typed::multi_aff<Domain, Range> neg() const;
+ inline typed::pw_multi_aff<Domain, Range> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, Range> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::multi_aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::multi_pw_aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::pw_multi_aff<Domain2, Range2> &pma2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2>
+ inline typed::multi_aff<Domain2, Range> pullback(const typed::multi_aff<Domain2, Domain> &ma2) const;
+ inline typed::multi_aff<Range> pullback(const typed::multi_aff<Domain> &ma2) const;
+ template <typename Domain2>
+ inline typed::multi_pw_aff<Domain2, Range> pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa2) const;
+ inline typed::multi_pw_aff<Range> pullback(const typed::multi_pw_aff<Domain> &mpa2) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2, Range> pullback(const typed::pw_multi_aff<Domain2, Domain> &pma2) const;
+ inline typed::pw_multi_aff<Range> pullback(const typed::pw_multi_aff<Domain> &pma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, Range> pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ template <typename Domain2>
+ inline typed::multi_aff<Domain2, Range> pullback(const typed::aff<Domain2, Domain> &ma2) const;
+ inline typed::multi_aff<Range> pullback(const typed::aff<Domain> &ma2) const;
+ inline typed::pw_multi_aff_list<Domain, Range> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<Domain, Range> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<Domain, Range> range_factor_range() const = delete;
+ template <typename Range2>
+ inline typed::multi_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> range_product(const typed::pw_multi_aff<Domain, Range2> &pma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::multi_aff<Domain, pair<Range, Range2>> range_product(const typed::aff<Domain, Range2> &multi2) const;
+ inline typed::id<Domain, Range> get_range_tuple_id() const = delete;
+ inline typed::multi_aff<Domain, Range> scale(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_aff<Domain, Range> scale(const typed::val<Range> &v) const;
+ inline typed::multi_aff<Domain, Range> scale(long v) const;
+ inline typed::multi_aff<Domain, Range> scale_down(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_aff<Domain, Range> scale_down(const typed::val<Range> &v) const;
+ inline typed::multi_aff<Domain, Range> scale_down(long v) const;
+ inline typed::multi_aff<Domain, Range> set_at(int pos, const typed::aff<Domain, Anonymous> &el) const;
+ inline typed::multi_pw_aff<Domain, Range> set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Domain, Range> set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const;
+ template <typename Range2>
+ inline typed::multi_aff<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::multi_aff<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain, Range> space() const;
+ inline typed::space<Domain, Range> get_space() const = delete;
+ inline typed::multi_aff<Domain, Range> sub(const typed::multi_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> sub(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> sub(const typed::multi_union_pw_aff<Domain, Range> &multi2) const;
+ inline typed::pw_multi_aff<Domain, Range> sub(const typed::pw_multi_aff<Domain, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> sub(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::multi_aff<Domain, Range> sub(const typed::aff<Domain, Range> &multi2) const;
+ inline typed::pw_multi_aff<Domain, Range> subtract_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_multi_aff<Domain, Range> subtract_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, Range> subtract_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::multi_pw_aff<Domain, Range> to_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<Domain, Range> to_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Range> to_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<Domain, Range> to_union_pw_multi_aff() const;
+ inline typed::multi_aff<Domain, Range> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<Domain, Range> union_add(const typed::multi_pw_aff<Domain, Range> &mpa2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> union_add(const typed::multi_union_pw_aff<Domain, Range> &mupa2) const;
+ inline typed::pw_multi_aff<Domain, Range> union_add(const typed::pw_multi_aff<Domain, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> union_add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+};
+
+template <typename Domain2, typename Range2, typename Range>
+struct multi_aff<pair<Domain2, Range2>, Range> : public isl::multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_aff() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain2, Arg1>{} &&
+ std::is_base_of<Range2, Arg2>{} &&
+ std::is_base_of<Range, Arg3>{},
+ bool>::type = true>
+ multi_aff(const multi_aff<pair<Arg1, Arg2>, Arg3> &obj) : isl::multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_aff>{}, bool>::type = true>
+ multi_aff(const base &obj) : isl::multi_aff(obj) {}
+ public:
+ static multi_aff from(const isl::multi_aff &obj) {
+ return multi_aff(obj);
+ }
+ inline /* implicit */ multi_aff(const typed::aff<pair<Domain2, Range2>, Range> &aff);
+ inline explicit multi_aff(const typed::space<pair<Domain2, Range2>, Range> &space, const typed::aff_list<pair<Domain2, Range2>, Anonymous> &list);
+ inline explicit multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> add(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> add(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> add_constant(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> add_constant(const typed::val<Range> &v) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> add_constant(long v) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg2> apply(const typed::union_pw_multi_aff<Range, Arg2> &upma2) const;
+ inline typed::map<pair<Domain2, Range2>, Range> as_map() const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> as_pw_multi_aff() const;
+ inline typed::set<pair<Domain2, Range2>, Range> as_set() const = delete;
+ inline typed::union_map<pair<Domain2, Range2>, Range> as_union_map() const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> at(int pos) const;
+ inline typed::aff<pair<Domain2, Range2>, Range> get_at(int pos) const = delete;
+ inline typed::basic_set<pair<Domain2, Range2>> bind(const typed::multi_id<Range> &tuple) const;
+ inline typed::multi_aff<Range> bind_domain(const typed::multi_id<pair<Domain2, Range2>> &tuple) const;
+ inline typed::multi_aff<Range2, Range> bind_domain_wrapped_domain(const typed::multi_id<Domain2> &tuple) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> coalesce() const;
+ inline typed::multi_val<Range> constant_multi_val() const;
+ inline typed::multi_val<pair<Domain2, Range2>, Range> get_constant_multi_val() const = delete;
+ inline typed::set<pair<Domain2, Range2>> domain() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> extract_pw_multi_aff(const typed::space<pair<Domain2, Range2>, Range> &space) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> floor() const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> gist(const typed::set<pair<Domain2, Range2>> &context) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> gist(const typed::union_set<pair<Domain2, Range2>> &context) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> gist(const typed::basic_set<pair<Domain2, Range2>> &context) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> gist(const typed::point<pair<Domain2, Range2>> &context) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> identity() const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::set<pair<Domain2, Range2>> &set) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::space<pair<Domain2, Range2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> intersect_params(const typed::set<> &set) const;
+ inline typed::aff_list<pair<Domain2, Range2>, Anonymous> list() const;
+ inline typed::aff_list<pair<Domain2, Range2>, Range> get_list() const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> max(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_val<Range> max_multi_val() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> min(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_val<Range> min_multi_val() const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> neg() const;
+ template <typename Domain3>
+ inline typed::pw_multi_aff<pair<Domain3, Range2>, Range> preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, Domain2> &pma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, Range2>, Range> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain2> &upma2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::multi_aff<Arg2, Arg3> &multi2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::multi_pw_aff<Arg2, Arg3> &multi2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::pw_multi_aff<Arg2, Arg3> &pma2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::aff<Arg2, Arg3> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_aff<Arg2, Range> pullback(const typed::multi_aff<Arg2, pair<Domain2, Range2>> &ma2) const;
+ inline typed::multi_aff<Range> pullback(const typed::multi_aff<pair<Domain2, Range2>> &ma2) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<Arg2, Range> pullback(const typed::multi_pw_aff<Arg2, pair<Domain2, Range2>> &mpa2) const;
+ inline typed::multi_pw_aff<Range> pullback(const typed::multi_pw_aff<pair<Domain2, Range2>> &mpa2) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<Arg2, Range> pullback(const typed::pw_multi_aff<Arg2, pair<Domain2, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<Range> pullback(const typed::pw_multi_aff<pair<Domain2, Range2>> &pma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<Arg2, Range> pullback(const typed::union_pw_multi_aff<Arg2, pair<Domain2, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::union_pw_multi_aff<pair<Domain2, Range2>> &upma2) const;
+ template <typename Arg2>
+ inline typed::multi_aff<Arg2, Range> pullback(const typed::aff<Arg2, pair<Domain2, Range2>> &ma2) const;
+ inline typed::multi_aff<Range> pullback(const typed::aff<pair<Domain2, Range2>> &ma2) const;
+ inline typed::pw_multi_aff_list<pair<Domain2, Range2>, Range> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> range_factor_range() const = delete;
+ template <typename Arg2>
+ inline typed::multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::multi_aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::multi_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::pw_multi_aff<pair<Domain2, Range2>, Arg2> &pma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg2> &upma2) const;
+ template <typename Arg2>
+ inline typed::multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ inline typed::id<pair<Domain2, Range2>, Range> get_range_tuple_id() const = delete;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> scale(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> scale(const typed::val<Range> &v) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> scale(long v) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> scale_down(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> scale_down(const typed::val<Range> &v) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> scale_down(long v) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> set_at(int pos, const typed::aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> set_at(int pos, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> set_at(int pos, const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ template <typename Arg1>
+ inline typed::multi_aff<pair<Domain2, Range2>, Arg1> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Arg1>
+ inline typed::multi_aff<pair<Domain2, Range2>, Arg1> set_range_tuple(const std::string &id) const;
+ inline typed::space<pair<Domain2, Range2>, Range> space() const;
+ inline typed::space<pair<Domain2, Range2>, Range> get_space() const = delete;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> sub(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> sub(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> sub(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> sub(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> sub(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> sub(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> subtract_domain(const typed::set<pair<Domain2, Range2>> &set) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> subtract_domain(const typed::space<pair<Domain2, Range2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> subtract_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> to_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> to_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> to_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> to_union_pw_multi_aff() const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> union_add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &mpa2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> union_add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &mupa2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> union_add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> union_add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const;
+};
+
+template <typename Domain, typename Range, typename Range2>
+struct multi_aff<Domain, pair<Range, Range2>> : public isl::multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_aff() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{} &&
+ std::is_base_of<Range2, Arg3>{},
+ bool>::type = true>
+ multi_aff(const multi_aff<Arg1, pair<Arg2, Arg3>> &obj) : isl::multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_aff>{}, bool>::type = true>
+ multi_aff(const base &obj) : isl::multi_aff(obj) {}
+ public:
+ static multi_aff from(const isl::multi_aff &obj) {
+ return multi_aff(obj);
+ }
+ inline /* implicit */ multi_aff(const typed::aff<Domain, pair<Range, Range2>> &aff);
+ inline explicit multi_aff(const typed::space<Domain, pair<Range, Range2>> &space, const typed::aff_list<Domain, Anonymous> &list);
+ inline explicit multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_aff<Domain, pair<Range, Range2>> add(const typed::multi_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> add(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> add(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> add(const typed::aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> add_constant(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> add_constant(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> add_constant(long v) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, Arg3> apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg3> &upma2) const;
+ inline typed::map<Domain, pair<Range, Range2>> as_map() const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> as_pw_multi_aff() const;
+ inline typed::set<Domain, pair<Range, Range2>> as_set() const = delete;
+ inline typed::union_map<Domain, pair<Range, Range2>> as_union_map() const;
+ inline typed::aff<Domain, Anonymous> at(int pos) const;
+ inline typed::aff<Domain, pair<Range, Range2>> get_at(int pos) const = delete;
+ inline typed::basic_set<Domain> bind(const typed::multi_id<pair<Range, Range2>> &tuple) const;
+ inline typed::multi_aff<pair<Range, Range2>> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> coalesce() const;
+ inline typed::multi_val<pair<Range, Range2>> constant_multi_val() const;
+ inline typed::multi_val<Domain, pair<Range, Range2>> get_constant_multi_val() const = delete;
+ inline typed::set<Domain> domain() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> extract_pw_multi_aff(const typed::space<Domain, pair<Range, Range2>> &space) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> floor() const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> gist(const typed::set<Domain> &context) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> gist(const typed::union_set<Domain> &context) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> gist(const typed::point<Domain> &context) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> identity() const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> intersect_params(const typed::set<> &set) const;
+ inline typed::aff_list<Domain, Anonymous> list() const;
+ inline typed::aff_list<Domain, pair<Range, Range2>> get_list() const = delete;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> max(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_val<pair<Range, Range2>> max_multi_val() const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> min(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_val<pair<Range, Range2>> min_multi_val() const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> neg() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ template <typename Domain2, typename Arg3>
+ inline typed::multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::multi_aff<Domain2, Arg3> &multi2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::multi_pw_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::multi_pw_aff<Domain2, Arg3> &multi2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::pw_multi_aff<Domain2, Arg3> &pma2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::aff<Domain2, Arg3> &multi2) const;
+ template <typename Domain2>
+ inline typed::multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::multi_aff<Domain2, Domain> &ma2) const;
+ inline typed::multi_aff<pair<Range, Range2>> pullback(const typed::multi_aff<Domain> &ma2) const;
+ template <typename Domain2>
+ inline typed::multi_pw_aff<Domain2, pair<Range, Range2>> pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa2) const;
+ inline typed::multi_pw_aff<pair<Range, Range2>> pullback(const typed::multi_pw_aff<Domain> &mpa2) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::pw_multi_aff<Domain2, Domain> &pma2) const;
+ inline typed::pw_multi_aff<pair<Range, Range2>> pullback(const typed::pw_multi_aff<Domain> &pma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ template <typename Domain2>
+ inline typed::multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::aff<Domain2, Domain> &ma2) const;
+ inline typed::multi_aff<pair<Range, Range2>> pullback(const typed::aff<Domain> &ma2) const;
+ inline typed::pw_multi_aff_list<Domain, pair<Range, Range2>> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<Domain, Range> range_factor_domain() const;
+ inline typed::pw_multi_aff<Domain, Range2> range_factor_range() const;
+ template <typename Arg3>
+ inline typed::multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::multi_aff<Domain, Arg3> &multi2) const;
+ template <typename Arg3>
+ inline typed::multi_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::multi_pw_aff<Domain, Arg3> &multi2) const;
+ template <typename Arg3>
+ inline typed::multi_union_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::multi_union_pw_aff<Domain, Arg3> &multi2) const;
+ template <typename Arg3>
+ inline typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::pw_multi_aff<Domain, Arg3> &pma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::union_pw_multi_aff<Domain, Arg3> &upma2) const;
+ template <typename Arg3>
+ inline typed::multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::aff<Domain, Arg3> &multi2) const;
+ inline typed::id<Domain, pair<Range, Range2>> get_range_tuple_id() const = delete;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> scale(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> scale(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> scale(long v) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> scale_down(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> scale_down(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> scale_down(long v) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> set_at(int pos, const typed::aff<Domain, Anonymous> &el) const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> space() const;
+ inline typed::space<Domain, pair<Range, Range2>> get_space() const = delete;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> sub(const typed::multi_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> sub(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> sub(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> sub(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> sub(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> sub(const typed::aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> subtract_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> subtract_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> subtract_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> to_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> to_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> to_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> to_union_pw_multi_aff() const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> union_add(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &mpa2) const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> union_add(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &mupa2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> union_add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> union_add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+};
+
+template <typename T1, typename T2, typename Range, typename Range2>
+struct multi_aff<pair<T1, T2>, pair<Range, Range2>> : public isl::multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_aff() = default;
+ template <typename Arg1, typename Arg2, typename Arg3, typename Arg4,
+ typename std::enable_if<
+ std::is_base_of<T1, Arg1>{} &&
+ std::is_base_of<T2, Arg2>{} &&
+ std::is_base_of<Range, Arg3>{} &&
+ std::is_base_of<Range2, Arg4>{},
+ bool>::type = true>
+ multi_aff(const multi_aff<pair<Arg1, Arg2>, pair<Arg3, Arg4>> &obj) : isl::multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_aff>{}, bool>::type = true>
+ multi_aff(const base &obj) : isl::multi_aff(obj) {}
+ public:
+ static multi_aff from(const isl::multi_aff &obj) {
+ return multi_aff(obj);
+ }
+ inline /* implicit */ multi_aff(const typed::aff<pair<T1, T2>, pair<Range, Range2>> &aff);
+ inline explicit multi_aff(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space, const typed::aff_list<pair<T1, T2>, Anonymous> &list);
+ inline explicit multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> add_constant(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> add_constant(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> add_constant(long v) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, Arg2> apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg2> &upma2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> as_map() const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> as_pw_multi_aff() const;
+ inline typed::set<pair<T1, T2>, pair<Range, Range2>> as_set() const = delete;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> as_union_map() const;
+ inline typed::aff<pair<T1, T2>, Anonymous> at(int pos) const;
+ inline typed::aff<pair<T1, T2>, pair<Range, Range2>> get_at(int pos) const = delete;
+ inline typed::basic_set<pair<T1, T2>> bind(const typed::multi_id<pair<Range, Range2>> &tuple) const;
+ inline typed::multi_aff<pair<Range, Range2>> bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const;
+ inline typed::multi_aff<T2, pair<Range, Range2>> bind_domain_wrapped_domain(const typed::multi_id<T1> &tuple) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> coalesce() const;
+ inline typed::multi_val<pair<Range, Range2>> constant_multi_val() const;
+ inline typed::multi_val<pair<T1, T2>, pair<Range, Range2>> get_constant_multi_val() const = delete;
+ inline typed::set<pair<T1, T2>> domain() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> extract_pw_multi_aff(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> floor() const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::set<pair<T1, T2>> &context) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::union_set<pair<T1, T2>> &context) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::basic_set<pair<T1, T2>> &context) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::point<pair<T1, T2>> &context) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> identity() const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::set<pair<T1, T2>> &set) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::set<> &set) const;
+ inline typed::aff_list<pair<T1, T2>, Anonymous> list() const;
+ inline typed::aff_list<pair<T1, T2>, pair<Range, Range2>> get_list() const = delete;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> max(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_val<pair<Range, Range2>> max_multi_val() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> min(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_val<pair<Range, Range2>> min_multi_val() const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> neg() const;
+ template <typename Domain3>
+ inline typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, T1> &pma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, T1> &upma2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::multi_aff<Domain2, Arg2> &multi2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::multi_pw_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::multi_pw_aff<Domain2, Arg2> &multi2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::pw_multi_aff<Domain2, Arg2> &pma2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::aff<Domain2, Arg2> &multi2) const;
+ template <typename Domain2>
+ inline typed::multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::multi_aff<Domain2, pair<T1, T2>> &ma2) const;
+ inline typed::multi_aff<pair<Range, Range2>> pullback(const typed::multi_aff<pair<T1, T2>> &ma2) const;
+ template <typename Domain2>
+ inline typed::multi_pw_aff<Domain2, pair<Range, Range2>> pullback(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa2) const;
+ inline typed::multi_pw_aff<pair<Range, Range2>> pullback(const typed::multi_pw_aff<pair<T1, T2>> &mpa2) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma2) const;
+ inline typed::pw_multi_aff<pair<Range, Range2>> pullback(const typed::pw_multi_aff<pair<T1, T2>> &pma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<pair<T1, T2>> &upma2) const;
+ template <typename Domain2>
+ inline typed::multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::aff<Domain2, pair<T1, T2>> &ma2) const;
+ inline typed::multi_aff<pair<Range, Range2>> pullback(const typed::aff<pair<T1, T2>> &ma2) const;
+ inline typed::pw_multi_aff_list<pair<T1, T2>, pair<Range, Range2>> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, Range> range_factor_domain() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, Range2> range_factor_range() const;
+ template <typename Arg2>
+ inline typed::multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::multi_aff<pair<T1, T2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::multi_pw_aff<pair<T1, T2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::multi_union_pw_aff<pair<T1, T2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::pw_multi_aff<pair<T1, T2>, Arg2> &pma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::union_pw_multi_aff<pair<T1, T2>, Arg2> &upma2) const;
+ template <typename Arg2>
+ inline typed::multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::aff<pair<T1, T2>, Arg2> &multi2) const;
+ inline typed::id<pair<T1, T2>, pair<Range, Range2>> get_range_tuple_id() const = delete;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> scale(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> scale(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> scale(long v) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> scale_down(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> scale_down(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> scale_down(long v) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> set_at(int pos, const typed::aff<pair<T1, T2>, Anonymous> &el) const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> set_at(int pos, const typed::pw_aff<pair<T1, T2>, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> set_at(int pos, const typed::union_pw_aff<pair<T1, T2>, Anonymous> &el) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> space() const;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> get_space() const = delete;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::set<pair<T1, T2>> &set) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> to_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> to_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> to_pw_multi_aff() const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> to_union_pw_multi_aff() const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &mpa2) const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &mupa2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+};
+
+template <typename Domain>
+struct multi_id<Domain> : public isl::multi_id {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_id() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ multi_id(const multi_id<Arg1> &obj) : isl::multi_id(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_id>{}, bool>::type = true>
+ multi_id(const base &obj) : isl::multi_id(obj) {}
+ public:
+ static multi_id from(const isl::multi_id &obj) {
+ return multi_id(obj);
+ }
+ inline explicit multi_id(const typed::space<Domain> &space, const typed::id_list<Anonymous> &list);
+ inline explicit multi_id(const isl::ctx &ctx, const std::string &str);
+ inline typed::id<Anonymous> at(int pos) const;
+ inline typed::id<Domain> get_at(int pos) const = delete;
+ inline typed::id_list<Anonymous> list() const;
+ inline typed::id_list<Domain> get_list() const = delete;
+ inline typed::multi_id<Domain> range_product(const typed::multi_id<> &multi2) const = delete;
+ inline typed::multi_id<Domain> set_at(int pos, const typed::id<Anonymous> &el) const;
+ inline typed::multi_id<Domain> set_at(int pos, const std::string &el) const;
+ inline typed::space<Domain> space() const;
+ inline typed::space<Domain> get_space() const = delete;
+};
+
+template <typename Domain>
+struct multi_pw_aff<Domain> : public isl::multi_pw_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_pw_aff() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ multi_pw_aff(const multi_pw_aff<Arg1> &obj) : isl::multi_pw_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_pw_aff>{}, bool>::type = true>
+ multi_pw_aff(const base &obj) : isl::multi_pw_aff(obj) {}
+ public:
+ static multi_pw_aff from(const isl::multi_pw_aff &obj) {
+ return multi_pw_aff(obj);
+ }
+ inline /* implicit */ multi_pw_aff(const typed::aff<Domain> &aff);
+ inline /* implicit */ multi_pw_aff(const typed::multi_aff<Domain> &ma);
+ inline /* implicit */ multi_pw_aff(const typed::pw_aff<Domain> &pa);
+ inline explicit multi_pw_aff(const typed::space<Domain> &space, const typed::pw_aff_list<Anonymous> &list);
+ inline /* implicit */ multi_pw_aff(const typed::pw_multi_aff<Domain> &pma);
+ inline explicit multi_pw_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_pw_aff<Domain> add(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain> add(const typed::multi_union_pw_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> add(const typed::aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> add(const typed::multi_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> add(const typed::pw_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> add(const typed::pw_multi_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> add_constant(const typed::multi_val<Domain> &mv) const;
+ inline typed::multi_pw_aff<Domain> add_constant(const typed::val<Domain> &v) const;
+ inline typed::multi_pw_aff<Domain> add_constant(long v) const;
+ inline typed::map<Domain> as_map() const = delete;
+ inline typed::multi_aff<Domain> as_multi_aff() const;
+ inline typed::set<Domain> as_set() const;
+ inline typed::pw_aff<Anonymous> at(int pos) const;
+ inline typed::pw_aff<Domain> get_at(int pos) const = delete;
+ inline typed::set<> bind(const typed::multi_id<Domain> &tuple) const;
+ inline typed::multi_pw_aff<Domain> bind_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::multi_pw_aff<Domain> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::multi_pw_aff<Domain> coalesce() const;
+ inline typed::set<> domain() const;
+ inline typed::multi_pw_aff<Domain> gist(const typed::set<> &set) const;
+ inline typed::multi_union_pw_aff<Domain> gist(const typed::union_set<> &context) const;
+ inline typed::multi_pw_aff<Domain> gist(const typed::basic_set<> &set) const;
+ inline typed::multi_pw_aff<Domain> gist(const typed::point<> &set) const;
+ inline typed::multi_pw_aff<Domain, Domain> identity() const;
+ template <typename Arg1>
+ inline typed::multi_pw_aff<Arg1, Domain> insert_domain(const typed::space<Arg1> &domain) const;
+ inline typed::multi_pw_aff<Domain> intersect_domain(const typed::set<> &domain) const = delete;
+ inline typed::multi_union_pw_aff<Domain> intersect_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::multi_pw_aff<Domain> intersect_domain(const typed::basic_set<> &domain) const = delete;
+ inline typed::multi_pw_aff<Domain> intersect_domain(const typed::point<> &domain) const = delete;
+ inline typed::multi_pw_aff<Domain> intersect_params(const typed::set<> &set) const;
+ inline typed::multi_pw_aff<Domain> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::multi_pw_aff<Domain> intersect_params(const typed::point<> &set) const;
+ inline typed::pw_aff_list<Anonymous> list() const;
+ inline typed::pw_aff_list<Domain> get_list() const = delete;
+ inline typed::multi_pw_aff<Domain> max(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> max(const typed::aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> max(const typed::multi_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> max(const typed::pw_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> max(const typed::pw_multi_aff<Domain> &multi2) const;
+ inline typed::multi_val<Domain> max_multi_val() const;
+ inline typed::multi_pw_aff<Domain> min(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> min(const typed::aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> min(const typed::multi_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> min(const typed::pw_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> min(const typed::pw_multi_aff<Domain> &multi2) const;
+ inline typed::multi_val<Domain> min_multi_val() const;
+ inline typed::multi_pw_aff<Domain> neg() const;
+ template <typename Range>
+ inline typed::multi_pw_aff<pair<Domain, Range>> product(const typed::multi_pw_aff<Range> &multi2) const;
+ template <typename Range>
+ inline typed::multi_pw_aff<pair<Domain, Range>> product(const typed::aff<Range> &multi2) const;
+ template <typename Range>
+ inline typed::multi_pw_aff<pair<Domain, Range>> product(const typed::multi_aff<Range> &multi2) const;
+ template <typename Range>
+ inline typed::multi_pw_aff<pair<Domain, Range>> product(const typed::pw_aff<Range> &multi2) const;
+ template <typename Range>
+ inline typed::multi_pw_aff<pair<Domain, Range>> product(const typed::pw_multi_aff<Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain> pullback(const typed::multi_aff<> &ma) const = delete;
+ inline typed::multi_pw_aff<Domain> pullback(const typed::multi_pw_aff<> &mpa2) const = delete;
+ inline typed::multi_pw_aff<Domain> pullback(const typed::pw_multi_aff<> &pma) const = delete;
+ inline typed::multi_union_pw_aff<Domain> pullback(const typed::union_pw_multi_aff<> &upma) const = delete;
+ inline typed::multi_pw_aff<Domain> range_product(const typed::multi_pw_aff<> &multi2) const = delete;
+ inline typed::multi_union_pw_aff<Domain> range_product(const typed::multi_union_pw_aff<> &multi2) const = delete;
+ inline typed::multi_pw_aff<Domain> range_product(const typed::aff<> &multi2) const = delete;
+ inline typed::multi_pw_aff<Domain> range_product(const typed::multi_aff<> &multi2) const = delete;
+ inline typed::multi_pw_aff<Domain> range_product(const typed::pw_aff<> &multi2) const = delete;
+ inline typed::multi_pw_aff<Domain> range_product(const typed::pw_multi_aff<> &multi2) const = delete;
+ inline typed::id<Domain> get_range_tuple_id() const = delete;
+ inline typed::multi_pw_aff<Domain> scale(const typed::multi_val<Domain> &mv) const;
+ inline typed::multi_pw_aff<Domain> scale(const typed::val<Domain> &v) const;
+ inline typed::multi_pw_aff<Domain> scale(long v) const;
+ inline typed::multi_pw_aff<Domain> scale_down(const typed::multi_val<Domain> &mv) const;
+ inline typed::multi_pw_aff<Domain> scale_down(const typed::val<Domain> &v) const;
+ inline typed::multi_pw_aff<Domain> scale_down(long v) const;
+ inline typed::multi_pw_aff<Domain> set_at(int pos, const typed::pw_aff<Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Domain> set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const;
+ template <typename Domain2>
+ inline typed::multi_pw_aff<Domain2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::multi_pw_aff<Domain2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain> space() const;
+ inline typed::space<Domain> get_space() const = delete;
+ inline typed::multi_pw_aff<Domain> sub(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain> sub(const typed::multi_union_pw_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> sub(const typed::aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> sub(const typed::multi_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> sub(const typed::pw_aff<Domain> &multi2) const;
+ inline typed::multi_pw_aff<Domain> sub(const typed::pw_multi_aff<Domain> &multi2) const;
+ template <typename Arg1>
+ inline typed::multi_pw_aff<Arg1, Domain> unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const;
+ inline typed::multi_pw_aff<Domain> union_add(const typed::multi_pw_aff<Domain> &mpa2) const;
+ inline typed::multi_union_pw_aff<Domain> union_add(const typed::multi_union_pw_aff<Domain> &mupa2) const;
+ inline typed::multi_pw_aff<Domain> union_add(const typed::aff<Domain> &mpa2) const;
+ inline typed::multi_pw_aff<Domain> union_add(const typed::multi_aff<Domain> &mpa2) const;
+ inline typed::multi_pw_aff<Domain> union_add(const typed::pw_aff<Domain> &mpa2) const;
+ inline typed::multi_pw_aff<Domain> union_add(const typed::pw_multi_aff<Domain> &mpa2) const;
+};
+
+template <typename Domain, typename Range>
+struct multi_pw_aff<Domain, Range> : public isl::multi_pw_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_pw_aff() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ multi_pw_aff(const multi_pw_aff<Arg1, Arg2> &obj) : isl::multi_pw_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_pw_aff>{}, bool>::type = true>
+ multi_pw_aff(const base &obj) : isl::multi_pw_aff(obj) {}
+ public:
+ static multi_pw_aff from(const isl::multi_pw_aff &obj) {
+ return multi_pw_aff(obj);
+ }
+ inline /* implicit */ multi_pw_aff(const typed::aff<Domain, Range> &aff);
+ inline /* implicit */ multi_pw_aff(const typed::multi_aff<Domain, Range> &ma);
+ inline /* implicit */ multi_pw_aff(const typed::pw_aff<Domain, Range> &pa);
+ inline explicit multi_pw_aff(const typed::space<Domain, Range> &space, const typed::pw_aff_list<Domain, Anonymous> &list);
+ inline /* implicit */ multi_pw_aff(const typed::pw_multi_aff<Domain, Range> &pma);
+ inline explicit multi_pw_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_pw_aff<Domain, Range> add(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> add(const typed::multi_union_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> add(const typed::aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> add(const typed::multi_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> add(const typed::pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> add(const typed::pw_multi_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> add_constant(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_pw_aff<Domain, Range> add_constant(const typed::val<Range> &v) const;
+ inline typed::multi_pw_aff<Domain, Range> add_constant(long v) const;
+ inline typed::map<Domain, Range> as_map() const;
+ inline typed::multi_aff<Domain, Range> as_multi_aff() const;
+ inline typed::set<Domain, Range> as_set() const = delete;
+ inline typed::pw_aff<Domain, Anonymous> at(int pos) const;
+ inline typed::pw_aff<Domain, Range> get_at(int pos) const = delete;
+ inline typed::set<Domain> bind(const typed::multi_id<Range> &tuple) const;
+ inline typed::multi_pw_aff<Range> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::multi_pw_aff<Domain, Range> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::multi_pw_aff<Domain, Range> coalesce() const;
+ inline typed::set<Domain> domain() const;
+ inline typed::multi_pw_aff<Domain, Range> gist(const typed::set<Domain> &set) const;
+ inline typed::multi_union_pw_aff<Domain, Range> gist(const typed::union_set<Domain> &context) const;
+ inline typed::multi_pw_aff<Domain, Range> gist(const typed::basic_set<Domain> &set) const;
+ inline typed::multi_pw_aff<Domain, Range> gist(const typed::point<Domain> &set) const;
+ inline typed::multi_pw_aff<Domain, Range> identity() const;
+ inline typed::multi_pw_aff<Domain, Range> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::multi_pw_aff<Domain, Range> intersect_domain(const typed::set<Domain> &domain) const;
+ inline typed::multi_union_pw_aff<Domain, Range> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::multi_pw_aff<Domain, Range> intersect_domain(const typed::basic_set<Domain> &domain) const;
+ inline typed::multi_pw_aff<Domain, Range> intersect_domain(const typed::point<Domain> &domain) const;
+ inline typed::multi_pw_aff<Domain, Range> intersect_params(const typed::set<> &set) const;
+ inline typed::multi_pw_aff<Domain, Range> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::multi_pw_aff<Domain, Range> intersect_params(const typed::point<> &set) const;
+ inline typed::pw_aff_list<Domain, Anonymous> list() const;
+ inline typed::pw_aff_list<Domain, Range> get_list() const = delete;
+ inline typed::multi_pw_aff<Domain, Range> max(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> max(const typed::aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> max(const typed::multi_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> max(const typed::pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> max(const typed::pw_multi_aff<Domain, Range> &multi2) const;
+ inline typed::multi_val<Range> max_multi_val() const;
+ inline typed::multi_pw_aff<Domain, Range> min(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> min(const typed::aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> min(const typed::multi_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> min(const typed::pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> min(const typed::pw_multi_aff<Domain, Range> &multi2) const;
+ inline typed::multi_val<Range> min_multi_val() const;
+ inline typed::multi_pw_aff<Domain, Range> neg() const;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::multi_pw_aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::multi_aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::pw_aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::pw_multi_aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2>
+ inline typed::multi_pw_aff<Domain2, Range> pullback(const typed::multi_aff<Domain2, Domain> &ma) const;
+ inline typed::multi_pw_aff<Range> pullback(const typed::multi_aff<Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::multi_pw_aff<Domain2, Range> pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa2) const;
+ inline typed::multi_pw_aff<Range> pullback(const typed::multi_pw_aff<Domain> &mpa2) const;
+ template <typename Domain2>
+ inline typed::multi_pw_aff<Domain2, Range> pullback(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ inline typed::multi_pw_aff<Range> pullback(const typed::pw_multi_aff<Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::multi_union_pw_aff<Domain2, Range> pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ inline typed::multi_union_pw_aff<Range> pullback(const typed::union_pw_multi_aff<Domain> &upma) const;
+ template <typename Range2>
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::pw_multi_aff<Domain, Range2> &multi2) const;
+ inline typed::id<Domain, Range> get_range_tuple_id() const = delete;
+ inline typed::multi_pw_aff<Domain, Range> scale(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_pw_aff<Domain, Range> scale(const typed::val<Range> &v) const;
+ inline typed::multi_pw_aff<Domain, Range> scale(long v) const;
+ inline typed::multi_pw_aff<Domain, Range> scale_down(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_pw_aff<Domain, Range> scale_down(const typed::val<Range> &v) const;
+ inline typed::multi_pw_aff<Domain, Range> scale_down(long v) const;
+ inline typed::multi_pw_aff<Domain, Range> set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Domain, Range> set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const;
+ template <typename Range2>
+ inline typed::multi_pw_aff<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::multi_pw_aff<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain, Range> space() const;
+ inline typed::space<Domain, Range> get_space() const = delete;
+ inline typed::multi_pw_aff<Domain, Range> sub(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> sub(const typed::multi_union_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> sub(const typed::aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> sub(const typed::multi_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> sub(const typed::pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> sub(const typed::pw_multi_aff<Domain, Range> &multi2) const;
+ inline typed::multi_pw_aff<Domain, Range> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<Domain, Range> union_add(const typed::multi_pw_aff<Domain, Range> &mpa2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> union_add(const typed::multi_union_pw_aff<Domain, Range> &mupa2) const;
+ inline typed::multi_pw_aff<Domain, Range> union_add(const typed::aff<Domain, Range> &mpa2) const;
+ inline typed::multi_pw_aff<Domain, Range> union_add(const typed::multi_aff<Domain, Range> &mpa2) const;
+ inline typed::multi_pw_aff<Domain, Range> union_add(const typed::pw_aff<Domain, Range> &mpa2) const;
+ inline typed::multi_pw_aff<Domain, Range> union_add(const typed::pw_multi_aff<Domain, Range> &mpa2) const;
+};
+
+template <typename Domain2, typename Range2, typename Range>
+struct multi_pw_aff<pair<Domain2, Range2>, Range> : public isl::multi_pw_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_pw_aff() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain2, Arg1>{} &&
+ std::is_base_of<Range2, Arg2>{} &&
+ std::is_base_of<Range, Arg3>{},
+ bool>::type = true>
+ multi_pw_aff(const multi_pw_aff<pair<Arg1, Arg2>, Arg3> &obj) : isl::multi_pw_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_pw_aff>{}, bool>::type = true>
+ multi_pw_aff(const base &obj) : isl::multi_pw_aff(obj) {}
+ public:
+ static multi_pw_aff from(const isl::multi_pw_aff &obj) {
+ return multi_pw_aff(obj);
+ }
+ inline /* implicit */ multi_pw_aff(const typed::aff<pair<Domain2, Range2>, Range> &aff);
+ inline /* implicit */ multi_pw_aff(const typed::multi_aff<pair<Domain2, Range2>, Range> &ma);
+ inline /* implicit */ multi_pw_aff(const typed::pw_aff<pair<Domain2, Range2>, Range> &pa);
+ inline explicit multi_pw_aff(const typed::space<pair<Domain2, Range2>, Range> &space, const typed::pw_aff_list<pair<Domain2, Range2>, Anonymous> &list);
+ inline /* implicit */ multi_pw_aff(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma);
+ inline explicit multi_pw_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> add(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> add(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> add(const typed::pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> add_constant(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> add_constant(const typed::val<Range> &v) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> add_constant(long v) const;
+ inline typed::map<pair<Domain2, Range2>, Range> as_map() const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> as_multi_aff() const;
+ inline typed::set<pair<Domain2, Range2>, Range> as_set() const = delete;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> at(int pos) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Range> get_at(int pos) const = delete;
+ inline typed::set<pair<Domain2, Range2>> bind(const typed::multi_id<Range> &tuple) const;
+ inline typed::multi_pw_aff<Range> bind_domain(const typed::multi_id<pair<Domain2, Range2>> &tuple) const;
+ inline typed::multi_pw_aff<Range2, Range> bind_domain_wrapped_domain(const typed::multi_id<Domain2> &tuple) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> coalesce() const;
+ inline typed::set<pair<Domain2, Range2>> domain() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> gist(const typed::set<pair<Domain2, Range2>> &set) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> gist(const typed::union_set<pair<Domain2, Range2>> &context) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> gist(const typed::basic_set<pair<Domain2, Range2>> &set) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> gist(const typed::point<pair<Domain2, Range2>> &set) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> identity() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::set<pair<Domain2, Range2>> &domain) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::basic_set<pair<Domain2, Range2>> &domain) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::point<pair<Domain2, Range2>> &domain) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> intersect_params(const typed::set<> &set) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> intersect_params(const typed::point<> &set) const;
+ inline typed::pw_aff_list<pair<Domain2, Range2>, Anonymous> list() const;
+ inline typed::pw_aff_list<pair<Domain2, Range2>, Range> get_list() const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> max(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> max(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> max(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> max(const typed::pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> max(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_val<Range> max_multi_val() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> min(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> min(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> min(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> min(const typed::pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> min(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_val<Range> min_multi_val() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> neg() const;
+ template <typename Arg2, typename Arg3>
+ inline typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::multi_pw_aff<Arg2, Arg3> &multi2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::aff<Arg2, Arg3> &multi2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::multi_aff<Arg2, Arg3> &multi2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::pw_aff<Arg2, Arg3> &multi2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::pw_multi_aff<Arg2, Arg3> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<Arg2, Range> pullback(const typed::multi_aff<Arg2, pair<Domain2, Range2>> &ma) const;
+ inline typed::multi_pw_aff<Range> pullback(const typed::multi_aff<pair<Domain2, Range2>> &ma) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<Arg2, Range> pullback(const typed::multi_pw_aff<Arg2, pair<Domain2, Range2>> &mpa2) const;
+ inline typed::multi_pw_aff<Range> pullback(const typed::multi_pw_aff<pair<Domain2, Range2>> &mpa2) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<Arg2, Range> pullback(const typed::pw_multi_aff<Arg2, pair<Domain2, Range2>> &pma) const;
+ inline typed::multi_pw_aff<Range> pullback(const typed::pw_multi_aff<pair<Domain2, Range2>> &pma) const;
+ template <typename Arg2>
+ inline typed::multi_union_pw_aff<Arg2, Range> pullback(const typed::union_pw_multi_aff<Arg2, pair<Domain2, Range2>> &upma) const;
+ inline typed::multi_union_pw_aff<Range> pullback(const typed::union_pw_multi_aff<pair<Domain2, Range2>> &upma) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::multi_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::multi_aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::pw_multi_aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ inline typed::id<pair<Domain2, Range2>, Range> get_range_tuple_id() const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> scale(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> scale(const typed::val<Range> &v) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> scale(long v) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> scale_down(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> scale_down(const typed::val<Range> &v) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> scale_down(long v) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> set_at(int pos, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> set_at(int pos, const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ template <typename Arg1>
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Arg1> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Arg1>
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Arg1> set_range_tuple(const std::string &id) const;
+ inline typed::space<pair<Domain2, Range2>, Range> space() const;
+ inline typed::space<pair<Domain2, Range2>, Range> get_space() const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> sub(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> sub(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> sub(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> sub(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> sub(const typed::pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> sub(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> union_add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &mpa2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> union_add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &mupa2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> union_add(const typed::aff<pair<Domain2, Range2>, Range> &mpa2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> union_add(const typed::multi_aff<pair<Domain2, Range2>, Range> &mpa2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> union_add(const typed::pw_aff<pair<Domain2, Range2>, Range> &mpa2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> union_add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &mpa2) const;
+};
+
+template <typename Domain>
+struct multi_union_pw_aff<Domain> : public isl::multi_union_pw_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_union_pw_aff() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ multi_union_pw_aff(const multi_union_pw_aff<Arg1> &obj) : isl::multi_union_pw_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_union_pw_aff>{}, bool>::type = true>
+ multi_union_pw_aff(const base &obj) : isl::multi_union_pw_aff(obj) {}
+ public:
+ static multi_union_pw_aff from(const isl::multi_union_pw_aff &obj) {
+ return multi_union_pw_aff(obj);
+ }
+ inline /* implicit */ multi_union_pw_aff(const typed::multi_pw_aff<Domain> &mpa);
+ inline /* implicit */ multi_union_pw_aff(const typed::union_pw_aff<Domain> &upa);
+ inline explicit multi_union_pw_aff(const typed::space<Domain> &space, const typed::union_pw_aff_list<Anonymous> &list);
+ inline explicit multi_union_pw_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_union_pw_aff<Domain> add(const typed::multi_union_pw_aff<Domain> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain> add(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain> add(const typed::union_pw_aff<Domain> &multi2) const;
+ inline typed::union_pw_aff<Anonymous> at(int pos) const;
+ inline typed::union_pw_aff<Domain> get_at(int pos) const = delete;
+ inline typed::union_set<> bind(const typed::multi_id<Domain> &tuple) const;
+ inline typed::multi_union_pw_aff<Domain> coalesce() const;
+ inline typed::union_set<> domain() const;
+ inline typed::multi_union_pw_aff<Domain> gist(const typed::union_set<> &context) const;
+ inline typed::multi_union_pw_aff<Domain> gist(const typed::basic_set<> &context) const;
+ inline typed::multi_union_pw_aff<Domain> gist(const typed::point<> &context) const;
+ inline typed::multi_union_pw_aff<Domain> gist(const typed::set<> &context) const;
+ inline typed::multi_union_pw_aff<Domain> intersect_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::multi_union_pw_aff<Domain> intersect_domain(const typed::basic_set<> &uset) const = delete;
+ inline typed::multi_union_pw_aff<Domain> intersect_domain(const typed::point<> &uset) const = delete;
+ inline typed::multi_union_pw_aff<Domain> intersect_domain(const typed::set<> &uset) const = delete;
+ inline typed::multi_union_pw_aff<Domain> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::multi_union_pw_aff<Domain> intersect_params(const typed::basic_set<> ¶ms) const;
+ inline typed::multi_union_pw_aff<Domain> intersect_params(const typed::point<> ¶ms) const;
+ inline typed::union_pw_aff_list<Anonymous> list() const;
+ inline typed::union_pw_aff_list<Domain> get_list() const = delete;
+ inline typed::multi_union_pw_aff<Domain> neg() const;
+ inline typed::multi_union_pw_aff<Domain> pullback(const typed::union_pw_multi_aff<> &upma) const = delete;
+ inline typed::multi_union_pw_aff<Domain> pullback(const typed::multi_aff<> &upma) const = delete;
+ inline typed::multi_union_pw_aff<Domain> pullback(const typed::pw_multi_aff<> &upma) const = delete;
+ inline typed::multi_union_pw_aff<Domain> pullback(const typed::union_pw_aff<> &upma) const = delete;
+ inline typed::multi_union_pw_aff<Domain> range_product(const typed::multi_union_pw_aff<> &multi2) const = delete;
+ inline typed::multi_union_pw_aff<Domain> range_product(const typed::multi_pw_aff<> &multi2) const = delete;
+ inline typed::multi_union_pw_aff<Domain> range_product(const typed::union_pw_aff<> &multi2) const = delete;
+ inline typed::id<Domain> get_range_tuple_id() const = delete;
+ inline typed::multi_union_pw_aff<Domain> scale(const typed::multi_val<Domain> &mv) const;
+ inline typed::multi_union_pw_aff<Domain> scale(const typed::val<Domain> &v) const;
+ inline typed::multi_union_pw_aff<Domain> scale(long v) const;
+ inline typed::multi_union_pw_aff<Domain> scale_down(const typed::multi_val<Domain> &mv) const;
+ inline typed::multi_union_pw_aff<Domain> scale_down(const typed::val<Domain> &v) const;
+ inline typed::multi_union_pw_aff<Domain> scale_down(long v) const;
+ inline typed::multi_union_pw_aff<Domain> set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const;
+ template <typename Domain2>
+ inline typed::multi_union_pw_aff<Domain2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::multi_union_pw_aff<Domain2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain> space() const;
+ inline typed::space<Domain> get_space() const = delete;
+ inline typed::multi_union_pw_aff<Domain> sub(const typed::multi_union_pw_aff<Domain> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain> sub(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain> sub(const typed::union_pw_aff<Domain> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain> union_add(const typed::multi_union_pw_aff<Domain> &mupa2) const;
+ inline typed::multi_union_pw_aff<Domain> union_add(const typed::multi_pw_aff<Domain> &mupa2) const;
+ inline typed::multi_union_pw_aff<Domain> union_add(const typed::union_pw_aff<Domain> &mupa2) const;
+};
+
+template <typename Domain, typename Range>
+struct multi_union_pw_aff<Domain, Range> : public isl::multi_union_pw_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_union_pw_aff() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ multi_union_pw_aff(const multi_union_pw_aff<Arg1, Arg2> &obj) : isl::multi_union_pw_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_union_pw_aff>{}, bool>::type = true>
+ multi_union_pw_aff(const base &obj) : isl::multi_union_pw_aff(obj) {}
+ public:
+ static multi_union_pw_aff from(const isl::multi_union_pw_aff &obj) {
+ return multi_union_pw_aff(obj);
+ }
+ inline /* implicit */ multi_union_pw_aff(const typed::multi_pw_aff<Domain, Range> &mpa);
+ inline /* implicit */ multi_union_pw_aff(const typed::union_pw_aff<Domain, Range> &upa);
+ inline explicit multi_union_pw_aff(const typed::space<Domain, Range> &space, const typed::union_pw_aff_list<Domain, Anonymous> &list);
+ inline explicit multi_union_pw_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_union_pw_aff<Domain, Range> add(const typed::multi_union_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> add(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> add(const typed::union_pw_aff<Domain, Range> &multi2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> at(int pos) const;
+ inline typed::union_pw_aff<Domain, Range> get_at(int pos) const = delete;
+ inline typed::union_set<Domain> bind(const typed::multi_id<Range> &tuple) const;
+ inline typed::multi_union_pw_aff<Domain, Range> coalesce() const;
+ inline typed::union_set<Domain> domain() const;
+ inline typed::multi_union_pw_aff<Domain, Range> gist(const typed::union_set<Domain> &context) const;
+ inline typed::multi_union_pw_aff<Domain, Range> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::multi_union_pw_aff<Domain, Range> gist(const typed::point<Domain> &context) const;
+ inline typed::multi_union_pw_aff<Domain, Range> gist(const typed::set<Domain> &context) const;
+ inline typed::multi_union_pw_aff<Domain, Range> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::multi_union_pw_aff<Domain, Range> intersect_domain(const typed::basic_set<Domain> &uset) const;
+ inline typed::multi_union_pw_aff<Domain, Range> intersect_domain(const typed::point<Domain> &uset) const;
+ inline typed::multi_union_pw_aff<Domain, Range> intersect_domain(const typed::set<Domain> &uset) const;
+ inline typed::multi_union_pw_aff<Domain, Range> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::multi_union_pw_aff<Domain, Range> intersect_params(const typed::basic_set<> ¶ms) const;
+ inline typed::multi_union_pw_aff<Domain, Range> intersect_params(const typed::point<> ¶ms) const;
+ inline typed::union_pw_aff_list<Domain, Anonymous> list() const;
+ inline typed::union_pw_aff_list<Domain, Range> get_list() const = delete;
+ inline typed::multi_union_pw_aff<Domain, Range> neg() const;
+ template <typename Domain2>
+ inline typed::multi_union_pw_aff<Domain2, Range> pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ inline typed::multi_union_pw_aff<Range> pullback(const typed::union_pw_multi_aff<Domain> &upma) const;
+ template <typename Domain2>
+ inline typed::multi_union_pw_aff<Domain2, Range> pullback(const typed::multi_aff<Domain2, Domain> &upma) const;
+ inline typed::multi_union_pw_aff<Range> pullback(const typed::multi_aff<Domain> &upma) const;
+ template <typename Domain2>
+ inline typed::multi_union_pw_aff<Domain2, Range> pullback(const typed::pw_multi_aff<Domain2, Domain> &upma) const;
+ inline typed::multi_union_pw_aff<Range> pullback(const typed::pw_multi_aff<Domain> &upma) const;
+ template <typename Domain2>
+ inline typed::multi_union_pw_aff<Domain2, Range> pullback(const typed::union_pw_aff<Domain2, Domain> &upma) const;
+ inline typed::multi_union_pw_aff<Range> pullback(const typed::union_pw_aff<Domain> &upma) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::union_pw_aff<Domain, Range2> &multi2) const;
+ inline typed::id<Domain, Range> get_range_tuple_id() const = delete;
+ inline typed::multi_union_pw_aff<Domain, Range> scale(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_union_pw_aff<Domain, Range> scale(const typed::val<Range> &v) const;
+ inline typed::multi_union_pw_aff<Domain, Range> scale(long v) const;
+ inline typed::multi_union_pw_aff<Domain, Range> scale_down(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_union_pw_aff<Domain, Range> scale_down(const typed::val<Range> &v) const;
+ inline typed::multi_union_pw_aff<Domain, Range> scale_down(long v) const;
+ inline typed::multi_union_pw_aff<Domain, Range> set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Range> space() const;
+ inline typed::space<Domain, Range> get_space() const = delete;
+ inline typed::multi_union_pw_aff<Domain, Range> sub(const typed::multi_union_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> sub(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> sub(const typed::union_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> union_add(const typed::multi_union_pw_aff<Domain, Range> &mupa2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> union_add(const typed::multi_pw_aff<Domain, Range> &mupa2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> union_add(const typed::union_pw_aff<Domain, Range> &mupa2) const;
+};
+
+template <typename Domain>
+struct multi_val<Domain> : public isl::multi_val {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ multi_val() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ multi_val(const multi_val<Arg1> &obj) : isl::multi_val(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::multi_val>{}, bool>::type = true>
+ multi_val(const base &obj) : isl::multi_val(obj) {}
+ public:
+ static multi_val from(const isl::multi_val &obj) {
+ return multi_val(obj);
+ }
+ inline explicit multi_val(const typed::space<Domain> &space, const typed::val_list<Anonymous> &list);
+ inline explicit multi_val(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_val<Domain> add(const typed::multi_val<Domain> &multi2) const;
+ inline typed::multi_val<Domain> add(const typed::val<Domain> &v) const;
+ inline typed::multi_val<Domain> add(long v) const;
+ inline typed::val<Anonymous> at(int pos) const;
+ inline typed::val<Domain> get_at(int pos) const = delete;
+ inline typed::val_list<Anonymous> list() const;
+ inline typed::val_list<Domain> get_list() const = delete;
+ inline typed::multi_val<Domain> max(const typed::multi_val<Domain> &multi2) const;
+ inline typed::multi_val<Domain> min(const typed::multi_val<Domain> &multi2) const;
+ inline typed::multi_val<Domain> neg() const;
+ template <typename Range>
+ inline typed::multi_val<pair<Domain, Range>> product(const typed::multi_val<Range> &multi2) const;
+ inline typed::multi_val<Domain> range_product(const typed::multi_val<> &multi2) const = delete;
+ inline typed::id<Domain> get_range_tuple_id() const = delete;
+ inline typed::multi_val<Domain> scale(const typed::multi_val<Domain> &mv) const;
+ inline typed::multi_val<Domain> scale(const typed::val<Domain> &v) const;
+ inline typed::multi_val<Domain> scale(long v) const;
+ inline typed::multi_val<Domain> scale_down(const typed::multi_val<Domain> &mv) const;
+ inline typed::multi_val<Domain> scale_down(const typed::val<Domain> &v) const;
+ inline typed::multi_val<Domain> scale_down(long v) const;
+ inline typed::multi_val<Domain> set_at(int pos, const typed::val<Anonymous> &el) const;
+ inline typed::multi_val<Domain> set_at(int pos, long el) const;
+ template <typename Domain2>
+ inline typed::multi_val<Domain2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::multi_val<Domain2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain> space() const;
+ inline typed::space<Domain> get_space() const = delete;
+ inline typed::multi_val<Domain> sub(const typed::multi_val<Domain> &multi2) const;
+};
+
+template <>
+struct point<> : public isl::point {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ point() = default;
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::point>{}, bool>::type = true>
+ point(const base &obj) : isl::point(obj) {}
+ public:
+ static point from(const isl::point &obj) {
+ return point(obj);
+ }
+ inline typed::basic_set<> apply(const typed::basic_map<> &bmap) const = delete;
+ inline typed::set<> apply(const typed::map<> &map) const = delete;
+ inline typed::union_set<> apply(const typed::union_map<> &umap) const = delete;
+ inline typed::pw_multi_aff<> as_pw_multi_aff() const = delete;
+ inline typed::set<> as_set() const = delete;
+ inline typed::set<> bind(const typed::multi_id<> &tuple) const = delete;
+ inline typed::set<> coalesce() const;
+ inline typed::basic_set<> detect_equalities() const;
+ inline bool every_set(const std::function<bool(typed::set<>)> &test) const;
+ inline typed::set<> extract_set(const typed::space<> &space) const;
+ inline void foreach_basic_set(const std::function<void(typed::basic_set<>)> &fn) const;
+ inline void foreach_point(const std::function<void(typed::point<>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<>)> &fn) const;
+ inline typed::basic_set<> gist(const typed::basic_set<> &context) const;
+ inline typed::set<> gist(const typed::set<> &context) const;
+ inline typed::union_set<> gist(const typed::union_set<> &context) const;
+ inline typed::map<> identity() const = delete;
+ inline typed::pw_aff<Anonymous> indicator_function() const;
+ inline typed::map<> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::basic_set<> intersect(const typed::basic_set<> &bset2) const;
+ inline typed::set<> intersect(const typed::set<> &set2) const;
+ inline typed::union_set<> intersect(const typed::union_set<> &uset2) const;
+ inline typed::basic_set<> intersect_params(const typed::basic_set<> &bset2) const = delete;
+ inline typed::set<> intersect_params(const typed::set<> ¶ms) const = delete;
+ inline typed::set<> lexmax() const = delete;
+ inline typed::pw_multi_aff<> lexmax_pw_multi_aff() const = delete;
+ inline typed::set<> lexmin() const = delete;
+ inline typed::pw_multi_aff<> lexmin_pw_multi_aff() const = delete;
+ inline typed::set<> lower_bound(const typed::multi_pw_aff<> &lower) const = delete;
+ inline typed::set<> lower_bound(const typed::multi_val<> &lower) const = delete;
+ inline typed::multi_pw_aff<> max_multi_pw_aff() const = delete;
+ inline typed::val<> max_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_pw_aff<> min_multi_pw_aff() const = delete;
+ inline typed::val<> min_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_val<> multi_val() const = delete;
+ inline typed::multi_val<> get_multi_val() const = delete;
+ inline typed::basic_set<> params() const = delete;
+ inline typed::multi_val<> plain_multi_val_if_fixed() const = delete;
+ inline typed::set<> preimage(const typed::multi_aff<> &ma) const = delete;
+ inline typed::set<> preimage(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::set<> preimage(const typed::pw_multi_aff<> &pma) const = delete;
+ inline typed::union_set<> preimage(const typed::union_pw_multi_aff<> &upma) const = delete;
+ inline typed::set<> product(const typed::set<> &set2) const = delete;
+ inline typed::set<> project_out_all_params() const;
+ inline typed::set<> project_out_param(const typed::id<Anonymous> &id) const;
+ inline typed::set<> project_out_param(const std::string &id) const;
+ inline typed::set<> project_out_param(const typed::id_list<Anonymous> &list) const;
+ inline typed::pw_multi_aff<> pw_multi_aff_on_domain(const typed::multi_val<> &mv) const = delete;
+ inline typed::fixed_box<> simple_fixed_box_hull() const = delete;
+ inline typed::space<> space() const;
+ inline typed::set<> subtract(const typed::set<> &set2) const;
+ inline typed::union_set<> subtract(const typed::union_set<> &uset2) const;
+ inline typed::set<> to_set() const;
+ inline typed::union_set<> to_union_set() const;
+ inline typed::map<> translation() const = delete;
+ template <typename Domain>
+ inline typed::set<Domain> unbind_params(const typed::multi_id<Domain> &tuple) const;
+ inline typed::map<> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::set<> unite(const typed::basic_set<> &bset2) const;
+ inline typed::set<> unite(const typed::set<> &set2) const;
+ inline typed::union_set<> unite(const typed::union_set<> &uset2) const;
+ inline typed::map<> unwrap() const = delete;
+ inline typed::set<> upper_bound(const typed::multi_pw_aff<> &upper) const = delete;
+ inline typed::set<> upper_bound(const typed::multi_val<> &upper) const = delete;
+};
+
+template <typename Domain>
+struct point<Domain> : public isl::point {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ point() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ point(const point<Arg1> &obj) : isl::point(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::point>{}, bool>::type = true>
+ point(const base &obj) : isl::point(obj) {}
+ public:
+ static point from(const isl::point &obj) {
+ return point(obj);
+ }
+ template <typename Range>
+ inline typed::basic_set<Range> apply(const typed::basic_map<Domain, Range> &bmap) const;
+ template <typename Range>
+ inline typed::set<Range> apply(const typed::map<Domain, Range> &map) const;
+ template <typename Range>
+ inline typed::union_set<Range> apply(const typed::union_map<Domain, Range> &umap) const;
+ inline typed::pw_multi_aff<Domain> as_pw_multi_aff() const;
+ inline typed::set<Domain> as_set() const;
+ inline typed::set<> bind(const typed::multi_id<Domain> &tuple) const;
+ inline typed::set<Domain> coalesce() const;
+ inline typed::basic_set<Domain> detect_equalities() const;
+ inline bool every_set(const std::function<bool(typed::set<Domain>)> &test) const;
+ inline typed::set<Domain> extract_set(const typed::space<Domain> &space) const;
+ inline void foreach_basic_set(const std::function<void(typed::basic_set<Domain>)> &fn) const;
+ inline void foreach_point(const std::function<void(typed::point<Domain>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<Domain>)> &fn) const;
+ inline typed::basic_set<Domain> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::set<Domain> gist(const typed::set<Domain> &context) const;
+ inline typed::union_set<Domain> gist(const typed::union_set<Domain> &context) const;
+ inline typed::map<Domain, Domain> identity() const;
+ inline typed::pw_aff<Domain, Anonymous> indicator_function() const;
+ template <typename Arg1>
+ inline typed::map<Arg1, Domain> insert_domain(const typed::space<Arg1> &domain) const;
+ inline typed::basic_set<Domain> intersect(const typed::basic_set<Domain> &bset2) const;
+ inline typed::set<Domain> intersect(const typed::set<Domain> &set2) const;
+ inline typed::union_set<Domain> intersect(const typed::union_set<Domain> &uset2) const;
+ inline typed::basic_set<Domain> intersect_params(const typed::basic_set<> &bset2) const;
+ inline typed::set<Domain> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::set<Domain> lexmax() const;
+ inline typed::pw_multi_aff<Domain> lexmax_pw_multi_aff() const;
+ inline typed::set<Domain> lexmin() const;
+ inline typed::pw_multi_aff<Domain> lexmin_pw_multi_aff() const;
+ inline typed::set<Domain> lower_bound(const typed::multi_pw_aff<Domain> &lower) const;
+ inline typed::set<Domain> lower_bound(const typed::multi_val<Domain> &lower) const;
+ inline typed::multi_pw_aff<Domain> max_multi_pw_aff() const;
+ inline typed::val<Domain> max_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_pw_aff<Domain> min_multi_pw_aff() const;
+ inline typed::val<Domain> min_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_val<Domain> multi_val() const;
+ inline typed::multi_val<Domain> get_multi_val() const = delete;
+ inline typed::basic_set<> params() const;
+ inline typed::multi_val<Domain> plain_multi_val_if_fixed() const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Range>
+ inline typed::set<pair<Domain, Range>> product(const typed::set<Range> &set2) const;
+ inline typed::set<Domain> project_out_all_params() const;
+ inline typed::set<Domain> project_out_param(const typed::id<Anonymous> &id) const;
+ inline typed::set<Domain> project_out_param(const std::string &id) const;
+ inline typed::set<Domain> project_out_param(const typed::id_list<Anonymous> &list) const;
+ template <typename Range>
+ inline typed::pw_multi_aff<Domain, Range> pw_multi_aff_on_domain(const typed::multi_val<Range> &mv) const;
+ inline typed::fixed_box<Domain> simple_fixed_box_hull() const;
+ inline typed::space<Domain> space() const;
+ inline typed::set<Domain> subtract(const typed::set<Domain> &set2) const;
+ inline typed::union_set<Domain> subtract(const typed::union_set<Domain> &uset2) const;
+ inline typed::set<Domain> to_set() const;
+ inline typed::union_set<Domain> to_union_set() const;
+ inline typed::map<Domain, Domain> translation() const;
+ inline typed::set<Domain> unbind_params(const typed::multi_id<> &tuple) const = delete;
+ template <typename Arg1>
+ inline typed::map<Arg1, Domain> unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const;
+ inline typed::set<Domain> unite(const typed::basic_set<Domain> &bset2) const;
+ inline typed::set<Domain> unite(const typed::set<Domain> &set2) const;
+ inline typed::union_set<Domain> unite(const typed::union_set<Domain> &uset2) const;
+ inline typed::map<Domain> unwrap() const = delete;
+ inline typed::set<Domain> upper_bound(const typed::multi_pw_aff<Domain> &upper) const;
+ inline typed::set<Domain> upper_bound(const typed::multi_val<Domain> &upper) const;
+};
+
+template <typename Domain, typename Range>
+struct point<pair<Domain, Range>> : public isl::point {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ point() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ point(const point<pair<Arg1, Arg2>> &obj) : isl::point(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::point>{}, bool>::type = true>
+ point(const base &obj) : isl::point(obj) {}
+ public:
+ static point from(const isl::point &obj) {
+ return point(obj);
+ }
+ template <typename Arg2>
+ inline typed::basic_set<Arg2> apply(const typed::basic_map<pair<Domain, Range>, Arg2> &bmap) const;
+ template <typename Arg2>
+ inline typed::set<Arg2> apply(const typed::map<pair<Domain, Range>, Arg2> &map) const;
+ template <typename Arg2>
+ inline typed::union_set<Arg2> apply(const typed::union_map<pair<Domain, Range>, Arg2> &umap) const;
+ inline typed::pw_multi_aff<pair<Domain, Range>> as_pw_multi_aff() const;
+ inline typed::set<pair<Domain, Range>> as_set() const;
+ inline typed::set<> bind(const typed::multi_id<pair<Domain, Range>> &tuple) const;
+ inline typed::set<pair<Domain, Range>> coalesce() const;
+ inline typed::basic_set<pair<Domain, Range>> detect_equalities() const;
+ inline bool every_set(const std::function<bool(typed::set<pair<Domain, Range>>)> &test) const;
+ inline typed::set<pair<Domain, Range>> extract_set(const typed::space<pair<Domain, Range>> &space) const;
+ inline void foreach_basic_set(const std::function<void(typed::basic_set<pair<Domain, Range>>)> &fn) const;
+ inline void foreach_point(const std::function<void(typed::point<pair<Domain, Range>>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<pair<Domain, Range>>)> &fn) const;
+ inline typed::basic_set<pair<Domain, Range>> gist(const typed::basic_set<pair<Domain, Range>> &context) const;
+ inline typed::set<pair<Domain, Range>> gist(const typed::set<pair<Domain, Range>> &context) const;
+ inline typed::union_set<pair<Domain, Range>> gist(const typed::union_set<pair<Domain, Range>> &context) const;
+ inline typed::map<pair<Domain, Range>, pair<Domain, Range>> identity() const;
+ inline typed::pw_aff<pair<Domain, Range>, Anonymous> indicator_function() const;
+ template <typename Arg2>
+ inline typed::map<Arg2, pair<Domain, Range>> insert_domain(const typed::space<Arg2> &domain) const;
+ inline typed::basic_set<pair<Domain, Range>> intersect(const typed::basic_set<pair<Domain, Range>> &bset2) const;
+ inline typed::set<pair<Domain, Range>> intersect(const typed::set<pair<Domain, Range>> &set2) const;
+ inline typed::union_set<pair<Domain, Range>> intersect(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::basic_set<pair<Domain, Range>> intersect_params(const typed::basic_set<> &bset2) const;
+ inline typed::set<pair<Domain, Range>> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::set<pair<Domain, Range>> lexmax() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>> lexmax_pw_multi_aff() const;
+ inline typed::set<pair<Domain, Range>> lexmin() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>> lexmin_pw_multi_aff() const;
+ inline typed::set<pair<Domain, Range>> lower_bound(const typed::multi_pw_aff<pair<Domain, Range>> &lower) const;
+ inline typed::set<pair<Domain, Range>> lower_bound(const typed::multi_val<pair<Domain, Range>> &lower) const;
+ inline typed::multi_pw_aff<pair<Domain, Range>> max_multi_pw_aff() const;
+ inline typed::val<pair<Domain, Range>> max_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_pw_aff<pair<Domain, Range>> min_multi_pw_aff() const;
+ inline typed::val<pair<Domain, Range>> min_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_val<pair<Domain, Range>> multi_val() const;
+ inline typed::multi_val<pair<Domain, Range>> get_multi_val() const = delete;
+ inline typed::basic_set<> params() const;
+ inline typed::multi_val<pair<Domain, Range>> plain_multi_val_if_fixed() const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const;
+ template <typename Arg2>
+ inline typed::set<pair<pair<Domain, Range>, Arg2>> product(const typed::set<Arg2> &set2) const;
+ inline typed::set<pair<Domain, Range>> project_out_all_params() const;
+ inline typed::set<pair<Domain, Range>> project_out_param(const typed::id<Anonymous> &id) const;
+ inline typed::set<pair<Domain, Range>> project_out_param(const std::string &id) const;
+ inline typed::set<pair<Domain, Range>> project_out_param(const typed::id_list<Anonymous> &list) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<pair<Domain, Range>, Arg2> pw_multi_aff_on_domain(const typed::multi_val<Arg2> &mv) const;
+ inline typed::fixed_box<pair<Domain, Range>> simple_fixed_box_hull() const;
+ inline typed::space<pair<Domain, Range>> space() const;
+ inline typed::set<pair<Domain, Range>> subtract(const typed::set<pair<Domain, Range>> &set2) const;
+ inline typed::union_set<pair<Domain, Range>> subtract(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::set<pair<Domain, Range>> to_set() const;
+ inline typed::union_set<pair<Domain, Range>> to_union_set() const;
+ inline typed::map<pair<Domain, Range>, pair<Domain, Range>> translation() const;
+ inline typed::set<pair<Domain, Range>> unbind_params(const typed::multi_id<> &tuple) const = delete;
+ template <typename Arg2>
+ inline typed::map<Arg2, pair<Domain, Range>> unbind_params_insert_domain(const typed::multi_id<Arg2> &domain) const;
+ inline typed::set<pair<Domain, Range>> unite(const typed::basic_set<pair<Domain, Range>> &bset2) const;
+ inline typed::set<pair<Domain, Range>> unite(const typed::set<pair<Domain, Range>> &set2) const;
+ inline typed::union_set<pair<Domain, Range>> unite(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::map<Domain, Range> unwrap() const;
+ inline typed::set<pair<Domain, Range>> upper_bound(const typed::multi_pw_aff<pair<Domain, Range>> &upper) const;
+ inline typed::set<pair<Domain, Range>> upper_bound(const typed::multi_val<pair<Domain, Range>> &upper) const;
+};
+
+template <>
+struct pw_aff<Anonymous> : public isl::pw_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_aff() = default;
+ pw_aff(const isl::pw_aff &obj) : isl::pw_aff(obj) {}
+ static pw_aff from(const isl::pw_aff &obj) {
+ return pw_aff(obj);
+ }
+ inline /* implicit */ pw_aff(const typed::aff<Anonymous> &aff);
+ inline explicit pw_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_pw_aff<Anonymous> add(const typed::multi_pw_aff<Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<Anonymous> add(const typed::multi_union_pw_aff<Anonymous> &multi2) const;
+ inline typed::pw_aff<Anonymous> add(const typed::pw_aff<Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Anonymous> add(const typed::pw_multi_aff<Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Anonymous> add(const typed::union_pw_aff<Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Anonymous> add(const typed::union_pw_multi_aff<Anonymous> &upma2) const;
+ inline typed::pw_aff<Anonymous> add(const typed::aff<Anonymous> &pwaff2) const;
+ inline typed::pw_aff<Anonymous> add_constant(const typed::val<Anonymous> &v) const;
+ inline typed::pw_aff<Anonymous> add_constant(long v) const;
+ inline typed::pw_multi_aff<Anonymous> add_constant(const typed::multi_val<Anonymous> &mv) const;
+ template <typename Range>
+ inline typed::union_pw_multi_aff<Range> apply(const typed::union_pw_multi_aff<Anonymous, Range> &upma2) const;
+ inline typed::aff<Anonymous> as_aff() const;
+ inline typed::map<Anonymous> as_map() const = delete;
+ inline typed::multi_aff<Anonymous> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<Anonymous> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Anonymous> as_pw_multi_aff() const;
+ inline typed::set<Anonymous> as_set() const;
+ inline typed::union_map<Anonymous> as_union_map() const = delete;
+ inline typed::pw_aff<Anonymous> at(int pos) const;
+ inline typed::set<> bind(const typed::multi_id<Anonymous> &tuple) const;
+ inline typed::set<> bind(const typed::id<Anonymous> &id) const;
+ inline typed::set<> bind(const std::string &id) const;
+ inline typed::pw_aff<Anonymous> bind_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::pw_aff<Anonymous> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::pw_aff<Anonymous> ceil() const;
+ inline typed::pw_aff<Anonymous> coalesce() const;
+ inline typed::pw_aff<Anonymous> cond(const typed::pw_aff<Anonymous> &pwaff_true, const typed::pw_aff<Anonymous> &pwaff_false) const;
+ inline typed::set<> domain() const;
+ inline typed::pw_multi_aff<Anonymous> extract_pw_multi_aff(const typed::space<Anonymous> &space) const;
+ inline typed::pw_aff<Anonymous> floor() const;
+ inline typed::set<Anonymous> ge_set(const typed::pw_aff<> &pwaff2) const = delete;
+ inline typed::set<Anonymous> ge_set(const typed::aff<> &pwaff2) const = delete;
+ inline typed::pw_aff<Anonymous> gist(const typed::set<> &context) const;
+ inline typed::union_pw_aff<Anonymous> gist(const typed::union_set<> &context) const;
+ inline typed::pw_aff<Anonymous> gist(const typed::basic_set<> &context) const;
+ inline typed::pw_aff<Anonymous> gist(const typed::point<> &context) const;
+ inline typed::set<Anonymous> gt_set(const typed::pw_aff<> &pwaff2) const = delete;
+ inline typed::set<Anonymous> gt_set(const typed::aff<> &pwaff2) const = delete;
+ inline typed::multi_pw_aff<Anonymous, Anonymous> identity() const;
+ template <typename Domain>
+ inline typed::pw_aff<Domain, Anonymous> insert_domain(const typed::space<Domain> &domain) const;
+ inline typed::pw_aff<Anonymous> intersect_domain(const typed::set<> &set) const = delete;
+ inline typed::union_pw_aff<Anonymous> intersect_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_aff<Anonymous> intersect_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::pw_aff<Anonymous> intersect_domain(const typed::basic_set<> &set) const = delete;
+ inline typed::pw_aff<Anonymous> intersect_domain(const typed::point<> &set) const = delete;
+ inline typed::pw_aff<Anonymous> intersect_params(const typed::set<> &set) const;
+ inline typed::pw_aff<Anonymous> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::pw_aff<Anonymous> intersect_params(const typed::point<> &set) const;
+ inline typed::set<Anonymous> le_set(const typed::pw_aff<> &pwaff2) const = delete;
+ inline typed::set<Anonymous> le_set(const typed::aff<> &pwaff2) const = delete;
+ inline typed::pw_aff_list<Anonymous> list() const;
+ inline typed::set<Anonymous> lt_set(const typed::pw_aff<> &pwaff2) const = delete;
+ inline typed::set<Anonymous> lt_set(const typed::aff<> &pwaff2) const = delete;
+ inline typed::multi_pw_aff<Anonymous> max(const typed::multi_pw_aff<Anonymous> &multi2) const;
+ inline typed::pw_aff<Anonymous> max(const typed::pw_aff<Anonymous> &pwaff2) const;
+ inline typed::pw_aff<Anonymous> max(const typed::aff<Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> max_multi_val() const;
+ inline typed::multi_pw_aff<Anonymous> min(const typed::multi_pw_aff<Anonymous> &multi2) const;
+ inline typed::pw_aff<Anonymous> min(const typed::pw_aff<Anonymous> &pwaff2) const;
+ inline typed::pw_aff<Anonymous> min(const typed::aff<Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> min_multi_val() const;
+ inline typed::pw_aff<Anonymous> mod(const typed::val<Anonymous> &mod) const;
+ inline typed::pw_aff<Anonymous> mod(long mod) const;
+ inline typed::pw_aff<Anonymous> neg() const;
+ inline typed::pw_multi_aff<Anonymous> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ template <typename Range>
+ inline typed::multi_pw_aff<pair<Anonymous, Range>> product(const typed::multi_pw_aff<Range> &multi2) const;
+ template <typename Range>
+ inline typed::pw_multi_aff<pair<Anonymous, Range>> product(const typed::pw_multi_aff<Range> &pma2) const;
+ inline typed::pw_aff<Anonymous> pullback(const typed::multi_aff<> &ma) const = delete;
+ inline typed::pw_aff<Anonymous> pullback(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::pw_aff<Anonymous> pullback(const typed::pw_multi_aff<> &pma) const = delete;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_multi_aff<> &upma) const = delete;
+ inline typed::pw_multi_aff_list<Anonymous> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<Anonymous> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<Anonymous> range_factor_range() const = delete;
+ inline typed::multi_pw_aff<Anonymous> range_product(const typed::multi_pw_aff<> &multi2) const = delete;
+ inline typed::multi_union_pw_aff<Anonymous> range_product(const typed::multi_union_pw_aff<> &multi2) const = delete;
+ inline typed::pw_multi_aff<Anonymous> range_product(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Anonymous> range_product(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::multi_pw_aff<Anonymous> scale(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::pw_aff<Anonymous> scale(const typed::val<Anonymous> &v) const;
+ inline typed::pw_aff<Anonymous> scale(long v) const;
+ inline typed::multi_pw_aff<Anonymous> scale_down(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::pw_aff<Anonymous> scale_down(const typed::val<Anonymous> &f) const;
+ inline typed::pw_aff<Anonymous> scale_down(long f) const;
+ inline typed::multi_pw_aff<Anonymous> set_at(int pos, const typed::pw_aff<Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Anonymous> set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Anonymous> space() const;
+ inline typed::multi_pw_aff<Anonymous> sub(const typed::multi_pw_aff<Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<Anonymous> sub(const typed::multi_union_pw_aff<Anonymous> &multi2) const;
+ inline typed::pw_aff<Anonymous> sub(const typed::pw_aff<Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Anonymous> sub(const typed::pw_multi_aff<Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Anonymous> sub(const typed::union_pw_aff<Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Anonymous> sub(const typed::union_pw_multi_aff<Anonymous> &upma2) const;
+ inline typed::pw_aff<Anonymous> sub(const typed::aff<Anonymous> &pwaff2) const;
+ inline typed::pw_aff<Anonymous> subtract_domain(const typed::set<> &set) const = delete;
+ inline typed::union_pw_aff<Anonymous> subtract_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_aff<Anonymous> subtract_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::pw_aff<Anonymous> subtract_domain(const typed::basic_set<> &set) const = delete;
+ inline typed::pw_aff<Anonymous> subtract_domain(const typed::point<> &set) const = delete;
+ inline typed::multi_pw_aff<Anonymous> to_multi_pw_aff() const;
+ inline typed::union_pw_aff<Anonymous> to_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<Anonymous> to_union_pw_multi_aff() const;
+ template <typename Domain>
+ inline typed::multi_pw_aff<Domain, Anonymous> unbind_params_insert_domain(const typed::multi_id<Domain> &domain) const;
+ inline typed::multi_pw_aff<Anonymous> union_add(const typed::multi_pw_aff<Anonymous> &mpa2) const;
+ inline typed::multi_union_pw_aff<Anonymous> union_add(const typed::multi_union_pw_aff<Anonymous> &mupa2) const;
+ inline typed::pw_aff<Anonymous> union_add(const typed::pw_aff<Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Anonymous> union_add(const typed::pw_multi_aff<Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Anonymous> union_add(const typed::union_pw_aff<Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Anonymous> union_add(const typed::union_pw_multi_aff<Anonymous> &upma2) const;
+ inline typed::pw_aff<Anonymous> union_add(const typed::aff<Anonymous> &pwaff2) const;
+};
+
+template <typename Domain>
+struct pw_aff<Domain, Anonymous> : public isl::pw_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_aff() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ pw_aff(const pw_aff<Arg1, Anonymous> &obj) : isl::pw_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::pw_aff>{}, bool>::type = true>
+ pw_aff(const base &obj) : isl::pw_aff(obj) {}
+ public:
+ static pw_aff from(const isl::pw_aff &obj) {
+ return pw_aff(obj);
+ }
+ inline /* implicit */ pw_aff(const typed::aff<Domain, Anonymous> &aff);
+ inline explicit pw_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_pw_aff<Domain, Anonymous> add(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> add(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::pw_aff<Domain, Anonymous> add(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Domain, Anonymous> add(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const;
+ inline typed::pw_aff<Domain, Anonymous> add(const typed::aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_aff<Domain, Anonymous> add_constant(const typed::val<Anonymous> &v) const;
+ inline typed::pw_aff<Domain, Anonymous> add_constant(long v) const;
+ inline typed::pw_multi_aff<Domain, Anonymous> add_constant(const typed::multi_val<Anonymous> &mv) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, Range2> apply(const typed::union_pw_multi_aff<Anonymous, Range2> &upma2) const;
+ inline typed::aff<Domain, Anonymous> as_aff() const;
+ inline typed::map<Domain, Anonymous> as_map() const;
+ inline typed::multi_aff<Domain, Anonymous> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Anonymous> as_pw_multi_aff() const;
+ inline typed::set<Domain, Anonymous> as_set() const = delete;
+ inline typed::union_map<Domain, Anonymous> as_union_map() const;
+ inline typed::pw_aff<Domain, Anonymous> at(int pos) const;
+ inline typed::set<Domain> bind(const typed::multi_id<Anonymous> &tuple) const;
+ inline typed::set<Domain> bind(const typed::id<Anonymous> &id) const;
+ inline typed::set<Domain> bind(const std::string &id) const;
+ inline typed::pw_aff<Anonymous> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::pw_aff<Domain, Anonymous> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::pw_aff<Domain, Anonymous> ceil() const;
+ inline typed::pw_aff<Domain, Anonymous> coalesce() const;
+ inline typed::pw_aff<Domain, Anonymous> cond(const typed::pw_aff<Domain, Anonymous> &pwaff_true, const typed::pw_aff<Domain, Anonymous> &pwaff_false) const;
+ inline typed::set<Domain> domain() const;
+ inline typed::pw_multi_aff<Domain, Anonymous> extract_pw_multi_aff(const typed::space<Domain, Anonymous> &space) const;
+ inline typed::pw_aff<Domain, Anonymous> floor() const;
+ inline typed::set<Domain> ge_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::set<Domain> ge_set(const typed::aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_aff<Domain, Anonymous> gist(const typed::set<Domain> &context) const;
+ inline typed::union_pw_aff<Domain, Anonymous> gist(const typed::union_set<Domain> &context) const;
+ inline typed::pw_aff<Domain, Anonymous> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::pw_aff<Domain, Anonymous> gist(const typed::point<Domain> &context) const;
+ inline typed::set<Domain> gt_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::set<Domain> gt_set(const typed::aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::multi_pw_aff<Domain, Anonymous> identity() const;
+ inline typed::pw_aff<Domain, Anonymous> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_aff<Domain, Anonymous> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_aff<Domain, Anonymous> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_aff<Domain, Anonymous> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::pw_aff<Domain, Anonymous> intersect_domain(const typed::basic_set<Domain> &set) const;
+ inline typed::pw_aff<Domain, Anonymous> intersect_domain(const typed::point<Domain> &set) const;
+ inline typed::pw_aff<Domain, Anonymous> intersect_params(const typed::set<> &set) const;
+ inline typed::pw_aff<Domain, Anonymous> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::pw_aff<Domain, Anonymous> intersect_params(const typed::point<> &set) const;
+ inline typed::set<Domain> le_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::set<Domain> le_set(const typed::aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_aff_list<Domain, Anonymous> list() const;
+ inline typed::set<Domain> lt_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::set<Domain> lt_set(const typed::aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::multi_pw_aff<Domain, Anonymous> max(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::pw_aff<Domain, Anonymous> max(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_aff<Domain, Anonymous> max(const typed::aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> max_multi_val() const;
+ inline typed::multi_pw_aff<Domain, Anonymous> min(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::pw_aff<Domain, Anonymous> min(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_aff<Domain, Anonymous> min(const typed::aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> min_multi_val() const;
+ inline typed::pw_aff<Domain, Anonymous> mod(const typed::val<Anonymous> &mod) const;
+ inline typed::pw_aff<Domain, Anonymous> mod(long mod) const;
+ inline typed::pw_aff<Domain, Anonymous> neg() const;
+ inline typed::pw_multi_aff<Domain, Anonymous> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_pw_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> product(const typed::multi_pw_aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> product(const typed::pw_multi_aff<Domain2, Range2> &pma2) const;
+ template <typename Domain2>
+ inline typed::pw_aff<Domain2, Anonymous> pullback(const typed::multi_aff<Domain2, Domain> &ma) const;
+ inline typed::pw_aff<Anonymous> pullback(const typed::multi_aff<Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::pw_aff<Domain2, Anonymous> pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ inline typed::pw_aff<Anonymous> pullback(const typed::multi_pw_aff<Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::pw_aff<Domain2, Anonymous> pullback(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ inline typed::pw_aff<Anonymous> pullback(const typed::pw_multi_aff<Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_pw_aff<Domain2, Anonymous> pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_multi_aff<Domain> &upma) const;
+ inline typed::pw_multi_aff_list<Domain, Anonymous> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<Domain, Anonymous> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<Domain, Anonymous> range_factor_range() const = delete;
+ template <typename Range2>
+ inline typed::multi_pw_aff<Domain, pair<Anonymous, Range2>> range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, pair<Anonymous, Range2>> range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::pw_multi_aff<Domain, pair<Anonymous, Range2>> range_product(const typed::pw_multi_aff<Domain, Range2> &pma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, pair<Anonymous, Range2>> range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const;
+ inline typed::multi_pw_aff<Domain, Anonymous> scale(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::pw_aff<Domain, Anonymous> scale(const typed::val<Anonymous> &v) const;
+ inline typed::pw_aff<Domain, Anonymous> scale(long v) const;
+ inline typed::multi_pw_aff<Domain, Anonymous> scale_down(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::pw_aff<Domain, Anonymous> scale_down(const typed::val<Anonymous> &f) const;
+ inline typed::pw_aff<Domain, Anonymous> scale_down(long f) const;
+ inline typed::multi_pw_aff<Domain, Anonymous> set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const;
+ template <typename Range2>
+ inline typed::pw_multi_aff<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::pw_multi_aff<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain, Anonymous> space() const;
+ inline typed::multi_pw_aff<Domain, Anonymous> sub(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> sub(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::pw_aff<Domain, Anonymous> sub(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Domain, Anonymous> sub(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> sub(const typed::union_pw_aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> sub(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const;
+ inline typed::pw_aff<Domain, Anonymous> sub(const typed::aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_aff<Domain, Anonymous> subtract_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_aff<Domain, Anonymous> subtract_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_aff<Domain, Anonymous> subtract_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::pw_aff<Domain, Anonymous> subtract_domain(const typed::basic_set<Domain> &set) const;
+ inline typed::pw_aff<Domain, Anonymous> subtract_domain(const typed::point<Domain> &set) const;
+ inline typed::multi_pw_aff<Domain, Anonymous> to_multi_pw_aff() const;
+ inline typed::union_pw_aff<Domain, Anonymous> to_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> to_union_pw_multi_aff() const;
+ inline typed::multi_pw_aff<Domain, Anonymous> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<Domain, Anonymous> union_add(const typed::multi_pw_aff<Domain, Anonymous> &mpa2) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> union_add(const typed::multi_union_pw_aff<Domain, Anonymous> &mupa2) const;
+ inline typed::pw_aff<Domain, Anonymous> union_add(const typed::pw_aff<Domain, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<Domain, Anonymous> union_add(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> union_add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> union_add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const;
+ inline typed::pw_aff<Domain, Anonymous> union_add(const typed::aff<Domain, Anonymous> &pwaff2) const;
+};
+
+template <typename Domain2, typename Range2>
+struct pw_aff<pair<Domain2, Range2>, Anonymous> : public isl::pw_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_aff() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain2, Arg1>{} &&
+ std::is_base_of<Range2, Arg2>{},
+ bool>::type = true>
+ pw_aff(const pw_aff<pair<Arg1, Arg2>, Anonymous> &obj) : isl::pw_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::pw_aff>{}, bool>::type = true>
+ pw_aff(const base &obj) : isl::pw_aff(obj) {}
+ public:
+ static pw_aff from(const isl::pw_aff &obj) {
+ return pw_aff(obj);
+ }
+ inline /* implicit */ pw_aff(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff);
+ inline explicit pw_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> add(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> add(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> add(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> add(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> add(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> add_constant(const typed::val<Anonymous> &v) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> add_constant(long v) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> add_constant(const typed::multi_val<Anonymous> &mv) const;
+ template <typename Arg1>
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg1> apply(const typed::union_pw_multi_aff<Anonymous, Arg1> &upma2) const;
+ inline typed::aff<pair<Domain2, Range2>, Anonymous> as_aff() const;
+ inline typed::map<pair<Domain2, Range2>, Anonymous> as_map() const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Anonymous> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> as_pw_multi_aff() const;
+ inline typed::set<pair<Domain2, Range2>, Anonymous> as_set() const = delete;
+ inline typed::union_map<pair<Domain2, Range2>, Anonymous> as_union_map() const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> at(int pos) const;
+ inline typed::set<pair<Domain2, Range2>> bind(const typed::multi_id<Anonymous> &tuple) const;
+ inline typed::set<pair<Domain2, Range2>> bind(const typed::id<Anonymous> &id) const;
+ inline typed::set<pair<Domain2, Range2>> bind(const std::string &id) const;
+ inline typed::pw_aff<Anonymous> bind_domain(const typed::multi_id<pair<Domain2, Range2>> &tuple) const;
+ inline typed::pw_aff<Range2, Anonymous> bind_domain_wrapped_domain(const typed::multi_id<Domain2> &tuple) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> ceil() const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> coalesce() const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> cond(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff_true, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff_false) const;
+ inline typed::set<pair<Domain2, Range2>> domain() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> extract_pw_multi_aff(const typed::space<pair<Domain2, Range2>, Anonymous> &space) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> floor() const;
+ inline typed::set<pair<Domain2, Range2>> ge_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::set<pair<Domain2, Range2>> ge_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> gist(const typed::set<pair<Domain2, Range2>> &context) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> gist(const typed::union_set<pair<Domain2, Range2>> &context) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> gist(const typed::basic_set<pair<Domain2, Range2>> &context) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> gist(const typed::point<pair<Domain2, Range2>> &context) const;
+ inline typed::set<pair<Domain2, Range2>> gt_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::set<pair<Domain2, Range2>> gt_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> identity() const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> intersect_domain(const typed::set<pair<Domain2, Range2>> &set) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> intersect_domain(const typed::space<pair<Domain2, Range2>> &space) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> intersect_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> intersect_domain(const typed::basic_set<pair<Domain2, Range2>> &set) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> intersect_domain(const typed::point<pair<Domain2, Range2>> &set) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> intersect_params(const typed::set<> &set) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> intersect_params(const typed::point<> &set) const;
+ inline typed::set<pair<Domain2, Range2>> le_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::set<pair<Domain2, Range2>> le_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_aff_list<pair<Domain2, Range2>, Anonymous> list() const;
+ inline typed::set<pair<Domain2, Range2>> lt_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::set<pair<Domain2, Range2>> lt_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> max(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> max(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> max(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> max_multi_val() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> min(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> min(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> min(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::multi_val<Anonymous> min_multi_val() const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> mod(const typed::val<Anonymous> &mod) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> mod(long mod) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> neg() const;
+ template <typename Domain3>
+ inline typed::pw_multi_aff<pair<Domain3, Range2>, Anonymous> preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, Domain2> &pma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, Range2>, Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain2> &upma2) const;
+ template <typename Arg1, typename Arg2>
+ inline typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>> product(const typed::multi_pw_aff<Arg1, Arg2> &multi2) const;
+ template <typename Arg1, typename Arg2>
+ inline typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>> product(const typed::pw_multi_aff<Arg1, Arg2> &pma2) const;
+ template <typename Arg1>
+ inline typed::pw_aff<Arg1, Anonymous> pullback(const typed::multi_aff<Arg1, pair<Domain2, Range2>> &ma) const;
+ inline typed::pw_aff<Anonymous> pullback(const typed::multi_aff<pair<Domain2, Range2>> &ma) const;
+ template <typename Arg1>
+ inline typed::pw_aff<Arg1, Anonymous> pullback(const typed::multi_pw_aff<Arg1, pair<Domain2, Range2>> &mpa) const;
+ inline typed::pw_aff<Anonymous> pullback(const typed::multi_pw_aff<pair<Domain2, Range2>> &mpa) const;
+ template <typename Arg1>
+ inline typed::pw_aff<Arg1, Anonymous> pullback(const typed::pw_multi_aff<Arg1, pair<Domain2, Range2>> &pma) const;
+ inline typed::pw_aff<Anonymous> pullback(const typed::pw_multi_aff<pair<Domain2, Range2>> &pma) const;
+ template <typename Arg1>
+ inline typed::union_pw_aff<Arg1, Anonymous> pullback(const typed::union_pw_multi_aff<Arg1, pair<Domain2, Range2>> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_multi_aff<pair<Domain2, Range2>> &upma) const;
+ inline typed::pw_multi_aff_list<pair<Domain2, Range2>, Anonymous> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> range_factor_range() const = delete;
+ template <typename Arg1>
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> range_product(const typed::multi_pw_aff<pair<Domain2, Range2>, Arg1> &multi2) const;
+ template <typename Arg1>
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> range_product(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Arg1> &multi2) const;
+ template <typename Arg1>
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> range_product(const typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> &pma2) const;
+ template <typename Arg1>
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> range_product(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg1> &upma2) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> scale(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> scale(const typed::val<Anonymous> &v) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> scale(long v) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> scale_down(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> scale_down(const typed::val<Anonymous> &f) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> scale_down(long f) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> set_at(int pos, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> set_at(int pos, const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ template <typename Arg1>
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Arg1>
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> set_range_tuple(const std::string &id) const;
+ inline typed::space<pair<Domain2, Range2>, Anonymous> space() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> sub(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> subtract_domain(const typed::set<pair<Domain2, Range2>> &set) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> subtract_domain(const typed::space<pair<Domain2, Range2>> &space) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> subtract_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> subtract_domain(const typed::basic_set<pair<Domain2, Range2>> &set) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> subtract_domain(const typed::point<pair<Domain2, Range2>> &set) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> to_multi_pw_aff() const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> to_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> to_union_pw_multi_aff() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &mpa2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &mupa2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const;
+ inline typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> union_add(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const;
+};
+
+template <>
+struct pw_aff_list<Anonymous> : public isl::pw_aff_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_aff_list() = default;
+ pw_aff_list(const isl::pw_aff_list &obj) : isl::pw_aff_list(obj) {}
+ static pw_aff_list from(const isl::pw_aff_list &obj) {
+ return pw_aff_list(obj);
+ }
+ inline explicit pw_aff_list(const isl::ctx &ctx, int n);
+ inline explicit pw_aff_list(const typed::pw_aff<Anonymous> &el);
+ inline explicit pw_aff_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::pw_aff_list<Anonymous> add(const typed::pw_aff<Anonymous> &el) const;
+ inline typed::pw_aff_list<Anonymous> add(const typed::aff<Anonymous> &el) const;
+ inline typed::pw_aff<Anonymous> at(int index) const;
+ inline typed::pw_aff<Anonymous> get_at(int index) const = delete;
+ inline typed::pw_aff_list<Anonymous> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::pw_aff<Anonymous>)> &fn) const;
+};
+
+template <typename Domain>
+struct pw_aff_list<Domain, Anonymous> : public isl::pw_aff_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_aff_list() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ pw_aff_list(const pw_aff_list<Arg1, Anonymous> &obj) : isl::pw_aff_list(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::pw_aff_list>{}, bool>::type = true>
+ pw_aff_list(const base &obj) : isl::pw_aff_list(obj) {}
+ public:
+ static pw_aff_list from(const isl::pw_aff_list &obj) {
+ return pw_aff_list(obj);
+ }
+ inline explicit pw_aff_list(const isl::ctx &ctx, int n);
+ inline explicit pw_aff_list(const typed::pw_aff<Domain, Anonymous> &el);
+ inline explicit pw_aff_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::pw_aff_list<Domain, Anonymous> add(const typed::pw_aff<Domain, Anonymous> &el) const;
+ inline typed::pw_aff_list<Domain, Anonymous> add(const typed::aff<Domain, Anonymous> &el) const;
+ inline typed::pw_aff<Domain, Anonymous> at(int index) const;
+ inline typed::pw_aff<Domain, Anonymous> get_at(int index) const = delete;
+ inline typed::pw_aff_list<Domain, Anonymous> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::pw_aff<Domain, Anonymous>)> &fn) const;
+};
+
+template <typename Domain>
+struct pw_multi_aff<Domain> : public isl::pw_multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_multi_aff() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ pw_multi_aff(const pw_multi_aff<Arg1> &obj) : isl::pw_multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::pw_multi_aff>{}, bool>::type = true>
+ pw_multi_aff(const base &obj) : isl::pw_multi_aff(obj) {}
+ public:
+ static pw_multi_aff from(const isl::pw_multi_aff &obj) {
+ return pw_multi_aff(obj);
+ }
+ inline /* implicit */ pw_multi_aff(const typed::multi_aff<Domain> &ma);
+ inline /* implicit */ pw_multi_aff(const typed::pw_aff<Domain> &pa);
+ inline explicit pw_multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_pw_aff<Domain> add(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain> add(const typed::multi_union_pw_aff<Domain> &multi2) const;
+ inline typed::pw_multi_aff<Domain> add(const typed::pw_multi_aff<Domain> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain> add(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ inline typed::pw_multi_aff<Domain> add(const typed::multi_aff<Domain> &pma2) const;
+ inline typed::pw_multi_aff<Domain> add(const typed::pw_aff<Domain> &pma2) const;
+ inline typed::pw_multi_aff<Domain> add_constant(const typed::multi_val<Domain> &mv) const;
+ inline typed::pw_multi_aff<Domain> add_constant(const typed::val<Domain> &v) const;
+ inline typed::pw_multi_aff<Domain> add_constant(long v) const;
+ template <typename Range>
+ inline typed::union_pw_multi_aff<Range> apply(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::map<Domain> as_map() const = delete;
+ inline typed::multi_aff<Domain> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<Domain> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain> as_pw_multi_aff() const;
+ inline typed::set<Domain> as_set() const;
+ inline typed::union_map<Domain> as_union_map() const = delete;
+ inline typed::pw_aff<Anonymous> at(int pos) const;
+ inline typed::pw_aff<Domain> get_at(int pos) const = delete;
+ inline typed::set<> bind(const typed::multi_id<Domain> &tuple) const;
+ inline typed::pw_multi_aff<Domain> bind_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::pw_multi_aff<Domain> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::pw_multi_aff<Domain> coalesce() const;
+ inline typed::set<> domain() const;
+ inline typed::pw_multi_aff<Domain> extract_pw_multi_aff(const typed::space<Domain> &space) const;
+ inline typed::pw_multi_aff<Domain> gist(const typed::set<> &set) const;
+ inline typed::union_pw_multi_aff<Domain> gist(const typed::union_set<> &context) const;
+ inline typed::pw_multi_aff<Domain> gist(const typed::basic_set<> &set) const;
+ inline typed::pw_multi_aff<Domain> gist(const typed::point<> &set) const;
+ inline typed::multi_pw_aff<Domain, Domain> identity() const;
+ template <typename Arg1>
+ inline typed::pw_multi_aff<Arg1, Domain> insert_domain(const typed::space<Arg1> &domain) const;
+ inline typed::pw_multi_aff<Domain> intersect_domain(const typed::set<> &set) const = delete;
+ inline typed::union_pw_multi_aff<Domain> intersect_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_multi_aff<Domain> intersect_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::pw_multi_aff<Domain> intersect_domain(const typed::basic_set<> &set) const = delete;
+ inline typed::pw_multi_aff<Domain> intersect_domain(const typed::point<> &set) const = delete;
+ inline typed::pw_multi_aff<Domain> intersect_params(const typed::set<> &set) const;
+ inline typed::pw_multi_aff<Domain> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::pw_multi_aff<Domain> intersect_params(const typed::point<> &set) const;
+ inline typed::pw_aff_list<Anonymous> list() const;
+ inline typed::multi_pw_aff<Domain> max(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_val<Domain> max_multi_val() const;
+ inline typed::multi_pw_aff<Domain> min(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_val<Domain> min_multi_val() const;
+ inline typed::multi_pw_aff<Domain> neg() const;
+ inline typed::pw_multi_aff<Domain> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::pw_multi_aff<Domain> preimage_domain_wrapped_domain(const typed::multi_aff<> &pma2) const = delete;
+ inline typed::pw_multi_aff<Domain> preimage_domain_wrapped_domain(const typed::pw_aff<> &pma2) const = delete;
+ template <typename Range>
+ inline typed::multi_pw_aff<pair<Domain, Range>> product(const typed::multi_pw_aff<Range> &multi2) const;
+ template <typename Range>
+ inline typed::pw_multi_aff<pair<Domain, Range>> product(const typed::pw_multi_aff<Range> &pma2) const;
+ template <typename Range>
+ inline typed::pw_multi_aff<pair<Domain, Range>> product(const typed::multi_aff<Range> &pma2) const;
+ template <typename Range>
+ inline typed::pw_multi_aff<pair<Domain, Range>> product(const typed::pw_aff<Range> &pma2) const;
+ inline typed::multi_pw_aff<Domain> pullback(const typed::multi_pw_aff<> &mpa2) const = delete;
+ inline typed::pw_multi_aff<Domain> pullback(const typed::multi_aff<> &ma) const = delete;
+ inline typed::pw_multi_aff<Domain> pullback(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> pullback(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::pw_multi_aff_list<Domain> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<Domain> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<Domain> range_factor_range() const = delete;
+ inline typed::multi_pw_aff<Domain> range_product(const typed::multi_pw_aff<> &multi2) const = delete;
+ inline typed::multi_union_pw_aff<Domain> range_product(const typed::multi_union_pw_aff<> &multi2) const = delete;
+ inline typed::pw_multi_aff<Domain> range_product(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> range_product(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::pw_multi_aff<Domain> range_product(const typed::multi_aff<> &pma2) const = delete;
+ inline typed::pw_multi_aff<Domain> range_product(const typed::pw_aff<> &pma2) const = delete;
+ inline typed::id<Domain> get_range_tuple_id() const = delete;
+ inline typed::multi_pw_aff<Domain> scale(const typed::multi_val<Domain> &mv) const;
+ inline typed::pw_multi_aff<Domain> scale(const typed::val<Domain> &v) const;
+ inline typed::pw_multi_aff<Domain> scale(long v) const;
+ inline typed::multi_pw_aff<Domain> scale_down(const typed::multi_val<Domain> &mv) const;
+ inline typed::pw_multi_aff<Domain> scale_down(const typed::val<Domain> &v) const;
+ inline typed::pw_multi_aff<Domain> scale_down(long v) const;
+ inline typed::multi_pw_aff<Domain> set_at(int pos, const typed::pw_aff<Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Domain> set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain> space() const;
+ inline typed::space<Domain> get_space() const = delete;
+ inline typed::multi_pw_aff<Domain> sub(const typed::multi_pw_aff<Domain> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain> sub(const typed::multi_union_pw_aff<Domain> &multi2) const;
+ inline typed::pw_multi_aff<Domain> sub(const typed::pw_multi_aff<Domain> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain> sub(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ inline typed::pw_multi_aff<Domain> sub(const typed::multi_aff<Domain> &pma2) const;
+ inline typed::pw_multi_aff<Domain> sub(const typed::pw_aff<Domain> &pma2) const;
+ inline typed::pw_multi_aff<Domain> subtract_domain(const typed::set<> &set) const = delete;
+ inline typed::union_pw_multi_aff<Domain> subtract_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_multi_aff<Domain> subtract_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::pw_multi_aff<Domain> subtract_domain(const typed::basic_set<> &set) const = delete;
+ inline typed::pw_multi_aff<Domain> subtract_domain(const typed::point<> &set) const = delete;
+ inline typed::multi_pw_aff<Domain> to_multi_pw_aff() const;
+ inline typed::union_pw_multi_aff<Domain> to_union_pw_multi_aff() const;
+ template <typename Arg1>
+ inline typed::multi_pw_aff<Arg1, Domain> unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const;
+ inline typed::multi_pw_aff<Domain> union_add(const typed::multi_pw_aff<Domain> &mpa2) const;
+ inline typed::multi_union_pw_aff<Domain> union_add(const typed::multi_union_pw_aff<Domain> &mupa2) const;
+ inline typed::pw_multi_aff<Domain> union_add(const typed::pw_multi_aff<Domain> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain> union_add(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ inline typed::pw_multi_aff<Domain> union_add(const typed::multi_aff<Domain> &pma2) const;
+ inline typed::pw_multi_aff<Domain> union_add(const typed::pw_aff<Domain> &pma2) const;
+};
+
+template <typename Domain, typename Range>
+struct pw_multi_aff<Domain, Range> : public isl::pw_multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_multi_aff() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ pw_multi_aff(const pw_multi_aff<Arg1, Arg2> &obj) : isl::pw_multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::pw_multi_aff>{}, bool>::type = true>
+ pw_multi_aff(const base &obj) : isl::pw_multi_aff(obj) {}
+ public:
+ static pw_multi_aff from(const isl::pw_multi_aff &obj) {
+ return pw_multi_aff(obj);
+ }
+ inline /* implicit */ pw_multi_aff(const typed::multi_aff<Domain, Range> &ma);
+ inline /* implicit */ pw_multi_aff(const typed::pw_aff<Domain, Range> &pa);
+ inline explicit pw_multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_pw_aff<Domain, Range> add(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> add(const typed::multi_union_pw_aff<Domain, Range> &multi2) const;
+ inline typed::pw_multi_aff<Domain, Range> add(const typed::pw_multi_aff<Domain, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::pw_multi_aff<Domain, Range> add(const typed::multi_aff<Domain, Range> &pma2) const;
+ inline typed::pw_multi_aff<Domain, Range> add(const typed::pw_aff<Domain, Range> &pma2) const;
+ inline typed::pw_multi_aff<Domain, Range> add_constant(const typed::multi_val<Range> &mv) const;
+ inline typed::pw_multi_aff<Domain, Range> add_constant(const typed::val<Range> &v) const;
+ inline typed::pw_multi_aff<Domain, Range> add_constant(long v) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, Range2> apply(const typed::union_pw_multi_aff<Range, Range2> &upma2) const;
+ inline typed::map<Domain, Range> as_map() const;
+ inline typed::multi_aff<Domain, Range> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<Domain, Range> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Range> as_pw_multi_aff() const;
+ inline typed::set<Domain, Range> as_set() const = delete;
+ inline typed::union_map<Domain, Range> as_union_map() const;
+ inline typed::pw_aff<Domain, Anonymous> at(int pos) const;
+ inline typed::pw_aff<Domain, Range> get_at(int pos) const = delete;
+ inline typed::set<Domain> bind(const typed::multi_id<Range> &tuple) const;
+ inline typed::pw_multi_aff<Range> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::pw_multi_aff<Domain, Range> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::pw_multi_aff<Domain, Range> coalesce() const;
+ inline typed::set<Domain> domain() const;
+ inline typed::pw_multi_aff<Domain, Range> extract_pw_multi_aff(const typed::space<Domain, Range> &space) const;
+ inline typed::pw_multi_aff<Domain, Range> gist(const typed::set<Domain> &set) const;
+ inline typed::union_pw_multi_aff<Domain, Range> gist(const typed::union_set<Domain> &context) const;
+ inline typed::pw_multi_aff<Domain, Range> gist(const typed::basic_set<Domain> &set) const;
+ inline typed::pw_multi_aff<Domain, Range> gist(const typed::point<Domain> &set) const;
+ inline typed::multi_pw_aff<Domain, Range> identity() const;
+ inline typed::pw_multi_aff<Domain, Range> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_multi_aff<Domain, Range> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_multi_aff<Domain, Range> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, Range> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::pw_multi_aff<Domain, Range> intersect_domain(const typed::basic_set<Domain> &set) const;
+ inline typed::pw_multi_aff<Domain, Range> intersect_domain(const typed::point<Domain> &set) const;
+ inline typed::pw_multi_aff<Domain, Range> intersect_params(const typed::set<> &set) const;
+ inline typed::pw_multi_aff<Domain, Range> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::pw_multi_aff<Domain, Range> intersect_params(const typed::point<> &set) const;
+ inline typed::pw_aff_list<Domain, Anonymous> list() const;
+ inline typed::multi_pw_aff<Domain, Range> max(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_val<Range> max_multi_val() const;
+ inline typed::multi_pw_aff<Domain, Range> min(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_val<Range> min_multi_val() const;
+ inline typed::multi_pw_aff<Domain, Range> neg() const;
+ inline typed::pw_multi_aff<Domain, Range> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, Range> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::pw_multi_aff<Domain, Range> preimage_domain_wrapped_domain(const typed::multi_aff<> &pma2) const = delete;
+ inline typed::pw_multi_aff<Domain, Range> preimage_domain_wrapped_domain(const typed::pw_aff<> &pma2) const = delete;
+ template <typename Domain2, typename Range2>
+ inline typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::multi_pw_aff<Domain2, Range2> &multi2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::pw_multi_aff<Domain2, Range2> &pma2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::multi_aff<Domain2, Range2> &pma2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::pw_aff<Domain2, Range2> &pma2) const;
+ template <typename Domain2>
+ inline typed::multi_pw_aff<Domain2, Range> pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa2) const;
+ inline typed::multi_pw_aff<Range> pullback(const typed::multi_pw_aff<Domain> &mpa2) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2, Range> pullback(const typed::multi_aff<Domain2, Domain> &ma) const;
+ inline typed::pw_multi_aff<Range> pullback(const typed::multi_aff<Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2, Range> pullback(const typed::pw_multi_aff<Domain2, Domain> &pma2) const;
+ inline typed::pw_multi_aff<Range> pullback(const typed::pw_multi_aff<Domain> &pma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, Range> pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ inline typed::pw_multi_aff_list<Domain, Range> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<Domain, Range> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<Domain, Range> range_factor_range() const = delete;
+ template <typename Range2>
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> range_product(const typed::pw_multi_aff<Domain, Range2> &pma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_aff<Domain, Range2> &pma2) const;
+ template <typename Range2>
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> range_product(const typed::pw_aff<Domain, Range2> &pma2) const;
+ inline typed::id<Domain, Range> get_range_tuple_id() const = delete;
+ inline typed::multi_pw_aff<Domain, Range> scale(const typed::multi_val<Range> &mv) const;
+ inline typed::pw_multi_aff<Domain, Range> scale(const typed::val<Range> &v) const;
+ inline typed::pw_multi_aff<Domain, Range> scale(long v) const;
+ inline typed::multi_pw_aff<Domain, Range> scale_down(const typed::multi_val<Range> &mv) const;
+ inline typed::pw_multi_aff<Domain, Range> scale_down(const typed::val<Range> &v) const;
+ inline typed::pw_multi_aff<Domain, Range> scale_down(long v) const;
+ inline typed::multi_pw_aff<Domain, Range> set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Domain, Range> set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const;
+ template <typename Range2>
+ inline typed::pw_multi_aff<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::pw_multi_aff<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain, Range> space() const;
+ inline typed::space<Domain, Range> get_space() const = delete;
+ inline typed::multi_pw_aff<Domain, Range> sub(const typed::multi_pw_aff<Domain, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> sub(const typed::multi_union_pw_aff<Domain, Range> &multi2) const;
+ inline typed::pw_multi_aff<Domain, Range> sub(const typed::pw_multi_aff<Domain, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> sub(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::pw_multi_aff<Domain, Range> sub(const typed::multi_aff<Domain, Range> &pma2) const;
+ inline typed::pw_multi_aff<Domain, Range> sub(const typed::pw_aff<Domain, Range> &pma2) const;
+ inline typed::pw_multi_aff<Domain, Range> subtract_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_multi_aff<Domain, Range> subtract_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, Range> subtract_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::pw_multi_aff<Domain, Range> subtract_domain(const typed::basic_set<Domain> &set) const;
+ inline typed::pw_multi_aff<Domain, Range> subtract_domain(const typed::point<Domain> &set) const;
+ inline typed::multi_pw_aff<Domain, Range> to_multi_pw_aff() const;
+ inline typed::union_pw_multi_aff<Domain, Range> to_union_pw_multi_aff() const;
+ inline typed::multi_pw_aff<Domain, Range> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<Domain, Range> union_add(const typed::multi_pw_aff<Domain, Range> &mpa2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> union_add(const typed::multi_union_pw_aff<Domain, Range> &mupa2) const;
+ inline typed::pw_multi_aff<Domain, Range> union_add(const typed::pw_multi_aff<Domain, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> union_add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::pw_multi_aff<Domain, Range> union_add(const typed::multi_aff<Domain, Range> &pma2) const;
+ inline typed::pw_multi_aff<Domain, Range> union_add(const typed::pw_aff<Domain, Range> &pma2) const;
+};
+
+template <typename Domain2, typename Range2, typename Range>
+struct pw_multi_aff<pair<Domain2, Range2>, Range> : public isl::pw_multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_multi_aff() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain2, Arg1>{} &&
+ std::is_base_of<Range2, Arg2>{} &&
+ std::is_base_of<Range, Arg3>{},
+ bool>::type = true>
+ pw_multi_aff(const pw_multi_aff<pair<Arg1, Arg2>, Arg3> &obj) : isl::pw_multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::pw_multi_aff>{}, bool>::type = true>
+ pw_multi_aff(const base &obj) : isl::pw_multi_aff(obj) {}
+ public:
+ static pw_multi_aff from(const isl::pw_multi_aff &obj) {
+ return pw_multi_aff(obj);
+ }
+ inline /* implicit */ pw_multi_aff(const typed::multi_aff<pair<Domain2, Range2>, Range> &ma);
+ inline /* implicit */ pw_multi_aff(const typed::pw_aff<pair<Domain2, Range2>, Range> &pa);
+ inline explicit pw_multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> add(const typed::multi_aff<pair<Domain2, Range2>, Range> &pma2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> add(const typed::pw_aff<pair<Domain2, Range2>, Range> &pma2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> add_constant(const typed::multi_val<Range> &mv) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> add_constant(const typed::val<Range> &v) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> add_constant(long v) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg2> apply(const typed::union_pw_multi_aff<Range, Arg2> &upma2) const;
+ inline typed::map<pair<Domain2, Range2>, Range> as_map() const;
+ inline typed::multi_aff<pair<Domain2, Range2>, Range> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> as_pw_multi_aff() const;
+ inline typed::set<pair<Domain2, Range2>, Range> as_set() const = delete;
+ inline typed::union_map<pair<Domain2, Range2>, Range> as_union_map() const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Anonymous> at(int pos) const;
+ inline typed::pw_aff<pair<Domain2, Range2>, Range> get_at(int pos) const = delete;
+ inline typed::set<pair<Domain2, Range2>> bind(const typed::multi_id<Range> &tuple) const;
+ inline typed::pw_multi_aff<Range> bind_domain(const typed::multi_id<pair<Domain2, Range2>> &tuple) const;
+ inline typed::pw_multi_aff<Range2, Range> bind_domain_wrapped_domain(const typed::multi_id<Domain2> &tuple) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> coalesce() const;
+ inline typed::set<pair<Domain2, Range2>> domain() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> extract_pw_multi_aff(const typed::space<pair<Domain2, Range2>, Range> &space) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> gist(const typed::set<pair<Domain2, Range2>> &set) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> gist(const typed::union_set<pair<Domain2, Range2>> &context) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> gist(const typed::basic_set<pair<Domain2, Range2>> &set) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> gist(const typed::point<pair<Domain2, Range2>> &set) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> identity() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::set<pair<Domain2, Range2>> &set) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::space<pair<Domain2, Range2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::basic_set<pair<Domain2, Range2>> &set) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> intersect_domain(const typed::point<pair<Domain2, Range2>> &set) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> intersect_params(const typed::set<> &set) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> intersect_params(const typed::point<> &set) const;
+ inline typed::pw_aff_list<pair<Domain2, Range2>, Anonymous> list() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> max(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_val<Range> max_multi_val() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> min(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_val<Range> min_multi_val() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> neg() const;
+ template <typename Domain3>
+ inline typed::pw_multi_aff<pair<Domain3, Range2>, Range> preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, Domain2> &pma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, Range2>, Range> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain2> &upma2) const;
+ template <typename Domain3>
+ inline typed::pw_multi_aff<pair<Domain3, Range2>, Range> preimage_domain_wrapped_domain(const typed::multi_aff<Domain3, Domain2> &pma2) const;
+ template <typename Domain3>
+ inline typed::pw_multi_aff<pair<Domain3, Range2>, Range> preimage_domain_wrapped_domain(const typed::pw_aff<Domain3, Domain2> &pma2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::multi_pw_aff<Arg2, Arg3> &multi2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::pw_multi_aff<Arg2, Arg3> &pma2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::multi_aff<Arg2, Arg3> &pma2) const;
+ template <typename Arg2, typename Arg3>
+ inline typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> product(const typed::pw_aff<Arg2, Arg3> &pma2) const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<Arg2, Range> pullback(const typed::multi_pw_aff<Arg2, pair<Domain2, Range2>> &mpa2) const;
+ inline typed::multi_pw_aff<Range> pullback(const typed::multi_pw_aff<pair<Domain2, Range2>> &mpa2) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<Arg2, Range> pullback(const typed::multi_aff<Arg2, pair<Domain2, Range2>> &ma) const;
+ inline typed::pw_multi_aff<Range> pullback(const typed::multi_aff<pair<Domain2, Range2>> &ma) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<Arg2, Range> pullback(const typed::pw_multi_aff<Arg2, pair<Domain2, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<Range> pullback(const typed::pw_multi_aff<pair<Domain2, Range2>> &pma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<Arg2, Range> pullback(const typed::union_pw_multi_aff<Arg2, pair<Domain2, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::union_pw_multi_aff<pair<Domain2, Range2>> &upma2) const;
+ inline typed::pw_multi_aff_list<pair<Domain2, Range2>, Range> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> range_factor_domain() const = delete;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> range_factor_range() const = delete;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::multi_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::pw_multi_aff<pair<Domain2, Range2>, Arg2> &pma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg2> &upma2) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::multi_aff<pair<Domain2, Range2>, Arg2> &pma2) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> range_product(const typed::pw_aff<pair<Domain2, Range2>, Arg2> &pma2) const;
+ inline typed::id<pair<Domain2, Range2>, Range> get_range_tuple_id() const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> scale(const typed::multi_val<Range> &mv) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> scale(const typed::val<Range> &v) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> scale(long v) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> scale_down(const typed::multi_val<Range> &mv) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> scale_down(const typed::val<Range> &v) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> scale_down(long v) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> set_at(int pos, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> set_at(int pos, const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &el) const;
+ template <typename Arg1>
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Arg1>
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> set_range_tuple(const std::string &id) const;
+ inline typed::space<pair<Domain2, Range2>, Range> space() const;
+ inline typed::space<pair<Domain2, Range2>, Range> get_space() const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> sub(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> sub(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> sub(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> sub(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> sub(const typed::multi_aff<pair<Domain2, Range2>, Range> &pma2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> sub(const typed::pw_aff<pair<Domain2, Range2>, Range> &pma2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> subtract_domain(const typed::set<pair<Domain2, Range2>> &set) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> subtract_domain(const typed::space<pair<Domain2, Range2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> subtract_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> subtract_domain(const typed::basic_set<pair<Domain2, Range2>> &set) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> subtract_domain(const typed::point<pair<Domain2, Range2>> &set) const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> to_multi_pw_aff() const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> to_union_pw_multi_aff() const;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<pair<Domain2, Range2>, Range> union_add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &mpa2) const;
+ inline typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> union_add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &mupa2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> union_add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> union_add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> union_add(const typed::multi_aff<pair<Domain2, Range2>, Range> &pma2) const;
+ inline typed::pw_multi_aff<pair<Domain2, Range2>, Range> union_add(const typed::pw_aff<pair<Domain2, Range2>, Range> &pma2) const;
+};
+
+template <typename Domain, typename Range, typename Range2>
+struct pw_multi_aff<Domain, pair<Range, Range2>> : public isl::pw_multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_multi_aff() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{} &&
+ std::is_base_of<Range2, Arg3>{},
+ bool>::type = true>
+ pw_multi_aff(const pw_multi_aff<Arg1, pair<Arg2, Arg3>> &obj) : isl::pw_multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::pw_multi_aff>{}, bool>::type = true>
+ pw_multi_aff(const base &obj) : isl::pw_multi_aff(obj) {}
+ public:
+ static pw_multi_aff from(const isl::pw_multi_aff &obj) {
+ return pw_multi_aff(obj);
+ }
+ inline /* implicit */ pw_multi_aff(const typed::multi_aff<Domain, pair<Range, Range2>> &ma);
+ inline /* implicit */ pw_multi_aff(const typed::pw_aff<Domain, pair<Range, Range2>> &pa);
+ inline explicit pw_multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> add(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> add(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> add(const typed::multi_aff<Domain, pair<Range, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> add(const typed::pw_aff<Domain, pair<Range, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> add_constant(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> add_constant(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> add_constant(long v) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, Arg3> apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg3> &upma2) const;
+ inline typed::map<Domain, pair<Range, Range2>> as_map() const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> as_pw_multi_aff() const;
+ inline typed::set<Domain, pair<Range, Range2>> as_set() const = delete;
+ inline typed::union_map<Domain, pair<Range, Range2>> as_union_map() const;
+ inline typed::pw_aff<Domain, Anonymous> at(int pos) const;
+ inline typed::pw_aff<Domain, pair<Range, Range2>> get_at(int pos) const = delete;
+ inline typed::set<Domain> bind(const typed::multi_id<pair<Range, Range2>> &tuple) const;
+ inline typed::pw_multi_aff<pair<Range, Range2>> bind_domain(const typed::multi_id<Domain> &tuple) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> coalesce() const;
+ inline typed::set<Domain> domain() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> extract_pw_multi_aff(const typed::space<Domain, pair<Range, Range2>> &space) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> gist(const typed::set<Domain> &set) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> gist(const typed::union_set<Domain> &context) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> gist(const typed::basic_set<Domain> &set) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> gist(const typed::point<Domain> &set) const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> identity() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> intersect_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> intersect_domain(const typed::basic_set<Domain> &set) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> intersect_domain(const typed::point<Domain> &set) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> intersect_params(const typed::set<> &set) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> intersect_params(const typed::point<> &set) const;
+ inline typed::pw_aff_list<Domain, Anonymous> list() const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> max(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_val<pair<Range, Range2>> max_multi_val() const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> min(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_val<pair<Range, Range2>> min_multi_val() const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> neg() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::multi_aff<> &pma2) const = delete;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::pw_aff<> &pma2) const = delete;
+ template <typename Domain2, typename Arg3>
+ inline typed::multi_pw_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::multi_pw_aff<Domain2, Arg3> &multi2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::pw_multi_aff<Domain2, Arg3> &pma2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::multi_aff<Domain2, Arg3> &pma2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::pw_aff<Domain2, Arg3> &pma2) const;
+ template <typename Domain2>
+ inline typed::multi_pw_aff<Domain2, pair<Range, Range2>> pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa2) const;
+ inline typed::multi_pw_aff<pair<Range, Range2>> pullback(const typed::multi_pw_aff<Domain> &mpa2) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::multi_aff<Domain2, Domain> &ma) const;
+ inline typed::pw_multi_aff<pair<Range, Range2>> pullback(const typed::multi_aff<Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::pw_multi_aff<Domain2, Domain> &pma2) const;
+ inline typed::pw_multi_aff<pair<Range, Range2>> pullback(const typed::pw_multi_aff<Domain> &pma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ inline typed::pw_multi_aff_list<Domain, pair<Range, Range2>> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<Domain, Range> range_factor_domain() const;
+ inline typed::pw_multi_aff<Domain, Range2> range_factor_range() const;
+ template <typename Arg3>
+ inline typed::multi_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::multi_pw_aff<Domain, Arg3> &multi2) const;
+ template <typename Arg3>
+ inline typed::multi_union_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::multi_union_pw_aff<Domain, Arg3> &multi2) const;
+ template <typename Arg3>
+ inline typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::pw_multi_aff<Domain, Arg3> &pma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::union_pw_multi_aff<Domain, Arg3> &upma2) const;
+ template <typename Arg3>
+ inline typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::multi_aff<Domain, Arg3> &pma2) const;
+ template <typename Arg3>
+ inline typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::pw_aff<Domain, Arg3> &pma2) const;
+ inline typed::id<Domain, pair<Range, Range2>> get_range_tuple_id() const = delete;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> scale(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> scale(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> scale(long v) const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> scale_down(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> scale_down(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> scale_down(long v) const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> space() const;
+ inline typed::space<Domain, pair<Range, Range2>> get_space() const = delete;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> sub(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> sub(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &multi2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> sub(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> sub(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> sub(const typed::multi_aff<Domain, pair<Range, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> sub(const typed::pw_aff<Domain, pair<Range, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> subtract_domain(const typed::set<Domain> &set) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> subtract_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> subtract_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> subtract_domain(const typed::basic_set<Domain> &set) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> subtract_domain(const typed::point<Domain> &set) const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> to_multi_pw_aff() const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> to_union_pw_multi_aff() const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> union_add(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &mpa2) const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> union_add(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &mupa2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> union_add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> union_add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> union_add(const typed::multi_aff<Domain, pair<Range, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> union_add(const typed::pw_aff<Domain, pair<Range, Range2>> &pma2) const;
+};
+
+template <typename T1, typename T2, typename Range, typename Range2>
+struct pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> : public isl::pw_multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_multi_aff() = default;
+ template <typename Arg1, typename Arg2, typename Arg3, typename Arg4,
+ typename std::enable_if<
+ std::is_base_of<T1, Arg1>{} &&
+ std::is_base_of<T2, Arg2>{} &&
+ std::is_base_of<Range, Arg3>{} &&
+ std::is_base_of<Range2, Arg4>{},
+ bool>::type = true>
+ pw_multi_aff(const pw_multi_aff<pair<Arg1, Arg2>, pair<Arg3, Arg4>> &obj) : isl::pw_multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::pw_multi_aff>{}, bool>::type = true>
+ pw_multi_aff(const base &obj) : isl::pw_multi_aff(obj) {}
+ public:
+ static pw_multi_aff from(const isl::pw_multi_aff &obj) {
+ return pw_multi_aff(obj);
+ }
+ inline /* implicit */ pw_multi_aff(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &ma);
+ inline /* implicit */ pw_multi_aff(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &pa);
+ inline explicit pw_multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add_constant(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add_constant(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add_constant(long v) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, Arg2> apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg2> &upma2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> as_map() const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> as_multi_aff() const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> as_pw_multi_aff() const;
+ inline typed::set<pair<T1, T2>, pair<Range, Range2>> as_set() const = delete;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> as_union_map() const;
+ inline typed::pw_aff<pair<T1, T2>, Anonymous> at(int pos) const;
+ inline typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> get_at(int pos) const = delete;
+ inline typed::set<pair<T1, T2>> bind(const typed::multi_id<pair<Range, Range2>> &tuple) const;
+ inline typed::pw_multi_aff<pair<Range, Range2>> bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const;
+ inline typed::pw_multi_aff<T2, pair<Range, Range2>> bind_domain_wrapped_domain(const typed::multi_id<T1> &tuple) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> coalesce() const;
+ inline typed::set<pair<T1, T2>> domain() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> extract_pw_multi_aff(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::set<pair<T1, T2>> &set) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::union_set<pair<T1, T2>> &context) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::basic_set<pair<T1, T2>> &set) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::point<pair<T1, T2>> &set) const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> identity() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::set<pair<T1, T2>> &set) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::basic_set<pair<T1, T2>> &set) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::point<pair<T1, T2>> &set) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::set<> &set) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::point<> &set) const;
+ inline typed::pw_aff_list<pair<T1, T2>, Anonymous> list() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> max(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_val<pair<Range, Range2>> max_multi_val() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> min(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_val<pair<Range, Range2>> min_multi_val() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> neg() const;
+ template <typename Domain3>
+ inline typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, T1> &pma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, T1> &upma2) const;
+ template <typename Domain3>
+ inline typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::multi_aff<Domain3, T1> &pma2) const;
+ template <typename Domain3>
+ inline typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::pw_aff<Domain3, T1> &pma2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::multi_pw_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::multi_pw_aff<Domain2, Arg2> &multi2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::pw_multi_aff<Domain2, Arg2> &pma2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::multi_aff<Domain2, Arg2> &pma2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::pw_aff<Domain2, Arg2> &pma2) const;
+ template <typename Domain2>
+ inline typed::multi_pw_aff<Domain2, pair<Range, Range2>> pullback(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa2) const;
+ inline typed::multi_pw_aff<pair<Range, Range2>> pullback(const typed::multi_pw_aff<pair<T1, T2>> &mpa2) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const;
+ inline typed::pw_multi_aff<pair<Range, Range2>> pullback(const typed::multi_aff<pair<T1, T2>> &ma) const;
+ template <typename Domain2>
+ inline typed::pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma2) const;
+ inline typed::pw_multi_aff<pair<Range, Range2>> pullback(const typed::pw_multi_aff<pair<T1, T2>> &pma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<pair<T1, T2>> &upma2) const;
+ inline typed::pw_multi_aff_list<pair<T1, T2>, pair<Range, Range2>> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, Range> range_factor_domain() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, Range2> range_factor_range() const;
+ template <typename Arg2>
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::multi_pw_aff<pair<T1, T2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::multi_union_pw_aff<pair<T1, T2>, Arg2> &multi2) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::pw_multi_aff<pair<T1, T2>, Arg2> &pma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::union_pw_multi_aff<pair<T1, T2>, Arg2> &upma2) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::multi_aff<pair<T1, T2>, Arg2> &pma2) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::pw_aff<pair<T1, T2>, Arg2> &pma2) const;
+ inline typed::id<pair<T1, T2>, pair<Range, Range2>> get_range_tuple_id() const = delete;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> scale(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> scale(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> scale(long v) const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> scale_down(const typed::multi_val<pair<Range, Range2>> &mv) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> scale_down(const typed::val<pair<Range, Range2>> &v) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> scale_down(long v) const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> set_at(int pos, const typed::pw_aff<pair<T1, T2>, Anonymous> &el) const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> set_at(int pos, const typed::union_pw_aff<pair<T1, T2>, Anonymous> &el) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> space() const;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> get_space() const = delete;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::set<pair<T1, T2>> &set) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::basic_set<pair<T1, T2>> &set) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::point<pair<T1, T2>> &set) const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> to_multi_pw_aff() const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> to_union_pw_multi_aff() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &mpa2) const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &mupa2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const;
+};
+
+template <typename Domain>
+struct pw_multi_aff_list<Domain> : public isl::pw_multi_aff_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_multi_aff_list() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ pw_multi_aff_list(const pw_multi_aff_list<Arg1> &obj) : isl::pw_multi_aff_list(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::pw_multi_aff_list>{}, bool>::type = true>
+ pw_multi_aff_list(const base &obj) : isl::pw_multi_aff_list(obj) {}
+ public:
+ static pw_multi_aff_list from(const isl::pw_multi_aff_list &obj) {
+ return pw_multi_aff_list(obj);
+ }
+ inline explicit pw_multi_aff_list(const isl::ctx &ctx, int n);
+ inline explicit pw_multi_aff_list(const typed::pw_multi_aff<Domain> &el);
+ inline explicit pw_multi_aff_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::pw_multi_aff_list<Domain> add(const typed::pw_multi_aff<Domain> &el) const;
+ inline typed::pw_multi_aff_list<Domain> add(const typed::multi_aff<Domain> &el) const;
+ inline typed::pw_multi_aff_list<Domain> add(const typed::pw_aff<Domain> &el) const;
+ inline typed::pw_multi_aff<Domain> at(int index) const;
+ inline typed::pw_multi_aff<Domain> get_at(int index) const = delete;
+ inline typed::pw_multi_aff_list<Domain> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::pw_multi_aff<Domain>)> &fn) const;
+};
+
+template <typename Domain, typename Range>
+struct pw_multi_aff_list<Domain, Range> : public isl::pw_multi_aff_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ pw_multi_aff_list() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ pw_multi_aff_list(const pw_multi_aff_list<Arg1, Arg2> &obj) : isl::pw_multi_aff_list(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::pw_multi_aff_list>{}, bool>::type = true>
+ pw_multi_aff_list(const base &obj) : isl::pw_multi_aff_list(obj) {}
+ public:
+ static pw_multi_aff_list from(const isl::pw_multi_aff_list &obj) {
+ return pw_multi_aff_list(obj);
+ }
+ inline explicit pw_multi_aff_list(const isl::ctx &ctx, int n);
+ inline explicit pw_multi_aff_list(const typed::pw_multi_aff<Domain, Range> &el);
+ inline explicit pw_multi_aff_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::pw_multi_aff_list<Domain, Range> add(const typed::pw_multi_aff<Domain, Range> &el) const;
+ inline typed::pw_multi_aff_list<Domain, Range> add(const typed::multi_aff<Domain, Range> &el) const;
+ inline typed::pw_multi_aff_list<Domain, Range> add(const typed::pw_aff<Domain, Range> &el) const;
+ inline typed::pw_multi_aff<Domain, Range> at(int index) const;
+ inline typed::pw_multi_aff<Domain, Range> get_at(int index) const = delete;
+ inline typed::pw_multi_aff_list<Domain, Range> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::pw_multi_aff<Domain, Range>)> &fn) const;
+};
+
+template <>
+struct set<> : public isl::set {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ set() = default;
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::set>{}, bool>::type = true>
+ set(const base &obj) : isl::set(obj) {}
+ public:
+ static set from(const isl::set &obj) {
+ return set(obj);
+ }
+ inline /* implicit */ set(const typed::basic_set<> &bset);
+ inline /* implicit */ set(const typed::point<> &pnt);
+ inline explicit set(const isl::ctx &ctx, const std::string &str);
+ inline typed::set<> apply(const typed::map<> &map) const = delete;
+ inline typed::union_set<> apply(const typed::union_map<> &umap) const = delete;
+ inline typed::set<> apply(const typed::basic_map<> &map) const = delete;
+ inline typed::pw_multi_aff<> as_pw_multi_aff() const = delete;
+ inline typed::set<> as_set() const = delete;
+ inline typed::set<> bind(const typed::multi_id<> &tuple) const = delete;
+ inline typed::set<> coalesce() const;
+ inline typed::set<> detect_equalities() const;
+ inline bool every_set(const std::function<bool(typed::set<>)> &test) const;
+ inline typed::set<> extract_set(const typed::space<> &space) const;
+ inline void foreach_basic_set(const std::function<void(typed::basic_set<>)> &fn) const;
+ inline void foreach_point(const std::function<void(typed::point<>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<>)> &fn) const;
+ inline typed::set<> gist(const typed::set<> &context) const;
+ inline typed::union_set<> gist(const typed::union_set<> &context) const;
+ inline typed::set<> gist(const typed::basic_set<> &context) const;
+ inline typed::set<> gist(const typed::point<> &context) const;
+ inline typed::map<> identity() const = delete;
+ inline typed::pw_aff<Anonymous> indicator_function() const;
+ inline typed::map<> insert_domain(const typed::space<> &domain) const = delete;
+ inline typed::set<> intersect(const typed::set<> &set2) const;
+ inline typed::union_set<> intersect(const typed::union_set<> &uset2) const;
+ inline typed::set<> intersect(const typed::basic_set<> &set2) const;
+ inline typed::set<> intersect(const typed::point<> &set2) const;
+ inline typed::set<> intersect_params(const typed::set<> ¶ms) const = delete;
+ inline typed::set<> intersect_params(const typed::basic_set<> ¶ms) const = delete;
+ inline typed::set<> intersect_params(const typed::point<> ¶ms) const = delete;
+ inline typed::set<> lexmax() const = delete;
+ inline typed::pw_multi_aff<> lexmax_pw_multi_aff() const = delete;
+ inline typed::set<> lexmin() const = delete;
+ inline typed::pw_multi_aff<> lexmin_pw_multi_aff() const = delete;
+ inline typed::set<> lower_bound(const typed::multi_pw_aff<> &lower) const = delete;
+ inline typed::set<> lower_bound(const typed::multi_val<> &lower) const = delete;
+ inline typed::multi_pw_aff<> max_multi_pw_aff() const = delete;
+ inline typed::val<> max_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_pw_aff<> min_multi_pw_aff() const = delete;
+ inline typed::val<> min_val(const typed::aff<> &obj) const = delete;
+ inline typed::set<> params() const = delete;
+ inline typed::multi_val<> plain_multi_val_if_fixed() const = delete;
+ inline typed::multi_val<> get_plain_multi_val_if_fixed() const = delete;
+ inline typed::set<> preimage(const typed::multi_aff<> &ma) const = delete;
+ inline typed::set<> preimage(const typed::multi_pw_aff<> &mpa) const = delete;
+ inline typed::set<> preimage(const typed::pw_multi_aff<> &pma) const = delete;
+ inline typed::union_set<> preimage(const typed::union_pw_multi_aff<> &upma) const = delete;
+ inline typed::set<> product(const typed::set<> &set2) const = delete;
+ inline typed::set<> product(const typed::basic_set<> &set2) const = delete;
+ inline typed::set<> product(const typed::point<> &set2) const = delete;
+ inline typed::set<> project_out_all_params() const;
+ inline typed::set<> project_out_param(const typed::id<Anonymous> &id) const;
+ inline typed::set<> project_out_param(const std::string &id) const;
+ inline typed::set<> project_out_param(const typed::id_list<Anonymous> &list) const;
+ inline typed::pw_multi_aff<> pw_multi_aff_on_domain(const typed::multi_val<> &mv) const = delete;
+ inline typed::fixed_box<> simple_fixed_box_hull() const = delete;
+ inline typed::fixed_box<> get_simple_fixed_box_hull() const = delete;
+ inline typed::space<> space() const;
+ inline typed::space<> get_space() const = delete;
+ inline typed::val<> get_stride(int pos) const = delete;
+ inline typed::set<> subtract(const typed::set<> &set2) const;
+ inline typed::union_set<> subtract(const typed::union_set<> &uset2) const;
+ inline typed::set<> subtract(const typed::basic_set<> &set2) const;
+ inline typed::set<> subtract(const typed::point<> &set2) const;
+ inline typed::union_set<> to_union_set() const;
+ inline typed::map<> translation() const = delete;
+ template <typename Domain>
+ inline typed::set<Domain> unbind_params(const typed::multi_id<Domain> &tuple) const;
+ inline typed::map<> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete;
+ inline typed::set<> unite(const typed::set<> &set2) const;
+ inline typed::union_set<> unite(const typed::union_set<> &uset2) const;
+ inline typed::set<> unite(const typed::basic_set<> &set2) const;
+ inline typed::set<> unite(const typed::point<> &set2) const;
+ static inline typed::set<> universe(const typed::space<> &space);
+ inline typed::map<> unwrap() const = delete;
+ inline typed::set<> upper_bound(const typed::multi_pw_aff<> &upper) const = delete;
+ inline typed::set<> upper_bound(const typed::multi_val<> &upper) const = delete;
+};
+
+template <typename Domain>
+struct set<Domain> : public isl::set {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ set() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ set(const set<Arg1> &obj) : isl::set(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::set>{}, bool>::type = true>
+ set(const base &obj) : isl::set(obj) {}
+ public:
+ static set from(const isl::set &obj) {
+ return set(obj);
+ }
+ inline /* implicit */ set(const typed::basic_set<Domain> &bset);
+ inline /* implicit */ set(const typed::point<Domain> &pnt);
+ inline explicit set(const isl::ctx &ctx, const std::string &str);
+ template <typename Range>
+ inline typed::set<Range> apply(const typed::map<Domain, Range> &map) const;
+ template <typename Range>
+ inline typed::union_set<Range> apply(const typed::union_map<Domain, Range> &umap) const;
+ template <typename Range>
+ inline typed::set<Range> apply(const typed::basic_map<Domain, Range> &map) const;
+ inline typed::pw_multi_aff<Domain> as_pw_multi_aff() const;
+ inline typed::set<Domain> as_set() const;
+ inline typed::set<> bind(const typed::multi_id<Domain> &tuple) const;
+ inline typed::set<Domain> coalesce() const;
+ inline typed::set<Domain> detect_equalities() const;
+ inline bool every_set(const std::function<bool(typed::set<Domain>)> &test) const;
+ inline typed::set<Domain> extract_set(const typed::space<Domain> &space) const;
+ inline void foreach_basic_set(const std::function<void(typed::basic_set<Domain>)> &fn) const;
+ inline void foreach_point(const std::function<void(typed::point<Domain>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<Domain>)> &fn) const;
+ inline typed::set<Domain> gist(const typed::set<Domain> &context) const;
+ inline typed::union_set<Domain> gist(const typed::union_set<Domain> &context) const;
+ inline typed::set<Domain> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::set<Domain> gist(const typed::point<Domain> &context) const;
+ inline typed::map<Domain, Domain> identity() const;
+ inline typed::pw_aff<Domain, Anonymous> indicator_function() const;
+ template <typename Arg1>
+ inline typed::map<Arg1, Domain> insert_domain(const typed::space<Arg1> &domain) const;
+ inline typed::set<Domain> intersect(const typed::set<Domain> &set2) const;
+ inline typed::union_set<Domain> intersect(const typed::union_set<Domain> &uset2) const;
+ inline typed::set<Domain> intersect(const typed::basic_set<Domain> &set2) const;
+ inline typed::set<Domain> intersect(const typed::point<Domain> &set2) const;
+ inline typed::set<Domain> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::set<Domain> intersect_params(const typed::basic_set<> ¶ms) const;
+ inline typed::set<Domain> intersect_params(const typed::point<> ¶ms) const;
+ inline typed::set<Domain> lexmax() const;
+ inline typed::pw_multi_aff<Domain> lexmax_pw_multi_aff() const;
+ inline typed::set<Domain> lexmin() const;
+ inline typed::pw_multi_aff<Domain> lexmin_pw_multi_aff() const;
+ inline typed::set<Domain> lower_bound(const typed::multi_pw_aff<Domain> &lower) const;
+ inline typed::set<Domain> lower_bound(const typed::multi_val<Domain> &lower) const;
+ inline typed::multi_pw_aff<Domain> max_multi_pw_aff() const;
+ inline typed::val<Domain> max_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_pw_aff<Domain> min_multi_pw_aff() const;
+ inline typed::val<Domain> min_val(const typed::aff<> &obj) const = delete;
+ inline typed::set<> params() const;
+ inline typed::multi_val<Domain> plain_multi_val_if_fixed() const;
+ inline typed::multi_val<Domain> get_plain_multi_val_if_fixed() const = delete;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Range>
+ inline typed::set<pair<Domain, Range>> product(const typed::set<Range> &set2) const;
+ template <typename Range>
+ inline typed::set<pair<Domain, Range>> product(const typed::basic_set<Range> &set2) const;
+ template <typename Range>
+ inline typed::set<pair<Domain, Range>> product(const typed::point<Range> &set2) const;
+ inline typed::set<Domain> project_out_all_params() const;
+ inline typed::set<Domain> project_out_param(const typed::id<Anonymous> &id) const;
+ inline typed::set<Domain> project_out_param(const std::string &id) const;
+ inline typed::set<Domain> project_out_param(const typed::id_list<Anonymous> &list) const;
+ template <typename Range>
+ inline typed::pw_multi_aff<Domain, Range> pw_multi_aff_on_domain(const typed::multi_val<Range> &mv) const;
+ inline typed::fixed_box<Domain> simple_fixed_box_hull() const;
+ inline typed::fixed_box<Domain> get_simple_fixed_box_hull() const = delete;
+ inline typed::space<Domain> space() const;
+ inline typed::space<Domain> get_space() const = delete;
+ inline typed::val<Domain> get_stride(int pos) const = delete;
+ inline typed::set<Domain> subtract(const typed::set<Domain> &set2) const;
+ inline typed::union_set<Domain> subtract(const typed::union_set<Domain> &uset2) const;
+ inline typed::set<Domain> subtract(const typed::basic_set<Domain> &set2) const;
+ inline typed::set<Domain> subtract(const typed::point<Domain> &set2) const;
+ inline typed::union_set<Domain> to_union_set() const;
+ inline typed::map<Domain, Domain> translation() const;
+ inline typed::set<Domain> unbind_params(const typed::multi_id<> &tuple) const = delete;
+ template <typename Arg1>
+ inline typed::map<Arg1, Domain> unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const;
+ inline typed::set<Domain> unite(const typed::set<Domain> &set2) const;
+ inline typed::union_set<Domain> unite(const typed::union_set<Domain> &uset2) const;
+ inline typed::set<Domain> unite(const typed::basic_set<Domain> &set2) const;
+ inline typed::set<Domain> unite(const typed::point<Domain> &set2) const;
+ static inline typed::set<Domain> universe(const typed::space<Domain> &space);
+ inline typed::map<Domain> unwrap() const = delete;
+ inline typed::set<Domain> upper_bound(const typed::multi_pw_aff<Domain> &upper) const;
+ inline typed::set<Domain> upper_bound(const typed::multi_val<Domain> &upper) const;
+};
+
+template <typename Domain, typename Range>
+struct set<pair<Domain, Range>> : public isl::set {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ set() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ set(const set<pair<Arg1, Arg2>> &obj) : isl::set(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::set>{}, bool>::type = true>
+ set(const base &obj) : isl::set(obj) {}
+ public:
+ static set from(const isl::set &obj) {
+ return set(obj);
+ }
+ inline /* implicit */ set(const typed::basic_set<pair<Domain, Range>> &bset);
+ inline /* implicit */ set(const typed::point<pair<Domain, Range>> &pnt);
+ inline explicit set(const isl::ctx &ctx, const std::string &str);
+ template <typename Arg2>
+ inline typed::set<Arg2> apply(const typed::map<pair<Domain, Range>, Arg2> &map) const;
+ template <typename Arg2>
+ inline typed::union_set<Arg2> apply(const typed::union_map<pair<Domain, Range>, Arg2> &umap) const;
+ template <typename Arg2>
+ inline typed::set<Arg2> apply(const typed::basic_map<pair<Domain, Range>, Arg2> &map) const;
+ inline typed::pw_multi_aff<pair<Domain, Range>> as_pw_multi_aff() const;
+ inline typed::set<pair<Domain, Range>> as_set() const;
+ inline typed::set<> bind(const typed::multi_id<pair<Domain, Range>> &tuple) const;
+ inline typed::set<pair<Domain, Range>> coalesce() const;
+ inline typed::set<pair<Domain, Range>> detect_equalities() const;
+ inline bool every_set(const std::function<bool(typed::set<pair<Domain, Range>>)> &test) const;
+ inline typed::set<pair<Domain, Range>> extract_set(const typed::space<pair<Domain, Range>> &space) const;
+ inline void foreach_basic_set(const std::function<void(typed::basic_set<pair<Domain, Range>>)> &fn) const;
+ inline void foreach_point(const std::function<void(typed::point<pair<Domain, Range>>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<pair<Domain, Range>>)> &fn) const;
+ inline typed::set<pair<Domain, Range>> gist(const typed::set<pair<Domain, Range>> &context) const;
+ inline typed::union_set<pair<Domain, Range>> gist(const typed::union_set<pair<Domain, Range>> &context) const;
+ inline typed::set<pair<Domain, Range>> gist(const typed::basic_set<pair<Domain, Range>> &context) const;
+ inline typed::set<pair<Domain, Range>> gist(const typed::point<pair<Domain, Range>> &context) const;
+ inline typed::map<pair<Domain, Range>, pair<Domain, Range>> identity() const;
+ inline typed::pw_aff<pair<Domain, Range>, Anonymous> indicator_function() const;
+ template <typename Arg2>
+ inline typed::map<Arg2, pair<Domain, Range>> insert_domain(const typed::space<Arg2> &domain) const;
+ inline typed::set<pair<Domain, Range>> intersect(const typed::set<pair<Domain, Range>> &set2) const;
+ inline typed::union_set<pair<Domain, Range>> intersect(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::set<pair<Domain, Range>> intersect(const typed::basic_set<pair<Domain, Range>> &set2) const;
+ inline typed::set<pair<Domain, Range>> intersect(const typed::point<pair<Domain, Range>> &set2) const;
+ inline typed::set<pair<Domain, Range>> intersect_params(const typed::set<> ¶ms) const;
+ inline typed::set<pair<Domain, Range>> intersect_params(const typed::basic_set<> ¶ms) const;
+ inline typed::set<pair<Domain, Range>> intersect_params(const typed::point<> ¶ms) const;
+ inline typed::set<pair<Domain, Range>> lexmax() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>> lexmax_pw_multi_aff() const;
+ inline typed::set<pair<Domain, Range>> lexmin() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>> lexmin_pw_multi_aff() const;
+ inline typed::set<pair<Domain, Range>> lower_bound(const typed::multi_pw_aff<pair<Domain, Range>> &lower) const;
+ inline typed::set<pair<Domain, Range>> lower_bound(const typed::multi_val<pair<Domain, Range>> &lower) const;
+ inline typed::multi_pw_aff<pair<Domain, Range>> max_multi_pw_aff() const;
+ inline typed::val<pair<Domain, Range>> max_val(const typed::aff<> &obj) const = delete;
+ inline typed::multi_pw_aff<pair<Domain, Range>> min_multi_pw_aff() const;
+ inline typed::val<pair<Domain, Range>> min_val(const typed::aff<> &obj) const = delete;
+ inline typed::set<> params() const;
+ inline typed::multi_val<pair<Domain, Range>> plain_multi_val_if_fixed() const;
+ inline typed::multi_val<pair<Domain, Range>> get_plain_multi_val_if_fixed() const = delete;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const;
+ template <typename Domain2>
+ inline typed::set<Domain2> preimage(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const;
+ template <typename Arg2>
+ inline typed::set<pair<pair<Domain, Range>, Arg2>> product(const typed::set<Arg2> &set2) const;
+ template <typename Arg2>
+ inline typed::set<pair<pair<Domain, Range>, Arg2>> product(const typed::basic_set<Arg2> &set2) const;
+ template <typename Arg2>
+ inline typed::set<pair<pair<Domain, Range>, Arg2>> product(const typed::point<Arg2> &set2) const;
+ inline typed::set<pair<Domain, Range>> project_out_all_params() const;
+ inline typed::set<pair<Domain, Range>> project_out_param(const typed::id<Anonymous> &id) const;
+ inline typed::set<pair<Domain, Range>> project_out_param(const std::string &id) const;
+ inline typed::set<pair<Domain, Range>> project_out_param(const typed::id_list<Anonymous> &list) const;
+ template <typename Arg2>
+ inline typed::pw_multi_aff<pair<Domain, Range>, Arg2> pw_multi_aff_on_domain(const typed::multi_val<Arg2> &mv) const;
+ inline typed::fixed_box<pair<Domain, Range>> simple_fixed_box_hull() const;
+ inline typed::fixed_box<pair<Domain, Range>> get_simple_fixed_box_hull() const = delete;
+ inline typed::space<pair<Domain, Range>> space() const;
+ inline typed::space<pair<Domain, Range>> get_space() const = delete;
+ inline typed::val<pair<Domain, Range>> get_stride(int pos) const = delete;
+ inline typed::set<pair<Domain, Range>> subtract(const typed::set<pair<Domain, Range>> &set2) const;
+ inline typed::union_set<pair<Domain, Range>> subtract(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::set<pair<Domain, Range>> subtract(const typed::basic_set<pair<Domain, Range>> &set2) const;
+ inline typed::set<pair<Domain, Range>> subtract(const typed::point<pair<Domain, Range>> &set2) const;
+ inline typed::union_set<pair<Domain, Range>> to_union_set() const;
+ inline typed::map<pair<Domain, Range>, pair<Domain, Range>> translation() const;
+ inline typed::set<pair<Domain, Range>> unbind_params(const typed::multi_id<> &tuple) const = delete;
+ template <typename Arg2>
+ inline typed::map<Arg2, pair<Domain, Range>> unbind_params_insert_domain(const typed::multi_id<Arg2> &domain) const;
+ inline typed::set<pair<Domain, Range>> unite(const typed::set<pair<Domain, Range>> &set2) const;
+ inline typed::union_set<pair<Domain, Range>> unite(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::set<pair<Domain, Range>> unite(const typed::basic_set<pair<Domain, Range>> &set2) const;
+ inline typed::set<pair<Domain, Range>> unite(const typed::point<pair<Domain, Range>> &set2) const;
+ static inline typed::set<pair<Domain, Range>> universe(const typed::space<pair<Domain, Range>> &space);
+ inline typed::map<Domain, Range> unwrap() const;
+ inline typed::set<pair<Domain, Range>> upper_bound(const typed::multi_pw_aff<pair<Domain, Range>> &upper) const;
+ inline typed::set<pair<Domain, Range>> upper_bound(const typed::multi_val<pair<Domain, Range>> &upper) const;
+};
+
+template <>
+struct space<> : public isl::space {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ space() = default;
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::space>{}, bool>::type = true>
+ space(const base &obj) : isl::space(obj) {}
+ public:
+ static space from(const isl::space &obj) {
+ return space(obj);
+ }
+ template <typename Domain>
+ inline typed::space<Domain> add_named_tuple(const typed::id<Anonymous> &tuple_id, unsigned int dim) const;
+ template <typename Domain>
+ inline typed::space<Domain> add_named_tuple(const std::string &tuple_id, unsigned int dim) const;
+ inline typed::space<> add_param(const typed::id<Anonymous> &id) const;
+ inline typed::space<> add_param(const std::string &id) const;
+ template <typename Domain>
+ inline typed::space<Domain> add_unnamed_tuple(unsigned int dim) const;
+ inline typed::space<> curry() const = delete;
+ inline typed::space<> domain() const = delete;
+ inline typed::multi_aff<> domain_map_multi_aff() const = delete;
+ inline typed::pw_multi_aff<> domain_map_pw_multi_aff() const = delete;
+ inline typed::id<> get_domain_tuple_id() const = delete;
+ inline typed::space<> flatten_domain() const = delete;
+ inline typed::space<> flatten_range() const = delete;
+ inline typed::multi_aff<> identity_multi_aff_on_domain() const = delete;
+ inline typed::multi_pw_aff<> identity_multi_pw_aff_on_domain() const = delete;
+ inline typed::pw_multi_aff<> identity_pw_multi_aff_on_domain() const = delete;
+ inline typed::space<> map_from_set() const = delete;
+ inline typed::multi_aff<> multi_aff(const typed::aff_list<> &list) const = delete;
+ inline typed::multi_aff<> multi_aff_on_domain(const typed::multi_val<> &mv) const = delete;
+ inline typed::multi_id<> multi_id(const typed::id_list<> &list) const = delete;
+ inline typed::multi_pw_aff<> multi_pw_aff(const typed::pw_aff_list<> &list) const = delete;
+ inline typed::multi_union_pw_aff<> multi_union_pw_aff(const typed::union_pw_aff_list<> &list) const = delete;
+ inline typed::multi_val<> multi_val(const typed::val_list<> &list) const = delete;
+ inline typed::aff<Anonymous> param_aff_on_domain(const typed::id<Anonymous> &id) const;
+ inline typed::aff<Anonymous> param_aff_on_domain(const std::string &id) const;
+ inline typed::space<> params() const = delete;
+ inline typed::space<> product(const typed::space<> &right) const = delete;
+ inline typed::space<> range() const = delete;
+ inline typed::multi_aff<> range_map_multi_aff() const = delete;
+ inline typed::pw_multi_aff<> range_map_pw_multi_aff() const = delete;
+ inline typed::space<> range_reverse() const = delete;
+ inline typed::id<> get_range_tuple_id() const = delete;
+ inline typed::space<> reverse() const = delete;
+ inline typed::space<> set_domain_tuple(const typed::id<> &id) const = delete;
+ inline typed::space<> set_domain_tuple(const std::string &id) const = delete;
+ inline typed::space<> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::space<> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<> uncurry() const = delete;
+ static inline typed::space<> unit(const isl::ctx &ctx);
+ inline typed::map<> universe_map() const = delete;
+ inline typed::set<> universe_set() const;
+ inline typed::space<> unwrap() const = delete;
+ inline typed::space<> wrap() const = delete;
+ inline typed::aff<> zero_aff_on_domain() const = delete;
+ inline typed::multi_aff<> zero_multi_aff() const = delete;
+ inline typed::multi_pw_aff<> zero_multi_pw_aff() const = delete;
+ inline typed::multi_union_pw_aff<> zero_multi_union_pw_aff() const = delete;
+ inline typed::multi_val<> zero_multi_val() const = delete;
+};
+
+template <typename Domain>
+struct space<Domain> : public isl::space {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ space() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ space(const space<Arg1> &obj) : isl::space(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::space>{}, bool>::type = true>
+ space(const base &obj) : isl::space(obj) {}
+ public:
+ static space from(const isl::space &obj) {
+ return space(obj);
+ }
+ template <typename Range>
+ inline typed::space<Domain, Range> add_named_tuple(const typed::id<Anonymous> &tuple_id, unsigned int dim) const;
+ template <typename Range>
+ inline typed::space<Domain, Range> add_named_tuple(const std::string &tuple_id, unsigned int dim) const;
+ inline typed::space<Domain> add_param(const typed::id<Anonymous> &id) const;
+ inline typed::space<Domain> add_param(const std::string &id) const;
+ template <typename Range>
+ inline typed::space<Domain, Range> add_unnamed_tuple(unsigned int dim) const;
+ inline typed::space<Domain> curry() const = delete;
+ inline typed::space<> domain() const;
+ inline typed::multi_aff<Domain> domain_map_multi_aff() const = delete;
+ inline typed::pw_multi_aff<Domain> domain_map_pw_multi_aff() const = delete;
+ inline typed::id<Domain> get_domain_tuple_id() const = delete;
+ inline typed::space<Domain> flatten_domain() const = delete;
+ inline typed::space<Domain> flatten_range() const = delete;
+ inline typed::multi_aff<Domain, Domain> identity_multi_aff_on_domain() const;
+ inline typed::multi_pw_aff<Domain, Domain> identity_multi_pw_aff_on_domain() const;
+ inline typed::pw_multi_aff<Domain, Domain> identity_pw_multi_aff_on_domain() const;
+ inline typed::space<Domain, Domain> map_from_set() const;
+ inline typed::multi_aff<Domain> multi_aff(const typed::aff_list<Anonymous> &list) const;
+ template <typename Range>
+ inline typed::multi_aff<Domain, Range> multi_aff_on_domain(const typed::multi_val<Range> &mv) const;
+ inline typed::multi_id<Domain> multi_id(const typed::id_list<Anonymous> &list) const;
+ inline typed::multi_pw_aff<Domain> multi_pw_aff(const typed::pw_aff_list<Anonymous> &list) const;
+ inline typed::multi_union_pw_aff<Domain> multi_union_pw_aff(const typed::union_pw_aff_list<Anonymous> &list) const;
+ inline typed::multi_val<Domain> multi_val(const typed::val_list<Anonymous> &list) const;
+ inline typed::aff<Domain, Anonymous> param_aff_on_domain(const typed::id<Anonymous> &id) const;
+ inline typed::aff<Domain, Anonymous> param_aff_on_domain(const std::string &id) const;
+ inline typed::space<> params() const;
+ template <typename Range>
+ inline typed::space<pair<Domain, Range>> product(const typed::space<Range> &right) const;
+ inline typed::space<Domain> range() const = delete;
+ inline typed::multi_aff<Domain> range_map_multi_aff() const = delete;
+ inline typed::pw_multi_aff<Domain> range_map_pw_multi_aff() const = delete;
+ inline typed::space<Domain> range_reverse() const = delete;
+ inline typed::id<Domain> get_range_tuple_id() const = delete;
+ inline typed::space<Domain> reverse() const = delete;
+ inline typed::space<Domain> set_domain_tuple(const typed::id<> &id) const = delete;
+ inline typed::space<Domain> set_domain_tuple(const std::string &id) const = delete;
+ template <typename Domain2>
+ inline typed::space<Domain2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::space<Domain2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain> uncurry() const = delete;
+ static inline typed::space<Domain> unit(const isl::ctx &ctx) = delete;
+ inline typed::map<Domain> universe_map() const = delete;
+ inline typed::set<Domain> universe_set() const;
+ inline typed::space<Domain> unwrap() const = delete;
+ inline typed::space<Domain> wrap() const = delete;
+ inline typed::aff<Domain, Anonymous> zero_aff_on_domain() const;
+ inline typed::multi_aff<Domain> zero_multi_aff() const;
+ inline typed::multi_pw_aff<Domain> zero_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<Domain> zero_multi_union_pw_aff() const;
+ inline typed::multi_val<Domain> zero_multi_val() const;
+};
+
+template <typename Domain, typename Range>
+struct space<Domain, Range> : public isl::space {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ space() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ space(const space<Arg1, Arg2> &obj) : isl::space(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::space>{}, bool>::type = true>
+ space(const base &obj) : isl::space(obj) {}
+ public:
+ static space from(const isl::space &obj) {
+ return space(obj);
+ }
+ inline typed::space<Domain, Range> add_named_tuple(const typed::id<> &tuple_id, unsigned int dim) const = delete;
+ inline typed::space<Domain, Range> add_named_tuple(const std::string &tuple_id, unsigned int dim) const = delete;
+ inline typed::space<Domain, Range> add_param(const typed::id<Anonymous> &id) const;
+ inline typed::space<Domain, Range> add_param(const std::string &id) const;
+ inline typed::space<Domain, Range> add_unnamed_tuple(unsigned int dim) const = delete;
+ inline typed::space<Domain, Range> curry() const = delete;
+ inline typed::space<Domain> domain() const;
+ inline typed::multi_aff<pair<Domain, Range>, Domain> domain_map_multi_aff() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>, Domain> domain_map_pw_multi_aff() const;
+ inline typed::id<Domain, Range> get_domain_tuple_id() const = delete;
+ inline typed::space<Domain, Range> flatten_domain() const = delete;
+ inline typed::space<Domain, Range> flatten_range() const = delete;
+ inline typed::multi_aff<Domain, Range> identity_multi_aff_on_domain() const = delete;
+ inline typed::multi_pw_aff<Domain, Range> identity_multi_pw_aff_on_domain() const = delete;
+ inline typed::pw_multi_aff<Domain, Range> identity_pw_multi_aff_on_domain() const = delete;
+ inline typed::space<Domain, Range> map_from_set() const = delete;
+ inline typed::multi_aff<Domain, Range> multi_aff(const typed::aff_list<Domain, Anonymous> &list) const;
+ inline typed::multi_aff<Domain, Range> multi_aff_on_domain(const typed::multi_val<> &mv) const = delete;
+ inline typed::multi_id<Domain, Range> multi_id(const typed::id_list<> &list) const = delete;
+ inline typed::multi_pw_aff<Domain, Range> multi_pw_aff(const typed::pw_aff_list<Domain, Anonymous> &list) const;
+ inline typed::multi_union_pw_aff<Domain, Range> multi_union_pw_aff(const typed::union_pw_aff_list<Domain, Anonymous> &list) const;
+ inline typed::multi_val<Domain, Range> multi_val(const typed::val_list<> &list) const = delete;
+ inline typed::aff<Domain, Range> param_aff_on_domain(const typed::id<> &id) const = delete;
+ inline typed::aff<Domain, Range> param_aff_on_domain(const std::string &id) const = delete;
+ inline typed::space<> params() const;
+ template <typename Domain2, typename Range2>
+ inline typed::space<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::space<Domain2, Range2> &right) const;
+ inline typed::space<Range> range() const;
+ inline typed::multi_aff<pair<Domain, Range>, Range> range_map_multi_aff() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>, Range> range_map_pw_multi_aff() const;
+ inline typed::space<Domain, Range> range_reverse() const = delete;
+ inline typed::id<Domain, Range> get_range_tuple_id() const = delete;
+ inline typed::space<Range, Domain> reverse() const;
+ template <typename Domain2>
+ inline typed::space<Domain2, Range> set_domain_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::space<Domain2, Range> set_domain_tuple(const std::string &id) const;
+ template <typename Range2>
+ inline typed::space<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::space<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<Domain, Range> uncurry() const = delete;
+ static inline typed::space<Domain, Range> unit(const isl::ctx &ctx) = delete;
+ inline typed::map<Domain, Range> universe_map() const;
+ inline typed::set<Domain, Range> universe_set() const = delete;
+ inline typed::space<Domain, Range> unwrap() const = delete;
+ inline typed::space<pair<Domain, Range>> wrap() const;
+ inline typed::aff<Domain, Range> zero_aff_on_domain() const = delete;
+ inline typed::multi_aff<Domain, Range> zero_multi_aff() const;
+ inline typed::multi_pw_aff<Domain, Range> zero_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<Domain, Range> zero_multi_union_pw_aff() const;
+ inline typed::multi_val<Domain, Range> zero_multi_val() const = delete;
+};
+
+template <typename Domain, typename Range>
+struct space<pair<Domain, Range>> : public isl::space {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ space() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ space(const space<pair<Arg1, Arg2>> &obj) : isl::space(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::space>{}, bool>::type = true>
+ space(const base &obj) : isl::space(obj) {}
+ public:
+ static space from(const isl::space &obj) {
+ return space(obj);
+ }
+ template <typename Arg2>
+ inline typed::space<pair<Domain, Range>, Arg2> add_named_tuple(const typed::id<Anonymous> &tuple_id, unsigned int dim) const;
+ template <typename Arg2>
+ inline typed::space<pair<Domain, Range>, Arg2> add_named_tuple(const std::string &tuple_id, unsigned int dim) const;
+ inline typed::space<pair<Domain, Range>> add_param(const typed::id<Anonymous> &id) const;
+ inline typed::space<pair<Domain, Range>> add_param(const std::string &id) const;
+ template <typename Arg2>
+ inline typed::space<pair<Domain, Range>, Arg2> add_unnamed_tuple(unsigned int dim) const;
+ inline typed::space<pair<Domain, Range>> curry() const = delete;
+ inline typed::space<> domain() const;
+ inline typed::multi_aff<pair<Domain, Range>> domain_map_multi_aff() const = delete;
+ inline typed::pw_multi_aff<pair<Domain, Range>> domain_map_pw_multi_aff() const = delete;
+ inline typed::id<pair<Domain, Range>> get_domain_tuple_id() const = delete;
+ inline typed::space<pair<Domain, Range>> flatten_domain() const = delete;
+ inline typed::space<pair<Domain, Range>> flatten_range() const = delete;
+ inline typed::multi_aff<pair<Domain, Range>, pair<Domain, Range>> identity_multi_aff_on_domain() const;
+ inline typed::multi_pw_aff<pair<Domain, Range>, pair<Domain, Range>> identity_multi_pw_aff_on_domain() const;
+ inline typed::pw_multi_aff<pair<Domain, Range>, pair<Domain, Range>> identity_pw_multi_aff_on_domain() const;
+ inline typed::space<pair<Domain, Range>, pair<Domain, Range>> map_from_set() const;
+ inline typed::multi_aff<pair<Domain, Range>> multi_aff(const typed::aff_list<Anonymous> &list) const;
+ template <typename Arg2>
+ inline typed::multi_aff<pair<Domain, Range>, Arg2> multi_aff_on_domain(const typed::multi_val<Arg2> &mv) const;
+ inline typed::multi_id<pair<Domain, Range>> multi_id(const typed::id_list<Anonymous> &list) const;
+ inline typed::multi_pw_aff<pair<Domain, Range>> multi_pw_aff(const typed::pw_aff_list<Anonymous> &list) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Range>> multi_union_pw_aff(const typed::union_pw_aff_list<Anonymous> &list) const;
+ inline typed::multi_val<pair<Domain, Range>> multi_val(const typed::val_list<Anonymous> &list) const;
+ inline typed::aff<pair<Domain, Range>, Anonymous> param_aff_on_domain(const typed::id<Anonymous> &id) const;
+ inline typed::aff<pair<Domain, Range>, Anonymous> param_aff_on_domain(const std::string &id) const;
+ inline typed::space<> params() const;
+ template <typename Arg2>
+ inline typed::space<pair<pair<Domain, Range>, Arg2>> product(const typed::space<Arg2> &right) const;
+ inline typed::space<pair<Domain, Range>> range() const = delete;
+ inline typed::multi_aff<pair<Domain, Range>> range_map_multi_aff() const = delete;
+ inline typed::pw_multi_aff<pair<Domain, Range>> range_map_pw_multi_aff() const = delete;
+ inline typed::space<pair<Domain, Range>> range_reverse() const = delete;
+ inline typed::id<pair<Domain, Range>> get_range_tuple_id() const = delete;
+ inline typed::space<pair<Domain, Range>> reverse() const = delete;
+ inline typed::space<pair<Domain, Range>> set_domain_tuple(const typed::id<> &id) const = delete;
+ inline typed::space<pair<Domain, Range>> set_domain_tuple(const std::string &id) const = delete;
+ inline typed::space<pair<Domain, Range>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::space<pair<Domain, Range>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<pair<Domain, Range>> uncurry() const = delete;
+ static inline typed::space<pair<Domain, Range>> unit(const isl::ctx &ctx) = delete;
+ inline typed::map<pair<Domain, Range>> universe_map() const = delete;
+ inline typed::set<pair<Domain, Range>> universe_set() const;
+ inline typed::space<Domain, Range> unwrap() const;
+ inline typed::space<pair<Domain, Range>> wrap() const = delete;
+ inline typed::aff<pair<Domain, Range>, Anonymous> zero_aff_on_domain() const;
+ inline typed::multi_aff<pair<Domain, Range>> zero_multi_aff() const;
+ inline typed::multi_pw_aff<pair<Domain, Range>> zero_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<pair<Domain, Range>> zero_multi_union_pw_aff() const;
+ inline typed::multi_val<pair<Domain, Range>> zero_multi_val() const;
+};
+
+template <typename Domain, typename Range, typename Range2>
+struct space<pair<Domain, Range>, Range2> : public isl::space {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ space() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{} &&
+ std::is_base_of<Range2, Arg3>{},
+ bool>::type = true>
+ space(const space<pair<Arg1, Arg2>, Arg3> &obj) : isl::space(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::space>{}, bool>::type = true>
+ space(const base &obj) : isl::space(obj) {}
+ public:
+ static space from(const isl::space &obj) {
+ return space(obj);
+ }
+ inline typed::space<pair<Domain, Range>, Range2> add_named_tuple(const typed::id<> &tuple_id, unsigned int dim) const = delete;
+ inline typed::space<pair<Domain, Range>, Range2> add_named_tuple(const std::string &tuple_id, unsigned int dim) const = delete;
+ inline typed::space<pair<Domain, Range>, Range2> add_param(const typed::id<Anonymous> &id) const;
+ inline typed::space<pair<Domain, Range>, Range2> add_param(const std::string &id) const;
+ inline typed::space<pair<Domain, Range>, Range2> add_unnamed_tuple(unsigned int dim) const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> curry() const;
+ inline typed::space<pair<Domain, Range>> domain() const;
+ inline typed::multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> domain_map_multi_aff() const;
+ inline typed::pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> domain_map_pw_multi_aff() const;
+ inline typed::id<pair<Domain, Range>, Range2> get_domain_tuple_id() const = delete;
+ inline typed::space<Anonymous, Range2> flatten_domain() const;
+ inline typed::space<pair<Domain, Range>, Range2> flatten_range() const = delete;
+ inline typed::multi_aff<pair<Domain, Range>, Range2> identity_multi_aff_on_domain() const = delete;
+ inline typed::multi_pw_aff<pair<Domain, Range>, Range2> identity_multi_pw_aff_on_domain() const = delete;
+ inline typed::pw_multi_aff<pair<Domain, Range>, Range2> identity_pw_multi_aff_on_domain() const = delete;
+ inline typed::space<pair<Domain, Range>, Range2> map_from_set() const = delete;
+ inline typed::multi_aff<pair<Domain, Range>, Range2> multi_aff(const typed::aff_list<pair<Domain, Range>, Anonymous> &list) const;
+ inline typed::multi_aff<pair<Domain, Range>, Range2> multi_aff_on_domain(const typed::multi_val<> &mv) const = delete;
+ inline typed::multi_id<pair<Domain, Range>, Range2> multi_id(const typed::id_list<> &list) const = delete;
+ inline typed::multi_pw_aff<pair<Domain, Range>, Range2> multi_pw_aff(const typed::pw_aff_list<pair<Domain, Range>, Anonymous> &list) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Range>, Range2> multi_union_pw_aff(const typed::union_pw_aff_list<pair<Domain, Range>, Anonymous> &list) const;
+ inline typed::multi_val<pair<Domain, Range>, Range2> multi_val(const typed::val_list<> &list) const = delete;
+ inline typed::aff<pair<Domain, Range>, Range2> param_aff_on_domain(const typed::id<> &id) const = delete;
+ inline typed::aff<pair<Domain, Range>, Range2> param_aff_on_domain(const std::string &id) const = delete;
+ inline typed::space<> params() const;
+ template <typename Domain2, typename Arg3>
+ inline typed::space<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> product(const typed::space<Domain2, Arg3> &right) const;
+ inline typed::space<Range2> range() const;
+ inline typed::multi_aff<pair<pair<Domain, Range>, Range2>, Range2> range_map_multi_aff() const;
+ inline typed::pw_multi_aff<pair<pair<Domain, Range>, Range2>, Range2> range_map_pw_multi_aff() const;
+ inline typed::space<pair<Domain, Range>, Range2> range_reverse() const = delete;
+ inline typed::id<pair<Domain, Range>, Range2> get_range_tuple_id() const = delete;
+ inline typed::space<Range2, pair<Domain, Range>> reverse() const;
+ inline typed::space<pair<Domain, Range>, Range2> set_domain_tuple(const typed::id<> &id) const = delete;
+ inline typed::space<pair<Domain, Range>, Range2> set_domain_tuple(const std::string &id) const = delete;
+ template <typename Arg2>
+ inline typed::space<pair<Domain, Range>, Arg2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Arg2>
+ inline typed::space<pair<Domain, Range>, Arg2> set_range_tuple(const std::string &id) const;
+ inline typed::space<pair<Domain, Range>, Range2> uncurry() const = delete;
+ static inline typed::space<pair<Domain, Range>, Range2> unit(const isl::ctx &ctx) = delete;
+ inline typed::map<pair<Domain, Range>, Range2> universe_map() const;
+ inline typed::set<pair<Domain, Range>, Range2> universe_set() const = delete;
+ inline typed::space<pair<Domain, Range>, Range2> unwrap() const = delete;
+ inline typed::space<pair<pair<Domain, Range>, Range2>> wrap() const;
+ inline typed::aff<pair<Domain, Range>, Range2> zero_aff_on_domain() const = delete;
+ inline typed::multi_aff<pair<Domain, Range>, Range2> zero_multi_aff() const;
+ inline typed::multi_pw_aff<pair<Domain, Range>, Range2> zero_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<pair<Domain, Range>, Range2> zero_multi_union_pw_aff() const;
+ inline typed::multi_val<pair<Domain, Range>, Range2> zero_multi_val() const = delete;
+};
+
+template <typename Domain, typename Range, typename Range2>
+struct space<Domain, pair<Range, Range2>> : public isl::space {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ space() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{} &&
+ std::is_base_of<Range2, Arg3>{},
+ bool>::type = true>
+ space(const space<Arg1, pair<Arg2, Arg3>> &obj) : isl::space(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::space>{}, bool>::type = true>
+ space(const base &obj) : isl::space(obj) {}
+ public:
+ static space from(const isl::space &obj) {
+ return space(obj);
+ }
+ inline typed::space<Domain, pair<Range, Range2>> add_named_tuple(const typed::id<> &tuple_id, unsigned int dim) const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> add_named_tuple(const std::string &tuple_id, unsigned int dim) const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> add_param(const typed::id<Anonymous> &id) const;
+ inline typed::space<Domain, pair<Range, Range2>> add_param(const std::string &id) const;
+ inline typed::space<Domain, pair<Range, Range2>> add_unnamed_tuple(unsigned int dim) const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> curry() const = delete;
+ inline typed::space<Domain> domain() const;
+ inline typed::multi_aff<pair<Domain, pair<Range, Range2>>, Domain> domain_map_multi_aff() const;
+ inline typed::pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain> domain_map_pw_multi_aff() const;
+ inline typed::id<Domain, pair<Range, Range2>> get_domain_tuple_id() const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> flatten_domain() const = delete;
+ inline typed::space<Domain, Anonymous> flatten_range() const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> identity_multi_aff_on_domain() const = delete;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> identity_multi_pw_aff_on_domain() const = delete;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> identity_pw_multi_aff_on_domain() const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> map_from_set() const = delete;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> multi_aff(const typed::aff_list<Domain, Anonymous> &list) const;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> multi_aff_on_domain(const typed::multi_val<> &mv) const = delete;
+ inline typed::multi_id<Domain, pair<Range, Range2>> multi_id(const typed::id_list<> &list) const = delete;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> multi_pw_aff(const typed::pw_aff_list<Domain, Anonymous> &list) const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> multi_union_pw_aff(const typed::union_pw_aff_list<Domain, Anonymous> &list) const;
+ inline typed::multi_val<Domain, pair<Range, Range2>> multi_val(const typed::val_list<> &list) const = delete;
+ inline typed::aff<Domain, pair<Range, Range2>> param_aff_on_domain(const typed::id<> &id) const = delete;
+ inline typed::aff<Domain, pair<Range, Range2>> param_aff_on_domain(const std::string &id) const = delete;
+ inline typed::space<> params() const;
+ template <typename Domain2, typename Arg3>
+ inline typed::space<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::space<Domain2, Arg3> &right) const;
+ inline typed::space<pair<Range, Range2>> range() const;
+ inline typed::multi_aff<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>> range_map_multi_aff() const;
+ inline typed::pw_multi_aff<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>> range_map_pw_multi_aff() const;
+ inline typed::space<Domain, pair<Range2, Range>> range_reverse() const;
+ inline typed::id<Domain, pair<Range, Range2>> get_range_tuple_id() const = delete;
+ inline typed::space<pair<Range, Range2>, Domain> reverse() const;
+ template <typename Domain2>
+ inline typed::space<Domain2, pair<Range, Range2>> set_domain_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::space<Domain2, pair<Range, Range2>> set_domain_tuple(const std::string &id) const;
+ inline typed::space<Domain, pair<Range, Range2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<pair<Domain, Range>, Range2> uncurry() const;
+ static inline typed::space<Domain, pair<Range, Range2>> unit(const isl::ctx &ctx) = delete;
+ inline typed::map<Domain, pair<Range, Range2>> universe_map() const;
+ inline typed::set<Domain, pair<Range, Range2>> universe_set() const = delete;
+ inline typed::space<Domain, pair<Range, Range2>> unwrap() const = delete;
+ inline typed::space<pair<Domain, pair<Range, Range2>>> wrap() const;
+ inline typed::aff<Domain, pair<Range, Range2>> zero_aff_on_domain() const = delete;
+ inline typed::multi_aff<Domain, pair<Range, Range2>> zero_multi_aff() const;
+ inline typed::multi_pw_aff<Domain, pair<Range, Range2>> zero_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> zero_multi_union_pw_aff() const;
+ inline typed::multi_val<Domain, pair<Range, Range2>> zero_multi_val() const = delete;
+};
+
+template <typename T1, typename T2, typename Range, typename Range2>
+struct space<pair<T1, T2>, pair<Range, Range2>> : public isl::space {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ space() = default;
+ template <typename Arg1, typename Arg2, typename Arg3, typename Arg4,
+ typename std::enable_if<
+ std::is_base_of<T1, Arg1>{} &&
+ std::is_base_of<T2, Arg2>{} &&
+ std::is_base_of<Range, Arg3>{} &&
+ std::is_base_of<Range2, Arg4>{},
+ bool>::type = true>
+ space(const space<pair<Arg1, Arg2>, pair<Arg3, Arg4>> &obj) : isl::space(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::space>{}, bool>::type = true>
+ space(const base &obj) : isl::space(obj) {}
+ public:
+ static space from(const isl::space &obj) {
+ return space(obj);
+ }
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> add_named_tuple(const typed::id<> &tuple_id, unsigned int dim) const = delete;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> add_named_tuple(const std::string &tuple_id, unsigned int dim) const = delete;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> add_param(const typed::id<Anonymous> &id) const;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> add_param(const std::string &id) const;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> add_unnamed_tuple(unsigned int dim) const = delete;
+ inline typed::space<T1, pair<T2, pair<Range, Range2>>> curry() const;
+ inline typed::space<pair<T1, T2>> domain() const;
+ inline typed::multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> domain_map_multi_aff() const;
+ inline typed::pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> domain_map_pw_multi_aff() const;
+ inline typed::id<pair<T1, T2>, pair<Range, Range2>> get_domain_tuple_id() const = delete;
+ inline typed::space<Anonymous, pair<Range, Range2>> flatten_domain() const;
+ inline typed::space<pair<T1, T2>, Anonymous> flatten_range() const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> identity_multi_aff_on_domain() const = delete;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> identity_multi_pw_aff_on_domain() const = delete;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> identity_pw_multi_aff_on_domain() const = delete;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> map_from_set() const = delete;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> multi_aff(const typed::aff_list<pair<T1, T2>, Anonymous> &list) const;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> multi_aff_on_domain(const typed::multi_val<> &mv) const = delete;
+ inline typed::multi_id<pair<T1, T2>, pair<Range, Range2>> multi_id(const typed::id_list<> &list) const = delete;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> multi_pw_aff(const typed::pw_aff_list<pair<T1, T2>, Anonymous> &list) const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> multi_union_pw_aff(const typed::union_pw_aff_list<pair<T1, T2>, Anonymous> &list) const;
+ inline typed::multi_val<pair<T1, T2>, pair<Range, Range2>> multi_val(const typed::val_list<> &list) const = delete;
+ inline typed::aff<pair<T1, T2>, pair<Range, Range2>> param_aff_on_domain(const typed::id<> &id) const = delete;
+ inline typed::aff<pair<T1, T2>, pair<Range, Range2>> param_aff_on_domain(const std::string &id) const = delete;
+ inline typed::space<> params() const;
+ template <typename Domain2, typename Arg2>
+ inline typed::space<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::space<Domain2, Arg2> &right) const;
+ inline typed::space<pair<Range, Range2>> range() const;
+ inline typed::multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>> range_map_multi_aff() const;
+ inline typed::pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>> range_map_pw_multi_aff() const;
+ inline typed::space<pair<T1, T2>, pair<Range2, Range>> range_reverse() const;
+ inline typed::id<pair<T1, T2>, pair<Range, Range2>> get_range_tuple_id() const = delete;
+ inline typed::space<pair<Range, Range2>, pair<T1, T2>> reverse() const;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> set_domain_tuple(const typed::id<> &id) const = delete;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> set_domain_tuple(const std::string &id) const = delete;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> set_range_tuple(const typed::id<> &id) const = delete;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> set_range_tuple(const std::string &id) const = delete;
+ inline typed::space<pair<pair<T1, T2>, Range>, Range2> uncurry() const;
+ static inline typed::space<pair<T1, T2>, pair<Range, Range2>> unit(const isl::ctx &ctx) = delete;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> universe_map() const;
+ inline typed::set<pair<T1, T2>, pair<Range, Range2>> universe_set() const = delete;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> unwrap() const = delete;
+ inline typed::space<pair<pair<T1, T2>, pair<Range, Range2>>> wrap() const;
+ inline typed::aff<pair<T1, T2>, pair<Range, Range2>> zero_aff_on_domain() const = delete;
+ inline typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> zero_multi_aff() const;
+ inline typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> zero_multi_pw_aff() const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> zero_multi_union_pw_aff() const;
+ inline typed::multi_val<pair<T1, T2>, pair<Range, Range2>> zero_multi_val() const = delete;
+};
+
+template <typename Domain, typename Range>
+struct union_map<Domain, Range> : public isl::union_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_map() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ union_map(const union_map<Arg1, Arg2> &obj) : isl::union_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_map>{}, bool>::type = true>
+ union_map(const base &obj) : isl::union_map(obj) {}
+ public:
+ static union_map from(const isl::union_map &obj) {
+ return union_map(obj);
+ }
+ inline /* implicit */ union_map(const typed::basic_map<Domain, Range> &bmap);
+ inline /* implicit */ union_map(const typed::map<Domain, Range> &map);
+ inline explicit union_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range> apply_domain(const typed::union_map<Domain, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range> apply_domain(const typed::basic_map<Domain, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range> apply_domain(const typed::map<Domain, Domain2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> apply_range(const typed::union_map<Range, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> apply_range(const typed::basic_map<Range, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> apply_range(const typed::map<Range, Range2> &umap2) const;
+ inline typed::map<Domain, Range> as_map() const;
+ inline typed::multi_union_pw_aff<Domain, Range> as_multi_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<Domain, Range> as_union_pw_multi_aff() const;
+ inline typed::union_set<Domain> bind_range(const typed::multi_id<Range> &tuple) const;
+ inline typed::union_map<Domain, Range> coalesce() const;
+ inline typed::union_map<Domain, Range> curry() const = delete;
+ inline typed::union_set<Domain, Range> deltas() const = delete;
+ inline typed::union_map<Domain, Range> detect_equalities() const;
+ inline typed::union_set<Domain> domain() const;
+ inline typed::union_map<Domain, Range> domain_factor_domain() const = delete;
+ inline typed::union_map<Domain, Range> domain_factor_range() const = delete;
+ inline typed::union_map<pair<Domain, Range>, Domain> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<Domain, Range>, Domain> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, Range> domain_product(const typed::union_map<Domain2, Range> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, Range> domain_product(const typed::basic_map<Domain2, Range> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, Range> domain_product(const typed::map<Domain2, Range> &umap2) const;
+ static inline typed::union_map<Domain, Range> empty(const isl::ctx &ctx);
+ inline typed::union_map<Domain, Range> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline typed::union_map<Domain, Range> eq_at(const typed::multi_pw_aff<> &mupa) const = delete;
+ inline typed::union_map<Domain, Range> eq_at(const typed::union_pw_aff<> &mupa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<Domain, Range>)> &test) const;
+ inline typed::map<Domain, Range> extract_map(const typed::space<Domain, Range> &space) const;
+ inline void foreach_map(const std::function<void(typed::map<Domain, Range>)> &fn) const;
+ inline typed::union_map<Domain, Range> gist(const typed::union_map<Domain, Range> &context) const;
+ inline typed::union_map<Domain, Range> gist(const typed::basic_map<Domain, Range> &context) const;
+ inline typed::union_map<Domain, Range> gist(const typed::map<Domain, Range> &context) const;
+ inline typed::union_map<Domain, Range> gist_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::union_map<Domain, Range> gist_domain(const typed::basic_set<Domain> &uset) const;
+ inline typed::union_map<Domain, Range> gist_domain(const typed::point<Domain> &uset) const;
+ inline typed::union_map<Domain, Range> gist_domain(const typed::set<Domain> &uset) const;
+ inline typed::union_map<Domain, Range> intersect(const typed::union_map<Domain, Range> &umap2) const;
+ inline typed::union_map<Domain, Range> intersect(const typed::basic_map<Domain, Range> &umap2) const;
+ inline typed::union_map<Domain, Range> intersect(const typed::map<Domain, Range> &umap2) const;
+ inline typed::union_map<Domain, Range> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, Range> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::union_map<Domain, Range> intersect_params(const typed::set<> &set) const;
+ inline typed::union_map<Domain, Range> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_map<Domain, Range> intersect_params(const typed::point<> &set) const;
+ inline typed::union_map<Domain, Range> intersect_range(const typed::space<Range> &space) const;
+ inline typed::union_map<Domain, Range> intersect_range(const typed::union_set<Range> &uset) const;
+ inline typed::union_map<Domain, Range> lexmax() const;
+ inline typed::union_map<Domain, Range> lexmin() const;
+ inline typed::map_list<Domain, Range> map_list() const;
+ inline typed::map_list<Domain, Range> get_map_list() const = delete;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range> preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range> preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range> preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range> preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> preimage_range(const typed::multi_aff<Range2, Range> &ma) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> preimage_range(const typed::pw_multi_aff<Range2, Range> &pma) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> preimage_range(const typed::union_pw_multi_aff<Range2, Range> &upma) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::union_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::basic_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> product(const typed::map<Domain2, Range2> &umap2) const;
+ inline typed::union_map<Domain, Range> project_out_all_params() const;
+ inline typed::union_set<Range> range() const;
+ inline typed::union_map<Domain, Range> range_factor_domain() const = delete;
+ inline typed::union_map<Domain, Range> range_factor_range() const = delete;
+ inline typed::union_map<pair<Domain, Range>, Range> range_map() const;
+ template <typename Range2>
+ inline typed::union_map<Domain, pair<Range, Range2>> range_product(const typed::union_map<Domain, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, pair<Range, Range2>> range_product(const typed::basic_map<Domain, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, pair<Range, Range2>> range_product(const typed::map<Domain, Range2> &umap2) const;
+ inline typed::union_map<Domain, Range> range_reverse() const = delete;
+ inline typed::union_map<Range, Domain> reverse() const;
+ inline typed::space<> space() const;
+ inline typed::space<Domain, Range> get_space() const = delete;
+ inline typed::union_map<Domain, Range> subtract(const typed::union_map<Domain, Range> &umap2) const;
+ inline typed::union_map<Domain, Range> subtract(const typed::basic_map<Domain, Range> &umap2) const;
+ inline typed::union_map<Domain, Range> subtract(const typed::map<Domain, Range> &umap2) const;
+ inline typed::union_map<Domain, Range> subtract_domain(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Range> subtract_domain(const typed::basic_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Range> subtract_domain(const typed::point<Domain> &dom) const;
+ inline typed::union_map<Domain, Range> subtract_domain(const typed::set<Domain> &dom) const;
+ inline typed::union_map<Domain, Range> subtract_range(const typed::union_set<Range> &dom) const;
+ inline typed::union_map<Domain, Range> subtract_range(const typed::basic_set<Range> &dom) const;
+ inline typed::union_map<Domain, Range> subtract_range(const typed::point<Range> &dom) const;
+ inline typed::union_map<Domain, Range> subtract_range(const typed::set<Range> &dom) const;
+ inline typed::union_map<Domain, Range> uncurry() const = delete;
+ inline typed::union_map<Domain, Range> unite(const typed::union_map<Domain, Range> &umap2) const;
+ inline typed::union_map<Domain, Range> unite(const typed::basic_map<Domain, Range> &umap2) const;
+ inline typed::union_map<Domain, Range> unite(const typed::map<Domain, Range> &umap2) const;
+ inline typed::union_map<Domain, Range> universe() const;
+ inline typed::union_set<pair<Domain, Range>> wrap() const;
+};
+
+template <typename Domain, typename Range, typename Range2>
+struct union_map<pair<Domain, Range>, Range2> : public isl::union_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_map() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{} &&
+ std::is_base_of<Range2, Arg3>{},
+ bool>::type = true>
+ union_map(const union_map<pair<Arg1, Arg2>, Arg3> &obj) : isl::union_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_map>{}, bool>::type = true>
+ union_map(const base &obj) : isl::union_map(obj) {}
+ public:
+ static union_map from(const isl::union_map &obj) {
+ return union_map(obj);
+ }
+ inline /* implicit */ union_map(const typed::basic_map<pair<Domain, Range>, Range2> &bmap);
+ inline /* implicit */ union_map(const typed::map<pair<Domain, Range>, Range2> &map);
+ inline explicit union_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range2> apply_domain(const typed::union_map<pair<Domain, Range>, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range2> apply_domain(const typed::basic_map<pair<Domain, Range>, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range2> apply_domain(const typed::map<pair<Domain, Range>, Domain2> &umap2) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, Arg3> apply_range(const typed::union_map<Range2, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, Arg3> apply_range(const typed::basic_map<Range2, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, Arg3> apply_range(const typed::map<Range2, Arg3> &umap2) const;
+ inline typed::map<pair<Domain, Range>, Range2> as_map() const;
+ inline typed::multi_union_pw_aff<pair<Domain, Range>, Range2> as_multi_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<pair<Domain, Range>, Range2> as_union_pw_multi_aff() const;
+ inline typed::union_set<pair<Domain, Range>> bind_range(const typed::multi_id<Range2> &tuple) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> coalesce() const;
+ inline typed::union_map<Domain, pair<Range, Range2>> curry() const;
+ inline typed::union_set<pair<Domain, Range>, Range2> deltas() const = delete;
+ inline typed::union_map<pair<Domain, Range>, Range2> detect_equalities() const;
+ inline typed::union_set<pair<Domain, Range>> domain() const;
+ inline typed::union_map<Domain, Range2> domain_factor_domain() const;
+ inline typed::union_map<Range, Range2> domain_factor_range() const;
+ inline typed::union_map<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2> domain_product(const typed::union_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2> domain_product(const typed::basic_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2> domain_product(const typed::map<Domain2, Range2> &umap2) const;
+ static inline typed::union_map<pair<Domain, Range>, Range2> empty(const isl::ctx &ctx);
+ inline typed::union_map<pair<Domain, Range>, Range2> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline typed::union_map<pair<Domain, Range>, Range2> eq_at(const typed::multi_pw_aff<> &mupa) const = delete;
+ inline typed::union_map<pair<Domain, Range>, Range2> eq_at(const typed::union_pw_aff<> &mupa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<pair<Domain, Range>, Range2>)> &test) const;
+ inline typed::map<pair<Domain, Range>, Range2> extract_map(const typed::space<pair<Domain, Range>, Range2> &space) const;
+ inline void foreach_map(const std::function<void(typed::map<pair<Domain, Range>, Range2>)> &fn) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> gist(const typed::union_map<pair<Domain, Range>, Range2> &context) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> gist(const typed::basic_map<pair<Domain, Range>, Range2> &context) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> gist(const typed::map<pair<Domain, Range>, Range2> &context) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> gist_domain(const typed::union_set<pair<Domain, Range>> &uset) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> gist_domain(const typed::basic_set<pair<Domain, Range>> &uset) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> gist_domain(const typed::point<pair<Domain, Range>> &uset) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> gist_domain(const typed::set<pair<Domain, Range>> &uset) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect(const typed::basic_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect(const typed::map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_domain(const typed::space<pair<Domain, Range>> &space) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_domain(const typed::union_set<pair<Domain, Range>> &uset) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_params(const typed::set<> &set) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_params(const typed::point<> &set) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_range(const typed::space<Range2> &space) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> intersect_range(const typed::union_set<Range2> &uset) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> lexmax() const;
+ inline typed::union_map<pair<Domain, Range>, Range2> lexmin() const;
+ inline typed::map_list<pair<Domain, Range>, Range2> map_list() const;
+ inline typed::map_list<pair<Domain, Range>, Range2> get_map_list() const = delete;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range2> preimage_domain(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range2> preimage_domain(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range2> preimage_domain(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Range2> preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, Arg3> preimage_range(const typed::multi_aff<Arg3, Range2> &ma) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, Arg3> preimage_range(const typed::pw_multi_aff<Arg3, Range2> &pma) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, Arg3> preimage_range(const typed::union_pw_multi_aff<Arg3, Range2> &upma) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> product(const typed::union_map<Domain2, Arg3> &umap2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> product(const typed::basic_map<Domain2, Arg3> &umap2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> product(const typed::map<Domain2, Arg3> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> project_out_all_params() const;
+ inline typed::union_set<Range2> range() const;
+ inline typed::union_map<pair<Domain, Range>, Range2> range_factor_domain() const = delete;
+ inline typed::union_map<pair<Domain, Range>, Range2> range_factor_range() const = delete;
+ inline typed::union_map<pair<pair<Domain, Range>, Range2>, Range2> range_map() const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>> range_product(const typed::union_map<pair<Domain, Range>, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>> range_product(const typed::basic_map<pair<Domain, Range>, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>> range_product(const typed::map<pair<Domain, Range>, Arg3> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> range_reverse() const = delete;
+ inline typed::union_map<Range2, pair<Domain, Range>> reverse() const;
+ inline typed::space<> space() const;
+ inline typed::space<pair<Domain, Range>, Range2> get_space() const = delete;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract(const typed::basic_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract(const typed::map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_domain(const typed::union_set<pair<Domain, Range>> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_domain(const typed::basic_set<pair<Domain, Range>> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_domain(const typed::point<pair<Domain, Range>> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_domain(const typed::set<pair<Domain, Range>> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_range(const typed::union_set<Range2> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_range(const typed::basic_set<Range2> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_range(const typed::point<Range2> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> subtract_range(const typed::set<Range2> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> uncurry() const = delete;
+ inline typed::union_map<pair<Domain, Range>, Range2> unite(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> unite(const typed::basic_map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> unite(const typed::map<pair<Domain, Range>, Range2> &umap2) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> universe() const;
+ inline typed::union_set<pair<pair<Domain, Range>, Range2>> wrap() const;
+};
+
+template <typename Domain>
+struct union_map<Domain, Domain> : public isl::union_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_map() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ union_map(const union_map<Arg1, Arg1> &obj) : isl::union_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_map>{}, bool>::type = true>
+ union_map(const base &obj) : isl::union_map(obj) {}
+ public:
+ static union_map from(const isl::union_map &obj) {
+ return union_map(obj);
+ }
+ inline /* implicit */ union_map(const typed::basic_map<Domain, Domain> &bmap);
+ inline /* implicit */ union_map(const typed::map<Domain, Domain> &map);
+ inline explicit union_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Domain> apply_domain(const typed::union_map<Domain, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Domain> apply_domain(const typed::basic_map<Domain, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Domain> apply_domain(const typed::map<Domain, Domain2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> apply_range(const typed::union_map<Domain, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> apply_range(const typed::basic_map<Domain, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> apply_range(const typed::map<Domain, Range2> &umap2) const;
+ inline typed::map<Domain, Domain> as_map() const;
+ inline typed::multi_union_pw_aff<Domain, Domain> as_multi_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<Domain, Domain> as_union_pw_multi_aff() const;
+ inline typed::union_set<Domain> bind_range(const typed::multi_id<Domain> &tuple) const;
+ inline typed::union_map<Domain, Domain> coalesce() const;
+ inline typed::union_map<Domain, Domain> curry() const = delete;
+ inline typed::union_set<Domain> deltas() const;
+ inline typed::union_map<Domain, Domain> detect_equalities() const;
+ inline typed::union_set<Domain> domain() const;
+ inline typed::union_map<Domain, Domain> domain_factor_domain() const = delete;
+ inline typed::union_map<Domain, Domain> domain_factor_range() const = delete;
+ inline typed::union_map<pair<Domain, Domain>, Domain> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain>, Domain> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, Domain> domain_product(const typed::union_map<Domain2, Domain> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, Domain> domain_product(const typed::basic_map<Domain2, Domain> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, Domain> domain_product(const typed::map<Domain2, Domain> &umap2) const;
+ static inline typed::union_map<Domain, Domain> empty(const isl::ctx &ctx);
+ template <typename Range>
+ inline typed::union_map<Domain, Domain> eq_at(const typed::multi_union_pw_aff<Domain, Range> &mupa) const;
+ template <typename Range>
+ inline typed::union_map<Domain, Domain> eq_at(const typed::multi_pw_aff<Domain, Range> &mupa) const;
+ template <typename Range>
+ inline typed::union_map<Domain, Domain> eq_at(const typed::union_pw_aff<Domain, Range> &mupa) const;
+ inline bool every_map(const std::function<bool(typed::map<Domain, Domain>)> &test) const;
+ inline typed::map<Domain, Domain> extract_map(const typed::space<Domain, Domain> &space) const;
+ inline void foreach_map(const std::function<void(typed::map<Domain, Domain>)> &fn) const;
+ inline typed::union_map<Domain, Domain> gist(const typed::union_map<Domain, Domain> &context) const;
+ inline typed::union_map<Domain, Domain> gist(const typed::basic_map<Domain, Domain> &context) const;
+ inline typed::union_map<Domain, Domain> gist(const typed::map<Domain, Domain> &context) const;
+ inline typed::union_map<Domain, Domain> gist_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::union_map<Domain, Domain> gist_domain(const typed::basic_set<Domain> &uset) const;
+ inline typed::union_map<Domain, Domain> gist_domain(const typed::point<Domain> &uset) const;
+ inline typed::union_map<Domain, Domain> gist_domain(const typed::set<Domain> &uset) const;
+ inline typed::union_map<Domain, Domain> intersect(const typed::union_map<Domain, Domain> &umap2) const;
+ inline typed::union_map<Domain, Domain> intersect(const typed::basic_map<Domain, Domain> &umap2) const;
+ inline typed::union_map<Domain, Domain> intersect(const typed::map<Domain, Domain> &umap2) const;
+ inline typed::union_map<Domain, Domain> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, Domain> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::union_map<Domain, Domain> intersect_params(const typed::set<> &set) const;
+ inline typed::union_map<Domain, Domain> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_map<Domain, Domain> intersect_params(const typed::point<> &set) const;
+ inline typed::union_map<Domain, Domain> intersect_range(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, Domain> intersect_range(const typed::union_set<Domain> &uset) const;
+ inline typed::union_map<Domain, Domain> lexmax() const;
+ inline typed::union_map<Domain, Domain> lexmin() const;
+ inline typed::map_list<Domain, Domain> map_list() const;
+ inline typed::map_list<Domain, Domain> get_map_list() const = delete;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Domain> preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Domain> preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Domain> preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, Domain> preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> preimage_range(const typed::multi_aff<Range2, Domain> &ma) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> preimage_range(const typed::pw_multi_aff<Range2, Domain> &pma) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, Range2> preimage_range(const typed::union_pw_multi_aff<Range2, Domain> &upma) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>> product(const typed::union_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>> product(const typed::basic_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>> product(const typed::map<Domain2, Range2> &umap2) const;
+ inline typed::union_map<Domain, Domain> project_out_all_params() const;
+ inline typed::union_set<Domain> range() const;
+ inline typed::union_map<Domain, Domain> range_factor_domain() const = delete;
+ inline typed::union_map<Domain, Domain> range_factor_range() const = delete;
+ inline typed::union_map<pair<Domain, Domain>, Domain> range_map() const;
+ template <typename Range2>
+ inline typed::union_map<Domain, pair<Domain, Range2>> range_product(const typed::union_map<Domain, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, pair<Domain, Range2>> range_product(const typed::basic_map<Domain, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<Domain, pair<Domain, Range2>> range_product(const typed::map<Domain, Range2> &umap2) const;
+ inline typed::union_map<Domain, Domain> range_reverse() const = delete;
+ inline typed::union_map<Domain, Domain> reverse() const;
+ inline typed::space<> space() const;
+ inline typed::space<Domain, Domain> get_space() const = delete;
+ inline typed::union_map<Domain, Domain> subtract(const typed::union_map<Domain, Domain> &umap2) const;
+ inline typed::union_map<Domain, Domain> subtract(const typed::basic_map<Domain, Domain> &umap2) const;
+ inline typed::union_map<Domain, Domain> subtract(const typed::map<Domain, Domain> &umap2) const;
+ inline typed::union_map<Domain, Domain> subtract_domain(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> subtract_domain(const typed::basic_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> subtract_domain(const typed::point<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> subtract_domain(const typed::set<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> subtract_range(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> subtract_range(const typed::basic_set<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> subtract_range(const typed::point<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> subtract_range(const typed::set<Domain> &dom) const;
+ inline typed::union_map<Domain, Domain> uncurry() const = delete;
+ inline typed::union_map<Domain, Domain> unite(const typed::union_map<Domain, Domain> &umap2) const;
+ inline typed::union_map<Domain, Domain> unite(const typed::basic_map<Domain, Domain> &umap2) const;
+ inline typed::union_map<Domain, Domain> unite(const typed::map<Domain, Domain> &umap2) const;
+ inline typed::union_map<Domain, Domain> universe() const;
+ inline typed::union_set<pair<Domain, Domain>> wrap() const;
+};
+
+template <typename Domain, typename Range, typename Range2>
+struct union_map<Domain, pair<Range, Range2>> : public isl::union_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_map() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{} &&
+ std::is_base_of<Range2, Arg3>{},
+ bool>::type = true>
+ union_map(const union_map<Arg1, pair<Arg2, Arg3>> &obj) : isl::union_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_map>{}, bool>::type = true>
+ union_map(const base &obj) : isl::union_map(obj) {}
+ public:
+ static union_map from(const isl::union_map &obj) {
+ return union_map(obj);
+ }
+ inline /* implicit */ union_map(const typed::basic_map<Domain, pair<Range, Range2>> &bmap);
+ inline /* implicit */ union_map(const typed::map<Domain, pair<Range, Range2>> &map);
+ inline explicit union_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> apply_domain(const typed::union_map<Domain, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> apply_domain(const typed::basic_map<Domain, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> apply_domain(const typed::map<Domain, Domain2> &umap2) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, Arg3> apply_range(const typed::union_map<pair<Range, Range2>, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, Arg3> apply_range(const typed::basic_map<pair<Range, Range2>, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, Arg3> apply_range(const typed::map<pair<Range, Range2>, Arg3> &umap2) const;
+ inline typed::map<Domain, pair<Range, Range2>> as_map() const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> as_union_pw_multi_aff() const;
+ inline typed::union_set<Domain> bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> coalesce() const;
+ inline typed::union_map<Domain, pair<Range, Range2>> curry() const = delete;
+ inline typed::union_set<Domain, pair<Range, Range2>> deltas() const = delete;
+ inline typed::union_map<Domain, pair<Range, Range2>> detect_equalities() const;
+ inline typed::union_set<Domain> domain() const;
+ inline typed::union_map<Domain, pair<Range, Range2>> domain_factor_domain() const = delete;
+ inline typed::union_map<Domain, pair<Range, Range2>> domain_factor_range() const = delete;
+ inline typed::union_map<pair<Domain, pair<Range, Range2>>, Domain> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> domain_product(const typed::basic_map<Domain2, pair<Range, Range2>> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> domain_product(const typed::map<Domain2, pair<Range, Range2>> &umap2) const;
+ static inline typed::union_map<Domain, pair<Range, Range2>> empty(const isl::ctx &ctx);
+ inline typed::union_map<Domain, pair<Range, Range2>> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline typed::union_map<Domain, pair<Range, Range2>> eq_at(const typed::multi_pw_aff<> &mupa) const = delete;
+ inline typed::union_map<Domain, pair<Range, Range2>> eq_at(const typed::union_pw_aff<> &mupa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<Domain, pair<Range, Range2>>)> &test) const;
+ inline typed::map<Domain, pair<Range, Range2>> extract_map(const typed::space<Domain, pair<Range, Range2>> &space) const;
+ inline void foreach_map(const std::function<void(typed::map<Domain, pair<Range, Range2>>)> &fn) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> gist(const typed::union_map<Domain, pair<Range, Range2>> &context) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> gist(const typed::basic_map<Domain, pair<Range, Range2>> &context) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> gist(const typed::map<Domain, pair<Range, Range2>> &context) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> gist_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> gist_domain(const typed::basic_set<Domain> &uset) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> gist_domain(const typed::point<Domain> &uset) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> gist_domain(const typed::set<Domain> &uset) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect(const typed::basic_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect(const typed::map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_params(const typed::set<> &set) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_params(const typed::point<> &set) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_range(const typed::space<pair<Range, Range2>> &space) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> lexmax() const;
+ inline typed::union_map<Domain, pair<Range, Range2>> lexmin() const;
+ inline typed::map_list<Domain, pair<Range, Range2>> map_list() const;
+ inline typed::map_list<Domain, pair<Range, Range2>> get_map_list() const = delete;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, Arg3> preimage_range(const typed::multi_aff<Arg3, pair<Range, Range2>> &ma) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, Arg3> preimage_range(const typed::pw_multi_aff<Arg3, pair<Range, Range2>> &pma) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, Arg3> preimage_range(const typed::union_pw_multi_aff<Arg3, pair<Range, Range2>> &upma) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::union_map<Domain2, Arg3> &umap2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::basic_map<Domain2, Arg3> &umap2) const;
+ template <typename Domain2, typename Arg3>
+ inline typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> product(const typed::map<Domain2, Arg3> &umap2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> project_out_all_params() const;
+ inline typed::union_set<pair<Range, Range2>> range() const;
+ inline typed::union_map<Domain, Range> range_factor_domain() const;
+ inline typed::union_map<Domain, Range2> range_factor_range() const;
+ inline typed::union_map<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>> range_map() const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::union_map<Domain, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::basic_map<Domain, Arg3> &umap2) const;
+ template <typename Arg3>
+ inline typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::map<Domain, Arg3> &umap2) const;
+ inline typed::union_map<Domain, pair<Range2, Range>> range_reverse() const;
+ inline typed::union_map<pair<Range, Range2>, Domain> reverse() const;
+ inline typed::space<> space() const;
+ inline typed::space<Domain, pair<Range, Range2>> get_space() const = delete;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract(const typed::basic_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract(const typed::map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_domain(const typed::union_set<Domain> &dom) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_domain(const typed::basic_set<Domain> &dom) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_domain(const typed::point<Domain> &dom) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_domain(const typed::set<Domain> &dom) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_range(const typed::basic_set<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_range(const typed::point<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> subtract_range(const typed::set<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<pair<Domain, Range>, Range2> uncurry() const;
+ inline typed::union_map<Domain, pair<Range, Range2>> unite(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> unite(const typed::basic_map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> unite(const typed::map<Domain, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<Domain, pair<Range, Range2>> universe() const;
+ inline typed::union_set<pair<Domain, pair<Range, Range2>>> wrap() const;
+};
+
+template <typename T1, typename T2>
+struct union_map<pair<T1, T2>, pair<T1, T2>> : public isl::union_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_map() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<T1, Arg1>{} &&
+ std::is_base_of<T2, Arg2>{},
+ bool>::type = true>
+ union_map(const union_map<pair<Arg1, Arg2>, pair<Arg1, Arg2>> &obj) : isl::union_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_map>{}, bool>::type = true>
+ union_map(const base &obj) : isl::union_map(obj) {}
+ public:
+ static union_map from(const isl::union_map &obj) {
+ return union_map(obj);
+ }
+ inline /* implicit */ union_map(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &bmap);
+ inline /* implicit */ union_map(const typed::map<pair<T1, T2>, pair<T1, T2>> &map);
+ inline explicit union_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<T1, T2>> apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<T1, T2>> apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<T1, T2>> apply_domain(const typed::map<pair<T1, T2>, Domain2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, Range2> apply_range(const typed::union_map<pair<T1, T2>, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, Range2> apply_range(const typed::basic_map<pair<T1, T2>, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, Range2> apply_range(const typed::map<pair<T1, T2>, Range2> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> as_map() const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<T1, T2>> as_multi_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<T1, T2>> as_union_pw_multi_aff() const;
+ inline typed::union_set<pair<T1, T2>> bind_range(const typed::multi_id<pair<T1, T2>> &tuple) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> coalesce() const;
+ inline typed::union_map<T1, pair<T2, pair<T1, T2>>> curry() const;
+ inline typed::union_set<pair<T1, T2>> deltas() const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> detect_equalities() const;
+ inline typed::union_set<pair<T1, T2>> domain() const;
+ inline typed::union_map<T1, pair<T1, T2>> domain_factor_domain() const;
+ inline typed::union_map<T2, pair<T1, T2>> domain_factor_range() const;
+ inline typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> domain_product(const typed::union_map<Domain2, pair<T1, T2>> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> domain_product(const typed::basic_map<Domain2, pair<T1, T2>> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> domain_product(const typed::map<Domain2, pair<T1, T2>> &umap2) const;
+ static inline typed::union_map<pair<T1, T2>, pair<T1, T2>> empty(const isl::ctx &ctx);
+ template <typename Range>
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> eq_at(const typed::multi_union_pw_aff<pair<T1, T2>, Range> &mupa) const;
+ template <typename Range>
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> eq_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mupa) const;
+ template <typename Range>
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> eq_at(const typed::union_pw_aff<pair<T1, T2>, Range> &mupa) const;
+ inline bool every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<T1, T2>>)> &test) const;
+ inline typed::map<pair<T1, T2>, pair<T1, T2>> extract_map(const typed::space<pair<T1, T2>, pair<T1, T2>> &space) const;
+ inline void foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<T1, T2>>)> &fn) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> gist(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> gist(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> gist(const typed::map<pair<T1, T2>, pair<T1, T2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> gist_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> gist_domain(const typed::basic_set<pair<T1, T2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> gist_domain(const typed::point<pair<T1, T2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> gist_domain(const typed::set<pair<T1, T2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect(const typed::map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_params(const typed::set<> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_params(const typed::point<> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> intersect_range(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> lexmax() const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> lexmin() const;
+ inline typed::map_list<pair<T1, T2>, pair<T1, T2>> map_list() const;
+ inline typed::map_list<pair<T1, T2>, pair<T1, T2>> get_map_list() const = delete;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<T1, T2>> preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<T1, T2>> preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<T1, T2>> preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<T1, T2>> preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, Range2> preimage_range(const typed::multi_aff<Range2, pair<T1, T2>> &ma) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, Range2> preimage_range(const typed::pw_multi_aff<Range2, pair<T1, T2>> &pma) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, Range2> preimage_range(const typed::union_pw_multi_aff<Range2, pair<T1, T2>> &upma) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> product(const typed::union_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> product(const typed::basic_map<Domain2, Range2> &umap2) const;
+ template <typename Domain2, typename Range2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> product(const typed::map<Domain2, Range2> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> project_out_all_params() const;
+ inline typed::union_set<pair<T1, T2>> range() const;
+ inline typed::union_map<pair<T1, T2>, T1> range_factor_domain() const;
+ inline typed::union_map<pair<T1, T2>, T2> range_factor_range() const;
+ inline typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> range_map() const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> range_product(const typed::union_map<pair<T1, T2>, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> range_product(const typed::basic_map<pair<T1, T2>, Range2> &umap2) const;
+ template <typename Range2>
+ inline typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> range_product(const typed::map<pair<T1, T2>, Range2> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T2, T1>> range_reverse() const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> reverse() const;
+ inline typed::space<> space() const;
+ inline typed::space<pair<T1, T2>, pair<T1, T2>> get_space() const = delete;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract(const typed::map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_domain(const typed::basic_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_domain(const typed::point<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_domain(const typed::set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_range(const typed::union_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_range(const typed::basic_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_range(const typed::point<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> subtract_range(const typed::set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<pair<T1, T2>, T1>, T2> uncurry() const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> unite(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> unite(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> unite(const typed::map<pair<T1, T2>, pair<T1, T2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<T1, T2>> universe() const;
+ inline typed::union_set<pair<pair<T1, T2>, pair<T1, T2>>> wrap() const;
+};
+
+template <typename T1, typename T2, typename Range, typename Range2>
+struct union_map<pair<T1, T2>, pair<Range, Range2>> : public isl::union_map {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_map() = default;
+ template <typename Arg1, typename Arg2, typename Arg3, typename Arg4,
+ typename std::enable_if<
+ std::is_base_of<T1, Arg1>{} &&
+ std::is_base_of<T2, Arg2>{} &&
+ std::is_base_of<Range, Arg3>{} &&
+ std::is_base_of<Range2, Arg4>{},
+ bool>::type = true>
+ union_map(const union_map<pair<Arg1, Arg2>, pair<Arg3, Arg4>> &obj) : isl::union_map(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_map>{}, bool>::type = true>
+ union_map(const base &obj) : isl::union_map(obj) {}
+ public:
+ static union_map from(const isl::union_map &obj) {
+ return union_map(obj);
+ }
+ inline /* implicit */ union_map(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &bmap);
+ inline /* implicit */ union_map(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map);
+ inline explicit union_map(const isl::ctx &ctx, const std::string &str);
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> apply_domain(const typed::map<pair<T1, T2>, Domain2> &umap2) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, Arg2> apply_range(const typed::union_map<pair<Range, Range2>, Arg2> &umap2) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, Arg2> apply_range(const typed::basic_map<pair<Range, Range2>, Arg2> &umap2) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, Arg2> apply_range(const typed::map<pair<Range, Range2>, Arg2> &umap2) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> as_map() const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> as_union_pw_multi_aff() const;
+ inline typed::union_set<pair<T1, T2>> bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> coalesce() const;
+ inline typed::union_map<T1, pair<T2, pair<Range, Range2>>> curry() const;
+ inline typed::union_set<pair<T1, T2>, pair<Range, Range2>> deltas() const = delete;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> detect_equalities() const;
+ inline typed::union_set<pair<T1, T2>> domain() const;
+ inline typed::union_map<T1, pair<Range, Range2>> domain_factor_domain() const;
+ inline typed::union_map<T2, pair<Range, Range2>> domain_factor_range() const;
+ inline typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> domain_map() const;
+ inline typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> domain_map_union_pw_multi_aff() const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> domain_product(const typed::basic_map<Domain2, pair<Range, Range2>> &umap2) const;
+ template <typename Domain2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> domain_product(const typed::map<Domain2, pair<Range, Range2>> &umap2) const;
+ static inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> empty(const isl::ctx &ctx);
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> eq_at(const typed::multi_pw_aff<> &mupa) const = delete;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> eq_at(const typed::union_pw_aff<> &mupa) const = delete;
+ inline bool every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &test) const;
+ inline typed::map<pair<T1, T2>, pair<Range, Range2>> extract_map(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const;
+ inline void foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &fn) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> gist(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> gist(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> gist(const typed::map<pair<T1, T2>, pair<Range, Range2>> &context) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> gist_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> gist_domain(const typed::basic_set<pair<T1, T2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> gist_domain(const typed::point<pair<T1, T2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> gist_domain(const typed::set<pair<T1, T2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect(const typed::map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::set<> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::point<> &set) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::space<pair<Range, Range2>> &space) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> lexmax() const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> lexmin() const;
+ inline typed::map_list<pair<T1, T2>, pair<Range, Range2>> map_list() const;
+ inline typed::map_list<pair<T1, T2>, pair<Range, Range2>> get_map_list() const = delete;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_map<Domain2, pair<Range, Range2>> preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, Arg2> preimage_range(const typed::multi_aff<Arg2, pair<Range, Range2>> &ma) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, Arg2> preimage_range(const typed::pw_multi_aff<Arg2, pair<Range, Range2>> &pma) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, Arg2> preimage_range(const typed::union_pw_multi_aff<Arg2, pair<Range, Range2>> &upma) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::union_map<Domain2, Arg2> &umap2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::basic_map<Domain2, Arg2> &umap2) const;
+ template <typename Domain2, typename Arg2>
+ inline typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> product(const typed::map<Domain2, Arg2> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> project_out_all_params() const;
+ inline typed::union_set<pair<Range, Range2>> range() const;
+ inline typed::union_map<pair<T1, T2>, Range> range_factor_domain() const;
+ inline typed::union_map<pair<T1, T2>, Range2> range_factor_range() const;
+ inline typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>> range_map() const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::union_map<pair<T1, T2>, Arg2> &umap2) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::basic_map<pair<T1, T2>, Arg2> &umap2) const;
+ template <typename Arg2>
+ inline typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::map<pair<T1, T2>, Arg2> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range2, Range>> range_reverse() const;
+ inline typed::union_map<pair<Range, Range2>, pair<T1, T2>> reverse() const;
+ inline typed::space<> space() const;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> get_space() const = delete;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract(const typed::map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::basic_set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::point<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::set<pair<T1, T2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_range(const typed::basic_set<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_range(const typed::point<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> subtract_range(const typed::set<pair<Range, Range2>> &dom) const;
+ inline typed::union_map<pair<pair<T1, T2>, Range>, Range2> uncurry() const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> unite(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> unite(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> unite(const typed::map<pair<T1, T2>, pair<Range, Range2>> &umap2) const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> universe() const;
+ inline typed::union_set<pair<pair<T1, T2>, pair<Range, Range2>>> wrap() const;
+};
+
+template <>
+struct union_pw_aff<Anonymous> : public isl::union_pw_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_pw_aff() = default;
+ union_pw_aff(const isl::union_pw_aff &obj) : isl::union_pw_aff(obj) {}
+ static union_pw_aff from(const isl::union_pw_aff &obj) {
+ return union_pw_aff(obj);
+ }
+ inline /* implicit */ union_pw_aff(const typed::aff<Anonymous> &aff);
+ inline /* implicit */ union_pw_aff(const typed::pw_aff<Anonymous> &pa);
+ inline explicit union_pw_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_union_pw_aff<Anonymous> add(const typed::multi_union_pw_aff<Anonymous> &multi2) const;
+ inline typed::union_pw_aff<Anonymous> add(const typed::union_pw_aff<Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Anonymous> add(const typed::union_pw_multi_aff<Anonymous> &upma2) const;
+ inline typed::union_pw_aff<Anonymous> add(const typed::aff<Anonymous> &upa2) const;
+ inline typed::union_pw_aff<Anonymous> add(const typed::pw_aff<Anonymous> &upa2) const;
+ template <typename Range>
+ inline typed::union_pw_multi_aff<Range> apply(const typed::union_pw_multi_aff<Anonymous, Range> &upma2) const;
+ inline typed::multi_union_pw_aff<Anonymous> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Anonymous> as_pw_multi_aff() const;
+ inline typed::union_map<Anonymous> as_union_map() const = delete;
+ inline typed::union_pw_aff<Anonymous> at(int pos) const;
+ inline typed::union_set<> bind(const typed::multi_id<Anonymous> &tuple) const;
+ inline typed::union_set<> bind(const typed::id<Anonymous> &id) const;
+ inline typed::union_set<> bind(const std::string &id) const;
+ inline typed::union_pw_aff<Anonymous> coalesce() const;
+ inline typed::union_set<> domain() const;
+ inline typed::pw_multi_aff<Anonymous> extract_pw_multi_aff(const typed::space<Anonymous> &space) const;
+ inline typed::union_pw_aff<Anonymous> gist(const typed::union_set<> &context) const;
+ inline typed::union_pw_aff<Anonymous> gist(const typed::basic_set<> &context) const;
+ inline typed::union_pw_aff<Anonymous> gist(const typed::point<> &context) const;
+ inline typed::union_pw_aff<Anonymous> gist(const typed::set<> &context) const;
+ inline typed::union_pw_aff<Anonymous> intersect_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_aff<Anonymous> intersect_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::union_pw_aff<Anonymous> intersect_params(const typed::set<> &set) const;
+ inline typed::union_pw_aff<Anonymous> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_pw_aff<Anonymous> intersect_params(const typed::point<> &set) const;
+ inline typed::union_pw_aff_list<Anonymous> list() const;
+ inline typed::multi_union_pw_aff<Anonymous> neg() const;
+ inline typed::union_pw_multi_aff<Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_multi_aff<> &upma) const = delete;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::multi_aff<> &upma) const = delete;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::pw_multi_aff<> &upma) const = delete;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_aff<> &upma) const = delete;
+ inline typed::pw_multi_aff_list<Anonymous> pw_multi_aff_list() const;
+ inline typed::union_pw_multi_aff<Anonymous> range_factor_domain() const = delete;
+ inline typed::union_pw_multi_aff<Anonymous> range_factor_range() const = delete;
+ inline typed::multi_union_pw_aff<Anonymous> range_product(const typed::multi_union_pw_aff<> &multi2) const = delete;
+ inline typed::union_pw_multi_aff<Anonymous> range_product(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::multi_union_pw_aff<Anonymous> scale(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::multi_union_pw_aff<Anonymous> scale(const typed::val<Anonymous> &v) const;
+ inline typed::multi_union_pw_aff<Anonymous> scale(long v) const;
+ inline typed::multi_union_pw_aff<Anonymous> scale_down(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::multi_union_pw_aff<Anonymous> scale_down(const typed::val<Anonymous> &v) const;
+ inline typed::multi_union_pw_aff<Anonymous> scale_down(long v) const;
+ inline typed::multi_union_pw_aff<Anonymous> set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const;
+ template <typename Domain2>
+ inline typed::multi_union_pw_aff<Domain2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Domain2>
+ inline typed::multi_union_pw_aff<Domain2> set_range_tuple(const std::string &id) const;
+ inline typed::space<> space() const;
+ inline typed::space<Anonymous> get_space() const = delete;
+ inline typed::multi_union_pw_aff<Anonymous> sub(const typed::multi_union_pw_aff<Anonymous> &multi2) const;
+ inline typed::union_pw_aff<Anonymous> sub(const typed::union_pw_aff<Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Anonymous> sub(const typed::union_pw_multi_aff<Anonymous> &upma2) const;
+ inline typed::union_pw_aff<Anonymous> sub(const typed::aff<Anonymous> &upa2) const;
+ inline typed::union_pw_aff<Anonymous> sub(const typed::pw_aff<Anonymous> &upa2) const;
+ inline typed::union_pw_aff<Anonymous> subtract_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_aff<Anonymous> subtract_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::multi_union_pw_aff<Anonymous> union_add(const typed::multi_union_pw_aff<Anonymous> &mupa2) const;
+ inline typed::union_pw_aff<Anonymous> union_add(const typed::union_pw_aff<Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Anonymous> union_add(const typed::union_pw_multi_aff<Anonymous> &upma2) const;
+ inline typed::union_pw_aff<Anonymous> union_add(const typed::aff<Anonymous> &upa2) const;
+ inline typed::union_pw_aff<Anonymous> union_add(const typed::pw_aff<Anonymous> &upa2) const;
+};
+
+template <typename Domain>
+struct union_pw_aff<Domain, Anonymous> : public isl::union_pw_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_pw_aff() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ union_pw_aff(const union_pw_aff<Arg1, Anonymous> &obj) : isl::union_pw_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_pw_aff>{}, bool>::type = true>
+ union_pw_aff(const base &obj) : isl::union_pw_aff(obj) {}
+ public:
+ static union_pw_aff from(const isl::union_pw_aff &obj) {
+ return union_pw_aff(obj);
+ }
+ inline /* implicit */ union_pw_aff(const typed::aff<Domain, Anonymous> &aff);
+ inline /* implicit */ union_pw_aff(const typed::pw_aff<Domain, Anonymous> &pa);
+ inline explicit union_pw_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_union_pw_aff<Domain, Anonymous> add(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> add(const typed::aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> add(const typed::pw_aff<Domain, Anonymous> &upa2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, Range2> apply(const typed::union_pw_multi_aff<Anonymous, Range2> &upma2) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Anonymous> as_pw_multi_aff() const;
+ inline typed::union_map<Domain, Anonymous> as_union_map() const;
+ inline typed::union_pw_aff<Domain, Anonymous> at(int pos) const;
+ inline typed::union_set<Domain> bind(const typed::multi_id<Anonymous> &tuple) const;
+ inline typed::union_set<Domain> bind(const typed::id<Anonymous> &id) const;
+ inline typed::union_set<Domain> bind(const std::string &id) const;
+ inline typed::union_pw_aff<Domain, Anonymous> coalesce() const;
+ inline typed::union_set<Domain> domain() const;
+ inline typed::pw_multi_aff<Domain, Anonymous> extract_pw_multi_aff(const typed::space<Domain, Anonymous> &space) const;
+ inline typed::union_pw_aff<Domain, Anonymous> gist(const typed::union_set<Domain> &context) const;
+ inline typed::union_pw_aff<Domain, Anonymous> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::union_pw_aff<Domain, Anonymous> gist(const typed::point<Domain> &context) const;
+ inline typed::union_pw_aff<Domain, Anonymous> gist(const typed::set<Domain> &context) const;
+ inline typed::union_pw_aff<Domain, Anonymous> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_aff<Domain, Anonymous> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::union_pw_aff<Domain, Anonymous> intersect_params(const typed::set<> &set) const;
+ inline typed::union_pw_aff<Domain, Anonymous> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_pw_aff<Domain, Anonymous> intersect_params(const typed::point<> &set) const;
+ inline typed::union_pw_aff_list<Domain, Anonymous> list() const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> neg() const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ template <typename Domain2>
+ inline typed::union_pw_aff<Domain2, Anonymous> pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_multi_aff<Domain> &upma) const;
+ template <typename Domain2>
+ inline typed::union_pw_aff<Domain2, Anonymous> pullback(const typed::multi_aff<Domain2, Domain> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::multi_aff<Domain> &upma) const;
+ template <typename Domain2>
+ inline typed::union_pw_aff<Domain2, Anonymous> pullback(const typed::pw_multi_aff<Domain2, Domain> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::pw_multi_aff<Domain> &upma) const;
+ template <typename Domain2>
+ inline typed::union_pw_aff<Domain2, Anonymous> pullback(const typed::union_pw_aff<Domain2, Domain> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_aff<Domain> &upma) const;
+ inline typed::pw_multi_aff_list<Domain, Anonymous> pw_multi_aff_list() const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> range_factor_domain() const = delete;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> range_factor_range() const = delete;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, pair<Anonymous, Range2>> range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, pair<Anonymous, Range2>> range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> scale(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> scale(const typed::val<Anonymous> &v) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> scale(long v) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> scale_down(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> scale_down(const typed::val<Anonymous> &v) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> scale_down(long v) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<Domain, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<> space() const;
+ inline typed::space<Domain, Anonymous> get_space() const = delete;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> sub(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> sub(const typed::union_pw_aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> sub(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> sub(const typed::aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> sub(const typed::pw_aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> subtract_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_aff<Domain, Anonymous> subtract_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::multi_union_pw_aff<Domain, Anonymous> union_add(const typed::multi_union_pw_aff<Domain, Anonymous> &mupa2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> union_add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<Domain, Anonymous> union_add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> union_add(const typed::aff<Domain, Anonymous> &upa2) const;
+ inline typed::union_pw_aff<Domain, Anonymous> union_add(const typed::pw_aff<Domain, Anonymous> &upa2) const;
+};
+
+template <typename Domain, typename Domain2>
+struct union_pw_aff<pair<Domain, Domain2>, Anonymous> : public isl::union_pw_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_pw_aff() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Domain2, Arg2>{},
+ bool>::type = true>
+ union_pw_aff(const union_pw_aff<pair<Arg1, Arg2>, Anonymous> &obj) : isl::union_pw_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_pw_aff>{}, bool>::type = true>
+ union_pw_aff(const base &obj) : isl::union_pw_aff(obj) {}
+ public:
+ static union_pw_aff from(const isl::union_pw_aff &obj) {
+ return union_pw_aff(obj);
+ }
+ inline /* implicit */ union_pw_aff(const typed::aff<pair<Domain, Domain2>, Anonymous> &aff);
+ inline /* implicit */ union_pw_aff(const typed::pw_aff<pair<Domain, Domain2>, Anonymous> &pa);
+ inline explicit union_pw_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> add(const typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> &multi2) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> add(const typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> add(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> &upma2) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> add(const typed::aff<pair<Domain, Domain2>, Anonymous> &upa2) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> add(const typed::pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> apply(const typed::union_pw_multi_aff<Anonymous, Range2> &upma2) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, Anonymous> as_pw_multi_aff() const;
+ inline typed::union_map<pair<Domain, Domain2>, Anonymous> as_union_map() const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> at(int pos) const;
+ inline typed::union_set<pair<Domain, Domain2>> bind(const typed::multi_id<Anonymous> &tuple) const;
+ inline typed::union_set<pair<Domain, Domain2>> bind(const typed::id<Anonymous> &id) const;
+ inline typed::union_set<pair<Domain, Domain2>> bind(const std::string &id) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> coalesce() const;
+ inline typed::union_set<pair<Domain, Domain2>> domain() const;
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, Anonymous> extract_pw_multi_aff(const typed::space<pair<Domain, Domain2>, Anonymous> &space) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> gist(const typed::union_set<pair<Domain, Domain2>> &context) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> gist(const typed::basic_set<pair<Domain, Domain2>> &context) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> gist(const typed::point<pair<Domain, Domain2>> &context) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> gist(const typed::set<pair<Domain, Domain2>> &context) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> intersect_domain(const typed::space<pair<Domain, Domain2>> &space) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> intersect_domain(const typed::union_set<pair<Domain, Domain2>> &uset) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> intersect_params(const typed::set<> &set) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> intersect_params(const typed::point<> &set) const;
+ inline typed::union_pw_aff_list<pair<Domain, Domain2>, Anonymous> list() const;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> neg() const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, Domain2>, Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain> &upma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_aff<Arg2, Anonymous> pullback(const typed::union_pw_multi_aff<Arg2, pair<Domain, Domain2>> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_multi_aff<pair<Domain, Domain2>> &upma) const;
+ template <typename Arg2>
+ inline typed::union_pw_aff<Arg2, Anonymous> pullback(const typed::multi_aff<Arg2, pair<Domain, Domain2>> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::multi_aff<pair<Domain, Domain2>> &upma) const;
+ template <typename Arg2>
+ inline typed::union_pw_aff<Arg2, Anonymous> pullback(const typed::pw_multi_aff<Arg2, pair<Domain, Domain2>> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::pw_multi_aff<pair<Domain, Domain2>> &upma) const;
+ template <typename Arg2>
+ inline typed::union_pw_aff<Arg2, Anonymous> pullback(const typed::union_pw_aff<Arg2, pair<Domain, Domain2>> &upma) const;
+ inline typed::union_pw_aff<Anonymous> pullback(const typed::union_pw_aff<pair<Domain, Domain2>> &upma) const;
+ inline typed::pw_multi_aff_list<pair<Domain, Domain2>, Anonymous> pw_multi_aff_list() const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> range_factor_domain() const = delete;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> range_factor_range() const = delete;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> range_product(const typed::multi_union_pw_aff<pair<Domain, Domain2>, Range2> &multi2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> range_product(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> &upma2) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> scale(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> scale(const typed::val<Anonymous> &v) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> scale(long v) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> scale_down(const typed::multi_val<Anonymous> &mv) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> scale_down(const typed::val<Anonymous> &v) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> scale_down(long v) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> set_at(int pos, const typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> &el) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Range2> set_range_tuple(const typed::id<Anonymous> &id) const;
+ template <typename Range2>
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Range2> set_range_tuple(const std::string &id) const;
+ inline typed::space<> space() const;
+ inline typed::space<pair<Domain, Domain2>, Anonymous> get_space() const = delete;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> sub(const typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> &multi2) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> sub(const typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> sub(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> &upma2) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> sub(const typed::aff<pair<Domain, Domain2>, Anonymous> &upa2) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> sub(const typed::pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> subtract_domain(const typed::space<pair<Domain, Domain2>> &space) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> subtract_domain(const typed::union_set<pair<Domain, Domain2>> &uset) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> union_add(const typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> &mupa2) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> union_add(const typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> union_add(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> &upma2) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> union_add(const typed::aff<pair<Domain, Domain2>, Anonymous> &upa2) const;
+ inline typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> union_add(const typed::pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const;
+};
+
+template <>
+struct union_pw_aff_list<Anonymous> : public isl::union_pw_aff_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_pw_aff_list() = default;
+ union_pw_aff_list(const isl::union_pw_aff_list &obj) : isl::union_pw_aff_list(obj) {}
+ static union_pw_aff_list from(const isl::union_pw_aff_list &obj) {
+ return union_pw_aff_list(obj);
+ }
+ inline explicit union_pw_aff_list(const isl::ctx &ctx, int n);
+ inline explicit union_pw_aff_list(const typed::union_pw_aff<Anonymous> &el);
+ inline explicit union_pw_aff_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::union_pw_aff_list<Anonymous> add(const typed::union_pw_aff<Anonymous> &el) const;
+ inline typed::union_pw_aff_list<Anonymous> add(const typed::aff<Anonymous> &el) const;
+ inline typed::union_pw_aff_list<Anonymous> add(const typed::pw_aff<Anonymous> &el) const;
+ inline typed::union_pw_aff<Anonymous> at(int index) const;
+ inline typed::union_pw_aff<Anonymous> get_at(int index) const = delete;
+ inline typed::union_pw_aff_list<Anonymous> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::union_pw_aff<Anonymous>)> &fn) const;
+};
+
+template <typename Domain>
+struct union_pw_aff_list<Domain, Anonymous> : public isl::union_pw_aff_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_pw_aff_list() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ union_pw_aff_list(const union_pw_aff_list<Arg1, Anonymous> &obj) : isl::union_pw_aff_list(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_pw_aff_list>{}, bool>::type = true>
+ union_pw_aff_list(const base &obj) : isl::union_pw_aff_list(obj) {}
+ public:
+ static union_pw_aff_list from(const isl::union_pw_aff_list &obj) {
+ return union_pw_aff_list(obj);
+ }
+ inline explicit union_pw_aff_list(const isl::ctx &ctx, int n);
+ inline explicit union_pw_aff_list(const typed::union_pw_aff<Domain, Anonymous> &el);
+ inline explicit union_pw_aff_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::union_pw_aff_list<Domain, Anonymous> add(const typed::union_pw_aff<Domain, Anonymous> &el) const;
+ inline typed::union_pw_aff_list<Domain, Anonymous> add(const typed::aff<Domain, Anonymous> &el) const;
+ inline typed::union_pw_aff_list<Domain, Anonymous> add(const typed::pw_aff<Domain, Anonymous> &el) const;
+ inline typed::union_pw_aff<Domain, Anonymous> at(int index) const;
+ inline typed::union_pw_aff<Domain, Anonymous> get_at(int index) const = delete;
+ inline typed::union_pw_aff_list<Domain, Anonymous> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::union_pw_aff<Domain, Anonymous>)> &fn) const;
+};
+
+template <typename Domain>
+struct union_pw_multi_aff<Domain> : public isl::union_pw_multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_pw_multi_aff() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ union_pw_multi_aff(const union_pw_multi_aff<Arg1> &obj) : isl::union_pw_multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_pw_multi_aff>{}, bool>::type = true>
+ union_pw_multi_aff(const base &obj) : isl::union_pw_multi_aff(obj) {}
+ public:
+ static union_pw_multi_aff from(const isl::union_pw_multi_aff &obj) {
+ return union_pw_multi_aff(obj);
+ }
+ inline /* implicit */ union_pw_multi_aff(const typed::multi_aff<Domain> &ma);
+ inline /* implicit */ union_pw_multi_aff(const typed::pw_multi_aff<Domain> &pma);
+ inline /* implicit */ union_pw_multi_aff(const typed::union_pw_aff<Domain> &upa);
+ inline explicit union_pw_multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::union_pw_multi_aff<Domain> add(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain> add(const typed::multi_aff<Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain> add(const typed::pw_multi_aff<Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain> add(const typed::union_pw_aff<Domain> &upma2) const;
+ template <typename Range>
+ inline typed::union_pw_multi_aff<Range> apply(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+ template <typename Range>
+ inline typed::union_pw_multi_aff<Range> apply(const typed::multi_aff<Domain, Range> &upma2) const;
+ template <typename Range>
+ inline typed::union_pw_multi_aff<Range> apply(const typed::pw_multi_aff<Domain, Range> &upma2) const;
+ template <typename Range>
+ inline typed::union_pw_multi_aff<Range> apply(const typed::union_pw_aff<Domain, Range> &upma2) const;
+ inline typed::multi_union_pw_aff<Domain> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain> as_pw_multi_aff() const;
+ inline typed::union_map<Domain> as_union_map() const = delete;
+ inline typed::union_pw_multi_aff<Domain> coalesce() const;
+ inline typed::union_set<> domain() const;
+ static inline typed::union_pw_multi_aff<Domain> empty(const isl::ctx &ctx);
+ inline typed::pw_multi_aff<Domain> extract_pw_multi_aff(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain> gist(const typed::union_set<> &context) const;
+ inline typed::union_pw_multi_aff<Domain> gist(const typed::basic_set<> &context) const;
+ inline typed::union_pw_multi_aff<Domain> gist(const typed::point<> &context) const;
+ inline typed::union_pw_multi_aff<Domain> gist(const typed::set<> &context) const;
+ inline typed::union_pw_multi_aff<Domain> intersect_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_multi_aff<Domain> intersect_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::union_pw_multi_aff<Domain> intersect_params(const typed::set<> &set) const;
+ inline typed::union_pw_multi_aff<Domain> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_pw_multi_aff<Domain> intersect_params(const typed::point<> &set) const;
+ inline typed::union_pw_multi_aff<Domain> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> preimage_domain_wrapped_domain(const typed::multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> preimage_domain_wrapped_domain(const typed::union_pw_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> pullback(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> pullback(const typed::multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> pullback(const typed::pw_multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> pullback(const typed::union_pw_aff<> &upma2) const = delete;
+ inline typed::pw_multi_aff_list<Domain> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff_list<Domain> get_pw_multi_aff_list() const = delete;
+ inline typed::union_pw_multi_aff<Domain> range_factor_domain() const = delete;
+ inline typed::union_pw_multi_aff<Domain> range_factor_range() const = delete;
+ inline typed::union_pw_multi_aff<Domain> range_product(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> range_product(const typed::multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> range_product(const typed::pw_multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain> range_product(const typed::union_pw_aff<> &upma2) const = delete;
+ inline typed::space<> space() const;
+ inline typed::space<Domain> get_space() const = delete;
+ inline typed::union_pw_multi_aff<Domain> sub(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain> sub(const typed::multi_aff<Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain> sub(const typed::pw_multi_aff<Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain> sub(const typed::union_pw_aff<Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain> subtract_domain(const typed::space<> &space) const = delete;
+ inline typed::union_pw_multi_aff<Domain> subtract_domain(const typed::union_set<> &uset) const = delete;
+ inline typed::union_pw_multi_aff<Domain> union_add(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain> union_add(const typed::multi_aff<Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain> union_add(const typed::pw_multi_aff<Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain> union_add(const typed::union_pw_aff<Domain> &upma2) const;
+};
+
+template <typename Domain, typename Range>
+struct union_pw_multi_aff<Domain, Range> : public isl::union_pw_multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_pw_multi_aff() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ union_pw_multi_aff(const union_pw_multi_aff<Arg1, Arg2> &obj) : isl::union_pw_multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_pw_multi_aff>{}, bool>::type = true>
+ union_pw_multi_aff(const base &obj) : isl::union_pw_multi_aff(obj) {}
+ public:
+ static union_pw_multi_aff from(const isl::union_pw_multi_aff &obj) {
+ return union_pw_multi_aff(obj);
+ }
+ inline /* implicit */ union_pw_multi_aff(const typed::multi_aff<Domain, Range> &ma);
+ inline /* implicit */ union_pw_multi_aff(const typed::pw_multi_aff<Domain, Range> &pma);
+ inline /* implicit */ union_pw_multi_aff(const typed::union_pw_aff<Domain, Range> &upa);
+ inline explicit union_pw_multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::union_pw_multi_aff<Domain, Range> add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> add(const typed::multi_aff<Domain, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> add(const typed::pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> add(const typed::union_pw_aff<Domain, Range> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, Range2> apply(const typed::union_pw_multi_aff<Range, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, Range2> apply(const typed::multi_aff<Range, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, Range2> apply(const typed::pw_multi_aff<Range, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, Range2> apply(const typed::union_pw_aff<Range, Range2> &upma2) const;
+ inline typed::multi_union_pw_aff<Domain, Range> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, Range> as_pw_multi_aff() const;
+ inline typed::union_map<Domain, Range> as_union_map() const;
+ inline typed::union_pw_multi_aff<Domain, Range> coalesce() const;
+ inline typed::union_set<Domain> domain() const;
+ static inline typed::union_pw_multi_aff<Domain, Range> empty(const isl::ctx &ctx);
+ inline typed::pw_multi_aff<Domain, Range> extract_pw_multi_aff(const typed::space<Domain, Range> &space) const;
+ inline typed::union_pw_multi_aff<Domain, Range> gist(const typed::union_set<Domain> &context) const;
+ inline typed::union_pw_multi_aff<Domain, Range> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::union_pw_multi_aff<Domain, Range> gist(const typed::point<Domain> &context) const;
+ inline typed::union_pw_multi_aff<Domain, Range> gist(const typed::set<Domain> &context) const;
+ inline typed::union_pw_multi_aff<Domain, Range> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, Range> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::union_pw_multi_aff<Domain, Range> intersect_params(const typed::set<> &set) const;
+ inline typed::union_pw_multi_aff<Domain, Range> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_pw_multi_aff<Domain, Range> intersect_params(const typed::point<> &set) const;
+ inline typed::union_pw_multi_aff<Domain, Range> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, Range> preimage_domain_wrapped_domain(const typed::multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, Range> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, Range> preimage_domain_wrapped_domain(const typed::union_pw_aff<> &upma2) const = delete;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, Range> pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, Range> pullback(const typed::multi_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::multi_aff<Domain> &upma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, Range> pullback(const typed::pw_multi_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::pw_multi_aff<Domain> &upma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, Range> pullback(const typed::union_pw_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::union_pw_aff<Domain> &upma2) const;
+ inline typed::pw_multi_aff_list<Domain, Range> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff_list<Domain, Range> get_pw_multi_aff_list() const = delete;
+ inline typed::union_pw_multi_aff<Domain, Range> range_factor_domain() const = delete;
+ inline typed::union_pw_multi_aff<Domain, Range> range_factor_range() const = delete;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> range_product(const typed::multi_aff<Domain, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> range_product(const typed::pw_multi_aff<Domain, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> range_product(const typed::union_pw_aff<Domain, Range2> &upma2) const;
+ inline typed::space<> space() const;
+ inline typed::space<Domain, Range> get_space() const = delete;
+ inline typed::union_pw_multi_aff<Domain, Range> sub(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> sub(const typed::multi_aff<Domain, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> sub(const typed::pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> sub(const typed::union_pw_aff<Domain, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> subtract_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, Range> subtract_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::union_pw_multi_aff<Domain, Range> union_add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> union_add(const typed::multi_aff<Domain, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> union_add(const typed::pw_multi_aff<Domain, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, Range> union_add(const typed::union_pw_aff<Domain, Range> &upma2) const;
+};
+
+template <typename Domain, typename Domain2, typename Range>
+struct union_pw_multi_aff<pair<Domain, Domain2>, Range> : public isl::union_pw_multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_pw_multi_aff() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Domain2, Arg2>{} &&
+ std::is_base_of<Range, Arg3>{},
+ bool>::type = true>
+ union_pw_multi_aff(const union_pw_multi_aff<pair<Arg1, Arg2>, Arg3> &obj) : isl::union_pw_multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_pw_multi_aff>{}, bool>::type = true>
+ union_pw_multi_aff(const base &obj) : isl::union_pw_multi_aff(obj) {}
+ public:
+ static union_pw_multi_aff from(const isl::union_pw_multi_aff &obj) {
+ return union_pw_multi_aff(obj);
+ }
+ inline /* implicit */ union_pw_multi_aff(const typed::multi_aff<pair<Domain, Domain2>, Range> &ma);
+ inline /* implicit */ union_pw_multi_aff(const typed::pw_multi_aff<pair<Domain, Domain2>, Range> &pma);
+ inline /* implicit */ union_pw_multi_aff(const typed::union_pw_aff<pair<Domain, Domain2>, Range> &upa);
+ inline explicit union_pw_multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> add(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> add(const typed::multi_aff<pair<Domain, Domain2>, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> add(const typed::pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> add(const typed::union_pw_aff<pair<Domain, Domain2>, Range> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> apply(const typed::union_pw_multi_aff<Range, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> apply(const typed::multi_aff<Range, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> apply(const typed::pw_multi_aff<Range, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> apply(const typed::union_pw_aff<Range, Range2> &upma2) const;
+ inline typed::multi_union_pw_aff<pair<Domain, Domain2>, Range> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, Range> as_pw_multi_aff() const;
+ inline typed::union_map<pair<Domain, Domain2>, Range> as_union_map() const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> coalesce() const;
+ inline typed::union_set<pair<Domain, Domain2>> domain() const;
+ static inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> empty(const isl::ctx &ctx);
+ inline typed::pw_multi_aff<pair<Domain, Domain2>, Range> extract_pw_multi_aff(const typed::space<pair<Domain, Domain2>, Range> &space) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> gist(const typed::union_set<pair<Domain, Domain2>> &context) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> gist(const typed::basic_set<pair<Domain, Domain2>> &context) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> gist(const typed::point<pair<Domain, Domain2>> &context) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> gist(const typed::set<pair<Domain, Domain2>> &context) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> intersect_domain(const typed::space<pair<Domain, Domain2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> intersect_domain(const typed::union_set<pair<Domain, Domain2>> &uset) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> intersect_params(const typed::set<> &set) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> intersect_params(const typed::point<> &set) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain> &upma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range> preimage_domain_wrapped_domain(const typed::multi_aff<Domain3, Domain> &upma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range> preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, Domain> &upma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range> preimage_domain_wrapped_domain(const typed::union_pw_aff<Domain3, Domain> &upma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Arg3, Range> pullback(const typed::union_pw_multi_aff<Arg3, pair<Domain, Domain2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::union_pw_multi_aff<pair<Domain, Domain2>> &upma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Arg3, Range> pullback(const typed::multi_aff<Arg3, pair<Domain, Domain2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::multi_aff<pair<Domain, Domain2>> &upma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Arg3, Range> pullback(const typed::pw_multi_aff<Arg3, pair<Domain, Domain2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::pw_multi_aff<pair<Domain, Domain2>> &upma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Arg3, Range> pullback(const typed::union_pw_aff<Arg3, pair<Domain, Domain2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Range> pullback(const typed::union_pw_aff<pair<Domain, Domain2>> &upma2) const;
+ inline typed::pw_multi_aff_list<pair<Domain, Domain2>, Range> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff_list<pair<Domain, Domain2>, Range> get_pw_multi_aff_list() const = delete;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> range_factor_domain() const = delete;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> range_factor_range() const = delete;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> range_product(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> range_product(const typed::multi_aff<pair<Domain, Domain2>, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> range_product(const typed::pw_multi_aff<pair<Domain, Domain2>, Range2> &upma2) const;
+ template <typename Range2>
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> range_product(const typed::union_pw_aff<pair<Domain, Domain2>, Range2> &upma2) const;
+ inline typed::space<> space() const;
+ inline typed::space<pair<Domain, Domain2>, Range> get_space() const = delete;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> sub(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> sub(const typed::multi_aff<pair<Domain, Domain2>, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> sub(const typed::pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> sub(const typed::union_pw_aff<pair<Domain, Domain2>, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> subtract_domain(const typed::space<pair<Domain, Domain2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> subtract_domain(const typed::union_set<pair<Domain, Domain2>> &uset) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> union_add(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> union_add(const typed::multi_aff<pair<Domain, Domain2>, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> union_add(const typed::pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> union_add(const typed::union_pw_aff<pair<Domain, Domain2>, Range> &upma2) const;
+};
+
+template <typename Domain, typename Range, typename Range2>
+struct union_pw_multi_aff<Domain, pair<Range, Range2>> : public isl::union_pw_multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_pw_multi_aff() = default;
+ template <typename Arg1, typename Arg2, typename Arg3,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{} &&
+ std::is_base_of<Range2, Arg3>{},
+ bool>::type = true>
+ union_pw_multi_aff(const union_pw_multi_aff<Arg1, pair<Arg2, Arg3>> &obj) : isl::union_pw_multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_pw_multi_aff>{}, bool>::type = true>
+ union_pw_multi_aff(const base &obj) : isl::union_pw_multi_aff(obj) {}
+ public:
+ static union_pw_multi_aff from(const isl::union_pw_multi_aff &obj) {
+ return union_pw_multi_aff(obj);
+ }
+ inline /* implicit */ union_pw_multi_aff(const typed::multi_aff<Domain, pair<Range, Range2>> &ma);
+ inline /* implicit */ union_pw_multi_aff(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma);
+ inline /* implicit */ union_pw_multi_aff(const typed::union_pw_aff<Domain, pair<Range, Range2>> &upa);
+ inline explicit union_pw_multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> add(const typed::multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> add(const typed::union_pw_aff<Domain, pair<Range, Range2>> &upma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, Arg3> apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg3> &upma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, Arg3> apply(const typed::multi_aff<pair<Range, Range2>, Arg3> &upma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, Arg3> apply(const typed::pw_multi_aff<pair<Range, Range2>, Arg3> &upma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, Arg3> apply(const typed::union_pw_aff<pair<Range, Range2>, Arg3> &upma2) const;
+ inline typed::multi_union_pw_aff<Domain, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> as_pw_multi_aff() const;
+ inline typed::union_map<Domain, pair<Range, Range2>> as_union_map() const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> coalesce() const;
+ inline typed::union_set<Domain> domain() const;
+ static inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> empty(const isl::ctx &ctx);
+ inline typed::pw_multi_aff<Domain, pair<Range, Range2>> extract_pw_multi_aff(const typed::space<Domain, pair<Range, Range2>> &space) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> gist(const typed::union_set<Domain> &context) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> gist(const typed::point<Domain> &context) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> gist(const typed::set<Domain> &context) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> intersect_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> intersect_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> intersect_params(const typed::set<> &set) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> intersect_params(const typed::point<> &set) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &upma2) const = delete;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::union_pw_aff<> &upma2) const = delete;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<Domain> &upma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::multi_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::multi_aff<Domain> &upma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::pw_multi_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::pw_multi_aff<Domain> &upma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::union_pw_aff<Domain2, Domain> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::union_pw_aff<Domain> &upma2) const;
+ inline typed::pw_multi_aff_list<Domain, pair<Range, Range2>> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff_list<Domain, pair<Range, Range2>> get_pw_multi_aff_list() const = delete;
+ inline typed::union_pw_multi_aff<Domain, Range> range_factor_domain() const;
+ inline typed::union_pw_multi_aff<Domain, Range2> range_factor_range() const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::union_pw_multi_aff<Domain, Arg3> &upma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::multi_aff<Domain, Arg3> &upma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::pw_multi_aff<Domain, Arg3> &upma2) const;
+ template <typename Arg3>
+ inline typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> range_product(const typed::union_pw_aff<Domain, Arg3> &upma2) const;
+ inline typed::space<> space() const;
+ inline typed::space<Domain, pair<Range, Range2>> get_space() const = delete;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> sub(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> sub(const typed::multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> sub(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> sub(const typed::union_pw_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> subtract_domain(const typed::space<Domain> &space) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> subtract_domain(const typed::union_set<Domain> &uset) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> union_add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> union_add(const typed::multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> union_add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<Domain, pair<Range, Range2>> union_add(const typed::union_pw_aff<Domain, pair<Range, Range2>> &upma2) const;
+};
+
+template <typename T1, typename T2, typename Range, typename Range2>
+struct union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> : public isl::union_pw_multi_aff {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_pw_multi_aff() = default;
+ template <typename Arg1, typename Arg2, typename Arg3, typename Arg4,
+ typename std::enable_if<
+ std::is_base_of<T1, Arg1>{} &&
+ std::is_base_of<T2, Arg2>{} &&
+ std::is_base_of<Range, Arg3>{} &&
+ std::is_base_of<Range2, Arg4>{},
+ bool>::type = true>
+ union_pw_multi_aff(const union_pw_multi_aff<pair<Arg1, Arg2>, pair<Arg3, Arg4>> &obj) : isl::union_pw_multi_aff(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_pw_multi_aff>{}, bool>::type = true>
+ union_pw_multi_aff(const base &obj) : isl::union_pw_multi_aff(obj) {}
+ public:
+ static union_pw_multi_aff from(const isl::union_pw_multi_aff &obj) {
+ return union_pw_multi_aff(obj);
+ }
+ inline /* implicit */ union_pw_multi_aff(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &ma);
+ inline /* implicit */ union_pw_multi_aff(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma);
+ inline /* implicit */ union_pw_multi_aff(const typed::union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upa);
+ inline explicit union_pw_multi_aff(const isl::ctx &ctx, const std::string &str);
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> add(const typed::union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, Arg2> apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg2> &upma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, Arg2> apply(const typed::multi_aff<pair<Range, Range2>, Arg2> &upma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, Arg2> apply(const typed::pw_multi_aff<pair<Range, Range2>, Arg2> &upma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, Arg2> apply(const typed::union_pw_aff<pair<Range, Range2>, Arg2> &upma2) const;
+ inline typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> as_multi_union_pw_aff() const;
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> as_pw_multi_aff() const;
+ inline typed::union_map<pair<T1, T2>, pair<Range, Range2>> as_union_map() const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> coalesce() const;
+ inline typed::union_set<pair<T1, T2>> domain() const;
+ static inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> empty(const isl::ctx &ctx);
+ inline typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> extract_pw_multi_aff(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::union_set<pair<T1, T2>> &context) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::basic_set<pair<T1, T2>> &context) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::point<pair<T1, T2>> &context) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> gist(const typed::set<pair<T1, T2>> &context) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::set<> &set) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> intersect_params(const typed::point<> &set) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, T1> &upma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::multi_aff<Domain3, T1> &upma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, T1> &upma2) const;
+ template <typename Domain3>
+ inline typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> preimage_domain_wrapped_domain(const typed::union_pw_aff<Domain3, T1> &upma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::union_pw_multi_aff<pair<T1, T2>> &upma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::multi_aff<Domain2, pair<T1, T2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::multi_aff<pair<T1, T2>> &upma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::pw_multi_aff<pair<T1, T2>> &upma2) const;
+ template <typename Domain2>
+ inline typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> pullback(const typed::union_pw_aff<Domain2, pair<T1, T2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<Range, Range2>> pullback(const typed::union_pw_aff<pair<T1, T2>> &upma2) const;
+ inline typed::pw_multi_aff_list<pair<T1, T2>, pair<Range, Range2>> pw_multi_aff_list() const;
+ inline typed::pw_multi_aff_list<pair<T1, T2>, pair<Range, Range2>> get_pw_multi_aff_list() const = delete;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, Range> range_factor_domain() const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, Range2> range_factor_range() const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::union_pw_multi_aff<pair<T1, T2>, Arg2> &upma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::multi_aff<pair<T1, T2>, Arg2> &upma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::pw_multi_aff<pair<T1, T2>, Arg2> &upma2) const;
+ template <typename Arg2>
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> range_product(const typed::union_pw_aff<pair<T1, T2>, Arg2> &upma2) const;
+ inline typed::space<> space() const;
+ inline typed::space<pair<T1, T2>, pair<Range, Range2>> get_space() const = delete;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> sub(const typed::union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::space<pair<T1, T2>> &space) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> subtract_domain(const typed::union_set<pair<T1, T2>> &uset) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+ inline typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> union_add(const typed::union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const;
+};
+
+template <>
+struct union_set<> : public isl::union_set {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_set() = default;
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_set>{}, bool>::type = true>
+ union_set(const base &obj) : isl::union_set(obj) {}
+ public:
+ static union_set from(const isl::union_set &obj) {
+ return union_set(obj);
+ }
+ inline /* implicit */ union_set(const typed::basic_set<> &bset);
+ inline /* implicit */ union_set(const typed::point<> &pnt);
+ inline /* implicit */ union_set(const typed::set<> &set);
+ inline explicit union_set(const isl::ctx &ctx, const std::string &str);
+ inline typed::union_set<> apply(const typed::union_map<> &umap) const = delete;
+ inline typed::union_set<> apply(const typed::basic_map<> &umap) const = delete;
+ inline typed::union_set<> apply(const typed::map<> &umap) const = delete;
+ inline typed::set<> as_set() const = delete;
+ inline typed::union_set<> coalesce() const;
+ inline typed::union_set<> detect_equalities() const;
+ static inline typed::union_set<> empty(const isl::ctx &ctx);
+ inline bool every_set(const std::function<bool(typed::set<>)> &test) const;
+ inline typed::set<> extract_set(const typed::space<> &space) const;
+ inline void foreach_point(const std::function<void(typed::point<>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<>)> &fn) const;
+ inline typed::union_set<> gist(const typed::union_set<> &context) const;
+ inline typed::union_set<> gist(const typed::basic_set<> &context) const;
+ inline typed::union_set<> gist(const typed::point<> &context) const;
+ inline typed::union_set<> gist(const typed::set<> &context) const;
+ inline typed::union_map<> identity() const = delete;
+ inline typed::union_set<> intersect(const typed::union_set<> &uset2) const;
+ inline typed::union_set<> intersect(const typed::basic_set<> &uset2) const;
+ inline typed::union_set<> intersect(const typed::point<> &uset2) const;
+ inline typed::union_set<> intersect(const typed::set<> &uset2) const;
+ inline typed::union_set<> intersect_params(const typed::set<> &set) const = delete;
+ inline typed::union_set<> intersect_params(const typed::basic_set<> &set) const = delete;
+ inline typed::union_set<> intersect_params(const typed::point<> &set) const = delete;
+ inline typed::union_set<> lexmax() const = delete;
+ inline typed::union_set<> lexmin() const = delete;
+ inline typed::union_set<> preimage(const typed::multi_aff<> &ma) const = delete;
+ inline typed::union_set<> preimage(const typed::pw_multi_aff<> &pma) const = delete;
+ inline typed::union_set<> preimage(const typed::union_pw_multi_aff<> &upma) const = delete;
+ inline typed::space<> space() const;
+ inline typed::space<> get_space() const = delete;
+ inline typed::union_set<> subtract(const typed::union_set<> &uset2) const;
+ inline typed::union_set<> subtract(const typed::basic_set<> &uset2) const;
+ inline typed::union_set<> subtract(const typed::point<> &uset2) const;
+ inline typed::union_set<> subtract(const typed::set<> &uset2) const;
+ inline typed::union_set<> unite(const typed::union_set<> &uset2) const;
+ inline typed::union_set<> unite(const typed::basic_set<> &uset2) const;
+ inline typed::union_set<> unite(const typed::point<> &uset2) const;
+ inline typed::union_set<> unite(const typed::set<> &uset2) const;
+ inline typed::union_set<> universe() const;
+ inline typed::union_map<> unwrap() const = delete;
+};
+
+template <typename Domain>
+struct union_set<Domain> : public isl::union_set {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_set() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ union_set(const union_set<Arg1> &obj) : isl::union_set(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_set>{}, bool>::type = true>
+ union_set(const base &obj) : isl::union_set(obj) {}
+ public:
+ static union_set from(const isl::union_set &obj) {
+ return union_set(obj);
+ }
+ inline /* implicit */ union_set(const typed::basic_set<Domain> &bset);
+ inline /* implicit */ union_set(const typed::point<Domain> &pnt);
+ inline /* implicit */ union_set(const typed::set<Domain> &set);
+ inline explicit union_set(const isl::ctx &ctx, const std::string &str);
+ template <typename Range>
+ inline typed::union_set<Range> apply(const typed::union_map<Domain, Range> &umap) const;
+ template <typename Range>
+ inline typed::union_set<Range> apply(const typed::basic_map<Domain, Range> &umap) const;
+ template <typename Range>
+ inline typed::union_set<Range> apply(const typed::map<Domain, Range> &umap) const;
+ inline typed::set<Domain> as_set() const;
+ inline typed::union_set<Domain> coalesce() const;
+ inline typed::union_set<Domain> detect_equalities() const;
+ static inline typed::union_set<Domain> empty(const isl::ctx &ctx);
+ inline bool every_set(const std::function<bool(typed::set<Domain>)> &test) const;
+ inline typed::set<Domain> extract_set(const typed::space<Domain> &space) const;
+ inline void foreach_point(const std::function<void(typed::point<Domain>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<Domain>)> &fn) const;
+ inline typed::union_set<Domain> gist(const typed::union_set<Domain> &context) const;
+ inline typed::union_set<Domain> gist(const typed::basic_set<Domain> &context) const;
+ inline typed::union_set<Domain> gist(const typed::point<Domain> &context) const;
+ inline typed::union_set<Domain> gist(const typed::set<Domain> &context) const;
+ inline typed::union_map<Domain, Domain> identity() const;
+ inline typed::union_set<Domain> intersect(const typed::union_set<Domain> &uset2) const;
+ inline typed::union_set<Domain> intersect(const typed::basic_set<Domain> &uset2) const;
+ inline typed::union_set<Domain> intersect(const typed::point<Domain> &uset2) const;
+ inline typed::union_set<Domain> intersect(const typed::set<Domain> &uset2) const;
+ inline typed::union_set<Domain> intersect_params(const typed::set<> &set) const;
+ inline typed::union_set<Domain> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_set<Domain> intersect_params(const typed::point<> &set) const;
+ inline typed::union_set<Domain> lexmax() const;
+ inline typed::union_set<Domain> lexmin() const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::multi_aff<Domain2, Domain> &ma) const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::pw_multi_aff<Domain2, Domain> &pma) const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const;
+ inline typed::space<> space() const;
+ inline typed::space<Domain> get_space() const = delete;
+ inline typed::union_set<Domain> subtract(const typed::union_set<Domain> &uset2) const;
+ inline typed::union_set<Domain> subtract(const typed::basic_set<Domain> &uset2) const;
+ inline typed::union_set<Domain> subtract(const typed::point<Domain> &uset2) const;
+ inline typed::union_set<Domain> subtract(const typed::set<Domain> &uset2) const;
+ inline typed::union_set<Domain> unite(const typed::union_set<Domain> &uset2) const;
+ inline typed::union_set<Domain> unite(const typed::basic_set<Domain> &uset2) const;
+ inline typed::union_set<Domain> unite(const typed::point<Domain> &uset2) const;
+ inline typed::union_set<Domain> unite(const typed::set<Domain> &uset2) const;
+ inline typed::union_set<Domain> universe() const;
+ inline typed::union_map<Domain> unwrap() const = delete;
+};
+
+template <typename Domain, typename Range>
+struct union_set<pair<Domain, Range>> : public isl::union_set {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_set() = default;
+ template <typename Arg1, typename Arg2,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{} &&
+ std::is_base_of<Range, Arg2>{},
+ bool>::type = true>
+ union_set(const union_set<pair<Arg1, Arg2>> &obj) : isl::union_set(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_set>{}, bool>::type = true>
+ union_set(const base &obj) : isl::union_set(obj) {}
+ public:
+ static union_set from(const isl::union_set &obj) {
+ return union_set(obj);
+ }
+ inline /* implicit */ union_set(const typed::basic_set<pair<Domain, Range>> &bset);
+ inline /* implicit */ union_set(const typed::point<pair<Domain, Range>> &pnt);
+ inline /* implicit */ union_set(const typed::set<pair<Domain, Range>> &set);
+ inline explicit union_set(const isl::ctx &ctx, const std::string &str);
+ template <typename Arg2>
+ inline typed::union_set<Arg2> apply(const typed::union_map<pair<Domain, Range>, Arg2> &umap) const;
+ template <typename Arg2>
+ inline typed::union_set<Arg2> apply(const typed::basic_map<pair<Domain, Range>, Arg2> &umap) const;
+ template <typename Arg2>
+ inline typed::union_set<Arg2> apply(const typed::map<pair<Domain, Range>, Arg2> &umap) const;
+ inline typed::set<pair<Domain, Range>> as_set() const;
+ inline typed::union_set<pair<Domain, Range>> coalesce() const;
+ inline typed::union_set<pair<Domain, Range>> detect_equalities() const;
+ static inline typed::union_set<pair<Domain, Range>> empty(const isl::ctx &ctx);
+ inline bool every_set(const std::function<bool(typed::set<pair<Domain, Range>>)> &test) const;
+ inline typed::set<pair<Domain, Range>> extract_set(const typed::space<pair<Domain, Range>> &space) const;
+ inline void foreach_point(const std::function<void(typed::point<pair<Domain, Range>>)> &fn) const;
+ inline void foreach_set(const std::function<void(typed::set<pair<Domain, Range>>)> &fn) const;
+ inline typed::union_set<pair<Domain, Range>> gist(const typed::union_set<pair<Domain, Range>> &context) const;
+ inline typed::union_set<pair<Domain, Range>> gist(const typed::basic_set<pair<Domain, Range>> &context) const;
+ inline typed::union_set<pair<Domain, Range>> gist(const typed::point<pair<Domain, Range>> &context) const;
+ inline typed::union_set<pair<Domain, Range>> gist(const typed::set<pair<Domain, Range>> &context) const;
+ inline typed::union_map<pair<Domain, Range>, pair<Domain, Range>> identity() const;
+ inline typed::union_set<pair<Domain, Range>> intersect(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> intersect(const typed::basic_set<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> intersect(const typed::point<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> intersect(const typed::set<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> intersect_params(const typed::set<> &set) const;
+ inline typed::union_set<pair<Domain, Range>> intersect_params(const typed::basic_set<> &set) const;
+ inline typed::union_set<pair<Domain, Range>> intersect_params(const typed::point<> &set) const;
+ inline typed::union_set<pair<Domain, Range>> lexmax() const;
+ inline typed::union_set<pair<Domain, Range>> lexmin() const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const;
+ template <typename Domain2>
+ inline typed::union_set<Domain2> preimage(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const;
+ inline typed::space<> space() const;
+ inline typed::space<pair<Domain, Range>> get_space() const = delete;
+ inline typed::union_set<pair<Domain, Range>> subtract(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> subtract(const typed::basic_set<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> subtract(const typed::point<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> subtract(const typed::set<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> unite(const typed::union_set<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> unite(const typed::basic_set<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> unite(const typed::point<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> unite(const typed::set<pair<Domain, Range>> &uset2) const;
+ inline typed::union_set<pair<Domain, Range>> universe() const;
+ inline typed::union_map<Domain, Range> unwrap() const;
+};
+
+template <>
+struct union_set_list<> : public isl::union_set_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_set_list() = default;
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_set_list>{}, bool>::type = true>
+ union_set_list(const base &obj) : isl::union_set_list(obj) {}
+ public:
+ static union_set_list from(const isl::union_set_list &obj) {
+ return union_set_list(obj);
+ }
+ inline explicit union_set_list(const isl::ctx &ctx, int n);
+ inline explicit union_set_list(const typed::union_set<> &el);
+ inline explicit union_set_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::union_set_list<> add(const typed::union_set<> &el) const;
+ inline typed::union_set_list<> add(const typed::basic_set<> &el) const;
+ inline typed::union_set_list<> add(const typed::point<> &el) const;
+ inline typed::union_set_list<> add(const typed::set<> &el) const;
+ inline typed::union_set<> at(int index) const = delete;
+ inline typed::union_set<> get_at(int index) const = delete;
+ inline typed::union_set_list<> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::union_set<>)> &fn) const;
+};
+
+template <typename Domain>
+struct union_set_list<Domain> : public isl::union_set_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ union_set_list() = default;
+ template <typename Arg1,
+ typename std::enable_if<
+ std::is_base_of<Domain, Arg1>{},
+ bool>::type = true>
+ union_set_list(const union_set_list<Arg1> &obj) : isl::union_set_list(obj) {}
+ private:
+ template <typename base,
+ typename std::enable_if<
+ std::is_same<base, isl::union_set_list>{}, bool>::type = true>
+ union_set_list(const base &obj) : isl::union_set_list(obj) {}
+ public:
+ static union_set_list from(const isl::union_set_list &obj) {
+ return union_set_list(obj);
+ }
+ inline explicit union_set_list(const isl::ctx &ctx, int n);
+ inline explicit union_set_list(const typed::union_set<Domain> &el);
+ inline explicit union_set_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::union_set_list<Domain> add(const typed::union_set<Domain> &el) const;
+ inline typed::union_set_list<Domain> add(const typed::basic_set<Domain> &el) const;
+ inline typed::union_set_list<Domain> add(const typed::point<Domain> &el) const;
+ inline typed::union_set_list<Domain> add(const typed::set<Domain> &el) const;
+ inline typed::union_set<Domain> at(int index) const;
+ inline typed::union_set<Domain> get_at(int index) const = delete;
+ inline typed::union_set_list<Domain> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::union_set<Domain>)> &fn) const;
+};
+
+template <>
+struct val<Anonymous> : public isl::val {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ val() = default;
+ val(const isl::val &obj) : isl::val(obj) {}
+ static val from(const isl::val &obj) {
+ return val(obj);
+ }
+ inline explicit val(const isl::ctx &ctx, long i);
+ inline explicit val(const isl::ctx &ctx, const std::string &str);
+ inline typed::val<Anonymous> add(const typed::val<Anonymous> &v2) const;
+ inline typed::val<Anonymous> add(long v2) const;
+ inline typed::val<Anonymous> ceil() const;
+ inline long get_den_si() const = delete;
+ inline typed::val<Anonymous> floor() const;
+ inline typed::val<Anonymous> max(const typed::val<Anonymous> &v2) const;
+ inline typed::val<Anonymous> max(long v2) const;
+ inline typed::val<Anonymous> min(const typed::val<Anonymous> &v2) const;
+ inline typed::val<Anonymous> min(long v2) const;
+ inline typed::val<Anonymous> mod(const typed::val<Anonymous> &v2) const;
+ inline typed::val<Anonymous> mod(long v2) const;
+ inline typed::val<Anonymous> neg() const;
+ inline long get_num_si() const = delete;
+ inline typed::val<Anonymous> sub(const typed::val<Anonymous> &v2) const;
+ inline typed::val<Anonymous> sub(long v2) const;
+};
+
+template <>
+struct val_list<Anonymous> : public isl::val_list {
+ template <typename...>
+ friend struct aff;
+ template <typename...>
+ friend struct aff_list;
+ template <typename...>
+ friend struct basic_map;
+ template <typename...>
+ friend struct basic_set;
+ template <typename...>
+ friend struct fixed_box;
+ template <typename...>
+ friend struct id;
+ template <typename...>
+ friend struct id_list;
+ template <typename...>
+ friend struct map;
+ template <typename...>
+ friend struct map_list;
+ template <typename...>
+ friend struct multi_aff;
+ template <typename...>
+ friend struct multi_id;
+ template <typename...>
+ friend struct multi_pw_aff;
+ template <typename...>
+ friend struct multi_union_pw_aff;
+ template <typename...>
+ friend struct multi_val;
+ template <typename...>
+ friend struct point;
+ template <typename...>
+ friend struct pw_aff;
+ template <typename...>
+ friend struct pw_aff_list;
+ template <typename...>
+ friend struct pw_multi_aff;
+ template <typename...>
+ friend struct pw_multi_aff_list;
+ template <typename...>
+ friend struct set;
+ template <typename...>
+ friend struct space;
+ template <typename...>
+ friend struct union_map;
+ template <typename...>
+ friend struct union_pw_aff;
+ template <typename...>
+ friend struct union_pw_aff_list;
+ template <typename...>
+ friend struct union_pw_multi_aff;
+ template <typename...>
+ friend struct union_set;
+ template <typename...>
+ friend struct union_set_list;
+ template <typename...>
+ friend struct val;
+ template <typename...>
+ friend struct val_list;
+
+ val_list() = default;
+ val_list(const isl::val_list &obj) : isl::val_list(obj) {}
+ static val_list from(const isl::val_list &obj) {
+ return val_list(obj);
+ }
+ inline explicit val_list(const isl::ctx &ctx, int n);
+ inline explicit val_list(const typed::val<Anonymous> &el);
+ inline explicit val_list(const isl::ctx &ctx, const std::string &str);
+ inline typed::val_list<Anonymous> add(const typed::val<Anonymous> &el) const;
+ inline typed::val_list<Anonymous> add(long el) const;
+ inline typed::val<Anonymous> at(int index) const;
+ inline typed::val<Anonymous> get_at(int index) const = delete;
+ inline typed::val_list<Anonymous> drop(unsigned int first, unsigned int n) const;
+ inline void foreach(const std::function<void(typed::val<Anonymous>)> &fn) const;
+};
+
+typed::aff<Anonymous>::aff(const isl::ctx &ctx, const std::string &str)
+ : isl::aff(ctx, str)
+{
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::add(const typed::aff<Anonymous> &aff2) const
+{
+ auto res = isl::aff::add(aff2);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::multi_aff<Anonymous> typed::aff<Anonymous>::add(const typed::multi_aff<Anonymous> &multi2) const
+{
+ auto res = isl::aff::add(multi2);
+ return typed::multi_aff<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::aff<Anonymous>::add(const typed::multi_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::aff::add(multi2);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::aff<Anonymous>::add(const typed::multi_union_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::aff::add(multi2);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::aff<Anonymous>::add(const typed::pw_aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::add(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::aff<Anonymous>::add(const typed::pw_multi_aff<Anonymous> &pma2) const
+{
+ auto res = isl::aff::add(pma2);
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::aff<Anonymous>::add(const typed::union_pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::aff::add(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_multi_aff<Anonymous> typed::aff<Anonymous>::add(const typed::union_pw_multi_aff<Anonymous> &upma2) const
+{
+ auto res = isl::aff::add(upma2);
+ return typed::union_pw_multi_aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::add_constant(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::aff::add_constant(v);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::add_constant(long v) const
+{
+ auto res = isl::aff::add_constant(v);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::multi_aff<Anonymous> typed::aff<Anonymous>::add_constant(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::aff::add_constant(mv);
+ return typed::multi_aff<Anonymous>(res);
+}
+
+template <typename Range>
+typed::union_pw_multi_aff<Range> typed::aff<Anonymous>::apply(const typed::union_pw_multi_aff<Anonymous, Range> &upma2) const
+{
+ auto res = isl::aff::apply(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::as_aff() const
+{
+ auto res = isl::aff::as_aff();
+ return typed::aff<Anonymous>(res);
+}
+
+typed::multi_aff<Anonymous> typed::aff<Anonymous>::as_multi_aff() const
+{
+ auto res = isl::aff::as_multi_aff();
+ return typed::multi_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::aff<Anonymous>::as_multi_union_pw_aff() const
+{
+ auto res = isl::aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::aff<Anonymous>::as_pw_multi_aff() const
+{
+ auto res = isl::aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::set<Anonymous> typed::aff<Anonymous>::as_set() const
+{
+ auto res = isl::aff::as_set();
+ return typed::set<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::at(int pos) const
+{
+ auto res = isl::aff::at(pos);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::basic_set<> typed::aff<Anonymous>::bind(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::aff::bind(id);
+ return typed::basic_set<>(res);
+}
+
+typed::basic_set<> typed::aff<Anonymous>::bind(const std::string &id) const
+{
+ auto res = isl::aff::bind(id);
+ return typed::basic_set<>(res);
+}
+
+typed::basic_set<> typed::aff<Anonymous>::bind(const typed::multi_id<Anonymous> &tuple) const
+{
+ auto res = isl::aff::bind(tuple);
+ return typed::basic_set<>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::ceil() const
+{
+ auto res = isl::aff::ceil();
+ return typed::aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::aff<Anonymous>::coalesce() const
+{
+ auto res = isl::aff::coalesce();
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::aff<Anonymous>::cond(const typed::pw_aff<Anonymous> &pwaff_true, const typed::pw_aff<Anonymous> &pwaff_false) const
+{
+ auto res = isl::aff::cond(pwaff_true, pwaff_false);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::multi_val<Anonymous> typed::aff<Anonymous>::constant_multi_val() const
+{
+ auto res = isl::aff::constant_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+typed::set<> typed::aff<Anonymous>::domain() const
+{
+ auto res = isl::aff::domain();
+ return typed::set<>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::aff<Anonymous>::extract_pw_multi_aff(const typed::space<Anonymous> &space) const
+{
+ auto res = isl::aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::floor() const
+{
+ auto res = isl::aff::floor();
+ return typed::aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::gist(const typed::set<> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::aff<Anonymous>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::gist(const typed::basic_set<> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::gist(const typed::point<> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::multi_aff<Anonymous, Anonymous> typed::aff<Anonymous>::identity() const
+{
+ auto res = isl::aff::identity();
+ return typed::multi_aff<Anonymous, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::aff<Anonymous>::insert_domain(const typed::space<Domain> &domain) const
+{
+ auto res = isl::aff::insert_domain(domain);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::aff<Anonymous>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::aff::intersect_params(set);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::aff_list<Anonymous> typed::aff<Anonymous>::list() const
+{
+ auto res = isl::aff::list();
+ return typed::aff_list<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::aff<Anonymous>::max(const typed::multi_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::aff::max(multi2);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::aff<Anonymous>::max(const typed::pw_aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::max(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::multi_val<Anonymous> typed::aff<Anonymous>::max_multi_val() const
+{
+ auto res = isl::aff::max_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::aff<Anonymous>::min(const typed::multi_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::aff::min(multi2);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::aff<Anonymous>::min(const typed::pw_aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::min(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::multi_val<Anonymous> typed::aff<Anonymous>::min_multi_val() const
+{
+ auto res = isl::aff::min_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::mod(const typed::val<Anonymous> &mod) const
+{
+ auto res = isl::aff::mod(mod);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::mod(long mod) const
+{
+ auto res = isl::aff::mod(mod);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::neg() const
+{
+ auto res = isl::aff::neg();
+ return typed::aff<Anonymous>(res);
+}
+
+template <typename Range>
+typed::multi_aff<pair<Anonymous, Range>> typed::aff<Anonymous>::product(const typed::multi_aff<Range> &multi2) const
+{
+ auto res = isl::aff::product(multi2);
+ return typed::multi_aff<pair<Anonymous, Range>>(res);
+}
+
+template <typename Range>
+typed::multi_pw_aff<pair<Anonymous, Range>> typed::aff<Anonymous>::product(const typed::multi_pw_aff<Range> &multi2) const
+{
+ auto res = isl::aff::product(multi2);
+ return typed::multi_pw_aff<pair<Anonymous, Range>>(res);
+}
+
+template <typename Range>
+typed::pw_multi_aff<pair<Anonymous, Range>> typed::aff<Anonymous>::product(const typed::pw_multi_aff<Range> &pma2) const
+{
+ auto res = isl::aff::product(pma2);
+ return typed::pw_multi_aff<pair<Anonymous, Range>>(res);
+}
+
+typed::pw_multi_aff_list<Anonymous> typed::aff<Anonymous>::pw_multi_aff_list() const
+{
+ auto res = isl::aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::scale(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::aff::scale(v);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::scale(long v) const
+{
+ auto res = isl::aff::scale(v);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::multi_aff<Anonymous> typed::aff<Anonymous>::scale(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::aff::scale(mv);
+ return typed::multi_aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::scale_down(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::aff::scale_down(v);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::scale_down(long v) const
+{
+ auto res = isl::aff::scale_down(v);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::multi_aff<Anonymous> typed::aff<Anonymous>::scale_down(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::aff::scale_down(mv);
+ return typed::multi_aff<Anonymous>(res);
+}
+
+typed::multi_aff<Anonymous> typed::aff<Anonymous>::set_at(int pos, const typed::aff<Anonymous> &el) const
+{
+ auto res = isl::aff::set_at(pos, el);
+ return typed::multi_aff<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::aff<Anonymous>::set_at(int pos, const typed::pw_aff<Anonymous> &el) const
+{
+ auto res = isl::aff::set_at(pos, el);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::aff<Anonymous>::set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const
+{
+ auto res = isl::aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2>
+typed::multi_aff<Domain2> typed::aff<Anonymous>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::aff::set_range_tuple(id);
+ return typed::multi_aff<Domain2>(res);
+}
+
+template <typename Domain2>
+typed::multi_aff<Domain2> typed::aff<Anonymous>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::aff::set_range_tuple(id);
+ return typed::multi_aff<Domain2>(res);
+}
+
+typed::space<Anonymous> typed::aff<Anonymous>::space() const
+{
+ auto res = isl::aff::space();
+ return typed::space<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff<Anonymous>::sub(const typed::aff<Anonymous> &aff2) const
+{
+ auto res = isl::aff::sub(aff2);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::multi_aff<Anonymous> typed::aff<Anonymous>::sub(const typed::multi_aff<Anonymous> &multi2) const
+{
+ auto res = isl::aff::sub(multi2);
+ return typed::multi_aff<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::aff<Anonymous>::sub(const typed::multi_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::aff::sub(multi2);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::aff<Anonymous>::sub(const typed::multi_union_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::aff::sub(multi2);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::aff<Anonymous>::sub(const typed::pw_aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::sub(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::aff<Anonymous>::sub(const typed::pw_multi_aff<Anonymous> &pma2) const
+{
+ auto res = isl::aff::sub(pma2);
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::aff<Anonymous>::sub(const typed::union_pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::aff::sub(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_multi_aff<Anonymous> typed::aff<Anonymous>::sub(const typed::union_pw_multi_aff<Anonymous> &upma2) const
+{
+ auto res = isl::aff::sub(upma2);
+ return typed::union_pw_multi_aff<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::aff<Anonymous>::to_multi_pw_aff() const
+{
+ auto res = isl::aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::aff<Anonymous>::to_multi_union_pw_aff() const
+{
+ auto res = isl::aff::to_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::aff<Anonymous>::to_pw_multi_aff() const
+{
+ auto res = isl::aff::to_pw_multi_aff();
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::aff<Anonymous>::to_union_pw_aff() const
+{
+ auto res = isl::aff::to_union_pw_aff();
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_multi_aff<Anonymous> typed::aff<Anonymous>::to_union_pw_multi_aff() const
+{
+ auto res = isl::aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Anonymous>::unbind_params_insert_domain(const typed::multi_id<Domain> &domain) const
+{
+ auto res = isl::aff::unbind_params_insert_domain(domain);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::aff<Anonymous>::union_add(const typed::multi_pw_aff<Anonymous> &mpa2) const
+{
+ auto res = isl::aff::union_add(mpa2);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::aff<Anonymous>::union_add(const typed::multi_union_pw_aff<Anonymous> &mupa2) const
+{
+ auto res = isl::aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::aff<Anonymous>::union_add(const typed::pw_aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::union_add(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::aff<Anonymous>::union_add(const typed::pw_multi_aff<Anonymous> &pma2) const
+{
+ auto res = isl::aff::union_add(pma2);
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::aff<Anonymous>::union_add(const typed::union_pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::aff::union_add(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_multi_aff<Anonymous> typed::aff<Anonymous>::union_add(const typed::union_pw_multi_aff<Anonymous> &upma2) const
+{
+ auto res = isl::aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous>::aff(const isl::ctx &ctx, const std::string &str)
+ : isl::aff(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::add(const typed::aff<Domain, Anonymous> &aff2) const
+{
+ auto res = isl::aff::add(aff2);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::add(const typed::multi_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::aff::add(multi2);
+ return typed::multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::add(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::aff::add(multi2);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::add(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::add(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::add(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::add(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const
+{
+ auto res = isl::aff::add(pma2);
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::aff::add(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const
+{
+ auto res = isl::aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::add_constant(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::aff::add_constant(v);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::add_constant(long v) const
+{
+ auto res = isl::aff::add_constant(v);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::add_constant(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::aff::add_constant(mv);
+ return typed::multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, Range2> typed::aff<Domain, Anonymous>::apply(const typed::union_pw_multi_aff<Anonymous, Range2> &upma2) const
+{
+ auto res = isl::aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::as_aff() const
+{
+ auto res = isl::aff::as_aff();
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Anonymous> typed::aff<Domain, Anonymous>::as_map() const
+{
+ auto res = isl::aff::as_map();
+ return typed::map<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::as_multi_aff() const
+{
+ auto res = isl::aff::as_multi_aff();
+ return typed::multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::as_multi_union_pw_aff() const
+{
+ auto res = isl::aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::as_pw_multi_aff() const
+{
+ auto res = isl::aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Anonymous> typed::aff<Domain, Anonymous>::as_union_map() const
+{
+ auto res = isl::aff::as_union_map();
+ return typed::union_map<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::at(int pos) const
+{
+ auto res = isl::aff::at(pos);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::aff<Domain, Anonymous>::bind(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::aff::bind(id);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::aff<Domain, Anonymous>::bind(const std::string &id) const
+{
+ auto res = isl::aff::bind(id);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::aff<Domain, Anonymous>::bind(const typed::multi_id<Anonymous> &tuple) const
+{
+ auto res = isl::aff::bind(tuple);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Anonymous> typed::aff<Domain, Anonymous>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::aff::bind_domain(tuple);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::ceil() const
+{
+ auto res = isl::aff::ceil();
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::coalesce() const
+{
+ auto res = isl::aff::coalesce();
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::cond(const typed::pw_aff<Domain, Anonymous> &pwaff_true, const typed::pw_aff<Domain, Anonymous> &pwaff_false) const
+{
+ auto res = isl::aff::cond(pwaff_true, pwaff_false);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Anonymous> typed::aff<Domain, Anonymous>::constant_multi_val() const
+{
+ auto res = isl::aff::constant_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::aff<Domain, Anonymous>::domain() const
+{
+ auto res = isl::aff::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::extract_pw_multi_aff(const typed::space<Domain, Anonymous> &space) const
+{
+ auto res = isl::aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::floor() const
+{
+ auto res = isl::aff::floor();
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::aff<Domain, Anonymous>::ge_set(const typed::aff<Domain, Anonymous> &aff2) const
+{
+ auto res = isl::aff::ge_set(aff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::aff<Domain, Anonymous>::ge_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::ge_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::gist(const typed::point<Domain> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::aff<Domain, Anonymous>::gt_set(const typed::aff<Domain, Anonymous> &aff2) const
+{
+ auto res = isl::aff::gt_set(aff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::aff<Domain, Anonymous>::gt_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::gt_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::identity() const
+{
+ auto res = isl::aff::identity();
+ return typed::multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::aff::intersect_domain(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::aff::intersect_domain(space);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::aff::intersect_domain(uset);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::aff::intersect_params(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::aff<Domain, Anonymous>::le_set(const typed::aff<Domain, Anonymous> &aff2) const
+{
+ auto res = isl::aff::le_set(aff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::aff<Domain, Anonymous>::le_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::le_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::aff_list<Domain, Anonymous> typed::aff<Domain, Anonymous>::list() const
+{
+ auto res = isl::aff::list();
+ return typed::aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::aff<Domain, Anonymous>::lt_set(const typed::aff<Domain, Anonymous> &aff2) const
+{
+ auto res = isl::aff::lt_set(aff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::aff<Domain, Anonymous>::lt_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::lt_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::max(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::aff::max(multi2);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::max(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::max(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Anonymous> typed::aff<Domain, Anonymous>::max_multi_val() const
+{
+ auto res = isl::aff::max_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::min(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::aff::min(multi2);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::min(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::min(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Anonymous> typed::aff<Domain, Anonymous>::min_multi_val() const
+{
+ auto res = isl::aff::min_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::mod(const typed::val<Anonymous> &mod) const
+{
+ auto res = isl::aff::mod(mod);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::mod(long mod) const
+{
+ auto res = isl::aff::mod(mod);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::neg() const
+{
+ auto res = isl::aff::neg();
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> typed::aff<Domain, Anonymous>::product(const typed::multi_aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::aff::product(multi2);
+ return typed::multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> typed::aff<Domain, Anonymous>::product(const typed::multi_pw_aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> typed::aff<Domain, Anonymous>::product(const typed::pw_multi_aff<Domain2, Range2> &pma2) const
+{
+ auto res = isl::aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::aff<Domain2, Anonymous> typed::aff<Domain, Anonymous>::pullback(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::aff::pullback(ma);
+ return typed::aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Anonymous> typed::aff<Domain, Anonymous>::pullback(const typed::multi_aff<Domain> &ma) const
+{
+ auto res = isl::aff::pullback(ma);
+ return typed::aff<Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::pw_aff<Domain2, Anonymous> typed::aff<Domain, Anonymous>::pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::aff::pullback(mpa);
+ return typed::pw_aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Anonymous> typed::aff<Domain, Anonymous>::pullback(const typed::multi_pw_aff<Domain> &mpa) const
+{
+ auto res = isl::aff::pullback(mpa);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::pw_aff<Domain2, Anonymous> typed::aff<Domain, Anonymous>::pullback(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::aff::pullback(pma);
+ return typed::pw_aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Anonymous> typed::aff<Domain, Anonymous>::pullback(const typed::pw_multi_aff<Domain> &pma) const
+{
+ auto res = isl::aff::pullback(pma);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_pw_aff<Domain2, Anonymous> typed::aff<Domain, Anonymous>::pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::aff::pullback(upma);
+ return typed::union_pw_aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Anonymous> typed::aff<Domain, Anonymous>::pullback(const typed::union_pw_multi_aff<Domain> &upma) const
+{
+ auto res = isl::aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::aff<Domain2, Anonymous> typed::aff<Domain, Anonymous>::pullback(const typed::aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::aff::pullback(ma);
+ return typed::aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Anonymous> typed::aff<Domain, Anonymous>::pullback(const typed::aff<Domain> &ma) const
+{
+ auto res = isl::aff::pullback(ma);
+ return typed::aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain, Anonymous> typed::aff<Domain, Anonymous>::pw_multi_aff_list() const
+{
+ auto res = isl::aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::multi_aff<Domain, pair<Anonymous, Range2>> typed::aff<Domain, Anonymous>::range_product(const typed::multi_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::aff::range_product(multi2);
+ return typed::multi_aff<Domain, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::multi_pw_aff<Domain, pair<Anonymous, Range2>> typed::aff<Domain, Anonymous>::range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::aff::range_product(multi2);
+ return typed::multi_pw_aff<Domain, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Anonymous, Range2>> typed::aff<Domain, Anonymous>::range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::aff::range_product(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::pw_multi_aff<Domain, pair<Anonymous, Range2>> typed::aff<Domain, Anonymous>::range_product(const typed::pw_multi_aff<Domain, Range2> &pma2) const
+{
+ auto res = isl::aff::range_product(pma2);
+ return typed::pw_multi_aff<Domain, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Anonymous, Range2>> typed::aff<Domain, Anonymous>::range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const
+{
+ auto res = isl::aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::scale(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::aff::scale(v);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::scale(long v) const
+{
+ auto res = isl::aff::scale(v);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::scale(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::aff::scale(mv);
+ return typed::multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::scale_down(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::aff::scale_down(v);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::scale_down(long v) const
+{
+ auto res = isl::aff::scale_down(v);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::scale_down(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::aff::scale_down(mv);
+ return typed::multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::set_at(int pos, const typed::aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::aff::set_at(pos, el);
+ return typed::multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::aff::set_at(pos, el);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::multi_aff<Domain, Range2> typed::aff<Domain, Anonymous>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::aff::set_range_tuple(id);
+ return typed::multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::multi_aff<Domain, Range2> typed::aff<Domain, Anonymous>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::aff::set_range_tuple(id);
+ return typed::multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain>
+typed::space<Domain, Anonymous> typed::aff<Domain, Anonymous>::space() const
+{
+ auto res = isl::aff::space();
+ return typed::space<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::sub(const typed::aff<Domain, Anonymous> &aff2) const
+{
+ auto res = isl::aff::sub(aff2);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::sub(const typed::multi_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::aff::sub(multi2);
+ return typed::multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::sub(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::aff::sub(multi2);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::sub(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::sub(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::sub(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::sub(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const
+{
+ auto res = isl::aff::sub(pma2);
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::sub(const typed::union_pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::aff::sub(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::sub(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const
+{
+ auto res = isl::aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::subtract_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::aff::subtract_domain(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::subtract_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::aff::subtract_domain(space);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::subtract_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::aff::subtract_domain(uset);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::to_multi_pw_aff() const
+{
+ auto res = isl::aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::to_multi_union_pw_aff() const
+{
+ auto res = isl::aff::to_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::to_pw_multi_aff() const
+{
+ auto res = isl::aff::to_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::to_union_pw_aff() const
+{
+ auto res = isl::aff::to_union_pw_aff();
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::to_union_pw_multi_aff() const
+{
+ auto res = isl::aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::union_add(const typed::multi_pw_aff<Domain, Anonymous> &mpa2) const
+{
+ auto res = isl::aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::union_add(const typed::multi_union_pw_aff<Domain, Anonymous> &mupa2) const
+{
+ auto res = isl::aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::union_add(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::union_add(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::union_add(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const
+{
+ auto res = isl::aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::union_add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::aff::union_add(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Anonymous> typed::aff<Domain, Anonymous>::union_add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const
+{
+ auto res = isl::aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous>::aff(const isl::ctx &ctx, const std::string &str)
+ : isl::aff(ctx, str)
+{
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::add(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const
+{
+ auto res = isl::aff::add(aff2);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::add(const typed::multi_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::aff::add(multi2);
+ return typed::multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::add(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::aff::add(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::aff::add(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::add(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::add(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::add(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const
+{
+ auto res = isl::aff::add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::add(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const
+{
+ auto res = isl::aff::add(upa2);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const
+{
+ auto res = isl::aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::add_constant(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::aff::add_constant(v);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::add_constant(long v) const
+{
+ auto res = isl::aff::add_constant(v);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::add_constant(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::aff::add_constant(mv);
+ return typed::multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg1> typed::aff<pair<Domain2, Range2>, Anonymous>::apply(const typed::union_pw_multi_aff<Anonymous, Arg1> &upma2) const
+{
+ auto res = isl::aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::as_aff() const
+{
+ auto res = isl::aff::as_aff();
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::map<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::as_map() const
+{
+ auto res = isl::aff::as_map();
+ return typed::map<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::as_multi_aff() const
+{
+ auto res = isl::aff::as_multi_aff();
+ return typed::multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::as_multi_union_pw_aff() const
+{
+ auto res = isl::aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::as_pw_multi_aff() const
+{
+ auto res = isl::aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::as_union_map() const
+{
+ auto res = isl::aff::as_union_map();
+ return typed::union_map<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::at(int pos) const
+{
+ auto res = isl::aff::at(pos);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::basic_set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::bind(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::aff::bind(id);
+ return typed::basic_set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::basic_set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::bind(const std::string &id) const
+{
+ auto res = isl::aff::bind(id);
+ return typed::basic_set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::basic_set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::bind(const typed::multi_id<Anonymous> &tuple) const
+{
+ auto res = isl::aff::bind(tuple);
+ return typed::basic_set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::bind_domain(const typed::multi_id<pair<Domain2, Range2>> &tuple) const
+{
+ auto res = isl::aff::bind_domain(tuple);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<Range2, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::bind_domain_wrapped_domain(const typed::multi_id<Domain2> &tuple) const
+{
+ auto res = isl::aff::bind_domain_wrapped_domain(tuple);
+ return typed::pw_aff<Range2, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::ceil() const
+{
+ auto res = isl::aff::ceil();
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::coalesce() const
+{
+ auto res = isl::aff::coalesce();
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::cond(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff_true, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff_false) const
+{
+ auto res = isl::aff::cond(pwaff_true, pwaff_false);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_val<Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::constant_multi_val() const
+{
+ auto res = isl::aff::constant_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::domain() const
+{
+ auto res = isl::aff::domain();
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::extract_pw_multi_aff(const typed::space<pair<Domain2, Range2>, Anonymous> &space) const
+{
+ auto res = isl::aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::floor() const
+{
+ auto res = isl::aff::floor();
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::ge_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const
+{
+ auto res = isl::aff::ge_set(aff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::ge_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::ge_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::gist(const typed::set<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::gist(const typed::union_set<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::gist(const typed::basic_set<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::gist(const typed::point<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::aff::gist(context);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::gt_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const
+{
+ auto res = isl::aff::gt_set(aff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::gt_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::gt_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::identity() const
+{
+ auto res = isl::aff::identity();
+ return typed::multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::intersect_domain(const typed::set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::aff::intersect_domain(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::intersect_domain(const typed::space<pair<Domain2, Range2>> &space) const
+{
+ auto res = isl::aff::intersect_domain(space);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::intersect_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const
+{
+ auto res = isl::aff::intersect_domain(uset);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::aff::intersect_params(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::le_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const
+{
+ auto res = isl::aff::le_set(aff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::le_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::le_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff_list<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::list() const
+{
+ auto res = isl::aff::list();
+ return typed::aff_list<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::lt_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const
+{
+ auto res = isl::aff::lt_set(aff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::aff<pair<Domain2, Range2>, Anonymous>::lt_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::lt_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::max(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::aff::max(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::max(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::max(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_val<Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::max_multi_val() const
+{
+ auto res = isl::aff::max_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::min(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::aff::min(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::min(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::min(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_val<Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::min_multi_val() const
+{
+ auto res = isl::aff::min_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::mod(const typed::val<Anonymous> &mod) const
+{
+ auto res = isl::aff::mod(mod);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::mod(long mod) const
+{
+ auto res = isl::aff::mod(mod);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::neg() const
+{
+ auto res = isl::aff::neg();
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Domain3>
+typed::pw_multi_aff<pair<Domain3, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, Domain2> &pma2) const
+{
+ auto res = isl::aff::preimage_domain_wrapped_domain(pma2);
+ return typed::pw_multi_aff<pair<Domain3, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain2> &upma2) const
+{
+ auto res = isl::aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1, typename Arg2>
+typed::multi_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>> typed::aff<pair<Domain2, Range2>, Anonymous>::product(const typed::multi_aff<Arg1, Arg2> &multi2) const
+{
+ auto res = isl::aff::product(multi2);
+ return typed::multi_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1, typename Arg2>
+typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>> typed::aff<pair<Domain2, Range2>, Anonymous>::product(const typed::multi_pw_aff<Arg1, Arg2> &multi2) const
+{
+ auto res = isl::aff::product(multi2);
+ return typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1, typename Arg2>
+typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>> typed::aff<pair<Domain2, Range2>, Anonymous>::product(const typed::pw_multi_aff<Arg1, Arg2> &pma2) const
+{
+ auto res = isl::aff::product(pma2);
+ return typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::aff<Arg1, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::multi_aff<Arg1, pair<Domain2, Range2>> &ma) const
+{
+ auto res = isl::aff::pullback(ma);
+ return typed::aff<Arg1, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::multi_aff<pair<Domain2, Range2>> &ma) const
+{
+ auto res = isl::aff::pullback(ma);
+ return typed::aff<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::pw_aff<Arg1, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::multi_pw_aff<Arg1, pair<Domain2, Range2>> &mpa) const
+{
+ auto res = isl::aff::pullback(mpa);
+ return typed::pw_aff<Arg1, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::multi_pw_aff<pair<Domain2, Range2>> &mpa) const
+{
+ auto res = isl::aff::pullback(mpa);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::pw_aff<Arg1, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::pw_multi_aff<Arg1, pair<Domain2, Range2>> &pma) const
+{
+ auto res = isl::aff::pullback(pma);
+ return typed::pw_aff<Arg1, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::pw_multi_aff<pair<Domain2, Range2>> &pma) const
+{
+ auto res = isl::aff::pullback(pma);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::union_pw_aff<Arg1, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::union_pw_multi_aff<Arg1, pair<Domain2, Range2>> &upma) const
+{
+ auto res = isl::aff::pullback(upma);
+ return typed::union_pw_aff<Arg1, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::union_pw_multi_aff<pair<Domain2, Range2>> &upma) const
+{
+ auto res = isl::aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::aff<Arg1, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::aff<Arg1, pair<Domain2, Range2>> &ma) const
+{
+ auto res = isl::aff::pullback(ma);
+ return typed::aff<Arg1, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::aff<pair<Domain2, Range2>> &ma) const
+{
+ auto res = isl::aff::pullback(ma);
+ return typed::aff<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff_list<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::pw_multi_aff_list() const
+{
+ auto res = isl::aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> typed::aff<pair<Domain2, Range2>, Anonymous>::range_product(const typed::multi_aff<pair<Domain2, Range2>, Arg1> &multi2) const
+{
+ auto res = isl::aff::range_product(multi2);
+ return typed::multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::multi_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> typed::aff<pair<Domain2, Range2>, Anonymous>::range_product(const typed::multi_pw_aff<pair<Domain2, Range2>, Arg1> &multi2) const
+{
+ auto res = isl::aff::range_product(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> typed::aff<pair<Domain2, Range2>, Anonymous>::range_product(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Arg1> &multi2) const
+{
+ auto res = isl::aff::range_product(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> typed::aff<pair<Domain2, Range2>, Anonymous>::range_product(const typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> &pma2) const
+{
+ auto res = isl::aff::range_product(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> typed::aff<pair<Domain2, Range2>, Anonymous>::range_product(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg1> &upma2) const
+{
+ auto res = isl::aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::scale(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::aff::scale(v);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::scale(long v) const
+{
+ auto res = isl::aff::scale(v);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::scale(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::aff::scale(mv);
+ return typed::multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::scale_down(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::aff::scale_down(v);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::scale_down(long v) const
+{
+ auto res = isl::aff::scale_down(v);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::scale_down(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::aff::scale_down(mv);
+ return typed::multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::set_at(int pos, const typed::aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::aff::set_at(pos, el);
+ return typed::multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::set_at(int pos, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::aff::set_at(pos, el);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::set_at(int pos, const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::multi_aff<pair<Domain2, Range2>, Arg1> typed::aff<pair<Domain2, Range2>, Anonymous>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::aff::set_range_tuple(id);
+ return typed::multi_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::multi_aff<pair<Domain2, Range2>, Arg1> typed::aff<pair<Domain2, Range2>, Anonymous>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::aff::set_range_tuple(id);
+ return typed::multi_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::space<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::space() const
+{
+ auto res = isl::aff::space();
+ return typed::space<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff2) const
+{
+ auto res = isl::aff::sub(aff2);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::multi_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::aff::sub(multi2);
+ return typed::multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::aff::sub(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::aff::sub(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::sub(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const
+{
+ auto res = isl::aff::sub(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const
+{
+ auto res = isl::aff::sub(upa2);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const
+{
+ auto res = isl::aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::subtract_domain(const typed::set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::aff::subtract_domain(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::subtract_domain(const typed::space<pair<Domain2, Range2>> &space) const
+{
+ auto res = isl::aff::subtract_domain(space);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::subtract_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const
+{
+ auto res = isl::aff::subtract_domain(uset);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::to_multi_pw_aff() const
+{
+ auto res = isl::aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::to_multi_union_pw_aff() const
+{
+ auto res = isl::aff::to_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::to_pw_multi_aff() const
+{
+ auto res = isl::aff::to_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::to_union_pw_aff() const
+{
+ auto res = isl::aff::to_union_pw_aff();
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::to_union_pw_multi_aff() const
+{
+ auto res = isl::aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &mpa2) const
+{
+ auto res = isl::aff::union_add(mpa2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &mupa2) const
+{
+ auto res = isl::aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::aff::union_add(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const
+{
+ auto res = isl::aff::union_add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const
+{
+ auto res = isl::aff::union_add(upa2);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const
+{
+ auto res = isl::aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+typed::aff_list<Anonymous>::aff_list(const isl::ctx &ctx, int n)
+ : isl::aff_list(ctx, n)
+{
+}
+
+typed::aff_list<Anonymous>::aff_list(const typed::aff<Anonymous> &el)
+ : isl::aff_list(el)
+{
+}
+
+typed::aff_list<Anonymous>::aff_list(const isl::ctx &ctx, const std::string &str)
+ : isl::aff_list(ctx, str)
+{
+}
+
+typed::aff_list<Anonymous> typed::aff_list<Anonymous>::add(const typed::aff<Anonymous> &el) const
+{
+ auto res = isl::aff_list::add(el);
+ return typed::aff_list<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::aff_list<Anonymous>::at(int index) const
+{
+ auto res = isl::aff_list::at(index);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::aff_list<Anonymous> typed::aff_list<Anonymous>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::aff_list::drop(first, n);
+ return typed::aff_list<Anonymous>(res);
+}
+
+void typed::aff_list<Anonymous>::foreach(const std::function<void(typed::aff<Anonymous>)> &fn) const
+{
+ auto lambda = [&] (isl::aff arg0) {
+ return fn(typed::aff<Anonymous>(arg0));
+ };
+ return isl::aff_list::foreach(lambda);
+}
+
+template <typename Domain>
+typed::aff_list<Domain, Anonymous>::aff_list(const isl::ctx &ctx, int n)
+ : isl::aff_list(ctx, n)
+{
+}
+
+template <typename Domain>
+typed::aff_list<Domain, Anonymous>::aff_list(const typed::aff<Domain, Anonymous> &el)
+ : isl::aff_list(el)
+{
+}
+
+template <typename Domain>
+typed::aff_list<Domain, Anonymous>::aff_list(const isl::ctx &ctx, const std::string &str)
+ : isl::aff_list(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::aff_list<Domain, Anonymous> typed::aff_list<Domain, Anonymous>::add(const typed::aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::aff_list::add(el);
+ return typed::aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::aff_list<Domain, Anonymous>::at(int index) const
+{
+ auto res = isl::aff_list::at(index);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff_list<Domain, Anonymous> typed::aff_list<Domain, Anonymous>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::aff_list::drop(first, n);
+ return typed::aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+void typed::aff_list<Domain, Anonymous>::foreach(const std::function<void(typed::aff<Domain, Anonymous>)> &fn) const
+{
+ auto lambda = [&] (isl::aff arg0) {
+ return fn(typed::aff<Domain, Anonymous>(arg0));
+ };
+ return isl::aff_list::foreach(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::basic_map<Domain, Range>::basic_map(const isl::ctx &ctx, const std::string &str)
+ : isl::basic_map(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::basic_map<Domain2, Range> typed::basic_map<Domain, Range>::apply_domain(const typed::basic_map<Domain, Domain2> &bmap2) const
+{
+ auto res = isl::basic_map::apply_domain(bmap2);
+ return typed::basic_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::basic_map<Domain, Range>::apply_domain(const typed::map<Domain, Domain2> &map2) const
+{
+ auto res = isl::basic_map::apply_domain(map2);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<Domain2, Range> typed::basic_map<Domain, Range>::apply_domain(const typed::union_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::basic_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::basic_map<Domain, Range2> typed::basic_map<Domain, Range>::apply_range(const typed::basic_map<Range, Range2> &bmap2) const
+{
+ auto res = isl::basic_map::apply_range(bmap2);
+ return typed::basic_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, Range2> typed::basic_map<Domain, Range>::apply_range(const typed::map<Range, Range2> &map2) const
+{
+ auto res = isl::basic_map::apply_range(map2);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::basic_map<Domain, Range>::apply_range(const typed::union_map<Range, Range2> &umap2) const
+{
+ auto res = isl::basic_map::apply_range(umap2);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::as_map() const
+{
+ auto res = isl::basic_map::as_map();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::basic_map<Domain, Range>::as_multi_union_pw_aff() const
+{
+ auto res = isl::basic_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::basic_map<Domain, Range>::as_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::basic_map<Domain, Range>::as_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Range> typed::basic_map<Domain, Range>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::basic_map::bind_domain(tuple);
+ return typed::set<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Domain> typed::basic_map<Domain, Range>::bind_range(const typed::multi_id<Range> &tuple) const
+{
+ auto res = isl::basic_map::bind_range(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::coalesce() const
+{
+ auto res = isl::basic_map::coalesce();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_map<Domain, Range> typed::basic_map<Domain, Range>::detect_equalities() const
+{
+ auto res = isl::basic_map::detect_equalities();
+ return typed::basic_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Domain> typed::basic_map<Domain, Range>::domain() const
+{
+ auto res = isl::basic_map::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<pair<Domain, Range>, Domain> typed::basic_map<Domain, Range>::domain_map() const
+{
+ auto res = isl::basic_map::domain_map();
+ return typed::union_map<pair<Domain, Range>, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Range>, Domain> typed::basic_map<Domain, Range>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, Range>, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<pair<Domain, Domain2>, Range> typed::basic_map<Domain, Range>::domain_product(const typed::map<Domain2, Range> &map2) const
+{
+ auto res = isl::basic_map::domain_product(map2);
+ return typed::map<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, Range> typed::basic_map<Domain, Range>::domain_product(const typed::union_map<Domain2, Range> &umap2) const
+{
+ auto res = isl::basic_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+bool typed::basic_map<Domain, Range>::every_map(const std::function<bool(typed::map<Domain, Range>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<Domain, Range>(arg0));
+ };
+ return isl::basic_map::every_map(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::extract_map(const typed::space<Domain, Range> &space) const
+{
+ auto res = isl::basic_map::extract_map(space);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+void typed::basic_map<Domain, Range>::foreach_basic_map(const std::function<void(typed::basic_map<Domain, Range>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<Domain, Range>(arg0));
+ };
+ return isl::basic_map::foreach_basic_map(lambda);
+}
+
+template <typename Domain, typename Range>
+void typed::basic_map<Domain, Range>::foreach_map(const std::function<void(typed::map<Domain, Range>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<Domain, Range>(arg0));
+ };
+ return isl::basic_map::foreach_map(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::basic_map<Domain, Range> typed::basic_map<Domain, Range>::gist(const typed::basic_map<Domain, Range> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::basic_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::gist(const typed::map<Domain, Range> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::gist(const typed::union_map<Domain, Range> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::gist_domain(const typed::set<Domain> &context) const
+{
+ auto res = isl::basic_map::gist_domain(context);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::gist_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::basic_map::gist_domain(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_map<Domain, Range> typed::basic_map<Domain, Range>::intersect(const typed::basic_map<Domain, Range> &bmap2) const
+{
+ auto res = isl::basic_map::intersect(bmap2);
+ return typed::basic_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::intersect(const typed::map<Domain, Range> &map2) const
+{
+ auto res = isl::basic_map::intersect(map2);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::intersect(const typed::union_map<Domain, Range> &umap2) const
+{
+ auto res = isl::basic_map::intersect(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_map<Domain, Range> typed::basic_map<Domain, Range>::intersect_domain(const typed::basic_set<Domain> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::basic_map::intersect_domain(set);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::basic_map::intersect_domain(space);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::basic_map::intersect_domain(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_map<Domain, Range> typed::basic_map<Domain, Range>::intersect_domain(const typed::point<Domain> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::basic_map::intersect_params(params);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_map<Domain, Range> typed::basic_map<Domain, Range>::intersect_range(const typed::basic_set<Range> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::intersect_range(const typed::set<Range> &set) const
+{
+ auto res = isl::basic_map::intersect_range(set);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::intersect_range(const typed::space<Range> &space) const
+{
+ auto res = isl::basic_map::intersect_range(space);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::intersect_range(const typed::union_set<Range> &uset) const
+{
+ auto res = isl::basic_map::intersect_range(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_map<Domain, Range> typed::basic_map<Domain, Range>::intersect_range(const typed::point<Range> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::lexmax() const
+{
+ auto res = isl::basic_map::lexmax();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::basic_map<Domain, Range>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::lexmin() const
+{
+ auto res = isl::basic_map::lexmin();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::basic_map<Domain, Range>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::lower_bound(const typed::multi_pw_aff<Domain, Range> &lower) const
+{
+ auto res = isl::basic_map::lower_bound(lower);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map_list<Domain, Range> typed::basic_map<Domain, Range>::map_list() const
+{
+ auto res = isl::basic_map::map_list();
+ return typed::map_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::basic_map<Domain, Range>::max_multi_pw_aff() const
+{
+ auto res = isl::basic_map::max_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::basic_map<Domain, Range>::min_multi_pw_aff() const
+{
+ auto res = isl::basic_map::min_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::basic_map<Domain, Range>::preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::basic_map::preimage_domain(ma);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::basic_map<Domain, Range>::preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::basic_map::preimage_domain(mpa);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::basic_map<Domain, Range>::preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::basic_map::preimage_domain(pma);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<Domain2, Range> typed::basic_map<Domain, Range>::preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::basic_map::preimage_domain(upma);
+ return typed::union_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, Range2> typed::basic_map<Domain, Range>::preimage_range(const typed::multi_aff<Range2, Range> &ma) const
+{
+ auto res = isl::basic_map::preimage_range(ma);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, Range2> typed::basic_map<Domain, Range>::preimage_range(const typed::pw_multi_aff<Range2, Range> &pma) const
+{
+ auto res = isl::basic_map::preimage_range(pma);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::basic_map<Domain, Range>::preimage_range(const typed::union_pw_multi_aff<Range2, Range> &upma) const
+{
+ auto res = isl::basic_map::preimage_range(upma);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::map<pair<Domain, Domain2>, pair<Range, Range2>> typed::basic_map<Domain, Range>::product(const typed::map<Domain2, Range2> &map2) const
+{
+ auto res = isl::basic_map::product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> typed::basic_map<Domain, Range>::product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::basic_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::project_out_all_params() const
+{
+ auto res = isl::basic_map::project_out_all_params();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Range> typed::basic_map<Domain, Range>::range() const
+{
+ auto res = isl::basic_map::range();
+ return typed::set<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::fixed_box<Domain, Range> typed::basic_map<Domain, Range>::range_lattice_tile() const
+{
+ auto res = isl::basic_map::range_lattice_tile();
+ return typed::fixed_box<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<pair<Domain, Range>, Range> typed::basic_map<Domain, Range>::range_map() const
+{
+ auto res = isl::basic_map::range_map();
+ return typed::union_map<pair<Domain, Range>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, Range>::range_product(const typed::map<Domain, Range2> &map2) const
+{
+ auto res = isl::basic_map::range_product(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, Range>::range_product(const typed::union_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::basic_map::range_product(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::fixed_box<Domain, Range> typed::basic_map<Domain, Range>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::basic_map::range_simple_fixed_box_hull();
+ return typed::fixed_box<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_map<Range, Domain> typed::basic_map<Domain, Range>::reverse() const
+{
+ auto res = isl::basic_map::reverse();
+ return typed::basic_map<Range, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::basic_map<Domain, Range>::set_domain_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::basic_map::set_domain_tuple(id);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::basic_map<Domain, Range>::set_domain_tuple(const std::string &id) const
+{
+ auto res = isl::basic_map::set_domain_tuple(id);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, Range2> typed::basic_map<Domain, Range>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::basic_map::set_range_tuple(id);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, Range2> typed::basic_map<Domain, Range>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::basic_map::set_range_tuple(id);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Domain, Range> typed::basic_map<Domain, Range>::space() const
+{
+ auto res = isl::basic_map::space();
+ return typed::space<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::subtract(const typed::map<Domain, Range> &map2) const
+{
+ auto res = isl::basic_map::subtract(map2);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::subtract(const typed::union_map<Domain, Range> &umap2) const
+{
+ auto res = isl::basic_map::subtract(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::subtract_domain(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::basic_map::subtract_domain(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::subtract_range(const typed::union_set<Range> &dom) const
+{
+ auto res = isl::basic_map::subtract_range(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::to_union_map() const
+{
+ auto res = isl::basic_map::to_union_map();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::unite(const typed::basic_map<Domain, Range> &bmap2) const
+{
+ auto res = isl::basic_map::unite(bmap2);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::unite(const typed::map<Domain, Range> &map2) const
+{
+ auto res = isl::basic_map::unite(map2);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::basic_map<Domain, Range>::unite(const typed::union_map<Domain, Range> &umap2) const
+{
+ auto res = isl::basic_map::unite(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_map<Domain, Range>::upper_bound(const typed::multi_pw_aff<Domain, Range> &upper) const
+{
+ auto res = isl::basic_map::upper_bound(upper);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_map<Domain, Range>::wrap() const
+{
+ auto res = isl::basic_map::wrap();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<pair<Domain, Range>, Range2>::basic_map(const isl::ctx &ctx, const std::string &str)
+ : isl::basic_map(ctx, str)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::basic_map<Domain2, Range2> typed::basic_map<pair<Domain, Range>, Range2>::apply_domain(const typed::basic_map<pair<Domain, Range>, Domain2> &bmap2) const
+{
+ auto res = isl::basic_map::apply_domain(bmap2);
+ return typed::basic_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, Range2> typed::basic_map<pair<Domain, Range>, Range2>::apply_domain(const typed::map<pair<Domain, Range>, Domain2> &map2) const
+{
+ auto res = isl::basic_map::apply_domain(map2);
+ return typed::map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, Range2> typed::basic_map<pair<Domain, Range>, Range2>::apply_domain(const typed::union_map<pair<Domain, Range>, Domain2> &umap2) const
+{
+ auto res = isl::basic_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::basic_map<pair<Domain, Range>, Arg3> typed::basic_map<pair<Domain, Range>, Range2>::apply_range(const typed::basic_map<Range2, Arg3> &bmap2) const
+{
+ auto res = isl::basic_map::apply_range(bmap2);
+ return typed::basic_map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<pair<Domain, Range>, Arg3> typed::basic_map<pair<Domain, Range>, Range2>::apply_range(const typed::map<Range2, Arg3> &map2) const
+{
+ auto res = isl::basic_map::apply_range(map2);
+ return typed::map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, Arg3> typed::basic_map<pair<Domain, Range>, Range2>::apply_range(const typed::union_map<Range2, Arg3> &umap2) const
+{
+ auto res = isl::basic_map::apply_range(umap2);
+ return typed::union_map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::as_map() const
+{
+ auto res = isl::basic_map::as_map();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::as_multi_union_pw_aff() const
+{
+ auto res = isl::basic_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::as_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::as_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<Range2> typed::basic_map<pair<Domain, Range>, Range2>::bind_domain(const typed::multi_id<pair<Domain, Range>> &tuple) const
+{
+ auto res = isl::basic_map::bind_domain(tuple);
+ return typed::set<Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<Domain, Range>> typed::basic_map<pair<Domain, Range>, Range2>::bind_range(const typed::multi_id<Range2> &tuple) const
+{
+ auto res = isl::basic_map::bind_range(tuple);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::coalesce() const
+{
+ auto res = isl::basic_map::coalesce();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<pair<Domain, Range>, Range2>::curry() const
+{
+ auto res = isl::basic_map::curry();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::detect_equalities() const
+{
+ auto res = isl::basic_map::detect_equalities();
+ return typed::basic_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<Domain, Range>> typed::basic_map<pair<Domain, Range>, Range2>::domain() const
+{
+ auto res = isl::basic_map::domain();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, Range2> typed::basic_map<pair<Domain, Range>, Range2>::domain_factor_domain() const
+{
+ auto res = isl::basic_map::domain_factor_domain();
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Range, Range2> typed::basic_map<pair<Domain, Range>, Range2>::domain_factor_range() const
+{
+ auto res = isl::basic_map::domain_factor_range();
+ return typed::map<Range, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> typed::basic_map<pair<Domain, Range>, Range2>::domain_map() const
+{
+ auto res = isl::basic_map::domain_map();
+ return typed::union_map<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> typed::basic_map<pair<Domain, Range>, Range2>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<pair<pair<Domain, Range>, Domain2>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::domain_product(const typed::map<Domain2, Range2> &map2) const
+{
+ auto res = isl::basic_map::domain_product(map2);
+ return typed::map<pair<pair<Domain, Range>, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::domain_product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::basic_map::domain_product(umap2);
+ return typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+bool typed::basic_map<pair<Domain, Range>, Range2>::every_map(const std::function<bool(typed::map<pair<Domain, Range>, Range2>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<pair<Domain, Range>, Range2>(arg0));
+ };
+ return isl::basic_map::every_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::extract_map(const typed::space<pair<Domain, Range>, Range2> &space) const
+{
+ auto res = isl::basic_map::extract_map(space);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<Anonymous, Range2> typed::basic_map<pair<Domain, Range>, Range2>::flatten_domain() const
+{
+ auto res = isl::basic_map::flatten_domain();
+ return typed::basic_map<Anonymous, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+void typed::basic_map<pair<Domain, Range>, Range2>::foreach_basic_map(const std::function<void(typed::basic_map<pair<Domain, Range>, Range2>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<pair<Domain, Range>, Range2>(arg0));
+ };
+ return isl::basic_map::foreach_basic_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+void typed::basic_map<pair<Domain, Range>, Range2>::foreach_map(const std::function<void(typed::map<pair<Domain, Range>, Range2>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<pair<Domain, Range>, Range2>(arg0));
+ };
+ return isl::basic_map::foreach_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::gist(const typed::basic_map<pair<Domain, Range>, Range2> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::basic_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::gist(const typed::map<pair<Domain, Range>, Range2> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::gist(const typed::union_map<pair<Domain, Range>, Range2> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::gist_domain(const typed::set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::basic_map::gist_domain(context);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::gist_domain(const typed::union_set<pair<Domain, Range>> &uset) const
+{
+ auto res = isl::basic_map::gist_domain(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect(const typed::basic_map<pair<Domain, Range>, Range2> &bmap2) const
+{
+ auto res = isl::basic_map::intersect(bmap2);
+ return typed::basic_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect(const typed::map<pair<Domain, Range>, Range2> &map2) const
+{
+ auto res = isl::basic_map::intersect(map2);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::basic_map::intersect(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect_domain(const typed::basic_set<pair<Domain, Range>> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect_domain(const typed::set<pair<Domain, Range>> &set) const
+{
+ auto res = isl::basic_map::intersect_domain(set);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect_domain(const typed::space<pair<Domain, Range>> &space) const
+{
+ auto res = isl::basic_map::intersect_domain(space);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect_domain(const typed::union_set<pair<Domain, Range>> &uset) const
+{
+ auto res = isl::basic_map::intersect_domain(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect_domain(const typed::point<pair<Domain, Range>> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::basic_map::intersect_params(params);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect_range(const typed::basic_set<Range2> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect_range(const typed::set<Range2> &set) const
+{
+ auto res = isl::basic_map::intersect_range(set);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect_range(const typed::space<Range2> &space) const
+{
+ auto res = isl::basic_map::intersect_range(space);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect_range(const typed::union_set<Range2> &uset) const
+{
+ auto res = isl::basic_map::intersect_range(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::intersect_range(const typed::point<Range2> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::lexmax() const
+{
+ auto res = isl::basic_map::lexmax();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::lexmin() const
+{
+ auto res = isl::basic_map::lexmin();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::lower_bound(const typed::multi_pw_aff<pair<Domain, Range>, Range2> &lower) const
+{
+ auto res = isl::basic_map::lower_bound(lower);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map_list<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::map_list() const
+{
+ auto res = isl::basic_map::map_list();
+ return typed::map_list<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::max_multi_pw_aff() const
+{
+ auto res = isl::basic_map::max_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::min_multi_pw_aff() const
+{
+ auto res = isl::basic_map::min_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, Range2> typed::basic_map<pair<Domain, Range>, Range2>::preimage_domain(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const
+{
+ auto res = isl::basic_map::preimage_domain(ma);
+ return typed::map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, Range2> typed::basic_map<pair<Domain, Range>, Range2>::preimage_domain(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const
+{
+ auto res = isl::basic_map::preimage_domain(mpa);
+ return typed::map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, Range2> typed::basic_map<pair<Domain, Range>, Range2>::preimage_domain(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const
+{
+ auto res = isl::basic_map::preimage_domain(pma);
+ return typed::map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, Range2> typed::basic_map<pair<Domain, Range>, Range2>::preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const
+{
+ auto res = isl::basic_map::preimage_domain(upma);
+ return typed::union_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<pair<Domain, Range>, Arg3> typed::basic_map<pair<Domain, Range>, Range2>::preimage_range(const typed::multi_aff<Arg3, Range2> &ma) const
+{
+ auto res = isl::basic_map::preimage_range(ma);
+ return typed::map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<pair<Domain, Range>, Arg3> typed::basic_map<pair<Domain, Range>, Range2>::preimage_range(const typed::pw_multi_aff<Arg3, Range2> &pma) const
+{
+ auto res = isl::basic_map::preimage_range(pma);
+ return typed::map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, Arg3> typed::basic_map<pair<Domain, Range>, Range2>::preimage_range(const typed::union_pw_multi_aff<Arg3, Range2> &upma) const
+{
+ auto res = isl::basic_map::preimage_range(upma);
+ return typed::union_map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> typed::basic_map<pair<Domain, Range>, Range2>::product(const typed::map<Domain2, Arg3> &map2) const
+{
+ auto res = isl::basic_map::product(map2);
+ return typed::map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> typed::basic_map<pair<Domain, Range>, Range2>::product(const typed::union_map<Domain2, Arg3> &umap2) const
+{
+ auto res = isl::basic_map::product(umap2);
+ return typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::project_out_all_params() const
+{
+ auto res = isl::basic_map::project_out_all_params();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<Range2> typed::basic_map<pair<Domain, Range>, Range2>::range() const
+{
+ auto res = isl::basic_map::range();
+ return typed::set<Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::fixed_box<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::range_lattice_tile() const
+{
+ auto res = isl::basic_map::range_lattice_tile();
+ return typed::fixed_box<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<pair<Domain, Range>, Range2>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::range_map() const
+{
+ auto res = isl::basic_map::range_map();
+ return typed::union_map<pair<pair<Domain, Range>, Range2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<pair<Domain, Range>, pair<Range2, Arg3>> typed::basic_map<pair<Domain, Range>, Range2>::range_product(const typed::map<pair<Domain, Range>, Arg3> &map2) const
+{
+ auto res = isl::basic_map::range_product(map2);
+ return typed::map<pair<Domain, Range>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>> typed::basic_map<pair<Domain, Range>, Range2>::range_product(const typed::union_map<pair<Domain, Range>, Arg3> &umap2) const
+{
+ auto res = isl::basic_map::range_product(umap2);
+ return typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::fixed_box<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::basic_map::range_simple_fixed_box_hull();
+ return typed::fixed_box<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<Range2, pair<Domain, Range>> typed::basic_map<pair<Domain, Range>, Range2>::reverse() const
+{
+ auto res = isl::basic_map::reverse();
+ return typed::basic_map<Range2, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<Domain, Range>, Arg2> typed::basic_map<pair<Domain, Range>, Range2>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::basic_map::set_range_tuple(id);
+ return typed::map<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<Domain, Range>, Arg2> typed::basic_map<pair<Domain, Range>, Range2>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::basic_map::set_range_tuple(id);
+ return typed::map<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::space() const
+{
+ auto res = isl::basic_map::space();
+ return typed::space<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::subtract(const typed::map<pair<Domain, Range>, Range2> &map2) const
+{
+ auto res = isl::basic_map::subtract(map2);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::subtract(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::basic_map::subtract(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::subtract_domain(const typed::union_set<pair<Domain, Range>> &dom) const
+{
+ auto res = isl::basic_map::subtract_domain(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::subtract_range(const typed::union_set<Range2> &dom) const
+{
+ auto res = isl::basic_map::subtract_range(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::to_union_map() const
+{
+ auto res = isl::basic_map::to_union_map();
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::unite(const typed::basic_map<pair<Domain, Range>, Range2> &bmap2) const
+{
+ auto res = isl::basic_map::unite(bmap2);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::unite(const typed::map<pair<Domain, Range>, Range2> &map2) const
+{
+ auto res = isl::basic_map::unite(map2);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::unite(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::basic_map::unite(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<pair<Domain, Range>, Range2>::upper_bound(const typed::multi_pw_aff<pair<Domain, Range>, Range2> &upper) const
+{
+ auto res = isl::basic_map::upper_bound(upper);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<pair<Domain, Range>, Range2>> typed::basic_map<pair<Domain, Range>, Range2>::wrap() const
+{
+ auto res = isl::basic_map::wrap();
+ return typed::set<pair<pair<Domain, Range>, Range2>>(res);
+}
+
+template <typename Domain>
+typed::basic_map<Domain, Domain>::basic_map(const isl::ctx &ctx, const std::string &str)
+ : isl::basic_map(ctx, str)
+{
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::basic_map<Domain2, Domain> typed::basic_map<Domain, Domain>::apply_domain(const typed::basic_map<Domain, Domain2> &bmap2) const
+{
+ auto res = isl::basic_map::apply_domain(bmap2);
+ return typed::basic_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::basic_map<Domain, Domain>::apply_domain(const typed::map<Domain, Domain2> &map2) const
+{
+ auto res = isl::basic_map::apply_domain(map2);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<Domain2, Domain> typed::basic_map<Domain, Domain>::apply_domain(const typed::union_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::basic_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::basic_map<Domain, Range2> typed::basic_map<Domain, Domain>::apply_range(const typed::basic_map<Domain, Range2> &bmap2) const
+{
+ auto res = isl::basic_map::apply_range(bmap2);
+ return typed::basic_map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, Range2> typed::basic_map<Domain, Domain>::apply_range(const typed::map<Domain, Range2> &map2) const
+{
+ auto res = isl::basic_map::apply_range(map2);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::basic_map<Domain, Domain>::apply_range(const typed::union_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::basic_map::apply_range(umap2);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::as_map() const
+{
+ auto res = isl::basic_map::as_map();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Domain> typed::basic_map<Domain, Domain>::as_multi_union_pw_aff() const
+{
+ auto res = isl::basic_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Domain> typed::basic_map<Domain, Domain>::as_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Domain> typed::basic_map<Domain, Domain>::as_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_map<Domain, Domain>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::basic_map::bind_domain(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_map<Domain, Domain>::bind_range(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::basic_map::bind_range(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::coalesce() const
+{
+ auto res = isl::basic_map::coalesce();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::basic_map<Domain, Domain>::deltas() const
+{
+ auto res = isl::basic_map::deltas();
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_map<Domain, Domain> typed::basic_map<Domain, Domain>::detect_equalities() const
+{
+ auto res = isl::basic_map::detect_equalities();
+ return typed::basic_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_map<Domain, Domain>::domain() const
+{
+ auto res = isl::basic_map::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<pair<Domain, Domain>, Domain> typed::basic_map<Domain, Domain>::domain_map() const
+{
+ auto res = isl::basic_map::domain_map();
+ return typed::union_map<pair<Domain, Domain>, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<pair<Domain, Domain>, Domain> typed::basic_map<Domain, Domain>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, Domain>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<pair<Domain, Domain2>, Domain> typed::basic_map<Domain, Domain>::domain_product(const typed::map<Domain2, Domain> &map2) const
+{
+ auto res = isl::basic_map::domain_product(map2);
+ return typed::map<pair<Domain, Domain2>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, Domain> typed::basic_map<Domain, Domain>::domain_product(const typed::union_map<Domain2, Domain> &umap2) const
+{
+ auto res = isl::basic_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::eq_at(const typed::multi_pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::basic_map::eq_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::eq_at(const typed::multi_union_pw_aff<Domain, Range> &mupa) const
+{
+ auto res = isl::basic_map::eq_at(mupa);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+bool typed::basic_map<Domain, Domain>::every_map(const std::function<bool(typed::map<Domain, Domain>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<Domain, Domain>(arg0));
+ };
+ return isl::basic_map::every_map(lambda);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::extract_map(const typed::space<Domain, Domain> &space) const
+{
+ auto res = isl::basic_map::extract_map(space);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+void typed::basic_map<Domain, Domain>::foreach_basic_map(const std::function<void(typed::basic_map<Domain, Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<Domain, Domain>(arg0));
+ };
+ return isl::basic_map::foreach_basic_map(lambda);
+}
+
+template <typename Domain>
+void typed::basic_map<Domain, Domain>::foreach_map(const std::function<void(typed::map<Domain, Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<Domain, Domain>(arg0));
+ };
+ return isl::basic_map::foreach_map(lambda);
+}
+
+template <typename Domain>
+typed::basic_map<Domain, Domain> typed::basic_map<Domain, Domain>::gist(const typed::basic_map<Domain, Domain> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::basic_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::gist(const typed::map<Domain, Domain> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::gist(const typed::union_map<Domain, Domain> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::gist_domain(const typed::set<Domain> &context) const
+{
+ auto res = isl::basic_map::gist_domain(context);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::gist_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::basic_map::gist_domain(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect(const typed::basic_map<Domain, Domain> &bmap2) const
+{
+ auto res = isl::basic_map::intersect(bmap2);
+ return typed::basic_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect(const typed::map<Domain, Domain> &map2) const
+{
+ auto res = isl::basic_map::intersect(map2);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect(const typed::union_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::basic_map::intersect(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect_domain(const typed::basic_set<Domain> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::basic_map::intersect_domain(set);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::basic_map::intersect_domain(space);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::basic_map::intersect_domain(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect_domain(const typed::point<Domain> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::basic_map::intersect_params(params);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect_range(const typed::basic_set<Domain> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect_range(const typed::set<Domain> &set) const
+{
+ auto res = isl::basic_map::intersect_range(set);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect_range(const typed::space<Domain> &space) const
+{
+ auto res = isl::basic_map::intersect_range(space);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect_range(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::basic_map::intersect_range(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_map<Domain, Domain> typed::basic_map<Domain, Domain>::intersect_range(const typed::point<Domain> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::lex_ge_at(const typed::multi_pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::basic_map::lex_ge_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::lex_gt_at(const typed::multi_pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::basic_map::lex_gt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::lex_le_at(const typed::multi_pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::basic_map::lex_le_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::lex_lt_at(const typed::multi_pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::basic_map::lex_lt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::lexmax() const
+{
+ auto res = isl::basic_map::lexmax();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Domain> typed::basic_map<Domain, Domain>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::lexmin() const
+{
+ auto res = isl::basic_map::lexmin();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Domain> typed::basic_map<Domain, Domain>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::lower_bound(const typed::multi_pw_aff<Domain, Domain> &lower) const
+{
+ auto res = isl::basic_map::lower_bound(lower);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map_list<Domain, Domain> typed::basic_map<Domain, Domain>::map_list() const
+{
+ auto res = isl::basic_map::map_list();
+ return typed::map_list<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Domain> typed::basic_map<Domain, Domain>::max_multi_pw_aff() const
+{
+ auto res = isl::basic_map::max_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Domain> typed::basic_map<Domain, Domain>::min_multi_pw_aff() const
+{
+ auto res = isl::basic_map::min_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::basic_map<Domain, Domain>::preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::basic_map::preimage_domain(ma);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::basic_map<Domain, Domain>::preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::basic_map::preimage_domain(mpa);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::basic_map<Domain, Domain>::preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::basic_map::preimage_domain(pma);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<Domain2, Domain> typed::basic_map<Domain, Domain>::preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::basic_map::preimage_domain(upma);
+ return typed::union_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, Range2> typed::basic_map<Domain, Domain>::preimage_range(const typed::multi_aff<Range2, Domain> &ma) const
+{
+ auto res = isl::basic_map::preimage_range(ma);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, Range2> typed::basic_map<Domain, Domain>::preimage_range(const typed::pw_multi_aff<Range2, Domain> &pma) const
+{
+ auto res = isl::basic_map::preimage_range(pma);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::basic_map<Domain, Domain>::preimage_range(const typed::union_pw_multi_aff<Range2, Domain> &upma) const
+{
+ auto res = isl::basic_map::preimage_range(upma);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::map<pair<Domain, Domain2>, pair<Domain, Range2>> typed::basic_map<Domain, Domain>::product(const typed::map<Domain2, Range2> &map2) const
+{
+ auto res = isl::basic_map::product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>> typed::basic_map<Domain, Domain>::product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::basic_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::project_out_all_params() const
+{
+ auto res = isl::basic_map::project_out_all_params();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_map<Domain, Domain>::range() const
+{
+ auto res = isl::basic_map::range();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::fixed_box<Domain, Domain> typed::basic_map<Domain, Domain>::range_lattice_tile() const
+{
+ auto res = isl::basic_map::range_lattice_tile();
+ return typed::fixed_box<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<pair<Domain, Domain>, Domain> typed::basic_map<Domain, Domain>::range_map() const
+{
+ auto res = isl::basic_map::range_map();
+ return typed::union_map<pair<Domain, Domain>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, pair<Domain, Range2>> typed::basic_map<Domain, Domain>::range_product(const typed::map<Domain, Range2> &map2) const
+{
+ auto res = isl::basic_map::range_product(map2);
+ return typed::map<Domain, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, pair<Domain, Range2>> typed::basic_map<Domain, Domain>::range_product(const typed::union_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::basic_map::range_product(umap2);
+ return typed::union_map<Domain, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+typed::fixed_box<Domain, Domain> typed::basic_map<Domain, Domain>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::basic_map::range_simple_fixed_box_hull();
+ return typed::fixed_box<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_map<Domain, Domain> typed::basic_map<Domain, Domain>::reverse() const
+{
+ auto res = isl::basic_map::reverse();
+ return typed::basic_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::basic_map<Domain, Domain>::set_domain_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::basic_map::set_domain_tuple(id);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::basic_map<Domain, Domain>::set_domain_tuple(const std::string &id) const
+{
+ auto res = isl::basic_map::set_domain_tuple(id);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, Range2> typed::basic_map<Domain, Domain>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::basic_map::set_range_tuple(id);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, Range2> typed::basic_map<Domain, Domain>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::basic_map::set_range_tuple(id);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+typed::space<Domain, Domain> typed::basic_map<Domain, Domain>::space() const
+{
+ auto res = isl::basic_map::space();
+ return typed::space<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::subtract(const typed::map<Domain, Domain> &map2) const
+{
+ auto res = isl::basic_map::subtract(map2);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::subtract(const typed::union_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::basic_map::subtract(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::subtract_domain(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::basic_map::subtract_domain(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::subtract_range(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::basic_map::subtract_range(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::to_union_map() const
+{
+ auto res = isl::basic_map::to_union_map();
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::unite(const typed::basic_map<Domain, Domain> &bmap2) const
+{
+ auto res = isl::basic_map::unite(bmap2);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::unite(const typed::map<Domain, Domain> &map2) const
+{
+ auto res = isl::basic_map::unite(map2);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::basic_map<Domain, Domain>::unite(const typed::union_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::basic_map::unite(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_map<Domain, Domain>::upper_bound(const typed::multi_pw_aff<Domain, Domain> &upper) const
+{
+ auto res = isl::basic_map::upper_bound(upper);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<pair<Domain, Domain>> typed::basic_map<Domain, Domain>::wrap() const
+{
+ auto res = isl::basic_map::wrap();
+ return typed::set<pair<Domain, Domain>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<Domain, pair<Range, Range2>>::basic_map(const isl::ctx &ctx, const std::string &str)
+ : isl::basic_map(ctx, str)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::basic_map<Domain2, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::apply_domain(const typed::basic_map<Domain, Domain2> &bmap2) const
+{
+ auto res = isl::basic_map::apply_domain(bmap2);
+ return typed::basic_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::apply_domain(const typed::map<Domain, Domain2> &map2) const
+{
+ auto res = isl::basic_map::apply_domain(map2);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::apply_domain(const typed::union_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::basic_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::basic_map<Domain, Arg3> typed::basic_map<Domain, pair<Range, Range2>>::apply_range(const typed::basic_map<pair<Range, Range2>, Arg3> &bmap2) const
+{
+ auto res = isl::basic_map::apply_range(bmap2);
+ return typed::basic_map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<Domain, Arg3> typed::basic_map<Domain, pair<Range, Range2>>::apply_range(const typed::map<pair<Range, Range2>, Arg3> &map2) const
+{
+ auto res = isl::basic_map::apply_range(map2);
+ return typed::map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, Arg3> typed::basic_map<Domain, pair<Range, Range2>>::apply_range(const typed::union_map<pair<Range, Range2>, Arg3> &umap2) const
+{
+ auto res = isl::basic_map::apply_range(umap2);
+ return typed::union_map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::as_map() const
+{
+ auto res = isl::basic_map::as_map();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::basic_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::as_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::as_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::basic_map::bind_domain(tuple);
+ return typed::set<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<Domain> typed::basic_map<Domain, pair<Range, Range2>>::bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const
+{
+ auto res = isl::basic_map::bind_range(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::basic_map::coalesce();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::detect_equalities() const
+{
+ auto res = isl::basic_map::detect_equalities();
+ return typed::basic_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<Domain> typed::basic_map<Domain, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::basic_map::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, pair<Range, Range2>>, Domain> typed::basic_map<Domain, pair<Range, Range2>>::domain_map() const
+{
+ auto res = isl::basic_map::domain_map();
+ return typed::union_map<pair<Domain, pair<Range, Range2>>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain> typed::basic_map<Domain, pair<Range, Range2>>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<pair<Domain, Domain2>, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::domain_product(const typed::map<Domain2, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::basic_map::domain_product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::basic_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+bool typed::basic_map<Domain, pair<Range, Range2>>::every_map(const std::function<bool(typed::map<Domain, pair<Range, Range2>>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<Domain, pair<Range, Range2>>(arg0));
+ };
+ return isl::basic_map::every_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::extract_map(const typed::space<Domain, pair<Range, Range2>> &space) const
+{
+ auto res = isl::basic_map::extract_map(space);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<Domain, Anonymous> typed::basic_map<Domain, pair<Range, Range2>>::flatten_range() const
+{
+ auto res = isl::basic_map::flatten_range();
+ return typed::basic_map<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+void typed::basic_map<Domain, pair<Range, Range2>>::foreach_basic_map(const std::function<void(typed::basic_map<Domain, pair<Range, Range2>>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<Domain, pair<Range, Range2>>(arg0));
+ };
+ return isl::basic_map::foreach_basic_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+void typed::basic_map<Domain, pair<Range, Range2>>::foreach_map(const std::function<void(typed::map<Domain, pair<Range, Range2>>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<Domain, pair<Range, Range2>>(arg0));
+ };
+ return isl::basic_map::foreach_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::gist(const typed::basic_map<Domain, pair<Range, Range2>> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::basic_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::gist(const typed::map<Domain, pair<Range, Range2>> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::gist(const typed::union_map<Domain, pair<Range, Range2>> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::gist_domain(const typed::set<Domain> &context) const
+{
+ auto res = isl::basic_map::gist_domain(context);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::gist_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::basic_map::gist_domain(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect(const typed::basic_map<Domain, pair<Range, Range2>> &bmap2) const
+{
+ auto res = isl::basic_map::intersect(bmap2);
+ return typed::basic_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect(const typed::map<Domain, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::basic_map::intersect(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::basic_map::intersect(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect_domain(const typed::basic_set<Domain> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::basic_map::intersect_domain(set);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::basic_map::intersect_domain(space);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::basic_map::intersect_domain(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect_domain(const typed::point<Domain> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::basic_map::intersect_params(params);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect_range(const typed::basic_set<pair<Range, Range2>> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect_range(const typed::set<pair<Range, Range2>> &set) const
+{
+ auto res = isl::basic_map::intersect_range(set);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect_range(const typed::space<pair<Range, Range2>> &space) const
+{
+ auto res = isl::basic_map::intersect_range(space);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const
+{
+ auto res = isl::basic_map::intersect_range(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::intersect_range(const typed::point<pair<Range, Range2>> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::lexmax() const
+{
+ auto res = isl::basic_map::lexmax();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::lexmin() const
+{
+ auto res = isl::basic_map::lexmin();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::lower_bound(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::basic_map::lower_bound(lower);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map_list<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::map_list() const
+{
+ auto res = isl::basic_map::map_list();
+ return typed::map_list<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::max_multi_pw_aff() const
+{
+ auto res = isl::basic_map::max_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::min_multi_pw_aff() const
+{
+ auto res = isl::basic_map::min_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::basic_map::preimage_domain(ma);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::basic_map::preimage_domain(mpa);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::basic_map::preimage_domain(pma);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::basic_map::preimage_domain(upma);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<Domain, Arg3> typed::basic_map<Domain, pair<Range, Range2>>::preimage_range(const typed::multi_aff<Arg3, pair<Range, Range2>> &ma) const
+{
+ auto res = isl::basic_map::preimage_range(ma);
+ return typed::map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<Domain, Arg3> typed::basic_map<Domain, pair<Range, Range2>>::preimage_range(const typed::pw_multi_aff<Arg3, pair<Range, Range2>> &pma) const
+{
+ auto res = isl::basic_map::preimage_range(pma);
+ return typed::map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, Arg3> typed::basic_map<Domain, pair<Range, Range2>>::preimage_range(const typed::union_pw_multi_aff<Arg3, pair<Range, Range2>> &upma) const
+{
+ auto res = isl::basic_map::preimage_range(upma);
+ return typed::union_map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::basic_map<Domain, pair<Range, Range2>>::product(const typed::map<Domain2, Arg3> &map2) const
+{
+ auto res = isl::basic_map::product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::basic_map<Domain, pair<Range, Range2>>::product(const typed::union_map<Domain2, Arg3> &umap2) const
+{
+ auto res = isl::basic_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::project_out_all_params() const
+{
+ auto res = isl::basic_map::project_out_all_params();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::range() const
+{
+ auto res = isl::basic_map::range();
+ return typed::set<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, Range> typed::basic_map<Domain, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::basic_map::range_factor_domain();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, Range2> typed::basic_map<Domain, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::basic_map::range_factor_range();
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::fixed_box<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::range_lattice_tile() const
+{
+ auto res = isl::basic_map::range_lattice_tile();
+ return typed::fixed_box<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::range_map() const
+{
+ auto res = isl::basic_map::range_map();
+ return typed::union_map<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<Domain, pair<pair<Range, Range2>, Arg3>> typed::basic_map<Domain, pair<Range, Range2>>::range_product(const typed::map<Domain, Arg3> &map2) const
+{
+ auto res = isl::basic_map::range_product(map2);
+ return typed::map<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>> typed::basic_map<Domain, pair<Range, Range2>>::range_product(const typed::union_map<Domain, Arg3> &umap2) const
+{
+ auto res = isl::basic_map::range_product(umap2);
+ return typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range2, Range>> typed::basic_map<Domain, pair<Range, Range2>>::range_reverse() const
+{
+ auto res = isl::basic_map::range_reverse();
+ return typed::map<Domain, pair<Range2, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::fixed_box<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::basic_map::range_simple_fixed_box_hull();
+ return typed::fixed_box<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_map<pair<Range, Range2>, Domain> typed::basic_map<Domain, pair<Range, Range2>>::reverse() const
+{
+ auto res = isl::basic_map::reverse();
+ return typed::basic_map<pair<Range, Range2>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::set_domain_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::basic_map::set_domain_tuple(id);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::set_domain_tuple(const std::string &id) const
+{
+ auto res = isl::basic_map::set_domain_tuple(id);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::space() const
+{
+ auto res = isl::basic_map::space();
+ return typed::space<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::subtract(const typed::map<Domain, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::basic_map::subtract(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::subtract(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::basic_map::subtract(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::subtract_domain(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::basic_map::subtract_domain(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::basic_map::subtract_range(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::to_union_map() const
+{
+ auto res = isl::basic_map::to_union_map();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::basic_map<Domain, pair<Range, Range2>>::uncurry() const
+{
+ auto res = isl::basic_map::uncurry();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::unite(const typed::basic_map<Domain, pair<Range, Range2>> &bmap2) const
+{
+ auto res = isl::basic_map::unite(bmap2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::unite(const typed::map<Domain, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::basic_map::unite(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::unite(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::basic_map::unite(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::basic_map<Domain, pair<Range, Range2>>::upper_bound(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::basic_map::upper_bound(upper);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<Domain, pair<Range, Range2>>> typed::basic_map<Domain, pair<Range, Range2>>::wrap() const
+{
+ auto res = isl::basic_map::wrap();
+ return typed::set<pair<Domain, pair<Range, Range2>>>(res);
+}
+
+template <typename T1, typename T2>
+typed::basic_map<pair<T1, T2>, pair<T1, T2>>::basic_map(const isl::ctx &ctx, const std::string &str)
+ : isl::basic_map(ctx, str)
+{
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::basic_map<Domain2, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &bmap2) const
+{
+ auto res = isl::basic_map::apply_domain(bmap2);
+ return typed::basic_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<Domain2, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::apply_domain(const typed::map<pair<T1, T2>, Domain2> &map2) const
+{
+ auto res = isl::basic_map::apply_domain(map2);
+ return typed::map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const
+{
+ auto res = isl::basic_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::basic_map<pair<T1, T2>, Range2> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::apply_range(const typed::basic_map<pair<T1, T2>, Range2> &bmap2) const
+{
+ auto res = isl::basic_map::apply_range(bmap2);
+ return typed::basic_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::map<pair<T1, T2>, Range2> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::apply_range(const typed::map<pair<T1, T2>, Range2> &map2) const
+{
+ auto res = isl::basic_map::apply_range(map2);
+ return typed::map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, Range2> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::apply_range(const typed::union_map<pair<T1, T2>, Range2> &umap2) const
+{
+ auto res = isl::basic_map::apply_range(umap2);
+ return typed::union_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::as_map() const
+{
+ auto res = isl::basic_map::as_map();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::basic_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::as_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::as_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::set<pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const
+{
+ auto res = isl::basic_map::bind_domain(tuple);
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::set<pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::bind_range(const typed::multi_id<pair<T1, T2>> &tuple) const
+{
+ auto res = isl::basic_map::bind_range(tuple);
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::coalesce() const
+{
+ auto res = isl::basic_map::coalesce();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<T1, pair<T2, pair<T1, T2>>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::curry() const
+{
+ auto res = isl::basic_map::curry();
+ return typed::map<T1, pair<T2, pair<T1, T2>>>(res);
+}
+
+template <typename T1, typename T2>
+typed::basic_set<pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::deltas() const
+{
+ auto res = isl::basic_map::deltas();
+ return typed::basic_set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::basic_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::detect_equalities() const
+{
+ auto res = isl::basic_map::detect_equalities();
+ return typed::basic_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::set<pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::domain() const
+{
+ auto res = isl::basic_map::domain();
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<T1, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::domain_factor_domain() const
+{
+ auto res = isl::basic_map::domain_factor_domain();
+ return typed::map<T1, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<T2, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::domain_factor_range() const
+{
+ auto res = isl::basic_map::domain_factor_range();
+ return typed::map<T2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::domain_map() const
+{
+ auto res = isl::basic_map::domain_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::domain_product(const typed::map<Domain2, pair<T1, T2>> &map2) const
+{
+ auto res = isl::basic_map::domain_product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::domain_product(const typed::union_map<Domain2, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::basic_map::domain_product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::eq_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::basic_map::eq_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::eq_at(const typed::multi_union_pw_aff<pair<T1, T2>, Range> &mupa) const
+{
+ auto res = isl::basic_map::eq_at(mupa);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+bool typed::basic_map<pair<T1, T2>, pair<T1, T2>>::every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<T1, T2>>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<pair<T1, T2>, pair<T1, T2>>(arg0));
+ };
+ return isl::basic_map::every_map(lambda);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::extract_map(const typed::space<pair<T1, T2>, pair<T1, T2>> &space) const
+{
+ auto res = isl::basic_map::extract_map(space);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::basic_map<Anonymous, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::flatten_domain() const
+{
+ auto res = isl::basic_map::flatten_domain();
+ return typed::basic_map<Anonymous, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::basic_map<pair<T1, T2>, Anonymous> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::flatten_range() const
+{
+ auto res = isl::basic_map::flatten_range();
+ return typed::basic_map<pair<T1, T2>, Anonymous>(res);
+}
+
+template <typename T1, typename T2>
+void typed::basic_map<pair<T1, T2>, pair<T1, T2>>::foreach_basic_map(const std::function<void(typed::basic_map<pair<T1, T2>, pair<T1, T2>>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<pair<T1, T2>, pair<T1, T2>>(arg0));
+ };
+ return isl::basic_map::foreach_basic_map(lambda);
+}
+
+template <typename T1, typename T2>
+void typed::basic_map<pair<T1, T2>, pair<T1, T2>>::foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<T1, T2>>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<pair<T1, T2>, pair<T1, T2>>(arg0));
+ };
+ return isl::basic_map::foreach_map(lambda);
+}
+
+template <typename T1, typename T2>
+typed::basic_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::gist(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::basic_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::gist(const typed::map<pair<T1, T2>, pair<T1, T2>> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::gist(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::gist_domain(const typed::set<pair<T1, T2>> &context) const
+{
+ auto res = isl::basic_map::gist_domain(context);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::gist_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::basic_map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::basic_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &bmap2) const
+{
+ auto res = isl::basic_map::intersect(bmap2);
+ return typed::basic_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const
+{
+ auto res = isl::basic_map::intersect(map2);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::basic_map::intersect(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::basic_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::basic_set<pair<T1, T2>> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::set<pair<T1, T2>> &set) const
+{
+ auto res = isl::basic_map::intersect_domain(set);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::basic_map::intersect_domain(space);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::basic_map::intersect_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::basic_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::point<pair<T1, T2>> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::basic_map::intersect_params(params);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::basic_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::basic_set<pair<T1, T2>> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::set<pair<T1, T2>> &set) const
+{
+ auto res = isl::basic_map::intersect_range(set);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::basic_map::intersect_range(space);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::basic_map::intersect_range(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::basic_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::point<pair<T1, T2>> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::lex_ge_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::basic_map::lex_ge_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::lex_gt_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::basic_map::lex_gt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::lex_le_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::basic_map::lex_le_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::lex_lt_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::basic_map::lex_lt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::lexmax() const
+{
+ auto res = isl::basic_map::lexmax();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::lexmin() const
+{
+ auto res = isl::basic_map::lexmin();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::lower_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> &lower) const
+{
+ auto res = isl::basic_map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map_list<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::map_list() const
+{
+ auto res = isl::basic_map::map_list();
+ return typed::map_list<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::max_multi_pw_aff() const
+{
+ auto res = isl::basic_map::max_multi_pw_aff();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::min_multi_pw_aff() const
+{
+ auto res = isl::basic_map::min_multi_pw_aff();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<Domain2, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const
+{
+ auto res = isl::basic_map::preimage_domain(ma);
+ return typed::map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<Domain2, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const
+{
+ auto res = isl::basic_map::preimage_domain(mpa);
+ return typed::map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<Domain2, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const
+{
+ auto res = isl::basic_map::preimage_domain(pma);
+ return typed::map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const
+{
+ auto res = isl::basic_map::preimage_domain(upma);
+ return typed::union_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::map<pair<T1, T2>, Range2> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::preimage_range(const typed::multi_aff<Range2, pair<T1, T2>> &ma) const
+{
+ auto res = isl::basic_map::preimage_range(ma);
+ return typed::map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::map<pair<T1, T2>, Range2> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::preimage_range(const typed::pw_multi_aff<Range2, pair<T1, T2>> &pma) const
+{
+ auto res = isl::basic_map::preimage_range(pma);
+ return typed::map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, Range2> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::preimage_range(const typed::union_pw_multi_aff<Range2, pair<T1, T2>> &upma) const
+{
+ auto res = isl::basic_map::preimage_range(upma);
+ return typed::union_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2, typename Range2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::product(const typed::map<Domain2, Range2> &map2) const
+{
+ auto res = isl::basic_map::product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::basic_map::product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::project_out_all_params() const
+{
+ auto res = isl::basic_map::project_out_all_params();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::set<pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::range() const
+{
+ auto res = isl::basic_map::range();
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, T1> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::range_factor_domain() const
+{
+ auto res = isl::basic_map::range_factor_domain();
+ return typed::map<pair<T1, T2>, T1>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, T2> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::range_factor_range() const
+{
+ auto res = isl::basic_map::range_factor_range();
+ return typed::map<pair<T1, T2>, T2>(res);
+}
+
+template <typename T1, typename T2>
+typed::fixed_box<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::range_lattice_tile() const
+{
+ auto res = isl::basic_map::range_lattice_tile();
+ return typed::fixed_box<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::range_map() const
+{
+ auto res = isl::basic_map::range_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::range_product(const typed::map<pair<T1, T2>, Range2> &map2) const
+{
+ auto res = isl::basic_map::range_product(map2);
+ return typed::map<pair<T1, T2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::range_product(const typed::union_map<pair<T1, T2>, Range2> &umap2) const
+{
+ auto res = isl::basic_map::range_product(umap2);
+ return typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T2, T1>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::range_reverse() const
+{
+ auto res = isl::basic_map::range_reverse();
+ return typed::map<pair<T1, T2>, pair<T2, T1>>(res);
+}
+
+template <typename T1, typename T2>
+typed::fixed_box<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::basic_map::range_simple_fixed_box_hull();
+ return typed::fixed_box<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::basic_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::reverse() const
+{
+ auto res = isl::basic_map::reverse();
+ return typed::basic_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::space<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::space() const
+{
+ auto res = isl::basic_map::space();
+ return typed::space<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::subtract(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const
+{
+ auto res = isl::basic_map::subtract(map2);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::subtract(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::basic_map::subtract(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::basic_map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::subtract_range(const typed::union_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::basic_map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::to_union_map() const
+{
+ auto res = isl::basic_map::to_union_map();
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<pair<T1, T2>, T1>, T2> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::uncurry() const
+{
+ auto res = isl::basic_map::uncurry();
+ return typed::map<pair<pair<T1, T2>, T1>, T2>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::unite(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &bmap2) const
+{
+ auto res = isl::basic_map::unite(bmap2);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::unite(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const
+{
+ auto res = isl::basic_map::unite(map2);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::unite(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::basic_map::unite(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::upper_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> &upper) const
+{
+ auto res = isl::basic_map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::set<pair<pair<T1, T2>, pair<T1, T2>>> typed::basic_map<pair<T1, T2>, pair<T1, T2>>::wrap() const
+{
+ auto res = isl::basic_map::wrap();
+ return typed::set<pair<pair<T1, T2>, pair<T1, T2>>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::basic_map(const isl::ctx &ctx, const std::string &str)
+ : isl::basic_map(ctx, str)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::basic_map<Domain2, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &bmap2) const
+{
+ auto res = isl::basic_map::apply_domain(bmap2);
+ return typed::basic_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::apply_domain(const typed::map<pair<T1, T2>, Domain2> &map2) const
+{
+ auto res = isl::basic_map::apply_domain(map2);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const
+{
+ auto res = isl::basic_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::basic_map<pair<T1, T2>, Arg2> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::apply_range(const typed::basic_map<pair<Range, Range2>, Arg2> &bmap2) const
+{
+ auto res = isl::basic_map::apply_range(bmap2);
+ return typed::basic_map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<T1, T2>, Arg2> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::apply_range(const typed::map<pair<Range, Range2>, Arg2> &map2) const
+{
+ auto res = isl::basic_map::apply_range(map2);
+ return typed::map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, Arg2> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::apply_range(const typed::union_map<pair<Range, Range2>, Arg2> &umap2) const
+{
+ auto res = isl::basic_map::apply_range(umap2);
+ return typed::union_map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::as_map() const
+{
+ auto res = isl::basic_map::as_map();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::basic_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::as_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::as_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const
+{
+ auto res = isl::basic_map::bind_domain(tuple);
+ return typed::set<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const
+{
+ auto res = isl::basic_map::bind_range(tuple);
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::basic_map::coalesce();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<T1, pair<T2, pair<Range, Range2>>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::curry() const
+{
+ auto res = isl::basic_map::curry();
+ return typed::map<T1, pair<T2, pair<Range, Range2>>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::detect_equalities() const
+{
+ auto res = isl::basic_map::detect_equalities();
+ return typed::basic_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::basic_map::domain();
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<T1, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::domain_factor_domain() const
+{
+ auto res = isl::basic_map::domain_factor_domain();
+ return typed::map<T1, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<T2, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::domain_factor_range() const
+{
+ auto res = isl::basic_map::domain_factor_range();
+ return typed::map<T2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::domain_map() const
+{
+ auto res = isl::basic_map::domain_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::basic_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::domain_product(const typed::map<Domain2, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::basic_map::domain_product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::basic_map::domain_product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+bool typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<pair<T1, T2>, pair<Range, Range2>>(arg0));
+ };
+ return isl::basic_map::every_map(lambda);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::extract_map(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const
+{
+ auto res = isl::basic_map::extract_map(space);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_map<Anonymous, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::flatten_domain() const
+{
+ auto res = isl::basic_map::flatten_domain();
+ return typed::basic_map<Anonymous, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_map<pair<T1, T2>, Anonymous> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::flatten_range() const
+{
+ auto res = isl::basic_map::flatten_range();
+ return typed::basic_map<pair<T1, T2>, Anonymous>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+void typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::foreach_basic_map(const std::function<void(typed::basic_map<pair<T1, T2>, pair<Range, Range2>>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<pair<T1, T2>, pair<Range, Range2>>(arg0));
+ };
+ return isl::basic_map::foreach_basic_map(lambda);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+void typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<pair<T1, T2>, pair<Range, Range2>>(arg0));
+ };
+ return isl::basic_map::foreach_map(lambda);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::basic_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::map<pair<T1, T2>, pair<Range, Range2>> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &context) const
+{
+ auto res = isl::basic_map::gist(context);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::gist_domain(const typed::set<pair<T1, T2>> &context) const
+{
+ auto res = isl::basic_map::gist_domain(context);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::gist_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::basic_map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &bmap2) const
+{
+ auto res = isl::basic_map::intersect(bmap2);
+ return typed::basic_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::basic_map::intersect(map2);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::basic_map::intersect(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::basic_set<pair<T1, T2>> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::set<pair<T1, T2>> &set) const
+{
+ auto res = isl::basic_map::intersect_domain(set);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::basic_map::intersect_domain(space);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::basic_map::intersect_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::point<pair<T1, T2>> &bset) const
+{
+ auto res = isl::basic_map::intersect_domain(bset);
+ return typed::basic_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::basic_map::intersect_params(params);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::basic_set<pair<Range, Range2>> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::set<pair<Range, Range2>> &set) const
+{
+ auto res = isl::basic_map::intersect_range(set);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::space<pair<Range, Range2>> &space) const
+{
+ auto res = isl::basic_map::intersect_range(space);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const
+{
+ auto res = isl::basic_map::intersect_range(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::point<pair<Range, Range2>> &bset) const
+{
+ auto res = isl::basic_map::intersect_range(bset);
+ return typed::basic_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::lexmax() const
+{
+ auto res = isl::basic_map::lexmax();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::lexmin() const
+{
+ auto res = isl::basic_map::lexmin();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::basic_map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::lower_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::basic_map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map_list<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::map_list() const
+{
+ auto res = isl::basic_map::map_list();
+ return typed::map_list<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::max_multi_pw_aff() const
+{
+ auto res = isl::basic_map::max_multi_pw_aff();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::min_multi_pw_aff() const
+{
+ auto res = isl::basic_map::min_multi_pw_aff();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const
+{
+ auto res = isl::basic_map::preimage_domain(ma);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const
+{
+ auto res = isl::basic_map::preimage_domain(mpa);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const
+{
+ auto res = isl::basic_map::preimage_domain(pma);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const
+{
+ auto res = isl::basic_map::preimage_domain(upma);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<T1, T2>, Arg2> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::preimage_range(const typed::multi_aff<Arg2, pair<Range, Range2>> &ma) const
+{
+ auto res = isl::basic_map::preimage_range(ma);
+ return typed::map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<T1, T2>, Arg2> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::preimage_range(const typed::pw_multi_aff<Arg2, pair<Range, Range2>> &pma) const
+{
+ auto res = isl::basic_map::preimage_range(pma);
+ return typed::map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, Arg2> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::preimage_range(const typed::union_pw_multi_aff<Arg2, pair<Range, Range2>> &upma) const
+{
+ auto res = isl::basic_map::preimage_range(upma);
+ return typed::union_map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::product(const typed::map<Domain2, Arg2> &map2) const
+{
+ auto res = isl::basic_map::product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::product(const typed::union_map<Domain2, Arg2> &umap2) const
+{
+ auto res = isl::basic_map::product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::project_out_all_params() const
+{
+ auto res = isl::basic_map::project_out_all_params();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::range() const
+{
+ auto res = isl::basic_map::range();
+ return typed::set<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, Range> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::basic_map::range_factor_domain();
+ return typed::map<pair<T1, T2>, Range>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, Range2> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::basic_map::range_factor_range();
+ return typed::map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::fixed_box<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::range_lattice_tile() const
+{
+ auto res = isl::basic_map::range_lattice_tile();
+ return typed::fixed_box<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::range_map() const
+{
+ auto res = isl::basic_map::range_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::map<pair<T1, T2>, Arg2> &map2) const
+{
+ auto res = isl::basic_map::range_product(map2);
+ return typed::map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::union_map<pair<T1, T2>, Arg2> &umap2) const
+{
+ auto res = isl::basic_map::range_product(umap2);
+ return typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range2, Range>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::range_reverse() const
+{
+ auto res = isl::basic_map::range_reverse();
+ return typed::map<pair<T1, T2>, pair<Range2, Range>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::fixed_box<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::basic_map::range_simple_fixed_box_hull();
+ return typed::fixed_box<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_map<pair<Range, Range2>, pair<T1, T2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::reverse() const
+{
+ auto res = isl::basic_map::reverse();
+ return typed::basic_map<pair<Range, Range2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::space() const
+{
+ auto res = isl::basic_map::space();
+ return typed::space<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::subtract(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::basic_map::subtract(map2);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::subtract(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::basic_map::subtract(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::basic_map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::basic_map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::to_union_map() const
+{
+ auto res = isl::basic_map::to_union_map();
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<pair<T1, T2>, Range>, Range2> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::uncurry() const
+{
+ auto res = isl::basic_map::uncurry();
+ return typed::map<pair<pair<T1, T2>, Range>, Range2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::unite(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &bmap2) const
+{
+ auto res = isl::basic_map::unite(bmap2);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::unite(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::basic_map::unite(map2);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::unite(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::basic_map::unite(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::upper_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::basic_map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<pair<T1, T2>, pair<Range, Range2>>> typed::basic_map<pair<T1, T2>, pair<Range, Range2>>::wrap() const
+{
+ auto res = isl::basic_map::wrap();
+ return typed::set<pair<pair<T1, T2>, pair<Range, Range2>>>(res);
+}
+
+typed::basic_set<>::basic_set(const typed::point<> &pnt)
+ : isl::basic_set(pnt)
+{
+}
+
+typed::basic_set<>::basic_set(const isl::ctx &ctx, const std::string &str)
+ : isl::basic_set(ctx, str)
+{
+}
+
+typed::set<> typed::basic_set<>::coalesce() const
+{
+ auto res = isl::basic_set::coalesce();
+ return typed::set<>(res);
+}
+
+typed::basic_set<> typed::basic_set<>::detect_equalities() const
+{
+ auto res = isl::basic_set::detect_equalities();
+ return typed::basic_set<>(res);
+}
+
+bool typed::basic_set<>::every_set(const std::function<bool(typed::set<>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<>(arg0));
+ };
+ return isl::basic_set::every_set(lambda);
+}
+
+typed::set<> typed::basic_set<>::extract_set(const typed::space<> &space) const
+{
+ auto res = isl::basic_set::extract_set(space);
+ return typed::set<>(res);
+}
+
+void typed::basic_set<>::foreach_basic_set(const std::function<void(typed::basic_set<>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_set arg0) {
+ return fn(typed::basic_set<>(arg0));
+ };
+ return isl::basic_set::foreach_basic_set(lambda);
+}
+
+void typed::basic_set<>::foreach_point(const std::function<void(typed::point<>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<>(arg0));
+ };
+ return isl::basic_set::foreach_point(lambda);
+}
+
+void typed::basic_set<>::foreach_set(const std::function<void(typed::set<>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<>(arg0));
+ };
+ return isl::basic_set::foreach_set(lambda);
+}
+
+typed::basic_set<> typed::basic_set<>::gist(const typed::basic_set<> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::basic_set<>(res);
+}
+
+typed::set<> typed::basic_set<>::gist(const typed::set<> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::basic_set<>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::union_set<>(res);
+}
+
+typed::basic_set<> typed::basic_set<>::gist(const typed::point<> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::basic_set<>(res);
+}
+
+typed::pw_aff<Anonymous> typed::basic_set<>::indicator_function() const
+{
+ auto res = isl::basic_set::indicator_function();
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::basic_set<> typed::basic_set<>::intersect(const typed::basic_set<> &bset2) const
+{
+ auto res = isl::basic_set::intersect(bset2);
+ return typed::basic_set<>(res);
+}
+
+typed::set<> typed::basic_set<>::intersect(const typed::set<> &set2) const
+{
+ auto res = isl::basic_set::intersect(set2);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::basic_set<>::intersect(const typed::union_set<> &uset2) const
+{
+ auto res = isl::basic_set::intersect(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::basic_set<> typed::basic_set<>::intersect(const typed::point<> &bset2) const
+{
+ auto res = isl::basic_set::intersect(bset2);
+ return typed::basic_set<>(res);
+}
+
+typed::set<> typed::basic_set<>::project_out_all_params() const
+{
+ auto res = isl::basic_set::project_out_all_params();
+ return typed::set<>(res);
+}
+
+typed::set<> typed::basic_set<>::project_out_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::basic_set::project_out_param(id);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::basic_set<>::project_out_param(const std::string &id) const
+{
+ auto res = isl::basic_set::project_out_param(id);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::basic_set<>::project_out_param(const typed::id_list<Anonymous> &list) const
+{
+ auto res = isl::basic_set::project_out_param(list);
+ return typed::set<>(res);
+}
+
+typed::space<> typed::basic_set<>::space() const
+{
+ auto res = isl::basic_set::space();
+ return typed::space<>(res);
+}
+
+typed::set<> typed::basic_set<>::subtract(const typed::set<> &set2) const
+{
+ auto res = isl::basic_set::subtract(set2);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::basic_set<>::subtract(const typed::union_set<> &uset2) const
+{
+ auto res = isl::basic_set::subtract(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::set<> typed::basic_set<>::to_set() const
+{
+ auto res = isl::basic_set::to_set();
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::basic_set<>::to_union_set() const
+{
+ auto res = isl::basic_set::to_union_set();
+ return typed::union_set<>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<>::unbind_params(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::basic_set::unbind_params(tuple);
+ return typed::set<Domain>(res);
+}
+
+typed::set<> typed::basic_set<>::unite(const typed::basic_set<> &bset2) const
+{
+ auto res = isl::basic_set::unite(bset2);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::basic_set<>::unite(const typed::set<> &set2) const
+{
+ auto res = isl::basic_set::unite(set2);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::basic_set<>::unite(const typed::union_set<> &uset2) const
+{
+ auto res = isl::basic_set::unite(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::set<> typed::basic_set<>::unite(const typed::point<> &bset2) const
+{
+ auto res = isl::basic_set::unite(bset2);
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain>::basic_set(const typed::point<Domain> &pnt)
+ : isl::basic_set(pnt)
+{
+}
+
+template <typename Domain>
+typed::basic_set<Domain>::basic_set(const isl::ctx &ctx, const std::string &str)
+ : isl::basic_set(ctx, str)
+{
+}
+
+template <typename Domain>
+template <typename Range>
+typed::basic_set<Range> typed::basic_set<Domain>::apply(const typed::basic_map<Domain, Range> &bmap) const
+{
+ auto res = isl::basic_set::apply(bmap);
+ return typed::basic_set<Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::set<Range> typed::basic_set<Domain>::apply(const typed::map<Domain, Range> &map) const
+{
+ auto res = isl::basic_set::apply(map);
+ return typed::set<Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_set<Range> typed::basic_set<Domain>::apply(const typed::union_map<Domain, Range> &umap) const
+{
+ auto res = isl::basic_set::apply(umap);
+ return typed::union_set<Range>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::basic_set<Domain>::as_pw_multi_aff() const
+{
+ auto res = isl::basic_set::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::as_set() const
+{
+ auto res = isl::basic_set::as_set();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<> typed::basic_set<Domain>::bind(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::basic_set::bind(tuple);
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::coalesce() const
+{
+ auto res = isl::basic_set::coalesce();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::basic_set<Domain>::detect_equalities() const
+{
+ auto res = isl::basic_set::detect_equalities();
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+bool typed::basic_set<Domain>::every_set(const std::function<bool(typed::set<Domain>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<Domain>(arg0));
+ };
+ return isl::basic_set::every_set(lambda);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::extract_set(const typed::space<Domain> &space) const
+{
+ auto res = isl::basic_set::extract_set(space);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+void typed::basic_set<Domain>::foreach_basic_set(const std::function<void(typed::basic_set<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_set arg0) {
+ return fn(typed::basic_set<Domain>(arg0));
+ };
+ return isl::basic_set::foreach_basic_set(lambda);
+}
+
+template <typename Domain>
+void typed::basic_set<Domain>::foreach_point(const std::function<void(typed::point<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<Domain>(arg0));
+ };
+ return isl::basic_set::foreach_point(lambda);
+}
+
+template <typename Domain>
+void typed::basic_set<Domain>::foreach_set(const std::function<void(typed::set<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<Domain>(arg0));
+ };
+ return isl::basic_set::foreach_set(lambda);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::basic_set<Domain>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::basic_set<Domain>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::basic_set<Domain>::gist(const typed::point<Domain> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_set<Domain>::identity() const
+{
+ auto res = isl::basic_set::identity();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::basic_set<Domain>::indicator_function() const
+{
+ auto res = isl::basic_set::indicator_function();
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::map<Arg1, Domain> typed::basic_set<Domain>::insert_domain(const typed::space<Arg1> &domain) const
+{
+ auto res = isl::basic_set::insert_domain(domain);
+ return typed::map<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::basic_set<Domain>::intersect(const typed::basic_set<Domain> &bset2) const
+{
+ auto res = isl::basic_set::intersect(bset2);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::intersect(const typed::set<Domain> &set2) const
+{
+ auto res = isl::basic_set::intersect(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::basic_set<Domain>::intersect(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::basic_set::intersect(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::basic_set<Domain>::intersect(const typed::point<Domain> &bset2) const
+{
+ auto res = isl::basic_set::intersect(bset2);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::basic_set<Domain>::intersect_params(const typed::basic_set<> &bset2) const
+{
+ auto res = isl::basic_set::intersect_params(bset2);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::basic_set::intersect_params(params);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::basic_set<Domain>::intersect_params(const typed::point<> &bset2) const
+{
+ auto res = isl::basic_set::intersect_params(bset2);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::lexmax() const
+{
+ auto res = isl::basic_set::lexmax();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::basic_set<Domain>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::basic_set::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::lexmin() const
+{
+ auto res = isl::basic_set::lexmin();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::basic_set<Domain>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::basic_set::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::lower_bound(const typed::multi_pw_aff<Domain> &lower) const
+{
+ auto res = isl::basic_set::lower_bound(lower);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::lower_bound(const typed::multi_val<Domain> &lower) const
+{
+ auto res = isl::basic_set::lower_bound(lower);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::basic_set<Domain>::max_multi_pw_aff() const
+{
+ auto res = isl::basic_set::max_multi_pw_aff();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::basic_set<Domain>::min_multi_pw_aff() const
+{
+ auto res = isl::basic_set::min_multi_pw_aff();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<> typed::basic_set<Domain>::params() const
+{
+ auto res = isl::basic_set::params();
+ return typed::basic_set<>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::basic_set<Domain>::plain_multi_val_if_fixed() const
+{
+ auto res = isl::basic_set::plain_multi_val_if_fixed();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::set<Domain2> typed::basic_set<Domain>::preimage(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::basic_set::preimage(ma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::set<Domain2> typed::basic_set<Domain>::preimage(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::basic_set::preimage(mpa);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::set<Domain2> typed::basic_set<Domain>::preimage(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::basic_set::preimage(pma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_set<Domain2> typed::basic_set<Domain>::preimage(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::basic_set::preimage(upma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<Domain>::product(const typed::set<Range> &set2) const
+{
+ auto res = isl::basic_set::product(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::project_out_all_params() const
+{
+ auto res = isl::basic_set::project_out_all_params();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::project_out_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::basic_set::project_out_param(id);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::project_out_param(const std::string &id) const
+{
+ auto res = isl::basic_set::project_out_param(id);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::project_out_param(const typed::id_list<Anonymous> &list) const
+{
+ auto res = isl::basic_set::project_out_param(list);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::pw_multi_aff<Domain, Range> typed::basic_set<Domain>::pw_multi_aff_on_domain(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::basic_set::pw_multi_aff_on_domain(mv);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain>
+typed::fixed_box<Domain> typed::basic_set<Domain>::simple_fixed_box_hull() const
+{
+ auto res = isl::basic_set::simple_fixed_box_hull();
+ return typed::fixed_box<Domain>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::basic_set<Domain>::space() const
+{
+ auto res = isl::basic_set::space();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::subtract(const typed::set<Domain> &set2) const
+{
+ auto res = isl::basic_set::subtract(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::basic_set<Domain>::subtract(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::basic_set::subtract(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::to_set() const
+{
+ auto res = isl::basic_set::to_set();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::basic_set<Domain>::to_union_set() const
+{
+ auto res = isl::basic_set::to_union_set();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::basic_set<Domain>::translation() const
+{
+ auto res = isl::basic_set::translation();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::map<Arg1, Domain> typed::basic_set<Domain>::unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const
+{
+ auto res = isl::basic_set::unbind_params_insert_domain(domain);
+ return typed::map<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::unite(const typed::basic_set<Domain> &bset2) const
+{
+ auto res = isl::basic_set::unite(bset2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::unite(const typed::set<Domain> &set2) const
+{
+ auto res = isl::basic_set::unite(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::basic_set<Domain>::unite(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::basic_set::unite(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::unite(const typed::point<Domain> &bset2) const
+{
+ auto res = isl::basic_set::unite(bset2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::upper_bound(const typed::multi_pw_aff<Domain> &upper) const
+{
+ auto res = isl::basic_set::upper_bound(upper);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::basic_set<Domain>::upper_bound(const typed::multi_val<Domain> &upper) const
+{
+ auto res = isl::basic_set::upper_bound(upper);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>>::basic_set(const typed::point<pair<Domain, Range>> &pnt)
+ : isl::basic_set(pnt)
+{
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>>::basic_set(const isl::ctx &ctx, const std::string &str)
+ : isl::basic_set(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::basic_set<Arg2> typed::basic_set<pair<Domain, Range>>::apply(const typed::basic_map<pair<Domain, Range>, Arg2> &bmap) const
+{
+ auto res = isl::basic_set::apply(bmap);
+ return typed::basic_set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::set<Arg2> typed::basic_set<pair<Domain, Range>>::apply(const typed::map<pair<Domain, Range>, Arg2> &map) const
+{
+ auto res = isl::basic_set::apply(map);
+ return typed::set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::union_set<Arg2> typed::basic_set<pair<Domain, Range>>::apply(const typed::union_map<pair<Domain, Range>, Arg2> &umap) const
+{
+ auto res = isl::basic_set::apply(umap);
+ return typed::union_set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::as_pw_multi_aff() const
+{
+ auto res = isl::basic_set::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::as_set() const
+{
+ auto res = isl::basic_set::as_set();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<> typed::basic_set<pair<Domain, Range>>::bind(const typed::multi_id<pair<Domain, Range>> &tuple) const
+{
+ auto res = isl::basic_set::bind(tuple);
+ return typed::set<>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::coalesce() const
+{
+ auto res = isl::basic_set::coalesce();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::detect_equalities() const
+{
+ auto res = isl::basic_set::detect_equalities();
+ return typed::basic_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+bool typed::basic_set<pair<Domain, Range>>::every_set(const std::function<bool(typed::set<pair<Domain, Range>>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<pair<Domain, Range>>(arg0));
+ };
+ return isl::basic_set::every_set(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::extract_set(const typed::space<pair<Domain, Range>> &space) const
+{
+ auto res = isl::basic_set::extract_set(space);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+void typed::basic_set<pair<Domain, Range>>::foreach_basic_set(const std::function<void(typed::basic_set<pair<Domain, Range>>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_set arg0) {
+ return fn(typed::basic_set<pair<Domain, Range>>(arg0));
+ };
+ return isl::basic_set::foreach_basic_set(lambda);
+}
+
+template <typename Domain, typename Range>
+void typed::basic_set<pair<Domain, Range>>::foreach_point(const std::function<void(typed::point<pair<Domain, Range>>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<pair<Domain, Range>>(arg0));
+ };
+ return isl::basic_set::foreach_point(lambda);
+}
+
+template <typename Domain, typename Range>
+void typed::basic_set<pair<Domain, Range>>::foreach_set(const std::function<void(typed::set<pair<Domain, Range>>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<pair<Domain, Range>>(arg0));
+ };
+ return isl::basic_set::foreach_set(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::gist(const typed::basic_set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::basic_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::gist(const typed::set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::gist(const typed::union_set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::gist(const typed::point<pair<Domain, Range>> &context) const
+{
+ auto res = isl::basic_set::gist(context);
+ return typed::basic_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<pair<Domain, Range>, pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::identity() const
+{
+ auto res = isl::basic_set::identity();
+ return typed::map<pair<Domain, Range>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_aff<pair<Domain, Range>, Anonymous> typed::basic_set<pair<Domain, Range>>::indicator_function() const
+{
+ auto res = isl::basic_set::indicator_function();
+ return typed::pw_aff<pair<Domain, Range>, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::map<Arg2, pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::insert_domain(const typed::space<Arg2> &domain) const
+{
+ auto res = isl::basic_set::insert_domain(domain);
+ return typed::map<Arg2, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::intersect(const typed::basic_set<pair<Domain, Range>> &bset2) const
+{
+ auto res = isl::basic_set::intersect(bset2);
+ return typed::basic_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::intersect(const typed::set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::basic_set::intersect(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::intersect(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::basic_set::intersect(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::intersect(const typed::point<pair<Domain, Range>> &bset2) const
+{
+ auto res = isl::basic_set::intersect(bset2);
+ return typed::basic_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::intersect_params(const typed::basic_set<> &bset2) const
+{
+ auto res = isl::basic_set::intersect_params(bset2);
+ return typed::basic_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::basic_set::intersect_params(params);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::intersect_params(const typed::point<> &bset2) const
+{
+ auto res = isl::basic_set::intersect_params(bset2);
+ return typed::basic_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::lexmax() const
+{
+ auto res = isl::basic_set::lexmax();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::basic_set::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::lexmin() const
+{
+ auto res = isl::basic_set::lexmin();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::basic_set::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::lower_bound(const typed::multi_pw_aff<pair<Domain, Range>> &lower) const
+{
+ auto res = isl::basic_set::lower_bound(lower);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::lower_bound(const typed::multi_val<pair<Domain, Range>> &lower) const
+{
+ auto res = isl::basic_set::lower_bound(lower);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::max_multi_pw_aff() const
+{
+ auto res = isl::basic_set::max_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::min_multi_pw_aff() const
+{
+ auto res = isl::basic_set::min_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<> typed::basic_set<pair<Domain, Range>>::params() const
+{
+ auto res = isl::basic_set::params();
+ return typed::basic_set<>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::plain_multi_val_if_fixed() const
+{
+ auto res = isl::basic_set::plain_multi_val_if_fixed();
+ return typed::multi_val<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::set<Domain2> typed::basic_set<pair<Domain, Range>>::preimage(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const
+{
+ auto res = isl::basic_set::preimage(ma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::set<Domain2> typed::basic_set<pair<Domain, Range>>::preimage(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const
+{
+ auto res = isl::basic_set::preimage(mpa);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::set<Domain2> typed::basic_set<pair<Domain, Range>>::preimage(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const
+{
+ auto res = isl::basic_set::preimage(pma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_set<Domain2> typed::basic_set<pair<Domain, Range>>::preimage(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const
+{
+ auto res = isl::basic_set::preimage(upma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::set<pair<pair<Domain, Range>, Arg2>> typed::basic_set<pair<Domain, Range>>::product(const typed::set<Arg2> &set2) const
+{
+ auto res = isl::basic_set::product(set2);
+ return typed::set<pair<pair<Domain, Range>, Arg2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::project_out_all_params() const
+{
+ auto res = isl::basic_set::project_out_all_params();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::project_out_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::basic_set::project_out_param(id);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::project_out_param(const std::string &id) const
+{
+ auto res = isl::basic_set::project_out_param(id);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::project_out_param(const typed::id_list<Anonymous> &list) const
+{
+ auto res = isl::basic_set::project_out_param(list);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::pw_multi_aff<pair<Domain, Range>, Arg2> typed::basic_set<pair<Domain, Range>>::pw_multi_aff_on_domain(const typed::multi_val<Arg2> &mv) const
+{
+ auto res = isl::basic_set::pw_multi_aff_on_domain(mv);
+ return typed::pw_multi_aff<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::fixed_box<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::simple_fixed_box_hull() const
+{
+ auto res = isl::basic_set::simple_fixed_box_hull();
+ return typed::fixed_box<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::space() const
+{
+ auto res = isl::basic_set::space();
+ return typed::space<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::subtract(const typed::set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::basic_set::subtract(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::subtract(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::basic_set::subtract(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::to_set() const
+{
+ auto res = isl::basic_set::to_set();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::to_union_set() const
+{
+ auto res = isl::basic_set::to_union_set();
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<pair<Domain, Range>, pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::translation() const
+{
+ auto res = isl::basic_set::translation();
+ return typed::map<pair<Domain, Range>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::map<Arg2, pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::unbind_params_insert_domain(const typed::multi_id<Arg2> &domain) const
+{
+ auto res = isl::basic_set::unbind_params_insert_domain(domain);
+ return typed::map<Arg2, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::unite(const typed::basic_set<pair<Domain, Range>> &bset2) const
+{
+ auto res = isl::basic_set::unite(bset2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::unite(const typed::set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::basic_set::unite(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::unite(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::basic_set::unite(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::unite(const typed::point<pair<Domain, Range>> &bset2) const
+{
+ auto res = isl::basic_set::unite(bset2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::basic_set<pair<Domain, Range>>::unwrap() const
+{
+ auto res = isl::basic_set::unwrap();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::upper_bound(const typed::multi_pw_aff<pair<Domain, Range>> &upper) const
+{
+ auto res = isl::basic_set::upper_bound(upper);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::basic_set<pair<Domain, Range>>::upper_bound(const typed::multi_val<pair<Domain, Range>> &upper) const
+{
+ auto res = isl::basic_set::upper_bound(upper);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::fixed_box<Domain>::offset() const
+{
+ auto res = isl::fixed_box::offset();
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::fixed_box<Domain>::size() const
+{
+ auto res = isl::fixed_box::size();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::fixed_box<Domain>::space() const
+{
+ auto res = isl::fixed_box::space();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::fixed_box<Domain, Range>::offset() const
+{
+ auto res = isl::fixed_box::offset();
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<Range> typed::fixed_box<Domain, Range>::size() const
+{
+ auto res = isl::fixed_box::size();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Domain, Range> typed::fixed_box<Domain, Range>::space() const
+{
+ auto res = isl::fixed_box::space();
+ return typed::space<Domain, Range>(res);
+}
+
+typed::id<Anonymous>::id(const isl::ctx &ctx, const std::string &str)
+ : isl::id(ctx, str)
+{
+}
+
+typed::id_list<Anonymous>::id_list(const isl::ctx &ctx, int n)
+ : isl::id_list(ctx, n)
+{
+}
+
+typed::id_list<Anonymous>::id_list(const typed::id<Anonymous> &el)
+ : isl::id_list(el)
+{
+}
+
+typed::id_list<Anonymous>::id_list(const isl::ctx &ctx, const std::string &str)
+ : isl::id_list(ctx, str)
+{
+}
+
+typed::id_list<Anonymous> typed::id_list<Anonymous>::add(const typed::id<Anonymous> &el) const
+{
+ auto res = isl::id_list::add(el);
+ return typed::id_list<Anonymous>(res);
+}
+
+typed::id_list<Anonymous> typed::id_list<Anonymous>::add(const std::string &el) const
+{
+ auto res = isl::id_list::add(el);
+ return typed::id_list<Anonymous>(res);
+}
+
+typed::id<Anonymous> typed::id_list<Anonymous>::at(int index) const
+{
+ auto res = isl::id_list::at(index);
+ return typed::id<Anonymous>(res);
+}
+
+typed::id_list<Anonymous> typed::id_list<Anonymous>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::id_list::drop(first, n);
+ return typed::id_list<Anonymous>(res);
+}
+
+void typed::id_list<Anonymous>::foreach(const std::function<void(typed::id<Anonymous>)> &fn) const
+{
+ auto lambda = [&] (isl::id arg0) {
+ return fn(typed::id<Anonymous>(arg0));
+ };
+ return isl::id_list::foreach(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range>::map(const typed::basic_map<Domain, Range> &bmap)
+ : isl::map(bmap)
+{
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range>::map(const isl::ctx &ctx, const std::string &str)
+ : isl::map(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::map<Domain, Range>::apply_domain(const typed::map<Domain, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<Domain2, Range> typed::map<Domain, Range>::apply_domain(const typed::union_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::map::apply_domain(umap2);
+ return typed::union_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::map<Domain, Range>::apply_domain(const typed::basic_map<Domain, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Range>::apply_range(const typed::map<Range, Range2> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::map<Domain, Range>::apply_range(const typed::union_map<Range, Range2> &umap2) const
+{
+ auto res = isl::map::apply_range(umap2);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Range>::apply_range(const typed::basic_map<Range, Range2> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::as_map() const
+{
+ auto res = isl::map::as_map();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::map<Domain, Range>::as_multi_union_pw_aff() const
+{
+ auto res = isl::map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::map<Domain, Range>::as_pw_multi_aff() const
+{
+ auto res = isl::map::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::map<Domain, Range>::as_union_pw_multi_aff() const
+{
+ auto res = isl::map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Range> typed::map<Domain, Range>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::map::bind_domain(tuple);
+ return typed::set<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Domain> typed::map<Domain, Range>::bind_range(const typed::multi_id<Range> &tuple) const
+{
+ auto res = isl::map::bind_range(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::coalesce() const
+{
+ auto res = isl::map::coalesce();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::detect_equalities() const
+{
+ auto res = isl::map::detect_equalities();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Domain> typed::map<Domain, Range>::domain() const
+{
+ auto res = isl::map::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<pair<Domain, Range>, Domain> typed::map<Domain, Range>::domain_map() const
+{
+ auto res = isl::map::domain_map();
+ return typed::union_map<pair<Domain, Range>, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Range>, Domain> typed::map<Domain, Range>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, Range>, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<pair<Domain, Domain2>, Range> typed::map<Domain, Range>::domain_product(const typed::map<Domain2, Range> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, Range> typed::map<Domain, Range>::domain_product(const typed::union_map<Domain2, Range> &umap2) const
+{
+ auto res = isl::map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<pair<Domain, Domain2>, Range> typed::map<Domain, Range>::domain_product(const typed::basic_map<Domain2, Range> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+bool typed::map<Domain, Range>::every_map(const std::function<bool(typed::map<Domain, Range>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<Domain, Range>(arg0));
+ };
+ return isl::map::every_map(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::extract_map(const typed::space<Domain, Range> &space) const
+{
+ auto res = isl::map::extract_map(space);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+void typed::map<Domain, Range>::foreach_basic_map(const std::function<void(typed::basic_map<Domain, Range>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<Domain, Range>(arg0));
+ };
+ return isl::map::foreach_basic_map(lambda);
+}
+
+template <typename Domain, typename Range>
+void typed::map<Domain, Range>::foreach_map(const std::function<void(typed::map<Domain, Range>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<Domain, Range>(arg0));
+ };
+ return isl::map::foreach_map(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::gist(const typed::map<Domain, Range> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::gist(const typed::union_map<Domain, Range> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::gist(const typed::basic_map<Domain, Range> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::gist_domain(const typed::set<Domain> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::gist_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::map::gist_domain(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::gist_domain(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::gist_domain(const typed::point<Domain> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::intersect(const typed::map<Domain, Range> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::intersect(const typed::union_map<Domain, Range> &umap2) const
+{
+ auto res = isl::map::intersect(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::intersect(const typed::basic_map<Domain, Range> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::map::intersect_domain(space);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::map::intersect_domain(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::intersect_domain(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::intersect_domain(const typed::point<Domain> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::intersect_params(const typed::basic_set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::intersect_params(const typed::point<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::intersect_range(const typed::set<Range> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::intersect_range(const typed::space<Range> &space) const
+{
+ auto res = isl::map::intersect_range(space);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::intersect_range(const typed::union_set<Range> &uset) const
+{
+ auto res = isl::map::intersect_range(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::intersect_range(const typed::basic_set<Range> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::intersect_range(const typed::point<Range> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::lexmax() const
+{
+ auto res = isl::map::lexmax();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::map<Domain, Range>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::lexmin() const
+{
+ auto res = isl::map::lexmin();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::map<Domain, Range>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::lower_bound(const typed::multi_pw_aff<Domain, Range> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::lower_bound(const typed::aff<Domain, Range> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::lower_bound(const typed::multi_aff<Domain, Range> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::lower_bound(const typed::pw_aff<Domain, Range> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::lower_bound(const typed::pw_multi_aff<Domain, Range> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map_list<Domain, Range> typed::map<Domain, Range>::map_list() const
+{
+ auto res = isl::map::map_list();
+ return typed::map_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::map<Domain, Range>::max_multi_pw_aff() const
+{
+ auto res = isl::map::max_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::map<Domain, Range>::min_multi_pw_aff() const
+{
+ auto res = isl::map::min_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::map<Domain, Range>::preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::map::preimage_domain(ma);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::map<Domain, Range>::preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::map::preimage_domain(mpa);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::map<Domain, Range>::preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::map::preimage_domain(pma);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<Domain2, Range> typed::map<Domain, Range>::preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::map::preimage_domain(upma);
+ return typed::union_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Range>::preimage_range(const typed::multi_aff<Range2, Range> &ma) const
+{
+ auto res = isl::map::preimage_range(ma);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Range>::preimage_range(const typed::pw_multi_aff<Range2, Range> &pma) const
+{
+ auto res = isl::map::preimage_range(pma);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::map<Domain, Range>::preimage_range(const typed::union_pw_multi_aff<Range2, Range> &upma) const
+{
+ auto res = isl::map::preimage_range(upma);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::map<pair<Domain, Domain2>, pair<Range, Range2>> typed::map<Domain, Range>::product(const typed::map<Domain2, Range2> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> typed::map<Domain, Range>::product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::map<pair<Domain, Domain2>, pair<Range, Range2>> typed::map<Domain, Range>::product(const typed::basic_map<Domain2, Range2> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::project_out_all_params() const
+{
+ auto res = isl::map::project_out_all_params();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Range> typed::map<Domain, Range>::range() const
+{
+ auto res = isl::map::range();
+ return typed::set<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::fixed_box<Domain, Range> typed::map<Domain, Range>::range_lattice_tile() const
+{
+ auto res = isl::map::range_lattice_tile();
+ return typed::fixed_box<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<pair<Domain, Range>, Range> typed::map<Domain, Range>::range_map() const
+{
+ auto res = isl::map::range_map();
+ return typed::union_map<pair<Domain, Range>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, Range>::range_product(const typed::map<Domain, Range2> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, Range>::range_product(const typed::union_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::map::range_product(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, Range>::range_product(const typed::basic_map<Domain, Range2> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::fixed_box<Domain, Range> typed::map<Domain, Range>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::map::range_simple_fixed_box_hull();
+ return typed::fixed_box<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Range, Domain> typed::map<Domain, Range>::reverse() const
+{
+ auto res = isl::map::reverse();
+ return typed::map<Range, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::map<Domain, Range>::set_domain_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::map::set_domain_tuple(id);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::map<Domain2, Range> typed::map<Domain, Range>::set_domain_tuple(const std::string &id) const
+{
+ auto res = isl::map::set_domain_tuple(id);
+ return typed::map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Range>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::map::set_range_tuple(id);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Range>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::map::set_range_tuple(id);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Domain, Range> typed::map<Domain, Range>::space() const
+{
+ auto res = isl::map::space();
+ return typed::space<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::subtract(const typed::map<Domain, Range> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::subtract(const typed::union_map<Domain, Range> &umap2) const
+{
+ auto res = isl::map::subtract(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::subtract(const typed::basic_map<Domain, Range> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::subtract_domain(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::map::subtract_domain(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::subtract_range(const typed::union_set<Range> &dom) const
+{
+ auto res = isl::map::subtract_range(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::to_union_map() const
+{
+ auto res = isl::map::to_union_map();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::unite(const typed::map<Domain, Range> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::map<Domain, Range>::unite(const typed::union_map<Domain, Range> &umap2) const
+{
+ auto res = isl::map::unite(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::unite(const typed::basic_map<Domain, Range> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::universe(const typed::space<Domain, Range> &space)
+{
+ auto res = isl::map::universe(space);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::upper_bound(const typed::multi_pw_aff<Domain, Range> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::upper_bound(const typed::aff<Domain, Range> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::upper_bound(const typed::multi_aff<Domain, Range> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::upper_bound(const typed::pw_aff<Domain, Range> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map<Domain, Range>::upper_bound(const typed::pw_multi_aff<Domain, Range> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::map<Domain, Range>::wrap() const
+{
+ auto res = isl::map::wrap();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2>::map(const typed::basic_map<pair<Domain, Range>, Range2> &bmap)
+ : isl::map(bmap)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2>::map(const isl::ctx &ctx, const std::string &str)
+ : isl::map(ctx, str)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, Range2> typed::map<pair<Domain, Range>, Range2>::apply_domain(const typed::map<pair<Domain, Range>, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, Range2> typed::map<pair<Domain, Range>, Range2>::apply_domain(const typed::union_map<pair<Domain, Range>, Domain2> &umap2) const
+{
+ auto res = isl::map::apply_domain(umap2);
+ return typed::union_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, Range2> typed::map<pair<Domain, Range>, Range2>::apply_domain(const typed::basic_map<pair<Domain, Range>, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<pair<Domain, Range>, Arg3> typed::map<pair<Domain, Range>, Range2>::apply_range(const typed::map<Range2, Arg3> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, Arg3> typed::map<pair<Domain, Range>, Range2>::apply_range(const typed::union_map<Range2, Arg3> &umap2) const
+{
+ auto res = isl::map::apply_range(umap2);
+ return typed::union_map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<pair<Domain, Range>, Arg3> typed::map<pair<Domain, Range>, Range2>::apply_range(const typed::basic_map<Range2, Arg3> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::as_map() const
+{
+ auto res = isl::map::as_map();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::as_multi_union_pw_aff() const
+{
+ auto res = isl::map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::as_pw_multi_aff() const
+{
+ auto res = isl::map::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::as_union_pw_multi_aff() const
+{
+ auto res = isl::map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<Range2> typed::map<pair<Domain, Range>, Range2>::bind_domain(const typed::multi_id<pair<Domain, Range>> &tuple) const
+{
+ auto res = isl::map::bind_domain(tuple);
+ return typed::set<Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<Domain, Range>> typed::map<pair<Domain, Range>, Range2>::bind_range(const typed::multi_id<Range2> &tuple) const
+{
+ auto res = isl::map::bind_range(tuple);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::coalesce() const
+{
+ auto res = isl::map::coalesce();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<pair<Domain, Range>, Range2>::curry() const
+{
+ auto res = isl::map::curry();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::detect_equalities() const
+{
+ auto res = isl::map::detect_equalities();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<Domain, Range>> typed::map<pair<Domain, Range>, Range2>::domain() const
+{
+ auto res = isl::map::domain();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, Range2> typed::map<pair<Domain, Range>, Range2>::domain_factor_domain() const
+{
+ auto res = isl::map::domain_factor_domain();
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Range, Range2> typed::map<pair<Domain, Range>, Range2>::domain_factor_range() const
+{
+ auto res = isl::map::domain_factor_range();
+ return typed::map<Range, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> typed::map<pair<Domain, Range>, Range2>::domain_map() const
+{
+ auto res = isl::map::domain_map();
+ return typed::union_map<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> typed::map<pair<Domain, Range>, Range2>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<pair<pair<Domain, Range>, Domain2>, Range2> typed::map<pair<Domain, Range>, Range2>::domain_product(const typed::map<Domain2, Range2> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<pair<Domain, Range>, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2> typed::map<pair<Domain, Range>, Range2>::domain_product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::map::domain_product(umap2);
+ return typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<pair<pair<Domain, Range>, Domain2>, Range2> typed::map<pair<Domain, Range>, Range2>::domain_product(const typed::basic_map<Domain2, Range2> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<pair<Domain, Range>, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+bool typed::map<pair<Domain, Range>, Range2>::every_map(const std::function<bool(typed::map<pair<Domain, Range>, Range2>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<pair<Domain, Range>, Range2>(arg0));
+ };
+ return isl::map::every_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::extract_map(const typed::space<pair<Domain, Range>, Range2> &space) const
+{
+ auto res = isl::map::extract_map(space);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Anonymous, Range2> typed::map<pair<Domain, Range>, Range2>::flatten_domain() const
+{
+ auto res = isl::map::flatten_domain();
+ return typed::map<Anonymous, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+void typed::map<pair<Domain, Range>, Range2>::foreach_basic_map(const std::function<void(typed::basic_map<pair<Domain, Range>, Range2>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<pair<Domain, Range>, Range2>(arg0));
+ };
+ return isl::map::foreach_basic_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+void typed::map<pair<Domain, Range>, Range2>::foreach_map(const std::function<void(typed::map<pair<Domain, Range>, Range2>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<pair<Domain, Range>, Range2>(arg0));
+ };
+ return isl::map::foreach_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::gist(const typed::map<pair<Domain, Range>, Range2> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::gist(const typed::union_map<pair<Domain, Range>, Range2> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::gist(const typed::basic_map<pair<Domain, Range>, Range2> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::gist_domain(const typed::set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::gist_domain(const typed::union_set<pair<Domain, Range>> &uset) const
+{
+ auto res = isl::map::gist_domain(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::gist_domain(const typed::basic_set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::gist_domain(const typed::point<pair<Domain, Range>> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect(const typed::map<pair<Domain, Range>, Range2> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::map::intersect(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect(const typed::basic_map<pair<Domain, Range>, Range2> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_domain(const typed::set<pair<Domain, Range>> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_domain(const typed::space<pair<Domain, Range>> &space) const
+{
+ auto res = isl::map::intersect_domain(space);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_domain(const typed::union_set<pair<Domain, Range>> &uset) const
+{
+ auto res = isl::map::intersect_domain(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_domain(const typed::basic_set<pair<Domain, Range>> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_domain(const typed::point<pair<Domain, Range>> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_params(const typed::basic_set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_params(const typed::point<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_range(const typed::set<Range2> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_range(const typed::space<Range2> &space) const
+{
+ auto res = isl::map::intersect_range(space);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_range(const typed::union_set<Range2> &uset) const
+{
+ auto res = isl::map::intersect_range(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_range(const typed::basic_set<Range2> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::intersect_range(const typed::point<Range2> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::lexmax() const
+{
+ auto res = isl::map::lexmax();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::lexmin() const
+{
+ auto res = isl::map::lexmin();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::lower_bound(const typed::multi_pw_aff<pair<Domain, Range>, Range2> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::lower_bound(const typed::aff<pair<Domain, Range>, Range2> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::lower_bound(const typed::multi_aff<pair<Domain, Range>, Range2> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::lower_bound(const typed::pw_aff<pair<Domain, Range>, Range2> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::lower_bound(const typed::pw_multi_aff<pair<Domain, Range>, Range2> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map_list<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::map_list() const
+{
+ auto res = isl::map::map_list();
+ return typed::map_list<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::max_multi_pw_aff() const
+{
+ auto res = isl::map::max_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::min_multi_pw_aff() const
+{
+ auto res = isl::map::min_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, Range2> typed::map<pair<Domain, Range>, Range2>::preimage_domain(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const
+{
+ auto res = isl::map::preimage_domain(ma);
+ return typed::map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, Range2> typed::map<pair<Domain, Range>, Range2>::preimage_domain(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const
+{
+ auto res = isl::map::preimage_domain(mpa);
+ return typed::map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, Range2> typed::map<pair<Domain, Range>, Range2>::preimage_domain(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const
+{
+ auto res = isl::map::preimage_domain(pma);
+ return typed::map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, Range2> typed::map<pair<Domain, Range>, Range2>::preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const
+{
+ auto res = isl::map::preimage_domain(upma);
+ return typed::union_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<pair<Domain, Range>, Arg3> typed::map<pair<Domain, Range>, Range2>::preimage_range(const typed::multi_aff<Arg3, Range2> &ma) const
+{
+ auto res = isl::map::preimage_range(ma);
+ return typed::map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<pair<Domain, Range>, Arg3> typed::map<pair<Domain, Range>, Range2>::preimage_range(const typed::pw_multi_aff<Arg3, Range2> &pma) const
+{
+ auto res = isl::map::preimage_range(pma);
+ return typed::map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, Arg3> typed::map<pair<Domain, Range>, Range2>::preimage_range(const typed::union_pw_multi_aff<Arg3, Range2> &upma) const
+{
+ auto res = isl::map::preimage_range(upma);
+ return typed::union_map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> typed::map<pair<Domain, Range>, Range2>::product(const typed::map<Domain2, Arg3> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> typed::map<pair<Domain, Range>, Range2>::product(const typed::union_map<Domain2, Arg3> &umap2) const
+{
+ auto res = isl::map::product(umap2);
+ return typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> typed::map<pair<Domain, Range>, Range2>::product(const typed::basic_map<Domain2, Arg3> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::project_out_all_params() const
+{
+ auto res = isl::map::project_out_all_params();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<Range2> typed::map<pair<Domain, Range>, Range2>::range() const
+{
+ auto res = isl::map::range();
+ return typed::set<Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::fixed_box<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::range_lattice_tile() const
+{
+ auto res = isl::map::range_lattice_tile();
+ return typed::fixed_box<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<pair<Domain, Range>, Range2>, Range2> typed::map<pair<Domain, Range>, Range2>::range_map() const
+{
+ auto res = isl::map::range_map();
+ return typed::union_map<pair<pair<Domain, Range>, Range2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<pair<Domain, Range>, pair<Range2, Arg3>> typed::map<pair<Domain, Range>, Range2>::range_product(const typed::map<pair<Domain, Range>, Arg3> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<pair<Domain, Range>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>> typed::map<pair<Domain, Range>, Range2>::range_product(const typed::union_map<pair<Domain, Range>, Arg3> &umap2) const
+{
+ auto res = isl::map::range_product(umap2);
+ return typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<pair<Domain, Range>, pair<Range2, Arg3>> typed::map<pair<Domain, Range>, Range2>::range_product(const typed::basic_map<pair<Domain, Range>, Arg3> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<pair<Domain, Range>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::fixed_box<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::map::range_simple_fixed_box_hull();
+ return typed::fixed_box<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Range2, pair<Domain, Range>> typed::map<pair<Domain, Range>, Range2>::reverse() const
+{
+ auto res = isl::map::reverse();
+ return typed::map<Range2, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<Domain, Range>, Arg2> typed::map<pair<Domain, Range>, Range2>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::map::set_range_tuple(id);
+ return typed::map<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<Domain, Range>, Arg2> typed::map<pair<Domain, Range>, Range2>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::map::set_range_tuple(id);
+ return typed::map<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::space() const
+{
+ auto res = isl::map::space();
+ return typed::space<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::subtract(const typed::map<pair<Domain, Range>, Range2> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::subtract(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::map::subtract(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::subtract(const typed::basic_map<pair<Domain, Range>, Range2> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::subtract_domain(const typed::union_set<pair<Domain, Range>> &dom) const
+{
+ auto res = isl::map::subtract_domain(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::subtract_range(const typed::union_set<Range2> &dom) const
+{
+ auto res = isl::map::subtract_range(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::to_union_map() const
+{
+ auto res = isl::map::to_union_map();
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::unite(const typed::map<pair<Domain, Range>, Range2> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::unite(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::map::unite(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::unite(const typed::basic_map<pair<Domain, Range>, Range2> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::universe(const typed::space<pair<Domain, Range>, Range2> &space)
+{
+ auto res = isl::map::universe(space);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::upper_bound(const typed::multi_pw_aff<pair<Domain, Range>, Range2> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::upper_bound(const typed::aff<pair<Domain, Range>, Range2> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::upper_bound(const typed::multi_aff<pair<Domain, Range>, Range2> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::upper_bound(const typed::pw_aff<pair<Domain, Range>, Range2> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<pair<Domain, Range>, Range2>::upper_bound(const typed::pw_multi_aff<pair<Domain, Range>, Range2> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<pair<Domain, Range>, Range2>> typed::map<pair<Domain, Range>, Range2>::wrap() const
+{
+ auto res = isl::map::wrap();
+ return typed::set<pair<pair<Domain, Range>, Range2>>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain>::map(const typed::basic_map<Domain, Domain> &bmap)
+ : isl::map(bmap)
+{
+}
+
+template <typename Domain>
+typed::map<Domain, Domain>::map(const isl::ctx &ctx, const std::string &str)
+ : isl::map(ctx, str)
+{
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::map<Domain, Domain>::apply_domain(const typed::map<Domain, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<Domain2, Domain> typed::map<Domain, Domain>::apply_domain(const typed::union_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::map::apply_domain(umap2);
+ return typed::union_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::map<Domain, Domain>::apply_domain(const typed::basic_map<Domain, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Domain>::apply_range(const typed::map<Domain, Range2> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::map<Domain, Domain>::apply_range(const typed::union_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::map::apply_range(umap2);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Domain>::apply_range(const typed::basic_map<Domain, Range2> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::as_map() const
+{
+ auto res = isl::map::as_map();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Domain> typed::map<Domain, Domain>::as_multi_union_pw_aff() const
+{
+ auto res = isl::map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Domain> typed::map<Domain, Domain>::as_pw_multi_aff() const
+{
+ auto res = isl::map::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Domain> typed::map<Domain, Domain>::as_union_pw_multi_aff() const
+{
+ auto res = isl::map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::map<Domain, Domain>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::map::bind_domain(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::map<Domain, Domain>::bind_range(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::map::bind_range(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::coalesce() const
+{
+ auto res = isl::map::coalesce();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::map<Domain, Domain>::deltas() const
+{
+ auto res = isl::map::deltas();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::detect_equalities() const
+{
+ auto res = isl::map::detect_equalities();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::map<Domain, Domain>::domain() const
+{
+ auto res = isl::map::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<pair<Domain, Domain>, Domain> typed::map<Domain, Domain>::domain_map() const
+{
+ auto res = isl::map::domain_map();
+ return typed::union_map<pair<Domain, Domain>, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<pair<Domain, Domain>, Domain> typed::map<Domain, Domain>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, Domain>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<pair<Domain, Domain2>, Domain> typed::map<Domain, Domain>::domain_product(const typed::map<Domain2, Domain> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<Domain, Domain2>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, Domain> typed::map<Domain, Domain>::domain_product(const typed::union_map<Domain2, Domain> &umap2) const
+{
+ auto res = isl::map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<pair<Domain, Domain2>, Domain> typed::map<Domain, Domain>::domain_product(const typed::basic_map<Domain2, Domain> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<Domain, Domain2>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::eq_at(const typed::multi_pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::eq_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::eq_at(const typed::multi_union_pw_aff<Domain, Range> &mupa) const
+{
+ auto res = isl::map::eq_at(mupa);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::eq_at(const typed::aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::eq_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::eq_at(const typed::multi_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::eq_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::eq_at(const typed::pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::eq_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::eq_at(const typed::pw_multi_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::eq_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+bool typed::map<Domain, Domain>::every_map(const std::function<bool(typed::map<Domain, Domain>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<Domain, Domain>(arg0));
+ };
+ return isl::map::every_map(lambda);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::extract_map(const typed::space<Domain, Domain> &space) const
+{
+ auto res = isl::map::extract_map(space);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+void typed::map<Domain, Domain>::foreach_basic_map(const std::function<void(typed::basic_map<Domain, Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<Domain, Domain>(arg0));
+ };
+ return isl::map::foreach_basic_map(lambda);
+}
+
+template <typename Domain>
+void typed::map<Domain, Domain>::foreach_map(const std::function<void(typed::map<Domain, Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<Domain, Domain>(arg0));
+ };
+ return isl::map::foreach_map(lambda);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::gist(const typed::map<Domain, Domain> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::gist(const typed::union_map<Domain, Domain> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::gist(const typed::basic_map<Domain, Domain> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::gist_domain(const typed::set<Domain> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::gist_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::map::gist_domain(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::gist_domain(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::gist_domain(const typed::point<Domain> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::intersect(const typed::map<Domain, Domain> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::intersect(const typed::union_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::map::intersect(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::intersect(const typed::basic_map<Domain, Domain> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::map::intersect_domain(space);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::map::intersect_domain(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::intersect_domain(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::intersect_domain(const typed::point<Domain> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::intersect_params(const typed::basic_set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::intersect_params(const typed::point<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::intersect_range(const typed::set<Domain> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::intersect_range(const typed::space<Domain> &space) const
+{
+ auto res = isl::map::intersect_range(space);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::intersect_range(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::map::intersect_range(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::intersect_range(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::intersect_range(const typed::point<Domain> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_ge_at(const typed::multi_pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_ge_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_ge_at(const typed::aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_ge_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_ge_at(const typed::multi_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_ge_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_ge_at(const typed::pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_ge_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_ge_at(const typed::pw_multi_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_ge_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_gt_at(const typed::multi_pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_gt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_gt_at(const typed::aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_gt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_gt_at(const typed::multi_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_gt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_gt_at(const typed::pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_gt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_gt_at(const typed::pw_multi_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_gt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_le_at(const typed::multi_pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_le_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_le_at(const typed::aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_le_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_le_at(const typed::multi_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_le_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_le_at(const typed::pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_le_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_le_at(const typed::pw_multi_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_le_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_lt_at(const typed::multi_pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_lt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_lt_at(const typed::aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_lt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_lt_at(const typed::multi_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_lt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_lt_at(const typed::pw_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_lt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lex_lt_at(const typed::pw_multi_aff<Domain, Range> &mpa) const
+{
+ auto res = isl::map::lex_lt_at(mpa);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lexmax() const
+{
+ auto res = isl::map::lexmax();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Domain> typed::map<Domain, Domain>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lexmin() const
+{
+ auto res = isl::map::lexmin();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Domain> typed::map<Domain, Domain>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lower_bound(const typed::multi_pw_aff<Domain, Domain> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lower_bound(const typed::aff<Domain, Domain> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lower_bound(const typed::multi_aff<Domain, Domain> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lower_bound(const typed::pw_aff<Domain, Domain> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::lower_bound(const typed::pw_multi_aff<Domain, Domain> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map_list<Domain, Domain> typed::map<Domain, Domain>::map_list() const
+{
+ auto res = isl::map::map_list();
+ return typed::map_list<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Domain> typed::map<Domain, Domain>::max_multi_pw_aff() const
+{
+ auto res = isl::map::max_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Domain> typed::map<Domain, Domain>::min_multi_pw_aff() const
+{
+ auto res = isl::map::min_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::map<Domain, Domain>::preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::map::preimage_domain(ma);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::map<Domain, Domain>::preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::map::preimage_domain(mpa);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::map<Domain, Domain>::preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::map::preimage_domain(pma);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<Domain2, Domain> typed::map<Domain, Domain>::preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::map::preimage_domain(upma);
+ return typed::union_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Domain>::preimage_range(const typed::multi_aff<Range2, Domain> &ma) const
+{
+ auto res = isl::map::preimage_range(ma);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Domain>::preimage_range(const typed::pw_multi_aff<Range2, Domain> &pma) const
+{
+ auto res = isl::map::preimage_range(pma);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::map<Domain, Domain>::preimage_range(const typed::union_pw_multi_aff<Range2, Domain> &upma) const
+{
+ auto res = isl::map::preimage_range(upma);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::map<pair<Domain, Domain2>, pair<Domain, Range2>> typed::map<Domain, Domain>::product(const typed::map<Domain2, Range2> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>> typed::map<Domain, Domain>::product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::map<pair<Domain, Domain2>, pair<Domain, Range2>> typed::map<Domain, Domain>::product(const typed::basic_map<Domain2, Range2> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::project_out_all_params() const
+{
+ auto res = isl::map::project_out_all_params();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::map<Domain, Domain>::range() const
+{
+ auto res = isl::map::range();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::fixed_box<Domain, Domain> typed::map<Domain, Domain>::range_lattice_tile() const
+{
+ auto res = isl::map::range_lattice_tile();
+ return typed::fixed_box<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<pair<Domain, Domain>, Domain> typed::map<Domain, Domain>::range_map() const
+{
+ auto res = isl::map::range_map();
+ return typed::union_map<pair<Domain, Domain>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, pair<Domain, Range2>> typed::map<Domain, Domain>::range_product(const typed::map<Domain, Range2> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<Domain, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, pair<Domain, Range2>> typed::map<Domain, Domain>::range_product(const typed::union_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::map::range_product(umap2);
+ return typed::union_map<Domain, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, pair<Domain, Range2>> typed::map<Domain, Domain>::range_product(const typed::basic_map<Domain, Range2> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<Domain, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+typed::fixed_box<Domain, Domain> typed::map<Domain, Domain>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::map::range_simple_fixed_box_hull();
+ return typed::fixed_box<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::reverse() const
+{
+ auto res = isl::map::reverse();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::map<Domain, Domain>::set_domain_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::map::set_domain_tuple(id);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::map<Domain2, Domain> typed::map<Domain, Domain>::set_domain_tuple(const std::string &id) const
+{
+ auto res = isl::map::set_domain_tuple(id);
+ return typed::map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Domain>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::map::set_range_tuple(id);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, Domain>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::map::set_range_tuple(id);
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+typed::space<Domain, Domain> typed::map<Domain, Domain>::space() const
+{
+ auto res = isl::map::space();
+ return typed::space<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::subtract(const typed::map<Domain, Domain> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::subtract(const typed::union_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::map::subtract(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::subtract(const typed::basic_map<Domain, Domain> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::subtract_domain(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::map::subtract_domain(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::subtract_range(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::map::subtract_range(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::to_union_map() const
+{
+ auto res = isl::map::to_union_map();
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::unite(const typed::map<Domain, Domain> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::map<Domain, Domain>::unite(const typed::union_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::map::unite(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::unite(const typed::basic_map<Domain, Domain> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::universe(const typed::space<Domain, Domain> &space)
+{
+ auto res = isl::map::universe(space);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::upper_bound(const typed::multi_pw_aff<Domain, Domain> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::upper_bound(const typed::aff<Domain, Domain> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::upper_bound(const typed::multi_aff<Domain, Domain> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::upper_bound(const typed::pw_aff<Domain, Domain> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::map<Domain, Domain>::upper_bound(const typed::pw_multi_aff<Domain, Domain> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<pair<Domain, Domain>> typed::map<Domain, Domain>::wrap() const
+{
+ auto res = isl::map::wrap();
+ return typed::set<pair<Domain, Domain>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>>::map(const typed::basic_map<Domain, pair<Range, Range2>> &bmap)
+ : isl::map(bmap)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>>::map(const isl::ctx &ctx, const std::string &str)
+ : isl::map(ctx, str)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::apply_domain(const typed::map<Domain, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::apply_domain(const typed::union_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::apply_domain(const typed::basic_map<Domain, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<Domain, Arg3> typed::map<Domain, pair<Range, Range2>>::apply_range(const typed::map<pair<Range, Range2>, Arg3> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, Arg3> typed::map<Domain, pair<Range, Range2>>::apply_range(const typed::union_map<pair<Range, Range2>, Arg3> &umap2) const
+{
+ auto res = isl::map::apply_range(umap2);
+ return typed::union_map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<Domain, Arg3> typed::map<Domain, pair<Range, Range2>>::apply_range(const typed::basic_map<pair<Range, Range2>, Arg3> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::as_map() const
+{
+ auto res = isl::map::as_map();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::as_pw_multi_aff() const
+{
+ auto res = isl::map::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::as_union_pw_multi_aff() const
+{
+ auto res = isl::map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::map::bind_domain(tuple);
+ return typed::set<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<Domain> typed::map<Domain, pair<Range, Range2>>::bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const
+{
+ auto res = isl::map::bind_range(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::map::coalesce();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::detect_equalities() const
+{
+ auto res = isl::map::detect_equalities();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<Domain> typed::map<Domain, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::map::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, pair<Range, Range2>>, Domain> typed::map<Domain, pair<Range, Range2>>::domain_map() const
+{
+ auto res = isl::map::domain_map();
+ return typed::union_map<pair<Domain, pair<Range, Range2>>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain> typed::map<Domain, pair<Range, Range2>>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<pair<Domain, Domain2>, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::domain_product(const typed::map<Domain2, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<pair<Domain, Domain2>, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::domain_product(const typed::basic_map<Domain2, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+bool typed::map<Domain, pair<Range, Range2>>::every_map(const std::function<bool(typed::map<Domain, pair<Range, Range2>>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<Domain, pair<Range, Range2>>(arg0));
+ };
+ return isl::map::every_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::extract_map(const typed::space<Domain, pair<Range, Range2>> &space) const
+{
+ auto res = isl::map::extract_map(space);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, Anonymous> typed::map<Domain, pair<Range, Range2>>::flatten_range() const
+{
+ auto res = isl::map::flatten_range();
+ return typed::map<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+void typed::map<Domain, pair<Range, Range2>>::foreach_basic_map(const std::function<void(typed::basic_map<Domain, pair<Range, Range2>>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<Domain, pair<Range, Range2>>(arg0));
+ };
+ return isl::map::foreach_basic_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+void typed::map<Domain, pair<Range, Range2>>::foreach_map(const std::function<void(typed::map<Domain, pair<Range, Range2>>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<Domain, pair<Range, Range2>>(arg0));
+ };
+ return isl::map::foreach_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::gist(const typed::map<Domain, pair<Range, Range2>> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::gist(const typed::union_map<Domain, pair<Range, Range2>> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::gist(const typed::basic_map<Domain, pair<Range, Range2>> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::gist_domain(const typed::set<Domain> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::gist_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::map::gist_domain(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::gist_domain(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::gist_domain(const typed::point<Domain> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect(const typed::map<Domain, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::map::intersect(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect(const typed::basic_map<Domain, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::map::intersect_domain(space);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::map::intersect_domain(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_domain(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_domain(const typed::point<Domain> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_params(const typed::basic_set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_params(const typed::point<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_range(const typed::set<pair<Range, Range2>> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_range(const typed::space<pair<Range, Range2>> &space) const
+{
+ auto res = isl::map::intersect_range(space);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const
+{
+ auto res = isl::map::intersect_range(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_range(const typed::basic_set<pair<Range, Range2>> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::intersect_range(const typed::point<pair<Range, Range2>> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::lexmax() const
+{
+ auto res = isl::map::lexmax();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::lexmin() const
+{
+ auto res = isl::map::lexmin();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::lower_bound(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::lower_bound(const typed::aff<Domain, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::lower_bound(const typed::multi_aff<Domain, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::lower_bound(const typed::pw_aff<Domain, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::lower_bound(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map_list<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::map_list() const
+{
+ auto res = isl::map::map_list();
+ return typed::map_list<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::max_multi_pw_aff() const
+{
+ auto res = isl::map::max_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::min_multi_pw_aff() const
+{
+ auto res = isl::map::min_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::map::preimage_domain(ma);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::map::preimage_domain(mpa);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::map::preimage_domain(pma);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::map::preimage_domain(upma);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<Domain, Arg3> typed::map<Domain, pair<Range, Range2>>::preimage_range(const typed::multi_aff<Arg3, pair<Range, Range2>> &ma) const
+{
+ auto res = isl::map::preimage_range(ma);
+ return typed::map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<Domain, Arg3> typed::map<Domain, pair<Range, Range2>>::preimage_range(const typed::pw_multi_aff<Arg3, pair<Range, Range2>> &pma) const
+{
+ auto res = isl::map::preimage_range(pma);
+ return typed::map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, Arg3> typed::map<Domain, pair<Range, Range2>>::preimage_range(const typed::union_pw_multi_aff<Arg3, pair<Range, Range2>> &upma) const
+{
+ auto res = isl::map::preimage_range(upma);
+ return typed::union_map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::map<Domain, pair<Range, Range2>>::product(const typed::map<Domain2, Arg3> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::map<Domain, pair<Range, Range2>>::product(const typed::union_map<Domain2, Arg3> &umap2) const
+{
+ auto res = isl::map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::map<Domain, pair<Range, Range2>>::product(const typed::basic_map<Domain2, Arg3> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::project_out_all_params() const
+{
+ auto res = isl::map::project_out_all_params();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::range() const
+{
+ auto res = isl::map::range();
+ return typed::set<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, Range> typed::map<Domain, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::map::range_factor_domain();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, Range2> typed::map<Domain, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::map::range_factor_range();
+ return typed::map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::fixed_box<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::range_lattice_tile() const
+{
+ auto res = isl::map::range_lattice_tile();
+ return typed::fixed_box<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::range_map() const
+{
+ auto res = isl::map::range_map();
+ return typed::union_map<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<Domain, pair<pair<Range, Range2>, Arg3>> typed::map<Domain, pair<Range, Range2>>::range_product(const typed::map<Domain, Arg3> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>> typed::map<Domain, pair<Range, Range2>>::range_product(const typed::union_map<Domain, Arg3> &umap2) const
+{
+ auto res = isl::map::range_product(umap2);
+ return typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::map<Domain, pair<pair<Range, Range2>, Arg3>> typed::map<Domain, pair<Range, Range2>>::range_product(const typed::basic_map<Domain, Arg3> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range2, Range>> typed::map<Domain, pair<Range, Range2>>::range_reverse() const
+{
+ auto res = isl::map::range_reverse();
+ return typed::map<Domain, pair<Range2, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::fixed_box<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::map::range_simple_fixed_box_hull();
+ return typed::fixed_box<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Range, Range2>, Domain> typed::map<Domain, pair<Range, Range2>>::reverse() const
+{
+ auto res = isl::map::reverse();
+ return typed::map<pair<Range, Range2>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::set_domain_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::map::set_domain_tuple(id);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::set_domain_tuple(const std::string &id) const
+{
+ auto res = isl::map::set_domain_tuple(id);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::space() const
+{
+ auto res = isl::map::space();
+ return typed::space<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::subtract(const typed::map<Domain, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::subtract(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::map::subtract(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::subtract(const typed::basic_map<Domain, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::subtract_domain(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::map::subtract_domain(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::map::subtract_range(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::to_union_map() const
+{
+ auto res = isl::map::to_union_map();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::map<Domain, pair<Range, Range2>>::uncurry() const
+{
+ auto res = isl::map::uncurry();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::unite(const typed::map<Domain, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::unite(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::map::unite(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::unite(const typed::basic_map<Domain, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::universe(const typed::space<Domain, pair<Range, Range2>> &space)
+{
+ auto res = isl::map::universe(space);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::upper_bound(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::upper_bound(const typed::aff<Domain, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::upper_bound(const typed::multi_aff<Domain, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::upper_bound(const typed::pw_aff<Domain, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::map<Domain, pair<Range, Range2>>::upper_bound(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<pair<Domain, pair<Range, Range2>>> typed::map<Domain, pair<Range, Range2>>::wrap() const
+{
+ auto res = isl::map::wrap();
+ return typed::set<pair<Domain, pair<Range, Range2>>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>>::map(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &bmap)
+ : isl::map(bmap)
+{
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>>::map(const isl::ctx &ctx, const std::string &str)
+ : isl::map(ctx, str)
+{
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<Domain2, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::apply_domain(const typed::map<pair<T1, T2>, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const
+{
+ auto res = isl::map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<Domain2, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::map<pair<T1, T2>, Range2> typed::map<pair<T1, T2>, pair<T1, T2>>::apply_range(const typed::map<pair<T1, T2>, Range2> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, Range2> typed::map<pair<T1, T2>, pair<T1, T2>>::apply_range(const typed::union_map<pair<T1, T2>, Range2> &umap2) const
+{
+ auto res = isl::map::apply_range(umap2);
+ return typed::union_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::map<pair<T1, T2>, Range2> typed::map<pair<T1, T2>, pair<T1, T2>>::apply_range(const typed::basic_map<pair<T1, T2>, Range2> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::as_map() const
+{
+ auto res = isl::map::as_map();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::as_pw_multi_aff() const
+{
+ auto res = isl::map::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::as_union_pw_multi_aff() const
+{
+ auto res = isl::map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::set<pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const
+{
+ auto res = isl::map::bind_domain(tuple);
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::set<pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::bind_range(const typed::multi_id<pair<T1, T2>> &tuple) const
+{
+ auto res = isl::map::bind_range(tuple);
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::coalesce() const
+{
+ auto res = isl::map::coalesce();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<T1, pair<T2, pair<T1, T2>>> typed::map<pair<T1, T2>, pair<T1, T2>>::curry() const
+{
+ auto res = isl::map::curry();
+ return typed::map<T1, pair<T2, pair<T1, T2>>>(res);
+}
+
+template <typename T1, typename T2>
+typed::set<pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::deltas() const
+{
+ auto res = isl::map::deltas();
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::detect_equalities() const
+{
+ auto res = isl::map::detect_equalities();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::set<pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::domain() const
+{
+ auto res = isl::map::domain();
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<T1, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::domain_factor_domain() const
+{
+ auto res = isl::map::domain_factor_domain();
+ return typed::map<T1, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<T2, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::domain_factor_range() const
+{
+ auto res = isl::map::domain_factor_range();
+ return typed::map<T2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::domain_map() const
+{
+ auto res = isl::map::domain_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::domain_product(const typed::map<Domain2, pair<T1, T2>> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::domain_product(const typed::union_map<Domain2, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::map::domain_product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::domain_product(const typed::basic_map<Domain2, pair<T1, T2>> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::eq_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::eq_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::eq_at(const typed::multi_union_pw_aff<pair<T1, T2>, Range> &mupa) const
+{
+ auto res = isl::map::eq_at(mupa);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::eq_at(const typed::aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::eq_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::eq_at(const typed::multi_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::eq_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::eq_at(const typed::pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::eq_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::eq_at(const typed::pw_multi_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::eq_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+bool typed::map<pair<T1, T2>, pair<T1, T2>>::every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<T1, T2>>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<pair<T1, T2>, pair<T1, T2>>(arg0));
+ };
+ return isl::map::every_map(lambda);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::extract_map(const typed::space<pair<T1, T2>, pair<T1, T2>> &space) const
+{
+ auto res = isl::map::extract_map(space);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<Anonymous, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::flatten_domain() const
+{
+ auto res = isl::map::flatten_domain();
+ return typed::map<Anonymous, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, Anonymous> typed::map<pair<T1, T2>, pair<T1, T2>>::flatten_range() const
+{
+ auto res = isl::map::flatten_range();
+ return typed::map<pair<T1, T2>, Anonymous>(res);
+}
+
+template <typename T1, typename T2>
+void typed::map<pair<T1, T2>, pair<T1, T2>>::foreach_basic_map(const std::function<void(typed::basic_map<pair<T1, T2>, pair<T1, T2>>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<pair<T1, T2>, pair<T1, T2>>(arg0));
+ };
+ return isl::map::foreach_basic_map(lambda);
+}
+
+template <typename T1, typename T2>
+void typed::map<pair<T1, T2>, pair<T1, T2>>::foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<T1, T2>>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<pair<T1, T2>, pair<T1, T2>>(arg0));
+ };
+ return isl::map::foreach_map(lambda);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::gist(const typed::map<pair<T1, T2>, pair<T1, T2>> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::gist(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::gist(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::gist_domain(const typed::set<pair<T1, T2>> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::gist_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::gist_domain(const typed::basic_set<pair<T1, T2>> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::gist_domain(const typed::point<pair<T1, T2>> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::map::intersect(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::set<pair<T1, T2>> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::map::intersect_domain(space);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::map::intersect_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::basic_set<pair<T1, T2>> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::point<pair<T1, T2>> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_params(const typed::basic_set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_params(const typed::point<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::set<pair<T1, T2>> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::map::intersect_range(space);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::map::intersect_range(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::basic_set<pair<T1, T2>> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::point<pair<T1, T2>> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_ge_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_ge_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_ge_at(const typed::aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_ge_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_ge_at(const typed::multi_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_ge_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_ge_at(const typed::pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_ge_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_ge_at(const typed::pw_multi_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_ge_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_gt_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_gt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_gt_at(const typed::aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_gt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_gt_at(const typed::multi_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_gt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_gt_at(const typed::pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_gt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_gt_at(const typed::pw_multi_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_gt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_le_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_le_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_le_at(const typed::aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_le_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_le_at(const typed::multi_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_le_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_le_at(const typed::pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_le_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_le_at(const typed::pw_multi_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_le_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_lt_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_lt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_lt_at(const typed::aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_lt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_lt_at(const typed::multi_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_lt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_lt_at(const typed::pw_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_lt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lex_lt_at(const typed::pw_multi_aff<pair<T1, T2>, Range> &mpa) const
+{
+ auto res = isl::map::lex_lt_at(mpa);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lexmax() const
+{
+ auto res = isl::map::lexmax();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lexmin() const
+{
+ auto res = isl::map::lexmin();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lower_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lower_bound(const typed::aff<pair<T1, T2>, pair<T1, T2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lower_bound(const typed::multi_aff<pair<T1, T2>, pair<T1, T2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lower_bound(const typed::pw_aff<pair<T1, T2>, pair<T1, T2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::lower_bound(const typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map_list<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::map_list() const
+{
+ auto res = isl::map::map_list();
+ return typed::map_list<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::max_multi_pw_aff() const
+{
+ auto res = isl::map::max_multi_pw_aff();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::min_multi_pw_aff() const
+{
+ auto res = isl::map::min_multi_pw_aff();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<Domain2, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const
+{
+ auto res = isl::map::preimage_domain(ma);
+ return typed::map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<Domain2, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const
+{
+ auto res = isl::map::preimage_domain(mpa);
+ return typed::map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::map<Domain2, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const
+{
+ auto res = isl::map::preimage_domain(pma);
+ return typed::map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const
+{
+ auto res = isl::map::preimage_domain(upma);
+ return typed::union_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::map<pair<T1, T2>, Range2> typed::map<pair<T1, T2>, pair<T1, T2>>::preimage_range(const typed::multi_aff<Range2, pair<T1, T2>> &ma) const
+{
+ auto res = isl::map::preimage_range(ma);
+ return typed::map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::map<pair<T1, T2>, Range2> typed::map<pair<T1, T2>, pair<T1, T2>>::preimage_range(const typed::pw_multi_aff<Range2, pair<T1, T2>> &pma) const
+{
+ auto res = isl::map::preimage_range(pma);
+ return typed::map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, Range2> typed::map<pair<T1, T2>, pair<T1, T2>>::preimage_range(const typed::union_pw_multi_aff<Range2, pair<T1, T2>> &upma) const
+{
+ auto res = isl::map::preimage_range(upma);
+ return typed::union_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2, typename Range2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> typed::map<pair<T1, T2>, pair<T1, T2>>::product(const typed::map<Domain2, Range2> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> typed::map<pair<T1, T2>, pair<T1, T2>>::product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::map::product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2, typename Range2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> typed::map<pair<T1, T2>, pair<T1, T2>>::product(const typed::basic_map<Domain2, Range2> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::project_out_all_params() const
+{
+ auto res = isl::map::project_out_all_params();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::set<pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::range() const
+{
+ auto res = isl::map::range();
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, T1> typed::map<pair<T1, T2>, pair<T1, T2>>::range_factor_domain() const
+{
+ auto res = isl::map::range_factor_domain();
+ return typed::map<pair<T1, T2>, T1>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, T2> typed::map<pair<T1, T2>, pair<T1, T2>>::range_factor_range() const
+{
+ auto res = isl::map::range_factor_range();
+ return typed::map<pair<T1, T2>, T2>(res);
+}
+
+template <typename T1, typename T2>
+typed::fixed_box<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::range_lattice_tile() const
+{
+ auto res = isl::map::range_lattice_tile();
+ return typed::fixed_box<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::range_map() const
+{
+ auto res = isl::map::range_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> typed::map<pair<T1, T2>, pair<T1, T2>>::range_product(const typed::map<pair<T1, T2>, Range2> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<pair<T1, T2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> typed::map<pair<T1, T2>, pair<T1, T2>>::range_product(const typed::union_map<pair<T1, T2>, Range2> &umap2) const
+{
+ auto res = isl::map::range_product(umap2);
+ return typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> typed::map<pair<T1, T2>, pair<T1, T2>>::range_product(const typed::basic_map<pair<T1, T2>, Range2> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<pair<T1, T2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T2, T1>> typed::map<pair<T1, T2>, pair<T1, T2>>::range_reverse() const
+{
+ auto res = isl::map::range_reverse();
+ return typed::map<pair<T1, T2>, pair<T2, T1>>(res);
+}
+
+template <typename T1, typename T2>
+typed::fixed_box<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::map::range_simple_fixed_box_hull();
+ return typed::fixed_box<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::reverse() const
+{
+ auto res = isl::map::reverse();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::space<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::space() const
+{
+ auto res = isl::map::space();
+ return typed::space<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::subtract(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::subtract(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::map::subtract(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::subtract(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::subtract_range(const typed::union_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::to_union_map() const
+{
+ auto res = isl::map::to_union_map();
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<pair<T1, T2>, T1>, T2> typed::map<pair<T1, T2>, pair<T1, T2>>::uncurry() const
+{
+ auto res = isl::map::uncurry();
+ return typed::map<pair<pair<T1, T2>, T1>, T2>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::unite(const typed::map<pair<T1, T2>, pair<T1, T2>> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::unite(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::map::unite(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::unite(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::universe(const typed::space<pair<T1, T2>, pair<T1, T2>> &space)
+{
+ auto res = isl::map::universe(space);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::upper_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<T1, T2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::upper_bound(const typed::aff<pair<T1, T2>, pair<T1, T2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::upper_bound(const typed::multi_aff<pair<T1, T2>, pair<T1, T2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::upper_bound(const typed::pw_aff<pair<T1, T2>, pair<T1, T2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<T1, T2>>::upper_bound(const typed::pw_multi_aff<pair<T1, T2>, pair<T1, T2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::set<pair<pair<T1, T2>, pair<T1, T2>>> typed::map<pair<T1, T2>, pair<T1, T2>>::wrap() const
+{
+ auto res = isl::map::wrap();
+ return typed::set<pair<pair<T1, T2>, pair<T1, T2>>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>>::map(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &bmap)
+ : isl::map(bmap)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>>::map(const isl::ctx &ctx, const std::string &str)
+ : isl::map(ctx, str)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::apply_domain(const typed::map<pair<T1, T2>, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const
+{
+ auto res = isl::map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &map2) const
+{
+ auto res = isl::map::apply_domain(map2);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<T1, T2>, Arg2> typed::map<pair<T1, T2>, pair<Range, Range2>>::apply_range(const typed::map<pair<Range, Range2>, Arg2> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, Arg2> typed::map<pair<T1, T2>, pair<Range, Range2>>::apply_range(const typed::union_map<pair<Range, Range2>, Arg2> &umap2) const
+{
+ auto res = isl::map::apply_range(umap2);
+ return typed::union_map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<T1, T2>, Arg2> typed::map<pair<T1, T2>, pair<Range, Range2>>::apply_range(const typed::basic_map<pair<Range, Range2>, Arg2> &map2) const
+{
+ auto res = isl::map::apply_range(map2);
+ return typed::map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::as_map() const
+{
+ auto res = isl::map::as_map();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::as_pw_multi_aff() const
+{
+ auto res = isl::map::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::as_union_pw_multi_aff() const
+{
+ auto res = isl::map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const
+{
+ auto res = isl::map::bind_domain(tuple);
+ return typed::set<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<T1, T2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const
+{
+ auto res = isl::map::bind_range(tuple);
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::map::coalesce();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<T1, pair<T2, pair<Range, Range2>>> typed::map<pair<T1, T2>, pair<Range, Range2>>::curry() const
+{
+ auto res = isl::map::curry();
+ return typed::map<T1, pair<T2, pair<Range, Range2>>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::detect_equalities() const
+{
+ auto res = isl::map::detect_equalities();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<T1, T2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::map::domain();
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<T1, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::domain_factor_domain() const
+{
+ auto res = isl::map::domain_factor_domain();
+ return typed::map<T1, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<T2, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::domain_factor_range() const
+{
+ auto res = isl::map::domain_factor_range();
+ return typed::map<T2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::domain_map() const
+{
+ auto res = isl::map::domain_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::domain_product(const typed::map<Domain2, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::map::domain_product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::domain_product(const typed::basic_map<Domain2, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::domain_product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+bool typed::map<pair<T1, T2>, pair<Range, Range2>>::every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<pair<T1, T2>, pair<Range, Range2>>(arg0));
+ };
+ return isl::map::every_map(lambda);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::extract_map(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const
+{
+ auto res = isl::map::extract_map(space);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<Anonymous, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::flatten_domain() const
+{
+ auto res = isl::map::flatten_domain();
+ return typed::map<Anonymous, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, Anonymous> typed::map<pair<T1, T2>, pair<Range, Range2>>::flatten_range() const
+{
+ auto res = isl::map::flatten_range();
+ return typed::map<pair<T1, T2>, Anonymous>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+void typed::map<pair<T1, T2>, pair<Range, Range2>>::foreach_basic_map(const std::function<void(typed::basic_map<pair<T1, T2>, pair<Range, Range2>>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_map arg0) {
+ return fn(typed::basic_map<pair<T1, T2>, pair<Range, Range2>>(arg0));
+ };
+ return isl::map::foreach_basic_map(lambda);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+void typed::map<pair<T1, T2>, pair<Range, Range2>>::foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<pair<T1, T2>, pair<Range, Range2>>(arg0));
+ };
+ return isl::map::foreach_map(lambda);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::map<pair<T1, T2>, pair<Range, Range2>> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &context) const
+{
+ auto res = isl::map::gist(context);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::gist_domain(const typed::set<pair<T1, T2>> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::gist_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::gist_domain(const typed::basic_set<pair<T1, T2>> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::gist_domain(const typed::point<pair<T1, T2>> &context) const
+{
+ auto res = isl::map::gist_domain(context);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::map::intersect(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::intersect(map2);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::set<pair<T1, T2>> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::map::intersect_domain(space);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::map::intersect_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::basic_set<pair<T1, T2>> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::point<pair<T1, T2>> &set) const
+{
+ auto res = isl::map::intersect_domain(set);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::basic_set<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::point<> ¶ms) const
+{
+ auto res = isl::map::intersect_params(params);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::set<pair<Range, Range2>> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::space<pair<Range, Range2>> &space) const
+{
+ auto res = isl::map::intersect_range(space);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const
+{
+ auto res = isl::map::intersect_range(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::basic_set<pair<Range, Range2>> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::point<pair<Range, Range2>> &set) const
+{
+ auto res = isl::map::intersect_range(set);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::lexmax() const
+{
+ auto res = isl::map::lexmax();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::map::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::lexmin() const
+{
+ auto res = isl::map::lexmin();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::map::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::lower_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::lower_bound(const typed::aff<pair<T1, T2>, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::lower_bound(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::lower_bound(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::lower_bound(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &lower) const
+{
+ auto res = isl::map::lower_bound(lower);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map_list<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::map_list() const
+{
+ auto res = isl::map::map_list();
+ return typed::map_list<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::max_multi_pw_aff() const
+{
+ auto res = isl::map::max_multi_pw_aff();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::min_multi_pw_aff() const
+{
+ auto res = isl::map::min_multi_pw_aff();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const
+{
+ auto res = isl::map::preimage_domain(ma);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const
+{
+ auto res = isl::map::preimage_domain(mpa);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::map<Domain2, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const
+{
+ auto res = isl::map::preimage_domain(pma);
+ return typed::map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const
+{
+ auto res = isl::map::preimage_domain(upma);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<T1, T2>, Arg2> typed::map<pair<T1, T2>, pair<Range, Range2>>::preimage_range(const typed::multi_aff<Arg2, pair<Range, Range2>> &ma) const
+{
+ auto res = isl::map::preimage_range(ma);
+ return typed::map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<T1, T2>, Arg2> typed::map<pair<T1, T2>, pair<Range, Range2>>::preimage_range(const typed::pw_multi_aff<Arg2, pair<Range, Range2>> &pma) const
+{
+ auto res = isl::map::preimage_range(pma);
+ return typed::map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, Arg2> typed::map<pair<T1, T2>, pair<Range, Range2>>::preimage_range(const typed::union_pw_multi_aff<Arg2, pair<Range, Range2>> &upma) const
+{
+ auto res = isl::map::preimage_range(upma);
+ return typed::union_map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::product(const typed::map<Domain2, Arg2> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::product(const typed::union_map<Domain2, Arg2> &umap2) const
+{
+ auto res = isl::map::product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::product(const typed::basic_map<Domain2, Arg2> &map2) const
+{
+ auto res = isl::map::product(map2);
+ return typed::map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::project_out_all_params() const
+{
+ auto res = isl::map::project_out_all_params();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::range() const
+{
+ auto res = isl::map::range();
+ return typed::set<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, Range> typed::map<pair<T1, T2>, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::map::range_factor_domain();
+ return typed::map<pair<T1, T2>, Range>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, Range2> typed::map<pair<T1, T2>, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::map::range_factor_range();
+ return typed::map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::fixed_box<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::range_lattice_tile() const
+{
+ auto res = isl::map::range_lattice_tile();
+ return typed::fixed_box<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::range_map() const
+{
+ auto res = isl::map::range_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::map<pair<T1, T2>, Arg2> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::union_map<pair<T1, T2>, Arg2> &umap2) const
+{
+ auto res = isl::map::range_product(umap2);
+ return typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::basic_map<pair<T1, T2>, Arg2> &map2) const
+{
+ auto res = isl::map::range_product(map2);
+ return typed::map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range2, Range>> typed::map<pair<T1, T2>, pair<Range, Range2>>::range_reverse() const
+{
+ auto res = isl::map::range_reverse();
+ return typed::map<pair<T1, T2>, pair<Range2, Range>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::fixed_box<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::range_simple_fixed_box_hull() const
+{
+ auto res = isl::map::range_simple_fixed_box_hull();
+ return typed::fixed_box<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<Range, Range2>, pair<T1, T2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::reverse() const
+{
+ auto res = isl::map::reverse();
+ return typed::map<pair<Range, Range2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::space() const
+{
+ auto res = isl::map::space();
+ return typed::space<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::subtract(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::subtract(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::map::subtract(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::subtract(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::subtract(map2);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::to_union_map() const
+{
+ auto res = isl::map::to_union_map();
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<pair<T1, T2>, Range>, Range2> typed::map<pair<T1, T2>, pair<Range, Range2>>::uncurry() const
+{
+ auto res = isl::map::uncurry();
+ return typed::map<pair<pair<T1, T2>, Range>, Range2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::unite(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::unite(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::map::unite(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::unite(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &map2) const
+{
+ auto res = isl::map::unite(map2);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::universe(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space)
+{
+ auto res = isl::map::universe(space);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::upper_bound(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::upper_bound(const typed::aff<pair<T1, T2>, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::upper_bound(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::upper_bound(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::map<pair<T1, T2>, pair<Range, Range2>>::upper_bound(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upper) const
+{
+ auto res = isl::map::upper_bound(upper);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<pair<T1, T2>, pair<Range, Range2>>> typed::map<pair<T1, T2>, pair<Range, Range2>>::wrap() const
+{
+ auto res = isl::map::wrap();
+ return typed::set<pair<pair<T1, T2>, pair<Range, Range2>>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map_list<Domain, Range>::map_list(const isl::ctx &ctx, int n)
+ : isl::map_list(ctx, n)
+{
+}
+
+template <typename Domain, typename Range>
+typed::map_list<Domain, Range>::map_list(const typed::map<Domain, Range> &el)
+ : isl::map_list(el)
+{
+}
+
+template <typename Domain, typename Range>
+typed::map_list<Domain, Range>::map_list(const isl::ctx &ctx, const std::string &str)
+ : isl::map_list(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+typed::map_list<Domain, Range> typed::map_list<Domain, Range>::add(const typed::map<Domain, Range> &el) const
+{
+ auto res = isl::map_list::add(el);
+ return typed::map_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map_list<Domain, Range> typed::map_list<Domain, Range>::add(const typed::basic_map<Domain, Range> &el) const
+{
+ auto res = isl::map_list::add(el);
+ return typed::map_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::map_list<Domain, Range>::at(int index) const
+{
+ auto res = isl::map_list::at(index);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map_list<Domain, Range> typed::map_list<Domain, Range>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::map_list::drop(first, n);
+ return typed::map_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+void typed::map_list<Domain, Range>::foreach(const std::function<void(typed::map<Domain, Range>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<Domain, Range>(arg0));
+ };
+ return isl::map_list::foreach(lambda);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain>::multi_aff(const typed::aff<Domain> &aff)
+ : isl::multi_aff(aff)
+{
+}
+
+template <typename Domain>
+typed::multi_aff<Domain>::multi_aff(const typed::space<Domain> &space, const typed::aff_list<Anonymous> &list)
+ : isl::multi_aff(space, list)
+{
+}
+
+template <typename Domain>
+typed::multi_aff<Domain>::multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_aff(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::add(const typed::multi_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_aff<Domain>::add(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_aff<Domain>::add(const typed::multi_union_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::multi_aff<Domain>::add(const typed::pw_multi_aff<Domain> &pma2) const
+{
+ auto res = isl::multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::multi_aff<Domain>::add(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::add(const typed::aff<Domain> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::add_constant(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::multi_aff::add_constant(mv);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::add_constant(const typed::val<Domain> &v) const
+{
+ auto res = isl::multi_aff::add_constant(v);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::add_constant(long v) const
+{
+ auto res = isl::multi_aff::add_constant(v);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_pw_multi_aff<Range> typed::multi_aff<Domain>::apply(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::as_multi_aff() const
+{
+ auto res = isl::multi_aff::as_multi_aff();
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_aff<Domain>::as_multi_union_pw_aff() const
+{
+ auto res = isl::multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::multi_aff<Domain>::as_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::multi_aff<Domain>::as_set() const
+{
+ auto res = isl::multi_aff::as_set();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::aff<Anonymous> typed::multi_aff<Domain>::at(int pos) const
+{
+ auto res = isl::multi_aff::at(pos);
+ return typed::aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::basic_set<> typed::multi_aff<Domain>::bind(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::multi_aff::bind(tuple);
+ return typed::basic_set<>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::multi_aff<Domain>::coalesce() const
+{
+ auto res = isl::multi_aff::coalesce();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_aff<Domain>::constant_multi_val() const
+{
+ auto res = isl::multi_aff::constant_multi_val();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<> typed::multi_aff<Domain>::domain() const
+{
+ auto res = isl::multi_aff::domain();
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::multi_aff<Domain>::extract_pw_multi_aff(const typed::space<Domain> &space) const
+{
+ auto res = isl::multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::floor() const
+{
+ auto res = isl::multi_aff::floor();
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::gist(const typed::set<> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::multi_aff<Domain>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::gist(const typed::basic_set<> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::gist(const typed::point<> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain, Domain> typed::multi_aff<Domain>::identity() const
+{
+ auto res = isl::multi_aff::identity();
+ return typed::multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::multi_aff<Arg1, Domain> typed::multi_aff<Domain>::insert_domain(const typed::space<Arg1> &domain) const
+{
+ auto res = isl::multi_aff::insert_domain(domain);
+ return typed::multi_aff<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::multi_aff<Domain>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::aff_list<Anonymous> typed::multi_aff<Domain>::list() const
+{
+ auto res = isl::multi_aff::list();
+ return typed::aff_list<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_aff<Domain>::max(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_aff::max(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_aff<Domain>::max_multi_val() const
+{
+ auto res = isl::multi_aff::max_multi_val();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_aff<Domain>::min(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_aff::min(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_aff<Domain>::min_multi_val() const
+{
+ auto res = isl::multi_aff::min_multi_val();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::neg() const
+{
+ auto res = isl::multi_aff::neg();
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::multi_aff<pair<Domain, Range>> typed::multi_aff<Domain>::product(const typed::multi_aff<Range> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::multi_aff<Domain>::product(const typed::multi_pw_aff<Range> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::multi_aff<Domain>::product(const typed::pw_multi_aff<Range> &pma2) const
+{
+ auto res = isl::multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::multi_aff<pair<Domain, Range>> typed::multi_aff<Domain>::product(const typed::aff<Range> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain> typed::multi_aff<Domain>::pw_multi_aff_list() const
+{
+ auto res = isl::multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::scale(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::multi_aff::scale(mv);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::scale(const typed::val<Domain> &v) const
+{
+ auto res = isl::multi_aff::scale(v);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::scale(long v) const
+{
+ auto res = isl::multi_aff::scale(v);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::scale_down(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::multi_aff::scale_down(mv);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::scale_down(const typed::val<Domain> &v) const
+{
+ auto res = isl::multi_aff::scale_down(v);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::scale_down(long v) const
+{
+ auto res = isl::multi_aff::scale_down(v);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::set_at(int pos, const typed::aff<Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_aff<Domain>::set_at(int pos, const typed::pw_aff<Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_aff<Domain>::set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::multi_aff<Domain2> typed::multi_aff<Domain>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::multi_aff::set_range_tuple(id);
+ return typed::multi_aff<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::multi_aff<Domain2> typed::multi_aff<Domain>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::multi_aff::set_range_tuple(id);
+ return typed::multi_aff<Domain2>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::multi_aff<Domain>::space() const
+{
+ auto res = isl::multi_aff::space();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::sub(const typed::multi_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_aff<Domain>::sub(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_aff<Domain>::sub(const typed::multi_union_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::multi_aff<Domain>::sub(const typed::pw_multi_aff<Domain> &pma2) const
+{
+ auto res = isl::multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::multi_aff<Domain>::sub(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_aff<Domain>::sub(const typed::aff<Domain> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_aff<Domain>::to_multi_pw_aff() const
+{
+ auto res = isl::multi_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_aff<Domain>::to_multi_union_pw_aff() const
+{
+ auto res = isl::multi_aff::to_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::multi_aff<Domain>::to_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::to_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::multi_aff<Domain>::to_union_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::multi_aff<Arg1, Domain> typed::multi_aff<Domain>::unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const
+{
+ auto res = isl::multi_aff::unbind_params_insert_domain(domain);
+ return typed::multi_aff<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_aff<Domain>::union_add(const typed::multi_pw_aff<Domain> &mpa2) const
+{
+ auto res = isl::multi_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_aff<Domain>::union_add(const typed::multi_union_pw_aff<Domain> &mupa2) const
+{
+ auto res = isl::multi_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::multi_aff<Domain>::union_add(const typed::pw_multi_aff<Domain> &pma2) const
+{
+ auto res = isl::multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::multi_aff<Domain>::union_add(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range>::multi_aff(const typed::aff<Domain, Range> &aff)
+ : isl::multi_aff(aff)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range>::multi_aff(const typed::space<Domain, Range> &space, const typed::aff_list<Domain, Anonymous> &list)
+ : isl::multi_aff(space, list)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range>::multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_aff(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::add(const typed::multi_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::add(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::add(const typed::multi_union_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::add(const typed::pw_multi_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::add(const typed::aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::add_constant(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_aff::add_constant(mv);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::add_constant(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_aff::add_constant(v);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::add_constant(long v) const
+{
+ auto res = isl::multi_aff::add_constant(v);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, Range2> typed::multi_aff<Domain, Range>::apply(const typed::union_pw_multi_aff<Range, Range2> &upma2) const
+{
+ auto res = isl::multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::multi_aff<Domain, Range>::as_map() const
+{
+ auto res = isl::multi_aff::as_map();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::as_multi_aff() const
+{
+ auto res = isl::multi_aff::as_multi_aff();
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::as_multi_union_pw_aff() const
+{
+ auto res = isl::multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::as_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::multi_aff<Domain, Range>::as_union_map() const
+{
+ auto res = isl::multi_aff::as_union_map();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::aff<Domain, Anonymous> typed::multi_aff<Domain, Range>::at(int pos) const
+{
+ auto res = isl::multi_aff::at(pos);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<Domain> typed::multi_aff<Domain, Range>::bind(const typed::multi_id<Range> &tuple) const
+{
+ auto res = isl::multi_aff::bind(tuple);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Range> typed::multi_aff<Domain, Range>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::multi_aff::bind_domain(tuple);
+ return typed::multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::coalesce() const
+{
+ auto res = isl::multi_aff::coalesce();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<Range> typed::multi_aff<Domain, Range>::constant_multi_val() const
+{
+ auto res = isl::multi_aff::constant_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Domain> typed::multi_aff<Domain, Range>::domain() const
+{
+ auto res = isl::multi_aff::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::extract_pw_multi_aff(const typed::space<Domain, Range> &space) const
+{
+ auto res = isl::multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::floor() const
+{
+ auto res = isl::multi_aff::floor();
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::gist(const typed::point<Domain> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::identity() const
+{
+ auto res = isl::multi_aff::identity();
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::aff_list<Domain, Anonymous> typed::multi_aff<Domain, Range>::list() const
+{
+ auto res = isl::multi_aff::list();
+ return typed::aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::max(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_aff::max(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<Range> typed::multi_aff<Domain, Range>::max_multi_val() const
+{
+ auto res = isl::multi_aff::max_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::min(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_aff::min(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<Range> typed::multi_aff<Domain, Range>::min_multi_val() const
+{
+ auto res = isl::multi_aff::min_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::neg() const
+{
+ auto res = isl::multi_aff::neg();
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::multi_aff<Domain, Range>::product(const typed::multi_aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::multi_aff<Domain, Range>::product(const typed::multi_pw_aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::multi_aff<Domain, Range>::product(const typed::pw_multi_aff<Domain2, Range2> &pma2) const
+{
+ auto res = isl::multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::multi_aff<Domain, Range>::product(const typed::aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_aff<Domain2, Range> typed::multi_aff<Domain, Range>::pullback(const typed::multi_aff<Domain2, Domain> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Range> typed::multi_aff<Domain, Range>::pullback(const typed::multi_aff<Domain> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_pw_aff<Domain2, Range> typed::multi_aff<Domain, Range>::pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa2) const
+{
+ auto res = isl::multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Range> typed::multi_aff<Domain, Range>::pullback(const typed::multi_pw_aff<Domain> &mpa2) const
+{
+ auto res = isl::multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::pw_multi_aff<Domain2, Range> typed::multi_aff<Domain, Range>::pullback(const typed::pw_multi_aff<Domain2, Domain> &pma2) const
+{
+ auto res = isl::multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Range> typed::multi_aff<Domain, Range>::pullback(const typed::pw_multi_aff<Domain> &pma2) const
+{
+ auto res = isl::multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, Range> typed::multi_aff<Domain, Range>::pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Range> typed::multi_aff<Domain, Range>::pullback(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_aff<Domain2, Range> typed::multi_aff<Domain, Range>::pullback(const typed::aff<Domain2, Domain> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Range> typed::multi_aff<Domain, Range>::pullback(const typed::aff<Domain> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff_list<Domain, Range> typed::multi_aff<Domain, Range>::pw_multi_aff_list() const
+{
+ auto res = isl::multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, Range>::range_product(const typed::multi_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, Range>::range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, Range>::range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, Range>::range_product(const typed::pw_multi_aff<Domain, Range2> &pma2) const
+{
+ auto res = isl::multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, Range>::range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const
+{
+ auto res = isl::multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, Range>::range_product(const typed::aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::scale(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_aff::scale(mv);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::scale(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_aff::scale(v);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::scale(long v) const
+{
+ auto res = isl::multi_aff::scale(v);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::scale_down(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_aff::scale_down(mv);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::scale_down(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_aff::scale_down(v);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::scale_down(long v) const
+{
+ auto res = isl::multi_aff::scale_down(v);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::set_at(int pos, const typed::aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_aff<Domain, Range2> typed::multi_aff<Domain, Range>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::multi_aff::set_range_tuple(id);
+ return typed::multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_aff<Domain, Range2> typed::multi_aff<Domain, Range>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::multi_aff::set_range_tuple(id);
+ return typed::multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Domain, Range> typed::multi_aff<Domain, Range>::space() const
+{
+ auto res = isl::multi_aff::space();
+ return typed::space<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::sub(const typed::multi_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::sub(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::sub(const typed::multi_union_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::sub(const typed::pw_multi_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::sub(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::sub(const typed::aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::subtract_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::subtract_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::subtract_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::to_multi_pw_aff() const
+{
+ auto res = isl::multi_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::to_multi_union_pw_aff() const
+{
+ auto res = isl::multi_aff::to_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::to_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::to_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::to_union_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::union_add(const typed::multi_pw_aff<Domain, Range> &mpa2) const
+{
+ auto res = isl::multi_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_aff<Domain, Range>::union_add(const typed::multi_union_pw_aff<Domain, Range> &mupa2) const
+{
+ auto res = isl::multi_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::union_add(const typed::pw_multi_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::multi_aff<Domain, Range>::union_add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range>::multi_aff(const typed::aff<pair<Domain2, Range2>, Range> &aff)
+ : isl::multi_aff(aff)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range>::multi_aff(const typed::space<pair<Domain2, Range2>, Range> &space, const typed::aff_list<pair<Domain2, Range2>, Anonymous> &list)
+ : isl::multi_aff(space, list)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range>::multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_aff(ctx, str)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::add(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::multi_aff::add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const
+{
+ auto res = isl::multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::add(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::add_constant(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_aff::add_constant(mv);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::add_constant(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_aff::add_constant(v);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::add_constant(long v) const
+{
+ auto res = isl::multi_aff::add_constant(v);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg2> typed::multi_aff<pair<Domain2, Range2>, Range>::apply(const typed::union_pw_multi_aff<Range, Arg2> &upma2) const
+{
+ auto res = isl::multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg2>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::map<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::as_map() const
+{
+ auto res = isl::multi_aff::as_map();
+ return typed::map<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::as_multi_aff() const
+{
+ auto res = isl::multi_aff::as_multi_aff();
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::as_multi_union_pw_aff() const
+{
+ auto res = isl::multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::as_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_map<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::as_union_map() const
+{
+ auto res = isl::multi_aff::as_union_map();
+ return typed::union_map<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::multi_aff<pair<Domain2, Range2>, Range>::at(int pos) const
+{
+ auto res = isl::multi_aff::at(pos);
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::basic_set<pair<Domain2, Range2>> typed::multi_aff<pair<Domain2, Range2>, Range>::bind(const typed::multi_id<Range> &tuple) const
+{
+ auto res = isl::multi_aff::bind(tuple);
+ return typed::basic_set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<Range> typed::multi_aff<pair<Domain2, Range2>, Range>::bind_domain(const typed::multi_id<pair<Domain2, Range2>> &tuple) const
+{
+ auto res = isl::multi_aff::bind_domain(tuple);
+ return typed::multi_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<Range2, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::bind_domain_wrapped_domain(const typed::multi_id<Domain2> &tuple) const
+{
+ auto res = isl::multi_aff::bind_domain_wrapped_domain(tuple);
+ return typed::multi_aff<Range2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::coalesce() const
+{
+ auto res = isl::multi_aff::coalesce();
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_val<Range> typed::multi_aff<pair<Domain2, Range2>, Range>::constant_multi_val() const
+{
+ auto res = isl::multi_aff::constant_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::set<pair<Domain2, Range2>> typed::multi_aff<pair<Domain2, Range2>, Range>::domain() const
+{
+ auto res = isl::multi_aff::domain();
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::extract_pw_multi_aff(const typed::space<pair<Domain2, Range2>, Range> &space) const
+{
+ auto res = isl::multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::floor() const
+{
+ auto res = isl::multi_aff::floor();
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::gist(const typed::set<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::gist(const typed::union_set<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::gist(const typed::basic_set<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::gist(const typed::point<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::identity() const
+{
+ auto res = isl::multi_aff::identity();
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::space<pair<Domain2, Range2>> &space) const
+{
+ auto res = isl::multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const
+{
+ auto res = isl::multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::aff_list<pair<Domain2, Range2>, Anonymous> typed::multi_aff<pair<Domain2, Range2>, Range>::list() const
+{
+ auto res = isl::multi_aff::list();
+ return typed::aff_list<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::max(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_aff::max(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_val<Range> typed::multi_aff<pair<Domain2, Range2>, Range>::max_multi_val() const
+{
+ auto res = isl::multi_aff::max_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::min(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_aff::min(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_val<Range> typed::multi_aff<pair<Domain2, Range2>, Range>::min_multi_val() const
+{
+ auto res = isl::multi_aff::min_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::neg() const
+{
+ auto res = isl::multi_aff::neg();
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Domain3>
+typed::pw_multi_aff<pair<Domain3, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, Domain2> &pma2) const
+{
+ auto res = isl::multi_aff::preimage_domain_wrapped_domain(pma2);
+ return typed::pw_multi_aff<pair<Domain3, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain2> &upma2) const
+{
+ auto res = isl::multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::multi_aff<pair<Domain2, Range2>, Range>::product(const typed::multi_aff<Arg2, Arg3> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::multi_aff<pair<Domain2, Range2>, Range>::product(const typed::multi_pw_aff<Arg2, Arg3> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::multi_aff<pair<Domain2, Range2>, Range>::product(const typed::pw_multi_aff<Arg2, Arg3> &pma2) const
+{
+ auto res = isl::multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::multi_aff<pair<Domain2, Range2>, Range>::product(const typed::aff<Arg2, Arg3> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_aff<Arg2, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_aff<Arg2, pair<Domain2, Range2>> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<Range> typed::multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_aff<pair<Domain2, Range2>> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<Arg2, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_pw_aff<Arg2, pair<Domain2, Range2>> &mpa2) const
+{
+ auto res = isl::multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<Range> typed::multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_pw_aff<pair<Domain2, Range2>> &mpa2) const
+{
+ auto res = isl::multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::pw_multi_aff<Arg2, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::pw_multi_aff<Arg2, pair<Domain2, Range2>> &pma2) const
+{
+ auto res = isl::multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<Range> typed::multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::pw_multi_aff<pair<Domain2, Range2>> &pma2) const
+{
+ auto res = isl::multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::union_pw_multi_aff<Arg2, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::union_pw_multi_aff<Arg2, pair<Domain2, Range2>> &upma2) const
+{
+ auto res = isl::multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<Range> typed::multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::union_pw_multi_aff<pair<Domain2, Range2>> &upma2) const
+{
+ auto res = isl::multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_aff<Arg2, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::aff<Arg2, pair<Domain2, Range2>> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<Range> typed::multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::aff<pair<Domain2, Range2>> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff_list<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::pw_multi_aff_list() const
+{
+ auto res = isl::multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::multi_aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::multi_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::pw_multi_aff<pair<Domain2, Range2>, Arg2> &pma2) const
+{
+ auto res = isl::multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg2> &upma2) const
+{
+ auto res = isl::multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::scale(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_aff::scale(mv);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::scale(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_aff::scale(v);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::scale(long v) const
+{
+ auto res = isl::multi_aff::scale(v);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::scale_down(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_aff::scale_down(mv);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::scale_down(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_aff::scale_down(v);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::scale_down(long v) const
+{
+ auto res = isl::multi_aff::scale_down(v);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::set_at(int pos, const typed::aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::set_at(int pos, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::set_at(int pos, const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg1>
+typed::multi_aff<pair<Domain2, Range2>, Arg1> typed::multi_aff<pair<Domain2, Range2>, Range>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::multi_aff::set_range_tuple(id);
+ return typed::multi_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg1>
+typed::multi_aff<pair<Domain2, Range2>, Arg1> typed::multi_aff<pair<Domain2, Range2>, Range>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::multi_aff::set_range_tuple(id);
+ return typed::multi_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::space<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::space() const
+{
+ auto res = isl::multi_aff::space();
+ return typed::space<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::multi_aff::sub(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const
+{
+ auto res = isl::multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::subtract_domain(const typed::set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::subtract_domain(const typed::space<pair<Domain2, Range2>> &space) const
+{
+ auto res = isl::multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::subtract_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const
+{
+ auto res = isl::multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::to_multi_pw_aff() const
+{
+ auto res = isl::multi_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::to_multi_union_pw_aff() const
+{
+ auto res = isl::multi_aff::to_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::to_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::to_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::to_union_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::union_add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &mpa2) const
+{
+ auto res = isl::multi_aff::union_add(mpa2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::union_add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &mupa2) const
+{
+ auto res = isl::multi_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::union_add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::multi_aff<pair<Domain2, Range2>, Range>::union_add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const
+{
+ auto res = isl::multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>>::multi_aff(const typed::aff<Domain, pair<Range, Range2>> &aff)
+ : isl::multi_aff(aff)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>>::multi_aff(const typed::space<Domain, pair<Range, Range2>> &space, const typed::aff_list<Domain, Anonymous> &list)
+ : isl::multi_aff(space, list)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>>::multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_aff(ctx, str)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::add(const typed::multi_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::add(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::add(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::add(const typed::aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::add_constant(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::multi_aff::add_constant(mv);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::add_constant(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::multi_aff::add_constant(v);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::add_constant(long v) const
+{
+ auto res = isl::multi_aff::add_constant(v);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, Arg3> typed::multi_aff<Domain, pair<Range, Range2>>::apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg3> &upma2) const
+{
+ auto res = isl::multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::as_map() const
+{
+ auto res = isl::multi_aff::as_map();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::as_multi_aff() const
+{
+ auto res = isl::multi_aff::as_multi_aff();
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::as_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::as_union_map() const
+{
+ auto res = isl::multi_aff::as_union_map();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::aff<Domain, Anonymous> typed::multi_aff<Domain, pair<Range, Range2>>::at(int pos) const
+{
+ auto res = isl::multi_aff::at(pos);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::basic_set<Domain> typed::multi_aff<Domain, pair<Range, Range2>>::bind(const typed::multi_id<pair<Range, Range2>> &tuple) const
+{
+ auto res = isl::multi_aff::bind(tuple);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::multi_aff::bind_domain(tuple);
+ return typed::multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::multi_aff::coalesce();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_val<pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::constant_multi_val() const
+{
+ auto res = isl::multi_aff::constant_multi_val();
+ return typed::multi_val<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<Domain> typed::multi_aff<Domain, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::multi_aff::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::extract_pw_multi_aff(const typed::space<Domain, pair<Range, Range2>> &space) const
+{
+ auto res = isl::multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::floor() const
+{
+ auto res = isl::multi_aff::floor();
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::gist(const typed::point<Domain> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::identity() const
+{
+ auto res = isl::multi_aff::identity();
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::aff_list<Domain, Anonymous> typed::multi_aff<Domain, pair<Range, Range2>>::list() const
+{
+ auto res = isl::multi_aff::list();
+ return typed::aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::max(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::max(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_val<pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::max_multi_val() const
+{
+ auto res = isl::multi_aff::max_multi_val();
+ return typed::multi_val<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::min(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::min(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_val<pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::min_multi_val() const
+{
+ auto res = isl::multi_aff::min_multi_val();
+ return typed::multi_val<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::neg() const
+{
+ auto res = isl::multi_aff::neg();
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::multi_aff<Domain, pair<Range, Range2>>::product(const typed::multi_aff<Domain2, Arg3> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::multi_pw_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::multi_aff<Domain, pair<Range, Range2>>::product(const typed::multi_pw_aff<Domain2, Arg3> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::multi_aff<Domain, pair<Range, Range2>>::product(const typed::pw_multi_aff<Domain2, Arg3> &pma2) const
+{
+ auto res = isl::multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::multi_aff<Domain, pair<Range, Range2>>::product(const typed::aff<Domain2, Arg3> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::multi_aff<Domain2, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::multi_aff<Domain2, Domain> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::multi_aff<Domain> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::multi_pw_aff<Domain2, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa2) const
+{
+ auto res = isl::multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::multi_pw_aff<Domain> &mpa2) const
+{
+ auto res = isl::multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::pw_multi_aff<Domain2, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<Domain2, Domain> &pma2) const
+{
+ auto res = isl::multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<Domain> &pma2) const
+{
+ auto res = isl::multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::multi_aff<Domain2, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::aff<Domain2, Domain> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::aff<Domain> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff_list<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::pw_multi_aff_list() const
+{
+ auto res = isl::multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, Range> typed::multi_aff<Domain, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::multi_aff::range_factor_domain();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, Range2> typed::multi_aff<Domain, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::multi_aff::range_factor_range();
+ return typed::pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::multi_aff<Domain, Arg3> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::multi_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::multi_pw_aff<Domain, Arg3> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::multi_union_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::multi_union_pw_aff<Domain, Arg3> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::pw_multi_aff<Domain, Arg3> &pma2) const
+{
+ auto res = isl::multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::union_pw_multi_aff<Domain, Arg3> &upma2) const
+{
+ auto res = isl::multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::aff<Domain, Arg3> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::scale(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::multi_aff::scale(mv);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::scale(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::multi_aff::scale(v);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::scale(long v) const
+{
+ auto res = isl::multi_aff::scale(v);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::scale_down(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::multi_aff::scale_down(mv);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::scale_down(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::multi_aff::scale_down(v);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::scale_down(long v) const
+{
+ auto res = isl::multi_aff::scale_down(v);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::set_at(int pos, const typed::aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::space() const
+{
+ auto res = isl::multi_aff::space();
+ return typed::space<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::sub(const typed::multi_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::sub(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::sub(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::sub(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::sub(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::sub(const typed::aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::subtract_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::subtract_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::subtract_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::to_multi_pw_aff() const
+{
+ auto res = isl::multi_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::to_multi_union_pw_aff() const
+{
+ auto res = isl::multi_aff::to_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::to_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::to_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::to_union_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &mpa2) const
+{
+ auto res = isl::multi_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &mupa2) const
+{
+ auto res = isl::multi_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::multi_aff(const typed::aff<pair<T1, T2>, pair<Range, Range2>> &aff)
+ : isl::multi_aff(aff)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::multi_aff(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space, const typed::aff_list<pair<T1, T2>, Anonymous> &list)
+ : isl::multi_aff(space, list)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_aff(ctx, str)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::multi_aff::add(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::add(multi2);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::add_constant(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::multi_aff::add_constant(mv);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::add_constant(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::multi_aff::add_constant(v);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::add_constant(long v) const
+{
+ auto res = isl::multi_aff::add_constant(v);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, Arg2> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg2> &upma2) const
+{
+ auto res = isl::multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_map() const
+{
+ auto res = isl::multi_aff::as_map();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_multi_aff() const
+{
+ auto res = isl::multi_aff::as_multi_aff();
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_union_map() const
+{
+ auto res = isl::multi_aff::as_union_map();
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::aff<pair<T1, T2>, Anonymous> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::at(int pos) const
+{
+ auto res = isl::multi_aff::at(pos);
+ return typed::aff<pair<T1, T2>, Anonymous>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::basic_set<pair<T1, T2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::bind(const typed::multi_id<pair<Range, Range2>> &tuple) const
+{
+ auto res = isl::multi_aff::bind(tuple);
+ return typed::basic_set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const
+{
+ auto res = isl::multi_aff::bind_domain(tuple);
+ return typed::multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<T2, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::bind_domain_wrapped_domain(const typed::multi_id<T1> &tuple) const
+{
+ auto res = isl::multi_aff::bind_domain_wrapped_domain(tuple);
+ return typed::multi_aff<T2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::multi_aff::coalesce();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_val<pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::constant_multi_val() const
+{
+ auto res = isl::multi_aff::constant_multi_val();
+ return typed::multi_val<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<T1, T2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::multi_aff::domain();
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::extract_pw_multi_aff(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const
+{
+ auto res = isl::multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::floor() const
+{
+ auto res = isl::multi_aff::floor();
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::set<pair<T1, T2>> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::union_set<pair<T1, T2>> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::basic_set<pair<T1, T2>> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::point<pair<T1, T2>> &context) const
+{
+ auto res = isl::multi_aff::gist(context);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::identity() const
+{
+ auto res = isl::multi_aff::identity();
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::set<pair<T1, T2>> &set) const
+{
+ auto res = isl::multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::aff_list<pair<T1, T2>, Anonymous> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::list() const
+{
+ auto res = isl::multi_aff::list();
+ return typed::aff_list<pair<T1, T2>, Anonymous>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::max(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::max(multi2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_val<pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::max_multi_val() const
+{
+ auto res = isl::multi_aff::max_multi_val();
+ return typed::multi_val<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::min(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::min(multi2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_val<pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::min_multi_val() const
+{
+ auto res = isl::multi_aff::min_multi_val();
+ return typed::multi_val<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::neg() const
+{
+ auto res = isl::multi_aff::neg();
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain3>
+typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, T1> &pma2) const
+{
+ auto res = isl::multi_aff::preimage_domain_wrapped_domain(pma2);
+ return typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, T1> &upma2) const
+{
+ auto res = isl::multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::product(const typed::multi_aff<Domain2, Arg2> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::multi_pw_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::product(const typed::multi_pw_aff<Domain2, Arg2> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_pw_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::product(const typed::pw_multi_aff<Domain2, Arg2> &pma2) const
+{
+ auto res = isl::multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::product(const typed::aff<Domain2, Arg2> &multi2) const
+{
+ auto res = isl::multi_aff::product(multi2);
+ return typed::multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::multi_aff<Domain2, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::multi_aff<Domain2, pair<T1, T2>> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::multi_aff<pair<T1, T2>> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::multi_pw_aff<Domain2, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa2) const
+{
+ auto res = isl::multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::multi_pw_aff<pair<T1, T2>> &mpa2) const
+{
+ auto res = isl::multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::pw_multi_aff<Domain2, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma2) const
+{
+ auto res = isl::multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<pair<T1, T2>> &pma2) const
+{
+ auto res = isl::multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma2) const
+{
+ auto res = isl::multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<pair<T1, T2>> &upma2) const
+{
+ auto res = isl::multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::multi_aff<Domain2, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::aff<Domain2, pair<T1, T2>> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::aff<pair<T1, T2>> &ma2) const
+{
+ auto res = isl::multi_aff::pullback(ma2);
+ return typed::multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff_list<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::pw_multi_aff_list() const
+{
+ auto res = isl::multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, Range> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::multi_aff::range_factor_domain();
+ return typed::pw_multi_aff<pair<T1, T2>, Range>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, Range2> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::multi_aff::range_factor_range();
+ return typed::pw_multi_aff<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::multi_aff<pair<T1, T2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::multi_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::multi_pw_aff<pair<T1, T2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::multi_union_pw_aff<pair<T1, T2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::pw_multi_aff<pair<T1, T2>, Arg2> &pma2) const
+{
+ auto res = isl::multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::union_pw_multi_aff<pair<T1, T2>, Arg2> &upma2) const
+{
+ auto res = isl::multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::aff<pair<T1, T2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_aff::range_product(multi2);
+ return typed::multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::multi_aff::scale(mv);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::multi_aff::scale(v);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale(long v) const
+{
+ auto res = isl::multi_aff::scale(v);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale_down(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::multi_aff::scale_down(mv);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale_down(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::multi_aff::scale_down(v);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale_down(long v) const
+{
+ auto res = isl::multi_aff::scale_down(v);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::set_at(int pos, const typed::aff<pair<T1, T2>, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::set_at(int pos, const typed::pw_aff<pair<T1, T2>, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::set_at(int pos, const typed::union_pw_aff<pair<T1, T2>, Anonymous> &el) const
+{
+ auto res = isl::multi_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::space() const
+{
+ auto res = isl::multi_aff::space();
+ return typed::space<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::multi_aff::sub(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::multi_aff::sub(multi2);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::set<pair<T1, T2>> &set) const
+{
+ auto res = isl::multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::to_multi_pw_aff() const
+{
+ auto res = isl::multi_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::to_multi_union_pw_aff() const
+{
+ auto res = isl::multi_aff::to_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::to_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::to_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::to_union_pw_multi_aff() const
+{
+ auto res = isl::multi_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &mpa2) const
+{
+ auto res = isl::multi_aff::union_add(mpa2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &mupa2) const
+{
+ auto res = isl::multi_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain>
+typed::multi_id<Domain>::multi_id(const typed::space<Domain> &space, const typed::id_list<Anonymous> &list)
+ : isl::multi_id(space, list)
+{
+}
+
+template <typename Domain>
+typed::multi_id<Domain>::multi_id(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_id(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::id<Anonymous> typed::multi_id<Domain>::at(int pos) const
+{
+ auto res = isl::multi_id::at(pos);
+ return typed::id<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::id_list<Anonymous> typed::multi_id<Domain>::list() const
+{
+ auto res = isl::multi_id::list();
+ return typed::id_list<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_id<Domain> typed::multi_id<Domain>::set_at(int pos, const typed::id<Anonymous> &el) const
+{
+ auto res = isl::multi_id::set_at(pos, el);
+ return typed::multi_id<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_id<Domain> typed::multi_id<Domain>::set_at(int pos, const std::string &el) const
+{
+ auto res = isl::multi_id::set_at(pos, el);
+ return typed::multi_id<Domain>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::multi_id<Domain>::space() const
+{
+ auto res = isl::multi_id::space();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain>::multi_pw_aff(const typed::aff<Domain> &aff)
+ : isl::multi_pw_aff(aff)
+{
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain>::multi_pw_aff(const typed::multi_aff<Domain> &ma)
+ : isl::multi_pw_aff(ma)
+{
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain>::multi_pw_aff(const typed::pw_aff<Domain> &pa)
+ : isl::multi_pw_aff(pa)
+{
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain>::multi_pw_aff(const typed::space<Domain> &space, const typed::pw_aff_list<Anonymous> &list)
+ : isl::multi_pw_aff(space, list)
+{
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain>::multi_pw_aff(const typed::pw_multi_aff<Domain> &pma)
+ : isl::multi_pw_aff(pma)
+{
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain>::multi_pw_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_pw_aff(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::add(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_pw_aff<Domain>::add(const typed::multi_union_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::add(const typed::aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::add(const typed::multi_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::add(const typed::pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::add(const typed::pw_multi_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::add_constant(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::multi_pw_aff::add_constant(mv);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::add_constant(const typed::val<Domain> &v) const
+{
+ auto res = isl::multi_pw_aff::add_constant(v);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::add_constant(long v) const
+{
+ auto res = isl::multi_pw_aff::add_constant(v);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::multi_pw_aff<Domain>::as_multi_aff() const
+{
+ auto res = isl::multi_pw_aff::as_multi_aff();
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::multi_pw_aff<Domain>::as_set() const
+{
+ auto res = isl::multi_pw_aff::as_set();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Anonymous> typed::multi_pw_aff<Domain>::at(int pos) const
+{
+ auto res = isl::multi_pw_aff::at(pos);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<> typed::multi_pw_aff<Domain>::bind(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::multi_pw_aff::bind(tuple);
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::coalesce() const
+{
+ auto res = isl::multi_pw_aff::coalesce();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<> typed::multi_pw_aff<Domain>::domain() const
+{
+ auto res = isl::multi_pw_aff::domain();
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::gist(const typed::set<> &set) const
+{
+ auto res = isl::multi_pw_aff::gist(set);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_pw_aff<Domain>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::multi_pw_aff::gist(context);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::gist(const typed::basic_set<> &set) const
+{
+ auto res = isl::multi_pw_aff::gist(set);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::gist(const typed::point<> &set) const
+{
+ auto res = isl::multi_pw_aff::gist(set);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Domain> typed::multi_pw_aff<Domain>::identity() const
+{
+ auto res = isl::multi_pw_aff::identity();
+ return typed::multi_pw_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::multi_pw_aff<Arg1, Domain> typed::multi_pw_aff<Domain>::insert_domain(const typed::space<Arg1> &domain) const
+{
+ auto res = isl::multi_pw_aff::insert_domain(domain);
+ return typed::multi_pw_aff<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::multi_pw_aff::intersect_params(set);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::multi_pw_aff::intersect_params(set);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::multi_pw_aff::intersect_params(set);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_aff_list<Anonymous> typed::multi_pw_aff<Domain>::list() const
+{
+ auto res = isl::multi_pw_aff::list();
+ return typed::pw_aff_list<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::max(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::max(const typed::aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::max(const typed::multi_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::max(const typed::pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::max(const typed::pw_multi_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_pw_aff<Domain>::max_multi_val() const
+{
+ auto res = isl::multi_pw_aff::max_multi_val();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::min(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::min(const typed::aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::min(const typed::multi_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::min(const typed::pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::min(const typed::pw_multi_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_pw_aff<Domain>::min_multi_val() const
+{
+ auto res = isl::multi_pw_aff::min_multi_val();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::neg() const
+{
+ auto res = isl::multi_pw_aff::neg();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::multi_pw_aff<Domain>::product(const typed::multi_pw_aff<Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::multi_pw_aff<Domain>::product(const typed::aff<Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::multi_pw_aff<Domain>::product(const typed::multi_aff<Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::multi_pw_aff<Domain>::product(const typed::pw_aff<Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::multi_pw_aff<Domain>::product(const typed::pw_multi_aff<Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::scale(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::multi_pw_aff::scale(mv);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::scale(const typed::val<Domain> &v) const
+{
+ auto res = isl::multi_pw_aff::scale(v);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::scale(long v) const
+{
+ auto res = isl::multi_pw_aff::scale(v);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::scale_down(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::multi_pw_aff::scale_down(mv);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::scale_down(const typed::val<Domain> &v) const
+{
+ auto res = isl::multi_pw_aff::scale_down(v);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::scale_down(long v) const
+{
+ auto res = isl::multi_pw_aff::scale_down(v);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::set_at(int pos, const typed::pw_aff<Anonymous> &el) const
+{
+ auto res = isl::multi_pw_aff::set_at(pos, el);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_pw_aff<Domain>::set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const
+{
+ auto res = isl::multi_pw_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::multi_pw_aff<Domain2> typed::multi_pw_aff<Domain>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::multi_pw_aff::set_range_tuple(id);
+ return typed::multi_pw_aff<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::multi_pw_aff<Domain2> typed::multi_pw_aff<Domain>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::multi_pw_aff::set_range_tuple(id);
+ return typed::multi_pw_aff<Domain2>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::multi_pw_aff<Domain>::space() const
+{
+ auto res = isl::multi_pw_aff::space();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::sub(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_pw_aff<Domain>::sub(const typed::multi_union_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::sub(const typed::aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::sub(const typed::multi_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::sub(const typed::pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::sub(const typed::pw_multi_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::multi_pw_aff<Arg1, Domain> typed::multi_pw_aff<Domain>::unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const
+{
+ auto res = isl::multi_pw_aff::unbind_params_insert_domain(domain);
+ return typed::multi_pw_aff<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::union_add(const typed::multi_pw_aff<Domain> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_pw_aff<Domain>::union_add(const typed::multi_union_pw_aff<Domain> &mupa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::union_add(const typed::aff<Domain> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::union_add(const typed::multi_aff<Domain> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::union_add(const typed::pw_aff<Domain> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::multi_pw_aff<Domain>::union_add(const typed::pw_multi_aff<Domain> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range>::multi_pw_aff(const typed::aff<Domain, Range> &aff)
+ : isl::multi_pw_aff(aff)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range>::multi_pw_aff(const typed::multi_aff<Domain, Range> &ma)
+ : isl::multi_pw_aff(ma)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range>::multi_pw_aff(const typed::pw_aff<Domain, Range> &pa)
+ : isl::multi_pw_aff(pa)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range>::multi_pw_aff(const typed::space<Domain, Range> &space, const typed::pw_aff_list<Domain, Anonymous> &list)
+ : isl::multi_pw_aff(space, list)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range>::multi_pw_aff(const typed::pw_multi_aff<Domain, Range> &pma)
+ : isl::multi_pw_aff(pma)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range>::multi_pw_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_pw_aff(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::add(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::add(const typed::multi_union_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::add(const typed::aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::add(const typed::multi_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::add(const typed::pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::add(const typed::pw_multi_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::add_constant(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_pw_aff::add_constant(mv);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::add_constant(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_pw_aff::add_constant(v);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::add_constant(long v) const
+{
+ auto res = isl::multi_pw_aff::add_constant(v);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::multi_pw_aff<Domain, Range>::as_map() const
+{
+ auto res = isl::multi_pw_aff::as_map();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::as_multi_aff() const
+{
+ auto res = isl::multi_pw_aff::as_multi_aff();
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_aff<Domain, Anonymous> typed::multi_pw_aff<Domain, Range>::at(int pos) const
+{
+ auto res = isl::multi_pw_aff::at(pos);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Domain> typed::multi_pw_aff<Domain, Range>::bind(const typed::multi_id<Range> &tuple) const
+{
+ auto res = isl::multi_pw_aff::bind(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Range> typed::multi_pw_aff<Domain, Range>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::multi_pw_aff::bind_domain(tuple);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::coalesce() const
+{
+ auto res = isl::multi_pw_aff::coalesce();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Domain> typed::multi_pw_aff<Domain, Range>::domain() const
+{
+ auto res = isl::multi_pw_aff::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::gist(const typed::set<Domain> &set) const
+{
+ auto res = isl::multi_pw_aff::gist(set);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::multi_pw_aff::gist(context);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::gist(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::multi_pw_aff::gist(set);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::gist(const typed::point<Domain> &set) const
+{
+ auto res = isl::multi_pw_aff::gist(set);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::identity() const
+{
+ auto res = isl::multi_pw_aff::identity();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::intersect_domain(const typed::set<Domain> &domain) const
+{
+ auto res = isl::multi_pw_aff::intersect_domain(domain);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::multi_pw_aff::intersect_domain(uset);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::intersect_domain(const typed::basic_set<Domain> &domain) const
+{
+ auto res = isl::multi_pw_aff::intersect_domain(domain);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::intersect_domain(const typed::point<Domain> &domain) const
+{
+ auto res = isl::multi_pw_aff::intersect_domain(domain);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::multi_pw_aff::intersect_params(set);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::multi_pw_aff::intersect_params(set);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::multi_pw_aff::intersect_params(set);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_aff_list<Domain, Anonymous> typed::multi_pw_aff<Domain, Range>::list() const
+{
+ auto res = isl::multi_pw_aff::list();
+ return typed::pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::max(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::max(const typed::aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::max(const typed::multi_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::max(const typed::pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::max(const typed::pw_multi_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<Range> typed::multi_pw_aff<Domain, Range>::max_multi_val() const
+{
+ auto res = isl::multi_pw_aff::max_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::min(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::min(const typed::aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::min(const typed::multi_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::min(const typed::pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::min(const typed::pw_multi_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<Range> typed::multi_pw_aff<Domain, Range>::min_multi_val() const
+{
+ auto res = isl::multi_pw_aff::min_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::neg() const
+{
+ auto res = isl::multi_pw_aff::neg();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::multi_pw_aff<Domain, Range>::product(const typed::multi_pw_aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::multi_pw_aff<Domain, Range>::product(const typed::aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::multi_pw_aff<Domain, Range>::product(const typed::multi_aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::multi_pw_aff<Domain, Range>::product(const typed::pw_aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::multi_pw_aff<Domain, Range>::product(const typed::pw_multi_aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_pw_aff<Domain2, Range> typed::multi_pw_aff<Domain, Range>::pullback(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::multi_pw_aff::pullback(ma);
+ return typed::multi_pw_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Range> typed::multi_pw_aff<Domain, Range>::pullback(const typed::multi_aff<Domain> &ma) const
+{
+ auto res = isl::multi_pw_aff::pullback(ma);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_pw_aff<Domain2, Range> typed::multi_pw_aff<Domain, Range>::pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Range> typed::multi_pw_aff<Domain, Range>::pullback(const typed::multi_pw_aff<Domain> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_pw_aff<Domain2, Range> typed::multi_pw_aff<Domain, Range>::pullback(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::multi_pw_aff::pullback(pma);
+ return typed::multi_pw_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Range> typed::multi_pw_aff<Domain, Range>::pullback(const typed::pw_multi_aff<Domain> &pma) const
+{
+ auto res = isl::multi_pw_aff::pullback(pma);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_union_pw_aff<Domain2, Range> typed::multi_pw_aff<Domain, Range>::pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::multi_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Range> typed::multi_pw_aff<Domain, Range>::pullback(const typed::union_pw_multi_aff<Domain> &upma) const
+{
+ auto res = isl::multi_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_pw_aff<Domain, Range>::range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::multi_pw_aff<Domain, Range>::range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_pw_aff<Domain, Range>::range_product(const typed::aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_pw_aff<Domain, Range>::range_product(const typed::multi_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_pw_aff<Domain, Range>::range_product(const typed::pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::multi_pw_aff<Domain, Range>::range_product(const typed::pw_multi_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::scale(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_pw_aff::scale(mv);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::scale(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_pw_aff::scale(v);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::scale(long v) const
+{
+ auto res = isl::multi_pw_aff::scale(v);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::scale_down(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_pw_aff::scale_down(mv);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::scale_down(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_pw_aff::scale_down(v);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::scale_down(long v) const
+{
+ auto res = isl::multi_pw_aff::scale_down(v);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::multi_pw_aff::set_at(pos, el);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::multi_pw_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_pw_aff<Domain, Range2> typed::multi_pw_aff<Domain, Range>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::multi_pw_aff::set_range_tuple(id);
+ return typed::multi_pw_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_pw_aff<Domain, Range2> typed::multi_pw_aff<Domain, Range>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::multi_pw_aff::set_range_tuple(id);
+ return typed::multi_pw_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Domain, Range> typed::multi_pw_aff<Domain, Range>::space() const
+{
+ auto res = isl::multi_pw_aff::space();
+ return typed::space<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::sub(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::sub(const typed::multi_union_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::sub(const typed::aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::sub(const typed::multi_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::sub(const typed::pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::sub(const typed::pw_multi_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::union_add(const typed::multi_pw_aff<Domain, Range> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::union_add(const typed::multi_union_pw_aff<Domain, Range> &mupa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::union_add(const typed::aff<Domain, Range> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::union_add(const typed::multi_aff<Domain, Range> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::union_add(const typed::pw_aff<Domain, Range> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::multi_pw_aff<Domain, Range>::union_add(const typed::pw_multi_aff<Domain, Range> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range>::multi_pw_aff(const typed::aff<pair<Domain2, Range2>, Range> &aff)
+ : isl::multi_pw_aff(aff)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range>::multi_pw_aff(const typed::multi_aff<pair<Domain2, Range2>, Range> &ma)
+ : isl::multi_pw_aff(ma)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range>::multi_pw_aff(const typed::pw_aff<pair<Domain2, Range2>, Range> &pa)
+ : isl::multi_pw_aff(pa)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range>::multi_pw_aff(const typed::space<pair<Domain2, Range2>, Range> &space, const typed::pw_aff_list<pair<Domain2, Range2>, Anonymous> &list)
+ : isl::multi_pw_aff(space, list)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range>::multi_pw_aff(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma)
+ : isl::multi_pw_aff(pma)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range>::multi_pw_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_pw_aff(ctx, str)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::add(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::add(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::add(const typed::pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::add(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::add_constant(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_pw_aff::add_constant(mv);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::add_constant(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_pw_aff::add_constant(v);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::add_constant(long v) const
+{
+ auto res = isl::multi_pw_aff::add_constant(v);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::map<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::as_map() const
+{
+ auto res = isl::multi_pw_aff::as_map();
+ return typed::map<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::as_multi_aff() const
+{
+ auto res = isl::multi_pw_aff::as_multi_aff();
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::at(int pos) const
+{
+ auto res = isl::multi_pw_aff::at(pos);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::set<pair<Domain2, Range2>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::bind(const typed::multi_id<Range> &tuple) const
+{
+ auto res = isl::multi_pw_aff::bind(tuple);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::bind_domain(const typed::multi_id<pair<Domain2, Range2>> &tuple) const
+{
+ auto res = isl::multi_pw_aff::bind_domain(tuple);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<Range2, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::bind_domain_wrapped_domain(const typed::multi_id<Domain2> &tuple) const
+{
+ auto res = isl::multi_pw_aff::bind_domain_wrapped_domain(tuple);
+ return typed::multi_pw_aff<Range2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::coalesce() const
+{
+ auto res = isl::multi_pw_aff::coalesce();
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::set<pair<Domain2, Range2>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::domain() const
+{
+ auto res = isl::multi_pw_aff::domain();
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::gist(const typed::set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::multi_pw_aff::gist(set);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::gist(const typed::union_set<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::multi_pw_aff::gist(context);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::gist(const typed::basic_set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::multi_pw_aff::gist(set);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::gist(const typed::point<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::multi_pw_aff::gist(set);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::identity() const
+{
+ auto res = isl::multi_pw_aff::identity();
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::set<pair<Domain2, Range2>> &domain) const
+{
+ auto res = isl::multi_pw_aff::intersect_domain(domain);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const
+{
+ auto res = isl::multi_pw_aff::intersect_domain(uset);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::basic_set<pair<Domain2, Range2>> &domain) const
+{
+ auto res = isl::multi_pw_aff::intersect_domain(domain);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::point<pair<Domain2, Range2>> &domain) const
+{
+ auto res = isl::multi_pw_aff::intersect_domain(domain);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::multi_pw_aff::intersect_params(set);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::multi_pw_aff::intersect_params(set);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::multi_pw_aff::intersect_params(set);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_aff_list<pair<Domain2, Range2>, Anonymous> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::list() const
+{
+ auto res = isl::multi_pw_aff::list();
+ return typed::pw_aff_list<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::max(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::max(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::max(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::max(const typed::pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::max(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::max(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_val<Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::max_multi_val() const
+{
+ auto res = isl::multi_pw_aff::max_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::min(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::min(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::min(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::min(const typed::pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::min(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::min(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_val<Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::min_multi_val() const
+{
+ auto res = isl::multi_pw_aff::min_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::neg() const
+{
+ auto res = isl::multi_pw_aff::neg();
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::product(const typed::multi_pw_aff<Arg2, Arg3> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::product(const typed::aff<Arg2, Arg3> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::product(const typed::multi_aff<Arg2, Arg3> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::product(const typed::pw_aff<Arg2, Arg3> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::product(const typed::pw_multi_aff<Arg2, Arg3> &multi2) const
+{
+ auto res = isl::multi_pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<Arg2, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_aff<Arg2, pair<Domain2, Range2>> &ma) const
+{
+ auto res = isl::multi_pw_aff::pullback(ma);
+ return typed::multi_pw_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_aff<pair<Domain2, Range2>> &ma) const
+{
+ auto res = isl::multi_pw_aff::pullback(ma);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<Arg2, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_pw_aff<Arg2, pair<Domain2, Range2>> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_pw_aff<pair<Domain2, Range2>> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<Arg2, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::pullback(const typed::pw_multi_aff<Arg2, pair<Domain2, Range2>> &pma) const
+{
+ auto res = isl::multi_pw_aff::pullback(pma);
+ return typed::multi_pw_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::pullback(const typed::pw_multi_aff<pair<Domain2, Range2>> &pma) const
+{
+ auto res = isl::multi_pw_aff::pullback(pma);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_union_pw_aff<Arg2, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::pullback(const typed::union_pw_multi_aff<Arg2, pair<Domain2, Range2>> &upma) const
+{
+ auto res = isl::multi_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::pullback(const typed::union_pw_multi_aff<pair<Domain2, Range2>> &upma) const
+{
+ auto res = isl::multi_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::range_product(const typed::multi_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::range_product(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::range_product(const typed::aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::range_product(const typed::multi_aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::range_product(const typed::pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::range_product(const typed::pw_multi_aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::multi_pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::scale(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_pw_aff::scale(mv);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::scale(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_pw_aff::scale(v);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::scale(long v) const
+{
+ auto res = isl::multi_pw_aff::scale(v);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::scale_down(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_pw_aff::scale_down(mv);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::scale_down(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_pw_aff::scale_down(v);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::scale_down(long v) const
+{
+ auto res = isl::multi_pw_aff::scale_down(v);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::set_at(int pos, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::multi_pw_aff::set_at(pos, el);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::set_at(int pos, const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::multi_pw_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg1>
+typed::multi_pw_aff<pair<Domain2, Range2>, Arg1> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::multi_pw_aff::set_range_tuple(id);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg1>
+typed::multi_pw_aff<pair<Domain2, Range2>, Arg1> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::multi_pw_aff::set_range_tuple(id);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::space<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::space() const
+{
+ auto res = isl::multi_pw_aff::space();
+ return typed::space<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::sub(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::sub(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::sub(const typed::aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::sub(const typed::multi_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::sub(const typed::pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::sub(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::multi_pw_aff::sub(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::union_add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::union_add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &mupa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::union_add(const typed::aff<pair<Domain2, Range2>, Range> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::union_add(const typed::multi_aff<pair<Domain2, Range2>, Range> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::union_add(const typed::pw_aff<pair<Domain2, Range2>, Range> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::multi_pw_aff<pair<Domain2, Range2>, Range>::union_add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &mpa2) const
+{
+ auto res = isl::multi_pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain>::multi_union_pw_aff(const typed::multi_pw_aff<Domain> &mpa)
+ : isl::multi_union_pw_aff(mpa)
+{
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain>::multi_union_pw_aff(const typed::union_pw_aff<Domain> &upa)
+ : isl::multi_union_pw_aff(upa)
+{
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain>::multi_union_pw_aff(const typed::space<Domain> &space, const typed::union_pw_aff_list<Anonymous> &list)
+ : isl::multi_union_pw_aff(space, list)
+{
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain>::multi_union_pw_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_union_pw_aff(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::add(const typed::multi_union_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::add(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::add(const typed::union_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Anonymous> typed::multi_union_pw_aff<Domain>::at(int pos) const
+{
+ auto res = isl::multi_union_pw_aff::at(pos);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_set<> typed::multi_union_pw_aff<Domain>::bind(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::multi_union_pw_aff::bind(tuple);
+ return typed::union_set<>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::coalesce() const
+{
+ auto res = isl::multi_union_pw_aff::coalesce();
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<> typed::multi_union_pw_aff<Domain>::domain() const
+{
+ auto res = isl::multi_union_pw_aff::domain();
+ return typed::union_set<>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::multi_union_pw_aff::gist(context);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::gist(const typed::basic_set<> &context) const
+{
+ auto res = isl::multi_union_pw_aff::gist(context);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::gist(const typed::point<> &context) const
+{
+ auto res = isl::multi_union_pw_aff::gist(context);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::gist(const typed::set<> &context) const
+{
+ auto res = isl::multi_union_pw_aff::gist(context);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::multi_union_pw_aff::intersect_params(params);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::intersect_params(const typed::basic_set<> ¶ms) const
+{
+ auto res = isl::multi_union_pw_aff::intersect_params(params);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::intersect_params(const typed::point<> ¶ms) const
+{
+ auto res = isl::multi_union_pw_aff::intersect_params(params);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff_list<Anonymous> typed::multi_union_pw_aff<Domain>::list() const
+{
+ auto res = isl::multi_union_pw_aff::list();
+ return typed::union_pw_aff_list<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::neg() const
+{
+ auto res = isl::multi_union_pw_aff::neg();
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::scale(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::multi_union_pw_aff::scale(mv);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::scale(const typed::val<Domain> &v) const
+{
+ auto res = isl::multi_union_pw_aff::scale(v);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::scale(long v) const
+{
+ auto res = isl::multi_union_pw_aff::scale(v);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::scale_down(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::multi_union_pw_aff::scale_down(mv);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::scale_down(const typed::val<Domain> &v) const
+{
+ auto res = isl::multi_union_pw_aff::scale_down(v);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::scale_down(long v) const
+{
+ auto res = isl::multi_union_pw_aff::scale_down(v);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const
+{
+ auto res = isl::multi_union_pw_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::multi_union_pw_aff<Domain2> typed::multi_union_pw_aff<Domain>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::multi_union_pw_aff::set_range_tuple(id);
+ return typed::multi_union_pw_aff<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::multi_union_pw_aff<Domain2> typed::multi_union_pw_aff<Domain>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::multi_union_pw_aff::set_range_tuple(id);
+ return typed::multi_union_pw_aff<Domain2>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::multi_union_pw_aff<Domain>::space() const
+{
+ auto res = isl::multi_union_pw_aff::space();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::sub(const typed::multi_union_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::sub(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::sub(const typed::union_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::union_add(const typed::multi_union_pw_aff<Domain> &mupa2) const
+{
+ auto res = isl::multi_union_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::union_add(const typed::multi_pw_aff<Domain> &mupa2) const
+{
+ auto res = isl::multi_union_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::multi_union_pw_aff<Domain>::union_add(const typed::union_pw_aff<Domain> &mupa2) const
+{
+ auto res = isl::multi_union_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range>::multi_union_pw_aff(const typed::multi_pw_aff<Domain, Range> &mpa)
+ : isl::multi_union_pw_aff(mpa)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range>::multi_union_pw_aff(const typed::union_pw_aff<Domain, Range> &upa)
+ : isl::multi_union_pw_aff(upa)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range>::multi_union_pw_aff(const typed::space<Domain, Range> &space, const typed::union_pw_aff_list<Domain, Anonymous> &list)
+ : isl::multi_union_pw_aff(space, list)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range>::multi_union_pw_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_union_pw_aff(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::add(const typed::multi_union_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::add(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::add(const typed::union_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_aff<Domain, Anonymous> typed::multi_union_pw_aff<Domain, Range>::at(int pos) const
+{
+ auto res = isl::multi_union_pw_aff::at(pos);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<Domain> typed::multi_union_pw_aff<Domain, Range>::bind(const typed::multi_id<Range> &tuple) const
+{
+ auto res = isl::multi_union_pw_aff::bind(tuple);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::coalesce() const
+{
+ auto res = isl::multi_union_pw_aff::coalesce();
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<Domain> typed::multi_union_pw_aff<Domain, Range>::domain() const
+{
+ auto res = isl::multi_union_pw_aff::domain();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::multi_union_pw_aff::gist(context);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::multi_union_pw_aff::gist(context);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::gist(const typed::point<Domain> &context) const
+{
+ auto res = isl::multi_union_pw_aff::gist(context);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::multi_union_pw_aff::gist(context);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::multi_union_pw_aff::intersect_domain(uset);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::intersect_domain(const typed::basic_set<Domain> &uset) const
+{
+ auto res = isl::multi_union_pw_aff::intersect_domain(uset);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::intersect_domain(const typed::point<Domain> &uset) const
+{
+ auto res = isl::multi_union_pw_aff::intersect_domain(uset);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::intersect_domain(const typed::set<Domain> &uset) const
+{
+ auto res = isl::multi_union_pw_aff::intersect_domain(uset);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::multi_union_pw_aff::intersect_params(params);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::intersect_params(const typed::basic_set<> ¶ms) const
+{
+ auto res = isl::multi_union_pw_aff::intersect_params(params);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::intersect_params(const typed::point<> ¶ms) const
+{
+ auto res = isl::multi_union_pw_aff::intersect_params(params);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_aff_list<Domain, Anonymous> typed::multi_union_pw_aff<Domain, Range>::list() const
+{
+ auto res = isl::multi_union_pw_aff::list();
+ return typed::union_pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::neg() const
+{
+ auto res = isl::multi_union_pw_aff::neg();
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_union_pw_aff<Domain2, Range> typed::multi_union_pw_aff<Domain, Range>::pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::multi_union_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Range> typed::multi_union_pw_aff<Domain, Range>::pullback(const typed::union_pw_multi_aff<Domain> &upma) const
+{
+ auto res = isl::multi_union_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_union_pw_aff<Domain2, Range> typed::multi_union_pw_aff<Domain, Range>::pullback(const typed::multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::multi_union_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Range> typed::multi_union_pw_aff<Domain, Range>::pullback(const typed::multi_aff<Domain> &upma) const
+{
+ auto res = isl::multi_union_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_union_pw_aff<Domain2, Range> typed::multi_union_pw_aff<Domain, Range>::pullback(const typed::pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::multi_union_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Range> typed::multi_union_pw_aff<Domain, Range>::pullback(const typed::pw_multi_aff<Domain> &upma) const
+{
+ auto res = isl::multi_union_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_union_pw_aff<Domain2, Range> typed::multi_union_pw_aff<Domain, Range>::pullback(const typed::union_pw_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::multi_union_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Range> typed::multi_union_pw_aff<Domain, Range>::pullback(const typed::union_pw_aff<Domain> &upma) const
+{
+ auto res = isl::multi_union_pw_aff::pullback(upma);
+ return typed::multi_union_pw_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::multi_union_pw_aff<Domain, Range>::range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::multi_union_pw_aff<Domain, Range>::range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::multi_union_pw_aff<Domain, Range>::range_product(const typed::union_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::scale(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_union_pw_aff::scale(mv);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::scale(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_union_pw_aff::scale(v);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::scale(long v) const
+{
+ auto res = isl::multi_union_pw_aff::scale(v);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::scale_down(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::multi_union_pw_aff::scale_down(mv);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::scale_down(const typed::val<Range> &v) const
+{
+ auto res = isl::multi_union_pw_aff::scale_down(v);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::scale_down(long v) const
+{
+ auto res = isl::multi_union_pw_aff::scale_down(v);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::multi_union_pw_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, Range2> typed::multi_union_pw_aff<Domain, Range>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::multi_union_pw_aff::set_range_tuple(id);
+ return typed::multi_union_pw_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, Range2> typed::multi_union_pw_aff<Domain, Range>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::multi_union_pw_aff::set_range_tuple(id);
+ return typed::multi_union_pw_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Range> typed::multi_union_pw_aff<Domain, Range>::space() const
+{
+ auto res = isl::multi_union_pw_aff::space();
+ return typed::space<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::sub(const typed::multi_union_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::sub(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::sub(const typed::union_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::multi_union_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::union_add(const typed::multi_union_pw_aff<Domain, Range> &mupa2) const
+{
+ auto res = isl::multi_union_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::union_add(const typed::multi_pw_aff<Domain, Range> &mupa2) const
+{
+ auto res = isl::multi_union_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::multi_union_pw_aff<Domain, Range>::union_add(const typed::union_pw_aff<Domain, Range> &mupa2) const
+{
+ auto res = isl::multi_union_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain>::multi_val(const typed::space<Domain> &space, const typed::val_list<Anonymous> &list)
+ : isl::multi_val(space, list)
+{
+}
+
+template <typename Domain>
+typed::multi_val<Domain>::multi_val(const isl::ctx &ctx, const std::string &str)
+ : isl::multi_val(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::add(const typed::multi_val<Domain> &multi2) const
+{
+ auto res = isl::multi_val::add(multi2);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::add(const typed::val<Domain> &v) const
+{
+ auto res = isl::multi_val::add(v);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::add(long v) const
+{
+ auto res = isl::multi_val::add(v);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::val<Anonymous> typed::multi_val<Domain>::at(int pos) const
+{
+ auto res = isl::multi_val::at(pos);
+ return typed::val<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::val_list<Anonymous> typed::multi_val<Domain>::list() const
+{
+ auto res = isl::multi_val::list();
+ return typed::val_list<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::max(const typed::multi_val<Domain> &multi2) const
+{
+ auto res = isl::multi_val::max(multi2);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::min(const typed::multi_val<Domain> &multi2) const
+{
+ auto res = isl::multi_val::min(multi2);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::neg() const
+{
+ auto res = isl::multi_val::neg();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::multi_val<pair<Domain, Range>> typed::multi_val<Domain>::product(const typed::multi_val<Range> &multi2) const
+{
+ auto res = isl::multi_val::product(multi2);
+ return typed::multi_val<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::scale(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::multi_val::scale(mv);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::scale(const typed::val<Domain> &v) const
+{
+ auto res = isl::multi_val::scale(v);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::scale(long v) const
+{
+ auto res = isl::multi_val::scale(v);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::scale_down(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::multi_val::scale_down(mv);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::scale_down(const typed::val<Domain> &v) const
+{
+ auto res = isl::multi_val::scale_down(v);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::scale_down(long v) const
+{
+ auto res = isl::multi_val::scale_down(v);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::set_at(int pos, const typed::val<Anonymous> &el) const
+{
+ auto res = isl::multi_val::set_at(pos, el);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::set_at(int pos, long el) const
+{
+ auto res = isl::multi_val::set_at(pos, el);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::multi_val<Domain2> typed::multi_val<Domain>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::multi_val::set_range_tuple(id);
+ return typed::multi_val<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::multi_val<Domain2> typed::multi_val<Domain>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::multi_val::set_range_tuple(id);
+ return typed::multi_val<Domain2>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::multi_val<Domain>::space() const
+{
+ auto res = isl::multi_val::space();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::multi_val<Domain>::sub(const typed::multi_val<Domain> &multi2) const
+{
+ auto res = isl::multi_val::sub(multi2);
+ return typed::multi_val<Domain>(res);
+}
+
+typed::set<> typed::point<>::coalesce() const
+{
+ auto res = isl::point::coalesce();
+ return typed::set<>(res);
+}
+
+typed::basic_set<> typed::point<>::detect_equalities() const
+{
+ auto res = isl::point::detect_equalities();
+ return typed::basic_set<>(res);
+}
+
+bool typed::point<>::every_set(const std::function<bool(typed::set<>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<>(arg0));
+ };
+ return isl::point::every_set(lambda);
+}
+
+typed::set<> typed::point<>::extract_set(const typed::space<> &space) const
+{
+ auto res = isl::point::extract_set(space);
+ return typed::set<>(res);
+}
+
+void typed::point<>::foreach_basic_set(const std::function<void(typed::basic_set<>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_set arg0) {
+ return fn(typed::basic_set<>(arg0));
+ };
+ return isl::point::foreach_basic_set(lambda);
+}
+
+void typed::point<>::foreach_point(const std::function<void(typed::point<>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<>(arg0));
+ };
+ return isl::point::foreach_point(lambda);
+}
+
+void typed::point<>::foreach_set(const std::function<void(typed::set<>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<>(arg0));
+ };
+ return isl::point::foreach_set(lambda);
+}
+
+typed::basic_set<> typed::point<>::gist(const typed::basic_set<> &context) const
+{
+ auto res = isl::point::gist(context);
+ return typed::basic_set<>(res);
+}
+
+typed::set<> typed::point<>::gist(const typed::set<> &context) const
+{
+ auto res = isl::point::gist(context);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::point<>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::point::gist(context);
+ return typed::union_set<>(res);
+}
+
+typed::pw_aff<Anonymous> typed::point<>::indicator_function() const
+{
+ auto res = isl::point::indicator_function();
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::basic_set<> typed::point<>::intersect(const typed::basic_set<> &bset2) const
+{
+ auto res = isl::point::intersect(bset2);
+ return typed::basic_set<>(res);
+}
+
+typed::set<> typed::point<>::intersect(const typed::set<> &set2) const
+{
+ auto res = isl::point::intersect(set2);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::point<>::intersect(const typed::union_set<> &uset2) const
+{
+ auto res = isl::point::intersect(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::set<> typed::point<>::project_out_all_params() const
+{
+ auto res = isl::point::project_out_all_params();
+ return typed::set<>(res);
+}
+
+typed::set<> typed::point<>::project_out_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::point::project_out_param(id);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::point<>::project_out_param(const std::string &id) const
+{
+ auto res = isl::point::project_out_param(id);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::point<>::project_out_param(const typed::id_list<Anonymous> &list) const
+{
+ auto res = isl::point::project_out_param(list);
+ return typed::set<>(res);
+}
+
+typed::space<> typed::point<>::space() const
+{
+ auto res = isl::point::space();
+ return typed::space<>(res);
+}
+
+typed::set<> typed::point<>::subtract(const typed::set<> &set2) const
+{
+ auto res = isl::point::subtract(set2);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::point<>::subtract(const typed::union_set<> &uset2) const
+{
+ auto res = isl::point::subtract(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::set<> typed::point<>::to_set() const
+{
+ auto res = isl::point::to_set();
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::point<>::to_union_set() const
+{
+ auto res = isl::point::to_union_set();
+ return typed::union_set<>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<>::unbind_params(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::point::unbind_params(tuple);
+ return typed::set<Domain>(res);
+}
+
+typed::set<> typed::point<>::unite(const typed::basic_set<> &bset2) const
+{
+ auto res = isl::point::unite(bset2);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::point<>::unite(const typed::set<> &set2) const
+{
+ auto res = isl::point::unite(set2);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::point<>::unite(const typed::union_set<> &uset2) const
+{
+ auto res = isl::point::unite(uset2);
+ return typed::union_set<>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::basic_set<Range> typed::point<Domain>::apply(const typed::basic_map<Domain, Range> &bmap) const
+{
+ auto res = isl::point::apply(bmap);
+ return typed::basic_set<Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::set<Range> typed::point<Domain>::apply(const typed::map<Domain, Range> &map) const
+{
+ auto res = isl::point::apply(map);
+ return typed::set<Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_set<Range> typed::point<Domain>::apply(const typed::union_map<Domain, Range> &umap) const
+{
+ auto res = isl::point::apply(umap);
+ return typed::union_set<Range>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::point<Domain>::as_pw_multi_aff() const
+{
+ auto res = isl::point::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::as_set() const
+{
+ auto res = isl::point::as_set();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<> typed::point<Domain>::bind(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::point::bind(tuple);
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::coalesce() const
+{
+ auto res = isl::point::coalesce();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::point<Domain>::detect_equalities() const
+{
+ auto res = isl::point::detect_equalities();
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+bool typed::point<Domain>::every_set(const std::function<bool(typed::set<Domain>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<Domain>(arg0));
+ };
+ return isl::point::every_set(lambda);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::extract_set(const typed::space<Domain> &space) const
+{
+ auto res = isl::point::extract_set(space);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+void typed::point<Domain>::foreach_basic_set(const std::function<void(typed::basic_set<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_set arg0) {
+ return fn(typed::basic_set<Domain>(arg0));
+ };
+ return isl::point::foreach_basic_set(lambda);
+}
+
+template <typename Domain>
+void typed::point<Domain>::foreach_point(const std::function<void(typed::point<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<Domain>(arg0));
+ };
+ return isl::point::foreach_point(lambda);
+}
+
+template <typename Domain>
+void typed::point<Domain>::foreach_set(const std::function<void(typed::set<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<Domain>(arg0));
+ };
+ return isl::point::foreach_set(lambda);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::point<Domain>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::point::gist(context);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::point::gist(context);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::point<Domain>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::point::gist(context);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::point<Domain>::identity() const
+{
+ auto res = isl::point::identity();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::point<Domain>::indicator_function() const
+{
+ auto res = isl::point::indicator_function();
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::map<Arg1, Domain> typed::point<Domain>::insert_domain(const typed::space<Arg1> &domain) const
+{
+ auto res = isl::point::insert_domain(domain);
+ return typed::map<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::point<Domain>::intersect(const typed::basic_set<Domain> &bset2) const
+{
+ auto res = isl::point::intersect(bset2);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::intersect(const typed::set<Domain> &set2) const
+{
+ auto res = isl::point::intersect(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::point<Domain>::intersect(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::point::intersect(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<Domain> typed::point<Domain>::intersect_params(const typed::basic_set<> &bset2) const
+{
+ auto res = isl::point::intersect_params(bset2);
+ return typed::basic_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::point::intersect_params(params);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::lexmax() const
+{
+ auto res = isl::point::lexmax();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::point<Domain>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::point::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::lexmin() const
+{
+ auto res = isl::point::lexmin();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::point<Domain>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::point::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::lower_bound(const typed::multi_pw_aff<Domain> &lower) const
+{
+ auto res = isl::point::lower_bound(lower);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::lower_bound(const typed::multi_val<Domain> &lower) const
+{
+ auto res = isl::point::lower_bound(lower);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::point<Domain>::max_multi_pw_aff() const
+{
+ auto res = isl::point::max_multi_pw_aff();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::point<Domain>::min_multi_pw_aff() const
+{
+ auto res = isl::point::min_multi_pw_aff();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::point<Domain>::multi_val() const
+{
+ auto res = isl::point::multi_val();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::basic_set<> typed::point<Domain>::params() const
+{
+ auto res = isl::point::params();
+ return typed::basic_set<>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::point<Domain>::plain_multi_val_if_fixed() const
+{
+ auto res = isl::point::plain_multi_val_if_fixed();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::set<Domain2> typed::point<Domain>::preimage(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::point::preimage(ma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::set<Domain2> typed::point<Domain>::preimage(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::point::preimage(mpa);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::set<Domain2> typed::point<Domain>::preimage(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::point::preimage(pma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_set<Domain2> typed::point<Domain>::preimage(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::point::preimage(upma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::set<pair<Domain, Range>> typed::point<Domain>::product(const typed::set<Range> &set2) const
+{
+ auto res = isl::point::product(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::project_out_all_params() const
+{
+ auto res = isl::point::project_out_all_params();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::project_out_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::point::project_out_param(id);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::project_out_param(const std::string &id) const
+{
+ auto res = isl::point::project_out_param(id);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::project_out_param(const typed::id_list<Anonymous> &list) const
+{
+ auto res = isl::point::project_out_param(list);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::pw_multi_aff<Domain, Range> typed::point<Domain>::pw_multi_aff_on_domain(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::point::pw_multi_aff_on_domain(mv);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain>
+typed::fixed_box<Domain> typed::point<Domain>::simple_fixed_box_hull() const
+{
+ auto res = isl::point::simple_fixed_box_hull();
+ return typed::fixed_box<Domain>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::point<Domain>::space() const
+{
+ auto res = isl::point::space();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::subtract(const typed::set<Domain> &set2) const
+{
+ auto res = isl::point::subtract(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::point<Domain>::subtract(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::point::subtract(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::to_set() const
+{
+ auto res = isl::point::to_set();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::point<Domain>::to_union_set() const
+{
+ auto res = isl::point::to_union_set();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::point<Domain>::translation() const
+{
+ auto res = isl::point::translation();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::map<Arg1, Domain> typed::point<Domain>::unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const
+{
+ auto res = isl::point::unbind_params_insert_domain(domain);
+ return typed::map<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::unite(const typed::basic_set<Domain> &bset2) const
+{
+ auto res = isl::point::unite(bset2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::unite(const typed::set<Domain> &set2) const
+{
+ auto res = isl::point::unite(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::point<Domain>::unite(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::point::unite(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::upper_bound(const typed::multi_pw_aff<Domain> &upper) const
+{
+ auto res = isl::point::upper_bound(upper);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::point<Domain>::upper_bound(const typed::multi_val<Domain> &upper) const
+{
+ auto res = isl::point::upper_bound(upper);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::basic_set<Arg2> typed::point<pair<Domain, Range>>::apply(const typed::basic_map<pair<Domain, Range>, Arg2> &bmap) const
+{
+ auto res = isl::point::apply(bmap);
+ return typed::basic_set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::set<Arg2> typed::point<pair<Domain, Range>>::apply(const typed::map<pair<Domain, Range>, Arg2> &map) const
+{
+ auto res = isl::point::apply(map);
+ return typed::set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::union_set<Arg2> typed::point<pair<Domain, Range>>::apply(const typed::union_map<pair<Domain, Range>, Arg2> &umap) const
+{
+ auto res = isl::point::apply(umap);
+ return typed::union_set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::point<pair<Domain, Range>>::as_pw_multi_aff() const
+{
+ auto res = isl::point::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::as_set() const
+{
+ auto res = isl::point::as_set();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<> typed::point<pair<Domain, Range>>::bind(const typed::multi_id<pair<Domain, Range>> &tuple) const
+{
+ auto res = isl::point::bind(tuple);
+ return typed::set<>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::coalesce() const
+{
+ auto res = isl::point::coalesce();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::detect_equalities() const
+{
+ auto res = isl::point::detect_equalities();
+ return typed::basic_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+bool typed::point<pair<Domain, Range>>::every_set(const std::function<bool(typed::set<pair<Domain, Range>>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<pair<Domain, Range>>(arg0));
+ };
+ return isl::point::every_set(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::extract_set(const typed::space<pair<Domain, Range>> &space) const
+{
+ auto res = isl::point::extract_set(space);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+void typed::point<pair<Domain, Range>>::foreach_basic_set(const std::function<void(typed::basic_set<pair<Domain, Range>>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_set arg0) {
+ return fn(typed::basic_set<pair<Domain, Range>>(arg0));
+ };
+ return isl::point::foreach_basic_set(lambda);
+}
+
+template <typename Domain, typename Range>
+void typed::point<pair<Domain, Range>>::foreach_point(const std::function<void(typed::point<pair<Domain, Range>>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<pair<Domain, Range>>(arg0));
+ };
+ return isl::point::foreach_point(lambda);
+}
+
+template <typename Domain, typename Range>
+void typed::point<pair<Domain, Range>>::foreach_set(const std::function<void(typed::set<pair<Domain, Range>>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<pair<Domain, Range>>(arg0));
+ };
+ return isl::point::foreach_set(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::gist(const typed::basic_set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::point::gist(context);
+ return typed::basic_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::gist(const typed::set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::point::gist(context);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::gist(const typed::union_set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::point::gist(context);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<pair<Domain, Range>, pair<Domain, Range>> typed::point<pair<Domain, Range>>::identity() const
+{
+ auto res = isl::point::identity();
+ return typed::map<pair<Domain, Range>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_aff<pair<Domain, Range>, Anonymous> typed::point<pair<Domain, Range>>::indicator_function() const
+{
+ auto res = isl::point::indicator_function();
+ return typed::pw_aff<pair<Domain, Range>, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::map<Arg2, pair<Domain, Range>> typed::point<pair<Domain, Range>>::insert_domain(const typed::space<Arg2> &domain) const
+{
+ auto res = isl::point::insert_domain(domain);
+ return typed::map<Arg2, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::intersect(const typed::basic_set<pair<Domain, Range>> &bset2) const
+{
+ auto res = isl::point::intersect(bset2);
+ return typed::basic_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::intersect(const typed::set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::point::intersect(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::intersect(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::point::intersect(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::intersect_params(const typed::basic_set<> &bset2) const
+{
+ auto res = isl::point::intersect_params(bset2);
+ return typed::basic_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::point::intersect_params(params);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::lexmax() const
+{
+ auto res = isl::point::lexmax();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::point<pair<Domain, Range>>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::point::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::lexmin() const
+{
+ auto res = isl::point::lexmin();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::point<pair<Domain, Range>>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::point::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::lower_bound(const typed::multi_pw_aff<pair<Domain, Range>> &lower) const
+{
+ auto res = isl::point::lower_bound(lower);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::lower_bound(const typed::multi_val<pair<Domain, Range>> &lower) const
+{
+ auto res = isl::point::lower_bound(lower);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::point<pair<Domain, Range>>::max_multi_pw_aff() const
+{
+ auto res = isl::point::max_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::point<pair<Domain, Range>>::min_multi_pw_aff() const
+{
+ auto res = isl::point::min_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<pair<Domain, Range>> typed::point<pair<Domain, Range>>::multi_val() const
+{
+ auto res = isl::point::multi_val();
+ return typed::multi_val<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::basic_set<> typed::point<pair<Domain, Range>>::params() const
+{
+ auto res = isl::point::params();
+ return typed::basic_set<>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<pair<Domain, Range>> typed::point<pair<Domain, Range>>::plain_multi_val_if_fixed() const
+{
+ auto res = isl::point::plain_multi_val_if_fixed();
+ return typed::multi_val<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::set<Domain2> typed::point<pair<Domain, Range>>::preimage(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const
+{
+ auto res = isl::point::preimage(ma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::set<Domain2> typed::point<pair<Domain, Range>>::preimage(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const
+{
+ auto res = isl::point::preimage(mpa);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::set<Domain2> typed::point<pair<Domain, Range>>::preimage(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const
+{
+ auto res = isl::point::preimage(pma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_set<Domain2> typed::point<pair<Domain, Range>>::preimage(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const
+{
+ auto res = isl::point::preimage(upma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::set<pair<pair<Domain, Range>, Arg2>> typed::point<pair<Domain, Range>>::product(const typed::set<Arg2> &set2) const
+{
+ auto res = isl::point::product(set2);
+ return typed::set<pair<pair<Domain, Range>, Arg2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::project_out_all_params() const
+{
+ auto res = isl::point::project_out_all_params();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::project_out_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::point::project_out_param(id);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::project_out_param(const std::string &id) const
+{
+ auto res = isl::point::project_out_param(id);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::project_out_param(const typed::id_list<Anonymous> &list) const
+{
+ auto res = isl::point::project_out_param(list);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::pw_multi_aff<pair<Domain, Range>, Arg2> typed::point<pair<Domain, Range>>::pw_multi_aff_on_domain(const typed::multi_val<Arg2> &mv) const
+{
+ auto res = isl::point::pw_multi_aff_on_domain(mv);
+ return typed::pw_multi_aff<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::fixed_box<pair<Domain, Range>> typed::point<pair<Domain, Range>>::simple_fixed_box_hull() const
+{
+ auto res = isl::point::simple_fixed_box_hull();
+ return typed::fixed_box<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<pair<Domain, Range>> typed::point<pair<Domain, Range>>::space() const
+{
+ auto res = isl::point::space();
+ return typed::space<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::subtract(const typed::set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::point::subtract(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::subtract(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::point::subtract(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::to_set() const
+{
+ auto res = isl::point::to_set();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::to_union_set() const
+{
+ auto res = isl::point::to_union_set();
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<pair<Domain, Range>, pair<Domain, Range>> typed::point<pair<Domain, Range>>::translation() const
+{
+ auto res = isl::point::translation();
+ return typed::map<pair<Domain, Range>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::map<Arg2, pair<Domain, Range>> typed::point<pair<Domain, Range>>::unbind_params_insert_domain(const typed::multi_id<Arg2> &domain) const
+{
+ auto res = isl::point::unbind_params_insert_domain(domain);
+ return typed::map<Arg2, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::unite(const typed::basic_set<pair<Domain, Range>> &bset2) const
+{
+ auto res = isl::point::unite(bset2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::unite(const typed::set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::point::unite(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::unite(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::point::unite(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::point<pair<Domain, Range>>::unwrap() const
+{
+ auto res = isl::point::unwrap();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::upper_bound(const typed::multi_pw_aff<pair<Domain, Range>> &upper) const
+{
+ auto res = isl::point::upper_bound(upper);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::point<pair<Domain, Range>>::upper_bound(const typed::multi_val<pair<Domain, Range>> &upper) const
+{
+ auto res = isl::point::upper_bound(upper);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+typed::pw_aff<Anonymous>::pw_aff(const typed::aff<Anonymous> &aff)
+ : isl::pw_aff(aff)
+{
+}
+
+typed::pw_aff<Anonymous>::pw_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_aff(ctx, str)
+{
+}
+
+typed::multi_pw_aff<Anonymous> typed::pw_aff<Anonymous>::add(const typed::multi_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::add(multi2);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::pw_aff<Anonymous>::add(const typed::multi_union_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::add(const typed::pw_aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::add(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::pw_aff<Anonymous>::add(const typed::pw_multi_aff<Anonymous> &pma2) const
+{
+ auto res = isl::pw_aff::add(pma2);
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::pw_aff<Anonymous>::add(const typed::union_pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::pw_aff::add(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_multi_aff<Anonymous> typed::pw_aff<Anonymous>::add(const typed::union_pw_multi_aff<Anonymous> &upma2) const
+{
+ auto res = isl::pw_aff::add(upma2);
+ return typed::union_pw_multi_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::add(const typed::aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::add(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::add_constant(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::pw_aff::add_constant(v);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::add_constant(long v) const
+{
+ auto res = isl::pw_aff::add_constant(v);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::pw_aff<Anonymous>::add_constant(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::pw_aff::add_constant(mv);
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+template <typename Range>
+typed::union_pw_multi_aff<Range> typed::pw_aff<Anonymous>::apply(const typed::union_pw_multi_aff<Anonymous, Range> &upma2) const
+{
+ auto res = isl::pw_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+typed::aff<Anonymous> typed::pw_aff<Anonymous>::as_aff() const
+{
+ auto res = isl::pw_aff::as_aff();
+ return typed::aff<Anonymous>(res);
+}
+
+typed::multi_aff<Anonymous> typed::pw_aff<Anonymous>::as_multi_aff() const
+{
+ auto res = isl::pw_aff::as_multi_aff();
+ return typed::multi_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::pw_aff<Anonymous>::as_multi_union_pw_aff() const
+{
+ auto res = isl::pw_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::pw_aff<Anonymous>::as_pw_multi_aff() const
+{
+ auto res = isl::pw_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::set<Anonymous> typed::pw_aff<Anonymous>::as_set() const
+{
+ auto res = isl::pw_aff::as_set();
+ return typed::set<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::at(int pos) const
+{
+ auto res = isl::pw_aff::at(pos);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::set<> typed::pw_aff<Anonymous>::bind(const typed::multi_id<Anonymous> &tuple) const
+{
+ auto res = isl::pw_aff::bind(tuple);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::pw_aff<Anonymous>::bind(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::pw_aff::bind(id);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::pw_aff<Anonymous>::bind(const std::string &id) const
+{
+ auto res = isl::pw_aff::bind(id);
+ return typed::set<>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::ceil() const
+{
+ auto res = isl::pw_aff::ceil();
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::coalesce() const
+{
+ auto res = isl::pw_aff::coalesce();
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::cond(const typed::pw_aff<Anonymous> &pwaff_true, const typed::pw_aff<Anonymous> &pwaff_false) const
+{
+ auto res = isl::pw_aff::cond(pwaff_true, pwaff_false);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::set<> typed::pw_aff<Anonymous>::domain() const
+{
+ auto res = isl::pw_aff::domain();
+ return typed::set<>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::pw_aff<Anonymous>::extract_pw_multi_aff(const typed::space<Anonymous> &space) const
+{
+ auto res = isl::pw_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::floor() const
+{
+ auto res = isl::pw_aff::floor();
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::gist(const typed::set<> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::pw_aff<Anonymous>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::gist(const typed::basic_set<> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::gist(const typed::point<> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous, Anonymous> typed::pw_aff<Anonymous>::identity() const
+{
+ auto res = isl::pw_aff::identity();
+ return typed::multi_pw_aff<Anonymous, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Anonymous>::insert_domain(const typed::space<Domain> &domain) const
+{
+ auto res = isl::pw_aff::insert_domain(domain);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::pw_aff::intersect_params(set);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::pw_aff::intersect_params(set);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::pw_aff::intersect_params(set);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff_list<Anonymous> typed::pw_aff<Anonymous>::list() const
+{
+ auto res = isl::pw_aff::list();
+ return typed::pw_aff_list<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::pw_aff<Anonymous>::max(const typed::multi_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::max(multi2);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::max(const typed::pw_aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::max(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::max(const typed::aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::max(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::multi_val<Anonymous> typed::pw_aff<Anonymous>::max_multi_val() const
+{
+ auto res = isl::pw_aff::max_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::pw_aff<Anonymous>::min(const typed::multi_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::min(multi2);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::min(const typed::pw_aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::min(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::min(const typed::aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::min(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::multi_val<Anonymous> typed::pw_aff<Anonymous>::min_multi_val() const
+{
+ auto res = isl::pw_aff::min_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::mod(const typed::val<Anonymous> &mod) const
+{
+ auto res = isl::pw_aff::mod(mod);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::mod(long mod) const
+{
+ auto res = isl::pw_aff::mod(mod);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::neg() const
+{
+ auto res = isl::pw_aff::neg();
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Range>
+typed::multi_pw_aff<pair<Anonymous, Range>> typed::pw_aff<Anonymous>::product(const typed::multi_pw_aff<Range> &multi2) const
+{
+ auto res = isl::pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Anonymous, Range>>(res);
+}
+
+template <typename Range>
+typed::pw_multi_aff<pair<Anonymous, Range>> typed::pw_aff<Anonymous>::product(const typed::pw_multi_aff<Range> &pma2) const
+{
+ auto res = isl::pw_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Anonymous, Range>>(res);
+}
+
+typed::pw_multi_aff_list<Anonymous> typed::pw_aff<Anonymous>::pw_multi_aff_list() const
+{
+ auto res = isl::pw_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::pw_aff<Anonymous>::scale(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::pw_aff::scale(mv);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::scale(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::pw_aff::scale(v);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::scale(long v) const
+{
+ auto res = isl::pw_aff::scale(v);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::pw_aff<Anonymous>::scale_down(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::pw_aff::scale_down(mv);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::scale_down(const typed::val<Anonymous> &f) const
+{
+ auto res = isl::pw_aff::scale_down(f);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::scale_down(long f) const
+{
+ auto res = isl::pw_aff::scale_down(f);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::pw_aff<Anonymous>::set_at(int pos, const typed::pw_aff<Anonymous> &el) const
+{
+ auto res = isl::pw_aff::set_at(pos, el);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::pw_aff<Anonymous>::set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const
+{
+ auto res = isl::pw_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2>
+typed::pw_multi_aff<Domain2> typed::pw_aff<Anonymous>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::pw_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<Domain2>(res);
+}
+
+template <typename Domain2>
+typed::pw_multi_aff<Domain2> typed::pw_aff<Anonymous>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::pw_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<Domain2>(res);
+}
+
+typed::space<Anonymous> typed::pw_aff<Anonymous>::space() const
+{
+ auto res = isl::pw_aff::space();
+ return typed::space<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::pw_aff<Anonymous>::sub(const typed::multi_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::pw_aff<Anonymous>::sub(const typed::multi_union_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::sub(const typed::pw_aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::sub(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::pw_aff<Anonymous>::sub(const typed::pw_multi_aff<Anonymous> &pma2) const
+{
+ auto res = isl::pw_aff::sub(pma2);
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::pw_aff<Anonymous>::sub(const typed::union_pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::pw_aff::sub(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_multi_aff<Anonymous> typed::pw_aff<Anonymous>::sub(const typed::union_pw_multi_aff<Anonymous> &upma2) const
+{
+ auto res = isl::pw_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::sub(const typed::aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::sub(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::pw_aff<Anonymous>::to_multi_pw_aff() const
+{
+ auto res = isl::pw_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::pw_aff<Anonymous>::to_union_pw_aff() const
+{
+ auto res = isl::pw_aff::to_union_pw_aff();
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_multi_aff<Anonymous> typed::pw_aff<Anonymous>::to_union_pw_multi_aff() const
+{
+ auto res = isl::pw_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::pw_aff<Anonymous>::unbind_params_insert_domain(const typed::multi_id<Domain> &domain) const
+{
+ auto res = isl::pw_aff::unbind_params_insert_domain(domain);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+typed::multi_pw_aff<Anonymous> typed::pw_aff<Anonymous>::union_add(const typed::multi_pw_aff<Anonymous> &mpa2) const
+{
+ auto res = isl::pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::pw_aff<Anonymous>::union_add(const typed::multi_union_pw_aff<Anonymous> &mupa2) const
+{
+ auto res = isl::pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::union_add(const typed::pw_aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::union_add(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::pw_aff<Anonymous>::union_add(const typed::pw_multi_aff<Anonymous> &pma2) const
+{
+ auto res = isl::pw_aff::union_add(pma2);
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::pw_aff<Anonymous>::union_add(const typed::union_pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::pw_aff::union_add(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_multi_aff<Anonymous> typed::pw_aff<Anonymous>::union_add(const typed::union_pw_multi_aff<Anonymous> &upma2) const
+{
+ auto res = isl::pw_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff<Anonymous>::union_add(const typed::aff<Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::union_add(pwaff2);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous>::pw_aff(const typed::aff<Domain, Anonymous> &aff)
+ : isl::pw_aff(aff)
+{
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous>::pw_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_aff(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::add(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::add(multi2);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::add(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::add(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::add(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::add(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const
+{
+ auto res = isl::pw_aff::add(pma2);
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::pw_aff::add(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const
+{
+ auto res = isl::pw_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::add(const typed::aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::add(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::add_constant(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::pw_aff::add_constant(v);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::add_constant(long v) const
+{
+ auto res = isl::pw_aff::add_constant(v);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::add_constant(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::pw_aff::add_constant(mv);
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, Range2> typed::pw_aff<Domain, Anonymous>::apply(const typed::union_pw_multi_aff<Anonymous, Range2> &upma2) const
+{
+ auto res = isl::pw_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::as_aff() const
+{
+ auto res = isl::pw_aff::as_aff();
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::as_map() const
+{
+ auto res = isl::pw_aff::as_map();
+ return typed::map<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::as_multi_aff() const
+{
+ auto res = isl::pw_aff::as_multi_aff();
+ return typed::multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::as_multi_union_pw_aff() const
+{
+ auto res = isl::pw_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::as_pw_multi_aff() const
+{
+ auto res = isl::pw_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::as_union_map() const
+{
+ auto res = isl::pw_aff::as_union_map();
+ return typed::union_map<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::at(int pos) const
+{
+ auto res = isl::pw_aff::at(pos);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::bind(const typed::multi_id<Anonymous> &tuple) const
+{
+ auto res = isl::pw_aff::bind(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::bind(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::pw_aff::bind(id);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::bind(const std::string &id) const
+{
+ auto res = isl::pw_aff::bind(id);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Anonymous> typed::pw_aff<Domain, Anonymous>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::pw_aff::bind_domain(tuple);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::ceil() const
+{
+ auto res = isl::pw_aff::ceil();
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::coalesce() const
+{
+ auto res = isl::pw_aff::coalesce();
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::cond(const typed::pw_aff<Domain, Anonymous> &pwaff_true, const typed::pw_aff<Domain, Anonymous> &pwaff_false) const
+{
+ auto res = isl::pw_aff::cond(pwaff_true, pwaff_false);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::domain() const
+{
+ auto res = isl::pw_aff::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::extract_pw_multi_aff(const typed::space<Domain, Anonymous> &space) const
+{
+ auto res = isl::pw_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::floor() const
+{
+ auto res = isl::pw_aff::floor();
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::ge_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::ge_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::ge_set(const typed::aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::ge_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::gist(const typed::point<Domain> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::gt_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::gt_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::gt_set(const typed::aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::gt_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::identity() const
+{
+ auto res = isl::pw_aff::identity();
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::pw_aff::intersect_domain(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::pw_aff::intersect_domain(space);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::pw_aff::intersect_domain(uset);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::intersect_domain(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::pw_aff::intersect_domain(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::intersect_domain(const typed::point<Domain> &set) const
+{
+ auto res = isl::pw_aff::intersect_domain(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::pw_aff::intersect_params(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::pw_aff::intersect_params(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::pw_aff::intersect_params(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::le_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::le_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::le_set(const typed::aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::le_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_aff_list<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::list() const
+{
+ auto res = isl::pw_aff::list();
+ return typed::pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::lt_set(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::lt_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_aff<Domain, Anonymous>::lt_set(const typed::aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::lt_set(pwaff2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::max(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::max(multi2);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::max(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::max(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::max(const typed::aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::max(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Anonymous> typed::pw_aff<Domain, Anonymous>::max_multi_val() const
+{
+ auto res = isl::pw_aff::max_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::min(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::min(multi2);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::min(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::min(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::min(const typed::aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::min(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Anonymous> typed::pw_aff<Domain, Anonymous>::min_multi_val() const
+{
+ auto res = isl::pw_aff::min_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::mod(const typed::val<Anonymous> &mod) const
+{
+ auto res = isl::pw_aff::mod(mod);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::mod(long mod) const
+{
+ auto res = isl::pw_aff::mod(mod);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::neg() const
+{
+ auto res = isl::pw_aff::neg();
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> typed::pw_aff<Domain, Anonymous>::product(const typed::multi_pw_aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> typed::pw_aff<Domain, Anonymous>::product(const typed::pw_multi_aff<Domain2, Range2> &pma2) const
+{
+ auto res = isl::pw_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::pw_aff<Domain2, Anonymous> typed::pw_aff<Domain, Anonymous>::pullback(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::pw_aff::pullback(ma);
+ return typed::pw_aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Anonymous> typed::pw_aff<Domain, Anonymous>::pullback(const typed::multi_aff<Domain> &ma) const
+{
+ auto res = isl::pw_aff::pullback(ma);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::pw_aff<Domain2, Anonymous> typed::pw_aff<Domain, Anonymous>::pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::pw_aff::pullback(mpa);
+ return typed::pw_aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Anonymous> typed::pw_aff<Domain, Anonymous>::pullback(const typed::multi_pw_aff<Domain> &mpa) const
+{
+ auto res = isl::pw_aff::pullback(mpa);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::pw_aff<Domain2, Anonymous> typed::pw_aff<Domain, Anonymous>::pullback(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::pw_aff::pullback(pma);
+ return typed::pw_aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Anonymous> typed::pw_aff<Domain, Anonymous>::pullback(const typed::pw_multi_aff<Domain> &pma) const
+{
+ auto res = isl::pw_aff::pullback(pma);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_pw_aff<Domain2, Anonymous> typed::pw_aff<Domain, Anonymous>::pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::pw_aff::pullback(upma);
+ return typed::union_pw_aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Anonymous> typed::pw_aff<Domain, Anonymous>::pullback(const typed::union_pw_multi_aff<Domain> &upma) const
+{
+ auto res = isl::pw_aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::pw_multi_aff_list() const
+{
+ auto res = isl::pw_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::multi_pw_aff<Domain, pair<Anonymous, Range2>> typed::pw_aff<Domain, Anonymous>::range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<Domain, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Anonymous, Range2>> typed::pw_aff<Domain, Anonymous>::range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::pw_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::pw_multi_aff<Domain, pair<Anonymous, Range2>> typed::pw_aff<Domain, Anonymous>::range_product(const typed::pw_multi_aff<Domain, Range2> &pma2) const
+{
+ auto res = isl::pw_aff::range_product(pma2);
+ return typed::pw_multi_aff<Domain, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Anonymous, Range2>> typed::pw_aff<Domain, Anonymous>::range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const
+{
+ auto res = isl::pw_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::scale(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::pw_aff::scale(mv);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::scale(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::pw_aff::scale(v);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::scale(long v) const
+{
+ auto res = isl::pw_aff::scale(v);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::scale_down(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::pw_aff::scale_down(mv);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::scale_down(const typed::val<Anonymous> &f) const
+{
+ auto res = isl::pw_aff::scale_down(f);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::scale_down(long f) const
+{
+ auto res = isl::pw_aff::scale_down(f);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::pw_aff::set_at(pos, el);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::pw_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::pw_multi_aff<Domain, Range2> typed::pw_aff<Domain, Anonymous>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::pw_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::pw_multi_aff<Domain, Range2> typed::pw_aff<Domain, Anonymous>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::pw_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain>
+typed::space<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::space() const
+{
+ auto res = isl::pw_aff::space();
+ return typed::space<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::sub(const typed::multi_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::sub(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::sub(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::sub(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::sub(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const
+{
+ auto res = isl::pw_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::sub(const typed::union_pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::pw_aff::sub(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::sub(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const
+{
+ auto res = isl::pw_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::sub(const typed::aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::sub(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::subtract_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::pw_aff::subtract_domain(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::subtract_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::pw_aff::subtract_domain(space);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::subtract_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::pw_aff::subtract_domain(uset);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::subtract_domain(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::pw_aff::subtract_domain(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::subtract_domain(const typed::point<Domain> &set) const
+{
+ auto res = isl::pw_aff::subtract_domain(set);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::to_multi_pw_aff() const
+{
+ auto res = isl::pw_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::to_union_pw_aff() const
+{
+ auto res = isl::pw_aff::to_union_pw_aff();
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::to_union_pw_multi_aff() const
+{
+ auto res = isl::pw_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::union_add(const typed::multi_pw_aff<Domain, Anonymous> &mpa2) const
+{
+ auto res = isl::pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::union_add(const typed::multi_union_pw_aff<Domain, Anonymous> &mupa2) const
+{
+ auto res = isl::pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::union_add(const typed::pw_aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::union_add(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::union_add(const typed::pw_multi_aff<Domain, Anonymous> &pma2) const
+{
+ auto res = isl::pw_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::union_add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::pw_aff::union_add(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::union_add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const
+{
+ auto res = isl::pw_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff<Domain, Anonymous>::union_add(const typed::aff<Domain, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::union_add(pwaff2);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous>::pw_aff(const typed::aff<pair<Domain2, Range2>, Anonymous> &aff)
+ : isl::pw_aff(aff)
+{
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous>::pw_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_aff(ctx, str)
+{
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::add(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::add(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::add(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::add(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::add(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const
+{
+ auto res = isl::pw_aff::add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::add(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const
+{
+ auto res = isl::pw_aff::add(upa2);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const
+{
+ auto res = isl::pw_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::add(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::add(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::add_constant(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::pw_aff::add_constant(v);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::add_constant(long v) const
+{
+ auto res = isl::pw_aff::add_constant(v);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::add_constant(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::pw_aff::add_constant(mv);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg1> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::apply(const typed::union_pw_multi_aff<Anonymous, Arg1> &upma2) const
+{
+ auto res = isl::pw_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::as_aff() const
+{
+ auto res = isl::pw_aff::as_aff();
+ return typed::aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::map<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::as_map() const
+{
+ auto res = isl::pw_aff::as_map();
+ return typed::map<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::as_multi_aff() const
+{
+ auto res = isl::pw_aff::as_multi_aff();
+ return typed::multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::as_multi_union_pw_aff() const
+{
+ auto res = isl::pw_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::as_pw_multi_aff() const
+{
+ auto res = isl::pw_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::as_union_map() const
+{
+ auto res = isl::pw_aff::as_union_map();
+ return typed::union_map<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::at(int pos) const
+{
+ auto res = isl::pw_aff::at(pos);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::bind(const typed::multi_id<Anonymous> &tuple) const
+{
+ auto res = isl::pw_aff::bind(tuple);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::bind(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::pw_aff::bind(id);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::bind(const std::string &id) const
+{
+ auto res = isl::pw_aff::bind(id);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::bind_domain(const typed::multi_id<pair<Domain2, Range2>> &tuple) const
+{
+ auto res = isl::pw_aff::bind_domain(tuple);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<Range2, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::bind_domain_wrapped_domain(const typed::multi_id<Domain2> &tuple) const
+{
+ auto res = isl::pw_aff::bind_domain_wrapped_domain(tuple);
+ return typed::pw_aff<Range2, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::ceil() const
+{
+ auto res = isl::pw_aff::ceil();
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::coalesce() const
+{
+ auto res = isl::pw_aff::coalesce();
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::cond(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff_true, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff_false) const
+{
+ auto res = isl::pw_aff::cond(pwaff_true, pwaff_false);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::domain() const
+{
+ auto res = isl::pw_aff::domain();
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::extract_pw_multi_aff(const typed::space<pair<Domain2, Range2>, Anonymous> &space) const
+{
+ auto res = isl::pw_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::floor() const
+{
+ auto res = isl::pw_aff::floor();
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::ge_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::ge_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::ge_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::ge_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::gist(const typed::set<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::gist(const typed::union_set<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::gist(const typed::basic_set<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::gist(const typed::point<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::pw_aff::gist(context);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::gt_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::gt_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::gt_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::gt_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::identity() const
+{
+ auto res = isl::pw_aff::identity();
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::intersect_domain(const typed::set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_aff::intersect_domain(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::intersect_domain(const typed::space<pair<Domain2, Range2>> &space) const
+{
+ auto res = isl::pw_aff::intersect_domain(space);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::intersect_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const
+{
+ auto res = isl::pw_aff::intersect_domain(uset);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::intersect_domain(const typed::basic_set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_aff::intersect_domain(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::intersect_domain(const typed::point<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_aff::intersect_domain(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::pw_aff::intersect_params(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::pw_aff::intersect_params(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::pw_aff::intersect_params(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::le_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::le_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::le_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::le_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff_list<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::list() const
+{
+ auto res = isl::pw_aff::list();
+ return typed::pw_aff_list<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::lt_set(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::lt_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::set<pair<Domain2, Range2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::lt_set(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::lt_set(pwaff2);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::max(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::max(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::max(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::max(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::max(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::max(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_val<Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::max_multi_val() const
+{
+ auto res = isl::pw_aff::max_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::min(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::min(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::min(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::min(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::min(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::min(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_val<Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::min_multi_val() const
+{
+ auto res = isl::pw_aff::min_multi_val();
+ return typed::multi_val<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::mod(const typed::val<Anonymous> &mod) const
+{
+ auto res = isl::pw_aff::mod(mod);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::mod(long mod) const
+{
+ auto res = isl::pw_aff::mod(mod);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::neg() const
+{
+ auto res = isl::pw_aff::neg();
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Domain3>
+typed::pw_multi_aff<pair<Domain3, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, Domain2> &pma2) const
+{
+ auto res = isl::pw_aff::preimage_domain_wrapped_domain(pma2);
+ return typed::pw_multi_aff<pair<Domain3, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain2> &upma2) const
+{
+ auto res = isl::pw_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1, typename Arg2>
+typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::product(const typed::multi_pw_aff<Arg1, Arg2> &multi2) const
+{
+ auto res = isl::pw_aff::product(multi2);
+ return typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1, typename Arg2>
+typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::product(const typed::pw_multi_aff<Arg1, Arg2> &pma2) const
+{
+ auto res = isl::pw_aff::product(pma2);
+ return typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg1>, pair<Anonymous, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::pw_aff<Arg1, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::multi_aff<Arg1, pair<Domain2, Range2>> &ma) const
+{
+ auto res = isl::pw_aff::pullback(ma);
+ return typed::pw_aff<Arg1, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::multi_aff<pair<Domain2, Range2>> &ma) const
+{
+ auto res = isl::pw_aff::pullback(ma);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::pw_aff<Arg1, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::multi_pw_aff<Arg1, pair<Domain2, Range2>> &mpa) const
+{
+ auto res = isl::pw_aff::pullback(mpa);
+ return typed::pw_aff<Arg1, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::multi_pw_aff<pair<Domain2, Range2>> &mpa) const
+{
+ auto res = isl::pw_aff::pullback(mpa);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::pw_aff<Arg1, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::pw_multi_aff<Arg1, pair<Domain2, Range2>> &pma) const
+{
+ auto res = isl::pw_aff::pullback(pma);
+ return typed::pw_aff<Arg1, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::pw_multi_aff<pair<Domain2, Range2>> &pma) const
+{
+ auto res = isl::pw_aff::pullback(pma);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::union_pw_aff<Arg1, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::union_pw_multi_aff<Arg1, pair<Domain2, Range2>> &upma) const
+{
+ auto res = isl::pw_aff::pullback(upma);
+ return typed::union_pw_aff<Arg1, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::pullback(const typed::union_pw_multi_aff<pair<Domain2, Range2>> &upma) const
+{
+ auto res = isl::pw_aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff_list<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::pw_multi_aff_list() const
+{
+ auto res = isl::pw_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::multi_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::range_product(const typed::multi_pw_aff<pair<Domain2, Range2>, Arg1> &multi2) const
+{
+ auto res = isl::pw_aff::range_product(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::range_product(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Arg1> &multi2) const
+{
+ auto res = isl::pw_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::range_product(const typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> &pma2) const
+{
+ auto res = isl::pw_aff::range_product(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::range_product(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg1> &upma2) const
+{
+ auto res = isl::pw_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Anonymous, Arg1>>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::scale(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::pw_aff::scale(mv);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::scale(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::pw_aff::scale(v);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::scale(long v) const
+{
+ auto res = isl::pw_aff::scale(v);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::scale_down(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::pw_aff::scale_down(mv);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::scale_down(const typed::val<Anonymous> &f) const
+{
+ auto res = isl::pw_aff::scale_down(f);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::scale_down(long f) const
+{
+ auto res = isl::pw_aff::scale_down(f);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::set_at(int pos, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::pw_aff::set_at(pos, el);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::set_at(int pos, const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::pw_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::pw_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2>
+template <typename Arg1>
+typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::pw_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::space<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::space() const
+{
+ auto res = isl::pw_aff::space();
+ return typed::space<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::sub(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &multi2) const
+{
+ auto res = isl::pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::sub(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const
+{
+ auto res = isl::pw_aff::sub(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const
+{
+ auto res = isl::pw_aff::sub(upa2);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const
+{
+ auto res = isl::pw_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::sub(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::sub(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::subtract_domain(const typed::set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_aff::subtract_domain(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::subtract_domain(const typed::space<pair<Domain2, Range2>> &space) const
+{
+ auto res = isl::pw_aff::subtract_domain(space);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::subtract_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const
+{
+ auto res = isl::pw_aff::subtract_domain(uset);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::subtract_domain(const typed::basic_set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_aff::subtract_domain(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::subtract_domain(const typed::point<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_aff::subtract_domain(set);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::to_multi_pw_aff() const
+{
+ auto res = isl::pw_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::to_union_pw_aff() const
+{
+ auto res = isl::pw_aff::to_union_pw_aff();
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::to_union_pw_multi_aff() const
+{
+ auto res = isl::pw_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous> &mpa2) const
+{
+ auto res = isl::pw_aff::union_add(mpa2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous> &mupa2) const
+{
+ auto res = isl::pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::union_add(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous> &pma2) const
+{
+ auto res = isl::pw_aff::union_add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &upa2) const
+{
+ auto res = isl::pw_aff::union_add(upa2);
+ return typed::union_pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous> &upma2) const
+{
+ auto res = isl::pw_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_aff<pair<Domain2, Range2>, Anonymous>::union_add(const typed::aff<pair<Domain2, Range2>, Anonymous> &pwaff2) const
+{
+ auto res = isl::pw_aff::union_add(pwaff2);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+typed::pw_aff_list<Anonymous>::pw_aff_list(const isl::ctx &ctx, int n)
+ : isl::pw_aff_list(ctx, n)
+{
+}
+
+typed::pw_aff_list<Anonymous>::pw_aff_list(const typed::pw_aff<Anonymous> &el)
+ : isl::pw_aff_list(el)
+{
+}
+
+typed::pw_aff_list<Anonymous>::pw_aff_list(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_aff_list(ctx, str)
+{
+}
+
+typed::pw_aff_list<Anonymous> typed::pw_aff_list<Anonymous>::add(const typed::pw_aff<Anonymous> &el) const
+{
+ auto res = isl::pw_aff_list::add(el);
+ return typed::pw_aff_list<Anonymous>(res);
+}
+
+typed::pw_aff_list<Anonymous> typed::pw_aff_list<Anonymous>::add(const typed::aff<Anonymous> &el) const
+{
+ auto res = isl::pw_aff_list::add(el);
+ return typed::pw_aff_list<Anonymous>(res);
+}
+
+typed::pw_aff<Anonymous> typed::pw_aff_list<Anonymous>::at(int index) const
+{
+ auto res = isl::pw_aff_list::at(index);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::pw_aff_list<Anonymous> typed::pw_aff_list<Anonymous>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::pw_aff_list::drop(first, n);
+ return typed::pw_aff_list<Anonymous>(res);
+}
+
+void typed::pw_aff_list<Anonymous>::foreach(const std::function<void(typed::pw_aff<Anonymous>)> &fn) const
+{
+ auto lambda = [&] (isl::pw_aff arg0) {
+ return fn(typed::pw_aff<Anonymous>(arg0));
+ };
+ return isl::pw_aff_list::foreach(lambda);
+}
+
+template <typename Domain>
+typed::pw_aff_list<Domain, Anonymous>::pw_aff_list(const isl::ctx &ctx, int n)
+ : isl::pw_aff_list(ctx, n)
+{
+}
+
+template <typename Domain>
+typed::pw_aff_list<Domain, Anonymous>::pw_aff_list(const typed::pw_aff<Domain, Anonymous> &el)
+ : isl::pw_aff_list(el)
+{
+}
+
+template <typename Domain>
+typed::pw_aff_list<Domain, Anonymous>::pw_aff_list(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_aff_list(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::pw_aff_list<Domain, Anonymous> typed::pw_aff_list<Domain, Anonymous>::add(const typed::pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::pw_aff_list::add(el);
+ return typed::pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff_list<Domain, Anonymous> typed::pw_aff_list<Domain, Anonymous>::add(const typed::aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::pw_aff_list::add(el);
+ return typed::pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::pw_aff_list<Domain, Anonymous>::at(int index) const
+{
+ auto res = isl::pw_aff_list::at(index);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_aff_list<Domain, Anonymous> typed::pw_aff_list<Domain, Anonymous>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::pw_aff_list::drop(first, n);
+ return typed::pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+void typed::pw_aff_list<Domain, Anonymous>::foreach(const std::function<void(typed::pw_aff<Domain, Anonymous>)> &fn) const
+{
+ auto lambda = [&] (isl::pw_aff arg0) {
+ return fn(typed::pw_aff<Domain, Anonymous>(arg0));
+ };
+ return isl::pw_aff_list::foreach(lambda);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain>::pw_multi_aff(const typed::multi_aff<Domain> &ma)
+ : isl::pw_multi_aff(ma)
+{
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain>::pw_multi_aff(const typed::pw_aff<Domain> &pa)
+ : isl::pw_multi_aff(pa)
+{
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain>::pw_multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_multi_aff(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::pw_multi_aff<Domain>::add(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::pw_multi_aff::add(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::pw_multi_aff<Domain>::add(const typed::multi_union_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::pw_multi_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::add(const typed::pw_multi_aff<Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::add(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::add(const typed::multi_aff<Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::add(const typed::pw_aff<Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::add_constant(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::pw_multi_aff::add_constant(mv);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::add_constant(const typed::val<Domain> &v) const
+{
+ auto res = isl::pw_multi_aff::add_constant(v);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::add_constant(long v) const
+{
+ auto res = isl::pw_multi_aff::add_constant(v);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_pw_multi_aff<Range> typed::pw_multi_aff<Domain>::apply(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::pw_multi_aff<Domain>::as_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::as_multi_aff();
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::pw_multi_aff<Domain>::as_multi_union_pw_aff() const
+{
+ auto res = isl::pw_multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::as_pw_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::pw_multi_aff<Domain>::as_set() const
+{
+ auto res = isl::pw_multi_aff::as_set();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Anonymous> typed::pw_multi_aff<Domain>::at(int pos) const
+{
+ auto res = isl::pw_multi_aff::at(pos);
+ return typed::pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::set<> typed::pw_multi_aff<Domain>::bind(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::pw_multi_aff::bind(tuple);
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::coalesce() const
+{
+ auto res = isl::pw_multi_aff::coalesce();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<> typed::pw_multi_aff<Domain>::domain() const
+{
+ auto res = isl::pw_multi_aff::domain();
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::extract_pw_multi_aff(const typed::space<Domain> &space) const
+{
+ auto res = isl::pw_multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::gist(const typed::set<> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::gist(const typed::basic_set<> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::gist(const typed::point<> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Domain> typed::pw_multi_aff<Domain>::identity() const
+{
+ auto res = isl::pw_multi_aff::identity();
+ return typed::multi_pw_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::pw_multi_aff<Arg1, Domain> typed::pw_multi_aff<Domain>::insert_domain(const typed::space<Arg1> &domain) const
+{
+ auto res = isl::pw_multi_aff::insert_domain(domain);
+ return typed::pw_multi_aff<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_aff_list<Anonymous> typed::pw_multi_aff<Domain>::list() const
+{
+ auto res = isl::pw_multi_aff::list();
+ return typed::pw_aff_list<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::pw_multi_aff<Domain>::max(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::pw_multi_aff::max(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::pw_multi_aff<Domain>::max_multi_val() const
+{
+ auto res = isl::pw_multi_aff::max_multi_val();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::pw_multi_aff<Domain>::min(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::pw_multi_aff::min(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::pw_multi_aff<Domain>::min_multi_val() const
+{
+ auto res = isl::pw_multi_aff::min_multi_val();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::pw_multi_aff<Domain>::neg() const
+{
+ auto res = isl::pw_multi_aff::neg();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::pw_multi_aff<Domain>::product(const typed::multi_pw_aff<Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::pw_multi_aff<Domain>::product(const typed::pw_multi_aff<Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::pw_multi_aff<Domain>::product(const typed::multi_aff<Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::pw_multi_aff<Domain>::product(const typed::pw_aff<Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain> typed::pw_multi_aff<Domain>::pw_multi_aff_list() const
+{
+ auto res = isl::pw_multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::pw_multi_aff<Domain>::scale(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::pw_multi_aff::scale(mv);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::scale(const typed::val<Domain> &v) const
+{
+ auto res = isl::pw_multi_aff::scale(v);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::scale(long v) const
+{
+ auto res = isl::pw_multi_aff::scale(v);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::pw_multi_aff<Domain>::scale_down(const typed::multi_val<Domain> &mv) const
+{
+ auto res = isl::pw_multi_aff::scale_down(mv);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::scale_down(const typed::val<Domain> &v) const
+{
+ auto res = isl::pw_multi_aff::scale_down(v);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::scale_down(long v) const
+{
+ auto res = isl::pw_multi_aff::scale_down(v);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::pw_multi_aff<Domain>::set_at(int pos, const typed::pw_aff<Anonymous> &el) const
+{
+ auto res = isl::pw_multi_aff::set_at(pos, el);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::pw_multi_aff<Domain>::set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const
+{
+ auto res = isl::pw_multi_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::pw_multi_aff<Domain2> typed::pw_multi_aff<Domain>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::pw_multi_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::pw_multi_aff<Domain2> typed::pw_multi_aff<Domain>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::pw_multi_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<Domain2>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::pw_multi_aff<Domain>::space() const
+{
+ auto res = isl::pw_multi_aff::space();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::pw_multi_aff<Domain>::sub(const typed::multi_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::pw_multi_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::pw_multi_aff<Domain>::sub(const typed::multi_union_pw_aff<Domain> &multi2) const
+{
+ auto res = isl::pw_multi_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::sub(const typed::pw_multi_aff<Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::sub(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::sub(const typed::multi_aff<Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::sub(const typed::pw_aff<Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::pw_multi_aff<Domain>::to_multi_pw_aff() const
+{
+ auto res = isl::pw_multi_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::to_union_pw_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::multi_pw_aff<Arg1, Domain> typed::pw_multi_aff<Domain>::unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const
+{
+ auto res = isl::pw_multi_aff::unbind_params_insert_domain(domain);
+ return typed::multi_pw_aff<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::pw_multi_aff<Domain>::union_add(const typed::multi_pw_aff<Domain> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::pw_multi_aff<Domain>::union_add(const typed::multi_union_pw_aff<Domain> &mupa2) const
+{
+ auto res = isl::pw_multi_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::union_add(const typed::pw_multi_aff<Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::union_add(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::union_add(const typed::multi_aff<Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff<Domain>::union_add(const typed::pw_aff<Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range>::pw_multi_aff(const typed::multi_aff<Domain, Range> &ma)
+ : isl::pw_multi_aff(ma)
+{
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range>::pw_multi_aff(const typed::pw_aff<Domain, Range> &pa)
+ : isl::pw_multi_aff(pa)
+{
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range>::pw_multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_multi_aff(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::add(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::add(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::add(const typed::multi_union_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::add(const typed::pw_multi_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::add(const typed::multi_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::add(const typed::pw_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::add_constant(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::pw_multi_aff::add_constant(mv);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::add_constant(const typed::val<Range> &v) const
+{
+ auto res = isl::pw_multi_aff::add_constant(v);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::add_constant(long v) const
+{
+ auto res = isl::pw_multi_aff::add_constant(v);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, Range2> typed::pw_multi_aff<Domain, Range>::apply(const typed::union_pw_multi_aff<Range, Range2> &upma2) const
+{
+ auto res = isl::pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::pw_multi_aff<Domain, Range>::as_map() const
+{
+ auto res = isl::pw_multi_aff::as_map();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::as_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::as_multi_aff();
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::as_multi_union_pw_aff() const
+{
+ auto res = isl::pw_multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::as_pw_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::pw_multi_aff<Domain, Range>::as_union_map() const
+{
+ auto res = isl::pw_multi_aff::as_union_map();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_aff<Domain, Anonymous> typed::pw_multi_aff<Domain, Range>::at(int pos) const
+{
+ auto res = isl::pw_multi_aff::at(pos);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Domain> typed::pw_multi_aff<Domain, Range>::bind(const typed::multi_id<Range> &tuple) const
+{
+ auto res = isl::pw_multi_aff::bind(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Range> typed::pw_multi_aff<Domain, Range>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::pw_multi_aff::bind_domain(tuple);
+ return typed::pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::coalesce() const
+{
+ auto res = isl::pw_multi_aff::coalesce();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<Domain> typed::pw_multi_aff<Domain, Range>::domain() const
+{
+ auto res = isl::pw_multi_aff::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::extract_pw_multi_aff(const typed::space<Domain, Range> &space) const
+{
+ auto res = isl::pw_multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::gist(const typed::set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::gist(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::gist(const typed::point<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::identity() const
+{
+ auto res = isl::pw_multi_aff::identity();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::intersect_domain(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::intersect_domain(const typed::point<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_aff_list<Domain, Anonymous> typed::pw_multi_aff<Domain, Range>::list() const
+{
+ auto res = isl::pw_multi_aff::list();
+ return typed::pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::max(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::max(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<Range> typed::pw_multi_aff<Domain, Range>::max_multi_val() const
+{
+ auto res = isl::pw_multi_aff::max_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::min(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::min(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<Range> typed::pw_multi_aff<Domain, Range>::min_multi_val() const
+{
+ auto res = isl::pw_multi_aff::min_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::neg() const
+{
+ auto res = isl::pw_multi_aff::neg();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::pw_multi_aff<Domain, Range>::product(const typed::multi_pw_aff<Domain2, Range2> &multi2) const
+{
+ auto res = isl::pw_multi_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::pw_multi_aff<Domain, Range>::product(const typed::pw_multi_aff<Domain2, Range2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::pw_multi_aff<Domain, Range>::product(const typed::multi_aff<Domain2, Range2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::pw_multi_aff<Domain, Range>::product(const typed::pw_aff<Domain2, Range2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::multi_pw_aff<Domain2, Range> typed::pw_multi_aff<Domain, Range>::pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Range> typed::pw_multi_aff<Domain, Range>::pullback(const typed::multi_pw_aff<Domain> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::pw_multi_aff<Domain2, Range> typed::pw_multi_aff<Domain, Range>::pullback(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::pw_multi_aff::pullback(ma);
+ return typed::pw_multi_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Range> typed::pw_multi_aff<Domain, Range>::pullback(const typed::multi_aff<Domain> &ma) const
+{
+ auto res = isl::pw_multi_aff::pullback(ma);
+ return typed::pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::pw_multi_aff<Domain2, Range> typed::pw_multi_aff<Domain, Range>::pullback(const typed::pw_multi_aff<Domain2, Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Range> typed::pw_multi_aff<Domain, Range>::pullback(const typed::pw_multi_aff<Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, Range> typed::pw_multi_aff<Domain, Range>::pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Range> typed::pw_multi_aff<Domain, Range>::pullback(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff_list<Domain, Range> typed::pw_multi_aff<Domain, Range>::pw_multi_aff_list() const
+{
+ auto res = isl::pw_multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, Range>::range_product(const typed::multi_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::pw_multi_aff::range_product(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, Range>::range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::pw_multi_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, Range>::range_product(const typed::pw_multi_aff<Domain, Range2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, Range>::range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, Range>::range_product(const typed::multi_aff<Domain, Range2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, Range>::range_product(const typed::pw_aff<Domain, Range2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::scale(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::pw_multi_aff::scale(mv);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::scale(const typed::val<Range> &v) const
+{
+ auto res = isl::pw_multi_aff::scale(v);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::scale(long v) const
+{
+ auto res = isl::pw_multi_aff::scale(v);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::scale_down(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::pw_multi_aff::scale_down(mv);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::scale_down(const typed::val<Range> &v) const
+{
+ auto res = isl::pw_multi_aff::scale_down(v);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::scale_down(long v) const
+{
+ auto res = isl::pw_multi_aff::scale_down(v);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::pw_multi_aff::set_at(pos, el);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::pw_multi_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::pw_multi_aff<Domain, Range2> typed::pw_multi_aff<Domain, Range>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::pw_multi_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::pw_multi_aff<Domain, Range2> typed::pw_multi_aff<Domain, Range>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::pw_multi_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Domain, Range> typed::pw_multi_aff<Domain, Range>::space() const
+{
+ auto res = isl::pw_multi_aff::space();
+ return typed::space<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::sub(const typed::multi_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::sub(const typed::multi_union_pw_aff<Domain, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::sub(const typed::pw_multi_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::sub(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::sub(const typed::multi_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::sub(const typed::pw_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::subtract_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::subtract_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::subtract_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::subtract_domain(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::subtract_domain(const typed::point<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::to_multi_pw_aff() const
+{
+ auto res = isl::pw_multi_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::to_union_pw_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::union_add(const typed::multi_pw_aff<Domain, Range> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::union_add(const typed::multi_union_pw_aff<Domain, Range> &mupa2) const
+{
+ auto res = isl::pw_multi_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::union_add(const typed::pw_multi_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::union_add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::union_add(const typed::multi_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, Range>::union_add(const typed::pw_aff<Domain, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pw_multi_aff(const typed::multi_aff<pair<Domain2, Range2>, Range> &ma)
+ : isl::pw_multi_aff(ma)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pw_multi_aff(const typed::pw_aff<pair<Domain2, Range2>, Range> &pa)
+ : isl::pw_multi_aff(pa)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pw_multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_multi_aff(ctx, str)
+{
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::add(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::add(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const
+{
+ auto res = isl::pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::add(const typed::multi_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::add(const typed::pw_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::add_constant(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::pw_multi_aff::add_constant(mv);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::add_constant(const typed::val<Range> &v) const
+{
+ auto res = isl::pw_multi_aff::add_constant(v);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::add_constant(long v) const
+{
+ auto res = isl::pw_multi_aff::add_constant(v);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg2> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::apply(const typed::union_pw_multi_aff<Range, Arg2> &upma2) const
+{
+ auto res = isl::pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg2>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::map<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::as_map() const
+{
+ auto res = isl::pw_multi_aff::as_map();
+ return typed::map<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::as_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::as_multi_aff();
+ return typed::multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::as_multi_union_pw_aff() const
+{
+ auto res = isl::pw_multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::as_pw_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_map<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::as_union_map() const
+{
+ auto res = isl::pw_multi_aff::as_union_map();
+ return typed::union_map<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_aff<pair<Domain2, Range2>, Anonymous> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::at(int pos) const
+{
+ auto res = isl::pw_multi_aff::at(pos);
+ return typed::pw_aff<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::set<pair<Domain2, Range2>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::bind(const typed::multi_id<Range> &tuple) const
+{
+ auto res = isl::pw_multi_aff::bind(tuple);
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::bind_domain(const typed::multi_id<pair<Domain2, Range2>> &tuple) const
+{
+ auto res = isl::pw_multi_aff::bind_domain(tuple);
+ return typed::pw_multi_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<Range2, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::bind_domain_wrapped_domain(const typed::multi_id<Domain2> &tuple) const
+{
+ auto res = isl::pw_multi_aff::bind_domain_wrapped_domain(tuple);
+ return typed::pw_multi_aff<Range2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::coalesce() const
+{
+ auto res = isl::pw_multi_aff::coalesce();
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::set<pair<Domain2, Range2>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::domain() const
+{
+ auto res = isl::pw_multi_aff::domain();
+ return typed::set<pair<Domain2, Range2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::extract_pw_multi_aff(const typed::space<pair<Domain2, Range2>, Range> &space) const
+{
+ auto res = isl::pw_multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::gist(const typed::set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::gist(const typed::union_set<pair<Domain2, Range2>> &context) const
+{
+ auto res = isl::pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::gist(const typed::basic_set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::gist(const typed::point<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::identity() const
+{
+ auto res = isl::pw_multi_aff::identity();
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::space<pair<Domain2, Range2>> &space) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::basic_set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::intersect_domain(const typed::point<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_aff_list<pair<Domain2, Range2>, Anonymous> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::list() const
+{
+ auto res = isl::pw_multi_aff::list();
+ return typed::pw_aff_list<pair<Domain2, Range2>, Anonymous>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::max(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::max(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_val<Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::max_multi_val() const
+{
+ auto res = isl::pw_multi_aff::max_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::min(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::min(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_val<Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::min_multi_val() const
+{
+ auto res = isl::pw_multi_aff::min_multi_val();
+ return typed::multi_val<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::neg() const
+{
+ auto res = isl::pw_multi_aff::neg();
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Domain3>
+typed::pw_multi_aff<pair<Domain3, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, Domain2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2);
+ return typed::pw_multi_aff<pair<Domain3, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain2> &upma2) const
+{
+ auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Domain3>
+typed::pw_multi_aff<pair<Domain3, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::preimage_domain_wrapped_domain(const typed::multi_aff<Domain3, Domain2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2);
+ return typed::pw_multi_aff<pair<Domain3, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Domain3>
+typed::pw_multi_aff<pair<Domain3, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::preimage_domain_wrapped_domain(const typed::pw_aff<Domain3, Domain2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2);
+ return typed::pw_multi_aff<pair<Domain3, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::product(const typed::multi_pw_aff<Arg2, Arg3> &multi2) const
+{
+ auto res = isl::pw_multi_aff::product(multi2);
+ return typed::multi_pw_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::product(const typed::pw_multi_aff<Arg2, Arg3> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::product(const typed::multi_aff<Arg2, Arg3> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2, typename Arg3>
+typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::product(const typed::pw_aff<Arg2, Arg3> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<pair<Domain2, Range2>, Arg2>, pair<Range, Arg3>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<Arg2, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_pw_aff<Arg2, pair<Domain2, Range2>> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_pw_aff<pair<Domain2, Range2>> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::pw_multi_aff<Arg2, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_aff<Arg2, pair<Domain2, Range2>> &ma) const
+{
+ auto res = isl::pw_multi_aff::pullback(ma);
+ return typed::pw_multi_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::multi_aff<pair<Domain2, Range2>> &ma) const
+{
+ auto res = isl::pw_multi_aff::pullback(ma);
+ return typed::pw_multi_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::pw_multi_aff<Arg2, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::pw_multi_aff<Arg2, pair<Domain2, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::pw_multi_aff<pair<Domain2, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::union_pw_multi_aff<Arg2, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::union_pw_multi_aff<Arg2, pair<Domain2, Range2>> &upma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Arg2, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pullback(const typed::union_pw_multi_aff<pair<Domain2, Range2>> &upma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff_list<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::pw_multi_aff_list() const
+{
+ auto res = isl::pw_multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::multi_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::pw_multi_aff::range_product(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Arg2> &multi2) const
+{
+ auto res = isl::pw_multi_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::pw_multi_aff<pair<Domain2, Range2>, Arg2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Arg2> &upma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::multi_aff<pair<Domain2, Range2>, Arg2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg2>
+typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::range_product(const typed::pw_aff<pair<Domain2, Range2>, Arg2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, pair<Range, Arg2>>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::scale(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::pw_multi_aff::scale(mv);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::scale(const typed::val<Range> &v) const
+{
+ auto res = isl::pw_multi_aff::scale(v);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::scale(long v) const
+{
+ auto res = isl::pw_multi_aff::scale(v);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::scale_down(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::pw_multi_aff::scale_down(mv);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::scale_down(const typed::val<Range> &v) const
+{
+ auto res = isl::pw_multi_aff::scale_down(v);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::scale_down(long v) const
+{
+ auto res = isl::pw_multi_aff::scale_down(v);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::set_at(int pos, const typed::pw_aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::pw_multi_aff::set_at(pos, el);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::set_at(int pos, const typed::union_pw_aff<pair<Domain2, Range2>, Anonymous> &el) const
+{
+ auto res = isl::pw_multi_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg1>
+typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::pw_multi_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+template <typename Arg1>
+typed::pw_multi_aff<pair<Domain2, Range2>, Arg1> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::pw_multi_aff::set_range_tuple(id);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Arg1>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::space<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::space() const
+{
+ auto res = isl::pw_multi_aff::space();
+ return typed::space<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::sub(multi2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &multi2) const
+{
+ auto res = isl::pw_multi_aff::sub(multi2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const
+{
+ auto res = isl::pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::multi_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::sub(const typed::pw_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::subtract_domain(const typed::set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::subtract_domain(const typed::space<pair<Domain2, Range2>> &space) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::subtract_domain(const typed::union_set<pair<Domain2, Range2>> &uset) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::subtract_domain(const typed::basic_set<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::subtract_domain(const typed::point<pair<Domain2, Range2>> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::to_multi_pw_aff() const
+{
+ auto res = isl::pw_multi_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::to_union_pw_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::union_add(const typed::multi_pw_aff<pair<Domain2, Range2>, Range> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::union_add(mpa2);
+ return typed::multi_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::union_add(const typed::multi_union_pw_aff<pair<Domain2, Range2>, Range> &mupa2) const
+{
+ auto res = isl::pw_multi_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::union_add(const typed::pw_multi_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::union_add(const typed::union_pw_multi_aff<pair<Domain2, Range2>, Range> &upma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::union_add(const typed::multi_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain2, typename Range2, typename Range>
+typed::pw_multi_aff<pair<Domain2, Range2>, Range> typed::pw_multi_aff<pair<Domain2, Range2>, Range>::union_add(const typed::pw_aff<pair<Domain2, Range2>, Range> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<pair<Domain2, Range2>, Range>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>>::pw_multi_aff(const typed::multi_aff<Domain, pair<Range, Range2>> &ma)
+ : isl::pw_multi_aff(ma)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>>::pw_multi_aff(const typed::pw_aff<Domain, pair<Range, Range2>> &pa)
+ : isl::pw_multi_aff(pa)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>>::pw_multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_multi_aff(ctx, str)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::add(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::add(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::add(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::add(const typed::multi_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::add(const typed::pw_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::add_constant(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::pw_multi_aff::add_constant(mv);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::add_constant(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::pw_multi_aff::add_constant(v);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::add_constant(long v) const
+{
+ auto res = isl::pw_multi_aff::add_constant(v);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, Arg3> typed::pw_multi_aff<Domain, pair<Range, Range2>>::apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg3> &upma2) const
+{
+ auto res = isl::pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::as_map() const
+{
+ auto res = isl::pw_multi_aff::as_map();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::as_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::as_multi_aff();
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::pw_multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::as_pw_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::as_union_map() const
+{
+ auto res = isl::pw_multi_aff::as_union_map();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_aff<Domain, Anonymous> typed::pw_multi_aff<Domain, pair<Range, Range2>>::at(int pos) const
+{
+ auto res = isl::pw_multi_aff::at(pos);
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<Domain> typed::pw_multi_aff<Domain, pair<Range, Range2>>::bind(const typed::multi_id<pair<Range, Range2>> &tuple) const
+{
+ auto res = isl::pw_multi_aff::bind(tuple);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::bind_domain(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::pw_multi_aff::bind_domain(tuple);
+ return typed::pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::pw_multi_aff::coalesce();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::set<Domain> typed::pw_multi_aff<Domain, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::pw_multi_aff::domain();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::extract_pw_multi_aff(const typed::space<Domain, pair<Range, Range2>> &space) const
+{
+ auto res = isl::pw_multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::gist(const typed::set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::gist(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::gist(const typed::point<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::identity() const
+{
+ auto res = isl::pw_multi_aff::identity();
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::intersect_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::intersect_domain(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::intersect_domain(const typed::point<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_aff_list<Domain, Anonymous> typed::pw_multi_aff<Domain, pair<Range, Range2>>::list() const
+{
+ auto res = isl::pw_multi_aff::list();
+ return typed::pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::max(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::max(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_val<pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::max_multi_val() const
+{
+ auto res = isl::pw_multi_aff::max_multi_val();
+ return typed::multi_val<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::min(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::min(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_val<pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::min_multi_val() const
+{
+ auto res = isl::pw_multi_aff::min_multi_val();
+ return typed::multi_val<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::neg() const
+{
+ auto res = isl::pw_multi_aff::neg();
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::multi_pw_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::product(const typed::multi_pw_aff<Domain2, Arg3> &multi2) const
+{
+ auto res = isl::pw_multi_aff::product(multi2);
+ return typed::multi_pw_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::product(const typed::pw_multi_aff<Domain2, Arg3> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::product(const typed::multi_aff<Domain2, Arg3> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::product(const typed::pw_aff<Domain2, Arg3> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::multi_pw_aff<Domain2, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::multi_pw_aff<Domain2, Domain> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::multi_pw_aff<Domain> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::pw_multi_aff<Domain2, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::pw_multi_aff::pullback(ma);
+ return typed::pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::multi_aff<Domain> &ma) const
+{
+ auto res = isl::pw_multi_aff::pullback(ma);
+ return typed::pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::pw_multi_aff<Domain2, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<Domain2, Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<Domain> &pma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff_list<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::pw_multi_aff_list() const
+{
+ auto res = isl::pw_multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff<Domain, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::pw_multi_aff::range_factor_domain();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, Range2> typed::pw_multi_aff<Domain, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::pw_multi_aff::range_factor_range();
+ return typed::pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::multi_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::multi_pw_aff<Domain, Arg3> &multi2) const
+{
+ auto res = isl::pw_multi_aff::range_product(multi2);
+ return typed::multi_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::multi_union_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::multi_union_pw_aff<Domain, Arg3> &multi2) const
+{
+ auto res = isl::pw_multi_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::pw_multi_aff<Domain, Arg3> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::union_pw_multi_aff<Domain, Arg3> &upma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::multi_aff<Domain, Arg3> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::pw_aff<Domain, Arg3> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::scale(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::pw_multi_aff::scale(mv);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::scale(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::pw_multi_aff::scale(v);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::scale(long v) const
+{
+ auto res = isl::pw_multi_aff::scale(v);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::scale_down(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::pw_multi_aff::scale_down(mv);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::scale_down(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::pw_multi_aff::scale_down(v);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::scale_down(long v) const
+{
+ auto res = isl::pw_multi_aff::scale_down(v);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::set_at(int pos, const typed::pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::pw_multi_aff::set_at(pos, el);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::pw_multi_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::space() const
+{
+ auto res = isl::pw_multi_aff::space();
+ return typed::space<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::sub(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::sub(multi2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::sub(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::sub(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::sub(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::sub(const typed::multi_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::sub(const typed::pw_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::subtract_domain(const typed::set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::subtract_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::subtract_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::subtract_domain(const typed::basic_set<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::subtract_domain(const typed::point<Domain> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::to_multi_pw_aff() const
+{
+ auto res = isl::pw_multi_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::to_union_pw_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::multi_pw_aff<Domain, pair<Range, Range2>> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::union_add(mpa2);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::multi_union_pw_aff<Domain, pair<Range, Range2>> &mupa2) const
+{
+ auto res = isl::pw_multi_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::multi_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::pw_multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::pw_aff<Domain, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pw_multi_aff(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &ma)
+ : isl::pw_multi_aff(ma)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pw_multi_aff(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &pa)
+ : isl::pw_multi_aff(pa)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pw_multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_multi_aff(ctx, str)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::add(multi2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::add(multi2);
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::add(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add_constant(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::pw_multi_aff::add_constant(mv);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add_constant(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::pw_multi_aff::add_constant(v);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add_constant(long v) const
+{
+ auto res = isl::pw_multi_aff::add_constant(v);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, Arg2> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg2> &upma2) const
+{
+ auto res = isl::pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_map() const
+{
+ auto res = isl::pw_multi_aff::as_map();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::as_multi_aff();
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::pw_multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_pw_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_union_map() const
+{
+ auto res = isl::pw_multi_aff::as_union_map();
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_aff<pair<T1, T2>, Anonymous> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::at(int pos) const
+{
+ auto res = isl::pw_multi_aff::at(pos);
+ return typed::pw_aff<pair<T1, T2>, Anonymous>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<T1, T2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::bind(const typed::multi_id<pair<Range, Range2>> &tuple) const
+{
+ auto res = isl::pw_multi_aff::bind(tuple);
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::bind_domain(const typed::multi_id<pair<T1, T2>> &tuple) const
+{
+ auto res = isl::pw_multi_aff::bind_domain(tuple);
+ return typed::pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<T2, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::bind_domain_wrapped_domain(const typed::multi_id<T1> &tuple) const
+{
+ auto res = isl::pw_multi_aff::bind_domain_wrapped_domain(tuple);
+ return typed::pw_multi_aff<T2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::pw_multi_aff::coalesce();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::set<pair<T1, T2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::pw_multi_aff::domain();
+ return typed::set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::extract_pw_multi_aff(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const
+{
+ auto res = isl::pw_multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::set<pair<T1, T2>> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::union_set<pair<T1, T2>> &context) const
+{
+ auto res = isl::pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::basic_set<pair<T1, T2>> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::point<pair<T1, T2>> &set) const
+{
+ auto res = isl::pw_multi_aff::gist(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::identity() const
+{
+ auto res = isl::pw_multi_aff::identity();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::set<pair<T1, T2>> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::basic_set<pair<T1, T2>> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::point<pair<T1, T2>> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_domain(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::pw_multi_aff::intersect_params(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_aff_list<pair<T1, T2>, Anonymous> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::list() const
+{
+ auto res = isl::pw_multi_aff::list();
+ return typed::pw_aff_list<pair<T1, T2>, Anonymous>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::max(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::max(multi2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_val<pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::max_multi_val() const
+{
+ auto res = isl::pw_multi_aff::max_multi_val();
+ return typed::multi_val<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::min(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::min(multi2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_val<pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::min_multi_val() const
+{
+ auto res = isl::pw_multi_aff::min_multi_val();
+ return typed::multi_val<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::neg() const
+{
+ auto res = isl::pw_multi_aff::neg();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain3>
+typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, T1> &pma2) const
+{
+ auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2);
+ return typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, T1> &upma2) const
+{
+ auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain3>
+typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::preimage_domain_wrapped_domain(const typed::multi_aff<Domain3, T1> &pma2) const
+{
+ auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2);
+ return typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain3>
+typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::preimage_domain_wrapped_domain(const typed::pw_aff<Domain3, T1> &pma2) const
+{
+ auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2);
+ return typed::pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::multi_pw_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::product(const typed::multi_pw_aff<Domain2, Arg2> &multi2) const
+{
+ auto res = isl::pw_multi_aff::product(multi2);
+ return typed::multi_pw_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::product(const typed::pw_multi_aff<Domain2, Arg2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::product(const typed::multi_aff<Domain2, Arg2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::product(const typed::pw_aff<Domain2, Arg2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::product(pma2);
+ return typed::pw_multi_aff<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::multi_pw_aff<Domain2, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::multi_pw_aff<pair<T1, T2>> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::pullback(mpa2);
+ return typed::multi_pw_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::pw_multi_aff<Domain2, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const
+{
+ auto res = isl::pw_multi_aff::pullback(ma);
+ return typed::pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::multi_aff<pair<T1, T2>> &ma) const
+{
+ auto res = isl::pw_multi_aff::pullback(ma);
+ return typed::pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::pw_multi_aff<Domain2, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<pair<T1, T2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(pma2);
+ return typed::pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<pair<T1, T2>> &upma2) const
+{
+ auto res = isl::pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff_list<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pw_multi_aff_list() const
+{
+ auto res = isl::pw_multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, Range> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::pw_multi_aff::range_factor_domain();
+ return typed::pw_multi_aff<pair<T1, T2>, Range>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, Range2> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::pw_multi_aff::range_factor_range();
+ return typed::pw_multi_aff<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::multi_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::multi_pw_aff<pair<T1, T2>, Arg2> &multi2) const
+{
+ auto res = isl::pw_multi_aff::range_product(multi2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::multi_union_pw_aff<pair<T1, T2>, Arg2> &multi2) const
+{
+ auto res = isl::pw_multi_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::pw_multi_aff<pair<T1, T2>, Arg2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::union_pw_multi_aff<pair<T1, T2>, Arg2> &upma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::multi_aff<pair<T1, T2>, Arg2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::pw_aff<pair<T1, T2>, Arg2> &pma2) const
+{
+ auto res = isl::pw_multi_aff::range_product(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::pw_multi_aff::scale(mv);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::pw_multi_aff::scale(v);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale(long v) const
+{
+ auto res = isl::pw_multi_aff::scale(v);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale_down(const typed::multi_val<pair<Range, Range2>> &mv) const
+{
+ auto res = isl::pw_multi_aff::scale_down(mv);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale_down(const typed::val<pair<Range, Range2>> &v) const
+{
+ auto res = isl::pw_multi_aff::scale_down(v);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::scale_down(long v) const
+{
+ auto res = isl::pw_multi_aff::scale_down(v);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::set_at(int pos, const typed::pw_aff<pair<T1, T2>, Anonymous> &el) const
+{
+ auto res = isl::pw_multi_aff::set_at(pos, el);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::set_at(int pos, const typed::union_pw_aff<pair<T1, T2>, Anonymous> &el) const
+{
+ auto res = isl::pw_multi_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::space() const
+{
+ auto res = isl::pw_multi_aff::space();
+ return typed::space<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::sub(multi2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &multi2) const
+{
+ auto res = isl::pw_multi_aff::sub(multi2);
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::sub(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::set<pair<T1, T2>> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::basic_set<pair<T1, T2>> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::point<pair<T1, T2>> &set) const
+{
+ auto res = isl::pw_multi_aff::subtract_domain(set);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::to_multi_pw_aff() const
+{
+ auto res = isl::pw_multi_aff::to_multi_pw_aff();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::to_union_pw_multi_aff() const
+{
+ auto res = isl::pw_multi_aff::to_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> &mpa2) const
+{
+ auto res = isl::pw_multi_aff::union_add(mpa2);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &mupa2) const
+{
+ auto res = isl::pw_multi_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::pw_aff<pair<T1, T2>, pair<Range, Range2>> &pma2) const
+{
+ auto res = isl::pw_multi_aff::union_add(pma2);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain>::pw_multi_aff_list(const isl::ctx &ctx, int n)
+ : isl::pw_multi_aff_list(ctx, n)
+{
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain>::pw_multi_aff_list(const typed::pw_multi_aff<Domain> &el)
+ : isl::pw_multi_aff_list(el)
+{
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain>::pw_multi_aff_list(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_multi_aff_list(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain> typed::pw_multi_aff_list<Domain>::add(const typed::pw_multi_aff<Domain> &el) const
+{
+ auto res = isl::pw_multi_aff_list::add(el);
+ return typed::pw_multi_aff_list<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain> typed::pw_multi_aff_list<Domain>::add(const typed::multi_aff<Domain> &el) const
+{
+ auto res = isl::pw_multi_aff_list::add(el);
+ return typed::pw_multi_aff_list<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain> typed::pw_multi_aff_list<Domain>::add(const typed::pw_aff<Domain> &el) const
+{
+ auto res = isl::pw_multi_aff_list::add(el);
+ return typed::pw_multi_aff_list<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::pw_multi_aff_list<Domain>::at(int index) const
+{
+ auto res = isl::pw_multi_aff_list::at(index);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain> typed::pw_multi_aff_list<Domain>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::pw_multi_aff_list::drop(first, n);
+ return typed::pw_multi_aff_list<Domain>(res);
+}
+
+template <typename Domain>
+void typed::pw_multi_aff_list<Domain>::foreach(const std::function<void(typed::pw_multi_aff<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::pw_multi_aff arg0) {
+ return fn(typed::pw_multi_aff<Domain>(arg0));
+ };
+ return isl::pw_multi_aff_list::foreach(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff_list<Domain, Range>::pw_multi_aff_list(const isl::ctx &ctx, int n)
+ : isl::pw_multi_aff_list(ctx, n)
+{
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff_list<Domain, Range>::pw_multi_aff_list(const typed::pw_multi_aff<Domain, Range> &el)
+ : isl::pw_multi_aff_list(el)
+{
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff_list<Domain, Range>::pw_multi_aff_list(const isl::ctx &ctx, const std::string &str)
+ : isl::pw_multi_aff_list(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff_list<Domain, Range> typed::pw_multi_aff_list<Domain, Range>::add(const typed::pw_multi_aff<Domain, Range> &el) const
+{
+ auto res = isl::pw_multi_aff_list::add(el);
+ return typed::pw_multi_aff_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff_list<Domain, Range> typed::pw_multi_aff_list<Domain, Range>::add(const typed::multi_aff<Domain, Range> &el) const
+{
+ auto res = isl::pw_multi_aff_list::add(el);
+ return typed::pw_multi_aff_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff_list<Domain, Range> typed::pw_multi_aff_list<Domain, Range>::add(const typed::pw_aff<Domain, Range> &el) const
+{
+ auto res = isl::pw_multi_aff_list::add(el);
+ return typed::pw_multi_aff_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::pw_multi_aff_list<Domain, Range>::at(int index) const
+{
+ auto res = isl::pw_multi_aff_list::at(index);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff_list<Domain, Range> typed::pw_multi_aff_list<Domain, Range>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::pw_multi_aff_list::drop(first, n);
+ return typed::pw_multi_aff_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+void typed::pw_multi_aff_list<Domain, Range>::foreach(const std::function<void(typed::pw_multi_aff<Domain, Range>)> &fn) const
+{
+ auto lambda = [&] (isl::pw_multi_aff arg0) {
+ return fn(typed::pw_multi_aff<Domain, Range>(arg0));
+ };
+ return isl::pw_multi_aff_list::foreach(lambda);
+}
+
+typed::set<>::set(const typed::basic_set<> &bset)
+ : isl::set(bset)
+{
+}
+
+typed::set<>::set(const typed::point<> &pnt)
+ : isl::set(pnt)
+{
+}
+
+typed::set<>::set(const isl::ctx &ctx, const std::string &str)
+ : isl::set(ctx, str)
+{
+}
+
+typed::set<> typed::set<>::coalesce() const
+{
+ auto res = isl::set::coalesce();
+ return typed::set<>(res);
+}
+
+typed::set<> typed::set<>::detect_equalities() const
+{
+ auto res = isl::set::detect_equalities();
+ return typed::set<>(res);
+}
+
+bool typed::set<>::every_set(const std::function<bool(typed::set<>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<>(arg0));
+ };
+ return isl::set::every_set(lambda);
+}
+
+typed::set<> typed::set<>::extract_set(const typed::space<> &space) const
+{
+ auto res = isl::set::extract_set(space);
+ return typed::set<>(res);
+}
+
+void typed::set<>::foreach_basic_set(const std::function<void(typed::basic_set<>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_set arg0) {
+ return fn(typed::basic_set<>(arg0));
+ };
+ return isl::set::foreach_basic_set(lambda);
+}
+
+void typed::set<>::foreach_point(const std::function<void(typed::point<>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<>(arg0));
+ };
+ return isl::set::foreach_point(lambda);
+}
+
+void typed::set<>::foreach_set(const std::function<void(typed::set<>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<>(arg0));
+ };
+ return isl::set::foreach_set(lambda);
+}
+
+typed::set<> typed::set<>::gist(const typed::set<> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::set<>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::union_set<>(res);
+}
+
+typed::set<> typed::set<>::gist(const typed::basic_set<> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::set<>::gist(const typed::point<> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::set<>(res);
+}
+
+typed::pw_aff<Anonymous> typed::set<>::indicator_function() const
+{
+ auto res = isl::set::indicator_function();
+ return typed::pw_aff<Anonymous>(res);
+}
+
+typed::set<> typed::set<>::intersect(const typed::set<> &set2) const
+{
+ auto res = isl::set::intersect(set2);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::set<>::intersect(const typed::union_set<> &uset2) const
+{
+ auto res = isl::set::intersect(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::set<> typed::set<>::intersect(const typed::basic_set<> &set2) const
+{
+ auto res = isl::set::intersect(set2);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::set<>::intersect(const typed::point<> &set2) const
+{
+ auto res = isl::set::intersect(set2);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::set<>::project_out_all_params() const
+{
+ auto res = isl::set::project_out_all_params();
+ return typed::set<>(res);
+}
+
+typed::set<> typed::set<>::project_out_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::set::project_out_param(id);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::set<>::project_out_param(const std::string &id) const
+{
+ auto res = isl::set::project_out_param(id);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::set<>::project_out_param(const typed::id_list<Anonymous> &list) const
+{
+ auto res = isl::set::project_out_param(list);
+ return typed::set<>(res);
+}
+
+typed::space<> typed::set<>::space() const
+{
+ auto res = isl::set::space();
+ return typed::space<>(res);
+}
+
+typed::set<> typed::set<>::subtract(const typed::set<> &set2) const
+{
+ auto res = isl::set::subtract(set2);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::set<>::subtract(const typed::union_set<> &uset2) const
+{
+ auto res = isl::set::subtract(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::set<> typed::set<>::subtract(const typed::basic_set<> &set2) const
+{
+ auto res = isl::set::subtract(set2);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::set<>::subtract(const typed::point<> &set2) const
+{
+ auto res = isl::set::subtract(set2);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::set<>::to_union_set() const
+{
+ auto res = isl::set::to_union_set();
+ return typed::union_set<>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<>::unbind_params(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::set::unbind_params(tuple);
+ return typed::set<Domain>(res);
+}
+
+typed::set<> typed::set<>::unite(const typed::set<> &set2) const
+{
+ auto res = isl::set::unite(set2);
+ return typed::set<>(res);
+}
+
+typed::union_set<> typed::set<>::unite(const typed::union_set<> &uset2) const
+{
+ auto res = isl::set::unite(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::set<> typed::set<>::unite(const typed::basic_set<> &set2) const
+{
+ auto res = isl::set::unite(set2);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::set<>::unite(const typed::point<> &set2) const
+{
+ auto res = isl::set::unite(set2);
+ return typed::set<>(res);
+}
+
+typed::set<> typed::set<>::universe(const typed::space<> &space)
+{
+ auto res = isl::set::universe(space);
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+typed::set<Domain>::set(const typed::basic_set<Domain> &bset)
+ : isl::set(bset)
+{
+}
+
+template <typename Domain>
+typed::set<Domain>::set(const typed::point<Domain> &pnt)
+ : isl::set(pnt)
+{
+}
+
+template <typename Domain>
+typed::set<Domain>::set(const isl::ctx &ctx, const std::string &str)
+ : isl::set(ctx, str)
+{
+}
+
+template <typename Domain>
+template <typename Range>
+typed::set<Range> typed::set<Domain>::apply(const typed::map<Domain, Range> &map) const
+{
+ auto res = isl::set::apply(map);
+ return typed::set<Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_set<Range> typed::set<Domain>::apply(const typed::union_map<Domain, Range> &umap) const
+{
+ auto res = isl::set::apply(umap);
+ return typed::union_set<Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::set<Range> typed::set<Domain>::apply(const typed::basic_map<Domain, Range> &map) const
+{
+ auto res = isl::set::apply(map);
+ return typed::set<Range>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::set<Domain>::as_pw_multi_aff() const
+{
+ auto res = isl::set::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::as_set() const
+{
+ auto res = isl::set::as_set();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<> typed::set<Domain>::bind(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::set::bind(tuple);
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::coalesce() const
+{
+ auto res = isl::set::coalesce();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::detect_equalities() const
+{
+ auto res = isl::set::detect_equalities();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+bool typed::set<Domain>::every_set(const std::function<bool(typed::set<Domain>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<Domain>(arg0));
+ };
+ return isl::set::every_set(lambda);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::extract_set(const typed::space<Domain> &space) const
+{
+ auto res = isl::set::extract_set(space);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+void typed::set<Domain>::foreach_basic_set(const std::function<void(typed::basic_set<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_set arg0) {
+ return fn(typed::basic_set<Domain>(arg0));
+ };
+ return isl::set::foreach_basic_set(lambda);
+}
+
+template <typename Domain>
+void typed::set<Domain>::foreach_point(const std::function<void(typed::point<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<Domain>(arg0));
+ };
+ return isl::set::foreach_point(lambda);
+}
+
+template <typename Domain>
+void typed::set<Domain>::foreach_set(const std::function<void(typed::set<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<Domain>(arg0));
+ };
+ return isl::set::foreach_set(lambda);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::set<Domain>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::gist(const typed::point<Domain> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::set<Domain>::identity() const
+{
+ auto res = isl::set::identity();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_aff<Domain, Anonymous> typed::set<Domain>::indicator_function() const
+{
+ auto res = isl::set::indicator_function();
+ return typed::pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::map<Arg1, Domain> typed::set<Domain>::insert_domain(const typed::space<Arg1> &domain) const
+{
+ auto res = isl::set::insert_domain(domain);
+ return typed::map<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::intersect(const typed::set<Domain> &set2) const
+{
+ auto res = isl::set::intersect(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::set<Domain>::intersect(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::set::intersect(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::intersect(const typed::basic_set<Domain> &set2) const
+{
+ auto res = isl::set::intersect(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::intersect(const typed::point<Domain> &set2) const
+{
+ auto res = isl::set::intersect(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::set::intersect_params(params);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::intersect_params(const typed::basic_set<> ¶ms) const
+{
+ auto res = isl::set::intersect_params(params);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::intersect_params(const typed::point<> ¶ms) const
+{
+ auto res = isl::set::intersect_params(params);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::lexmax() const
+{
+ auto res = isl::set::lexmax();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::set<Domain>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::set::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::lexmin() const
+{
+ auto res = isl::set::lexmin();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::set<Domain>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::set::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::lower_bound(const typed::multi_pw_aff<Domain> &lower) const
+{
+ auto res = isl::set::lower_bound(lower);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::lower_bound(const typed::multi_val<Domain> &lower) const
+{
+ auto res = isl::set::lower_bound(lower);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::set<Domain>::max_multi_pw_aff() const
+{
+ auto res = isl::set::max_multi_pw_aff();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::set<Domain>::min_multi_pw_aff() const
+{
+ auto res = isl::set::min_multi_pw_aff();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<> typed::set<Domain>::params() const
+{
+ auto res = isl::set::params();
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::set<Domain>::plain_multi_val_if_fixed() const
+{
+ auto res = isl::set::plain_multi_val_if_fixed();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::set<Domain2> typed::set<Domain>::preimage(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::set::preimage(ma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::set<Domain2> typed::set<Domain>::preimage(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::set::preimage(mpa);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::set<Domain2> typed::set<Domain>::preimage(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::set::preimage(pma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_set<Domain2> typed::set<Domain>::preimage(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::set::preimage(upma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::set<pair<Domain, Range>> typed::set<Domain>::product(const typed::set<Range> &set2) const
+{
+ auto res = isl::set::product(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::set<pair<Domain, Range>> typed::set<Domain>::product(const typed::basic_set<Range> &set2) const
+{
+ auto res = isl::set::product(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::set<pair<Domain, Range>> typed::set<Domain>::product(const typed::point<Range> &set2) const
+{
+ auto res = isl::set::product(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::project_out_all_params() const
+{
+ auto res = isl::set::project_out_all_params();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::project_out_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::set::project_out_param(id);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::project_out_param(const std::string &id) const
+{
+ auto res = isl::set::project_out_param(id);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::project_out_param(const typed::id_list<Anonymous> &list) const
+{
+ auto res = isl::set::project_out_param(list);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::pw_multi_aff<Domain, Range> typed::set<Domain>::pw_multi_aff_on_domain(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::set::pw_multi_aff_on_domain(mv);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain>
+typed::fixed_box<Domain> typed::set<Domain>::simple_fixed_box_hull() const
+{
+ auto res = isl::set::simple_fixed_box_hull();
+ return typed::fixed_box<Domain>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::set<Domain>::space() const
+{
+ auto res = isl::set::space();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::subtract(const typed::set<Domain> &set2) const
+{
+ auto res = isl::set::subtract(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::set<Domain>::subtract(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::set::subtract(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::subtract(const typed::basic_set<Domain> &set2) const
+{
+ auto res = isl::set::subtract(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::subtract(const typed::point<Domain> &set2) const
+{
+ auto res = isl::set::subtract(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::set<Domain>::to_union_set() const
+{
+ auto res = isl::set::to_union_set();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::set<Domain>::translation() const
+{
+ auto res = isl::set::translation();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Arg1>
+typed::map<Arg1, Domain> typed::set<Domain>::unbind_params_insert_domain(const typed::multi_id<Arg1> &domain) const
+{
+ auto res = isl::set::unbind_params_insert_domain(domain);
+ return typed::map<Arg1, Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::unite(const typed::set<Domain> &set2) const
+{
+ auto res = isl::set::unite(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::set<Domain>::unite(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::set::unite(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::unite(const typed::basic_set<Domain> &set2) const
+{
+ auto res = isl::set::unite(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::unite(const typed::point<Domain> &set2) const
+{
+ auto res = isl::set::unite(set2);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::universe(const typed::space<Domain> &space)
+{
+ auto res = isl::set::universe(space);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::upper_bound(const typed::multi_pw_aff<Domain> &upper) const
+{
+ auto res = isl::set::upper_bound(upper);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::set<Domain>::upper_bound(const typed::multi_val<Domain> &upper) const
+{
+ auto res = isl::set::upper_bound(upper);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>>::set(const typed::basic_set<pair<Domain, Range>> &bset)
+ : isl::set(bset)
+{
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>>::set(const typed::point<pair<Domain, Range>> &pnt)
+ : isl::set(pnt)
+{
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>>::set(const isl::ctx &ctx, const std::string &str)
+ : isl::set(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::set<Arg2> typed::set<pair<Domain, Range>>::apply(const typed::map<pair<Domain, Range>, Arg2> &map) const
+{
+ auto res = isl::set::apply(map);
+ return typed::set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::union_set<Arg2> typed::set<pair<Domain, Range>>::apply(const typed::union_map<pair<Domain, Range>, Arg2> &umap) const
+{
+ auto res = isl::set::apply(umap);
+ return typed::union_set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::set<Arg2> typed::set<pair<Domain, Range>>::apply(const typed::basic_map<pair<Domain, Range>, Arg2> &map) const
+{
+ auto res = isl::set::apply(map);
+ return typed::set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::set<pair<Domain, Range>>::as_pw_multi_aff() const
+{
+ auto res = isl::set::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::as_set() const
+{
+ auto res = isl::set::as_set();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<> typed::set<pair<Domain, Range>>::bind(const typed::multi_id<pair<Domain, Range>> &tuple) const
+{
+ auto res = isl::set::bind(tuple);
+ return typed::set<>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::coalesce() const
+{
+ auto res = isl::set::coalesce();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::detect_equalities() const
+{
+ auto res = isl::set::detect_equalities();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+bool typed::set<pair<Domain, Range>>::every_set(const std::function<bool(typed::set<pair<Domain, Range>>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<pair<Domain, Range>>(arg0));
+ };
+ return isl::set::every_set(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::extract_set(const typed::space<pair<Domain, Range>> &space) const
+{
+ auto res = isl::set::extract_set(space);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+void typed::set<pair<Domain, Range>>::foreach_basic_set(const std::function<void(typed::basic_set<pair<Domain, Range>>)> &fn) const
+{
+ auto lambda = [&] (isl::basic_set arg0) {
+ return fn(typed::basic_set<pair<Domain, Range>>(arg0));
+ };
+ return isl::set::foreach_basic_set(lambda);
+}
+
+template <typename Domain, typename Range>
+void typed::set<pair<Domain, Range>>::foreach_point(const std::function<void(typed::point<pair<Domain, Range>>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<pair<Domain, Range>>(arg0));
+ };
+ return isl::set::foreach_point(lambda);
+}
+
+template <typename Domain, typename Range>
+void typed::set<pair<Domain, Range>>::foreach_set(const std::function<void(typed::set<pair<Domain, Range>>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<pair<Domain, Range>>(arg0));
+ };
+ return isl::set::foreach_set(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::gist(const typed::set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::gist(const typed::union_set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::gist(const typed::basic_set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::gist(const typed::point<pair<Domain, Range>> &context) const
+{
+ auto res = isl::set::gist(context);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<pair<Domain, Range>, pair<Domain, Range>> typed::set<pair<Domain, Range>>::identity() const
+{
+ auto res = isl::set::identity();
+ return typed::map<pair<Domain, Range>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_aff<pair<Domain, Range>, Anonymous> typed::set<pair<Domain, Range>>::indicator_function() const
+{
+ auto res = isl::set::indicator_function();
+ return typed::pw_aff<pair<Domain, Range>, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::map<Arg2, pair<Domain, Range>> typed::set<pair<Domain, Range>>::insert_domain(const typed::space<Arg2> &domain) const
+{
+ auto res = isl::set::insert_domain(domain);
+ return typed::map<Arg2, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::intersect(const typed::set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::set::intersect(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::intersect(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::set::intersect(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::intersect(const typed::basic_set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::set::intersect(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::intersect(const typed::point<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::set::intersect(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::intersect_params(const typed::set<> ¶ms) const
+{
+ auto res = isl::set::intersect_params(params);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::intersect_params(const typed::basic_set<> ¶ms) const
+{
+ auto res = isl::set::intersect_params(params);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::intersect_params(const typed::point<> ¶ms) const
+{
+ auto res = isl::set::intersect_params(params);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::lexmax() const
+{
+ auto res = isl::set::lexmax();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::set<pair<Domain, Range>>::lexmax_pw_multi_aff() const
+{
+ auto res = isl::set::lexmax_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::lexmin() const
+{
+ auto res = isl::set::lexmin();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>> typed::set<pair<Domain, Range>>::lexmin_pw_multi_aff() const
+{
+ auto res = isl::set::lexmin_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::lower_bound(const typed::multi_pw_aff<pair<Domain, Range>> &lower) const
+{
+ auto res = isl::set::lower_bound(lower);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::lower_bound(const typed::multi_val<pair<Domain, Range>> &lower) const
+{
+ auto res = isl::set::lower_bound(lower);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::set<pair<Domain, Range>>::max_multi_pw_aff() const
+{
+ auto res = isl::set::max_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::set<pair<Domain, Range>>::min_multi_pw_aff() const
+{
+ auto res = isl::set::min_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<> typed::set<pair<Domain, Range>>::params() const
+{
+ auto res = isl::set::params();
+ return typed::set<>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<pair<Domain, Range>> typed::set<pair<Domain, Range>>::plain_multi_val_if_fixed() const
+{
+ auto res = isl::set::plain_multi_val_if_fixed();
+ return typed::multi_val<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::set<Domain2> typed::set<pair<Domain, Range>>::preimage(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const
+{
+ auto res = isl::set::preimage(ma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::set<Domain2> typed::set<pair<Domain, Range>>::preimage(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const
+{
+ auto res = isl::set::preimage(mpa);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::set<Domain2> typed::set<pair<Domain, Range>>::preimage(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const
+{
+ auto res = isl::set::preimage(pma);
+ return typed::set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_set<Domain2> typed::set<pair<Domain, Range>>::preimage(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const
+{
+ auto res = isl::set::preimage(upma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::set<pair<pair<Domain, Range>, Arg2>> typed::set<pair<Domain, Range>>::product(const typed::set<Arg2> &set2) const
+{
+ auto res = isl::set::product(set2);
+ return typed::set<pair<pair<Domain, Range>, Arg2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::set<pair<pair<Domain, Range>, Arg2>> typed::set<pair<Domain, Range>>::product(const typed::basic_set<Arg2> &set2) const
+{
+ auto res = isl::set::product(set2);
+ return typed::set<pair<pair<Domain, Range>, Arg2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::set<pair<pair<Domain, Range>, Arg2>> typed::set<pair<Domain, Range>>::product(const typed::point<Arg2> &set2) const
+{
+ auto res = isl::set::product(set2);
+ return typed::set<pair<pair<Domain, Range>, Arg2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::project_out_all_params() const
+{
+ auto res = isl::set::project_out_all_params();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::project_out_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::set::project_out_param(id);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::project_out_param(const std::string &id) const
+{
+ auto res = isl::set::project_out_param(id);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::project_out_param(const typed::id_list<Anonymous> &list) const
+{
+ auto res = isl::set::project_out_param(list);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::pw_multi_aff<pair<Domain, Range>, Arg2> typed::set<pair<Domain, Range>>::pw_multi_aff_on_domain(const typed::multi_val<Arg2> &mv) const
+{
+ auto res = isl::set::pw_multi_aff_on_domain(mv);
+ return typed::pw_multi_aff<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::fixed_box<pair<Domain, Range>> typed::set<pair<Domain, Range>>::simple_fixed_box_hull() const
+{
+ auto res = isl::set::simple_fixed_box_hull();
+ return typed::fixed_box<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<pair<Domain, Range>> typed::set<pair<Domain, Range>>::space() const
+{
+ auto res = isl::set::space();
+ return typed::space<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::subtract(const typed::set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::set::subtract(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::subtract(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::set::subtract(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::subtract(const typed::basic_set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::set::subtract(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::subtract(const typed::point<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::set::subtract(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::to_union_set() const
+{
+ auto res = isl::set::to_union_set();
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<pair<Domain, Range>, pair<Domain, Range>> typed::set<pair<Domain, Range>>::translation() const
+{
+ auto res = isl::set::translation();
+ return typed::map<pair<Domain, Range>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::map<Arg2, pair<Domain, Range>> typed::set<pair<Domain, Range>>::unbind_params_insert_domain(const typed::multi_id<Arg2> &domain) const
+{
+ auto res = isl::set::unbind_params_insert_domain(domain);
+ return typed::map<Arg2, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::unite(const typed::set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::set::unite(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::unite(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::set::unite(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::unite(const typed::basic_set<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::set::unite(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::unite(const typed::point<pair<Domain, Range>> &set2) const
+{
+ auto res = isl::set::unite(set2);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::universe(const typed::space<pair<Domain, Range>> &space)
+{
+ auto res = isl::set::universe(space);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::set<pair<Domain, Range>>::unwrap() const
+{
+ auto res = isl::set::unwrap();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::upper_bound(const typed::multi_pw_aff<pair<Domain, Range>> &upper) const
+{
+ auto res = isl::set::upper_bound(upper);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::set<pair<Domain, Range>>::upper_bound(const typed::multi_val<pair<Domain, Range>> &upper) const
+{
+ auto res = isl::set::upper_bound(upper);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::space<>::add_named_tuple(const typed::id<Anonymous> &tuple_id, unsigned int dim) const
+{
+ auto res = isl::space::add_named_tuple(tuple_id, dim);
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::space<>::add_named_tuple(const std::string &tuple_id, unsigned int dim) const
+{
+ auto res = isl::space::add_named_tuple(tuple_id, dim);
+ return typed::space<Domain>(res);
+}
+
+typed::space<> typed::space<>::add_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<>(res);
+}
+
+typed::space<> typed::space<>::add_param(const std::string &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::space<>::add_unnamed_tuple(unsigned int dim) const
+{
+ auto res = isl::space::add_unnamed_tuple(dim);
+ return typed::space<Domain>(res);
+}
+
+typed::aff<Anonymous> typed::space<>::param_aff_on_domain(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::param_aff_on_domain(id);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::aff<Anonymous> typed::space<>::param_aff_on_domain(const std::string &id) const
+{
+ auto res = isl::space::param_aff_on_domain(id);
+ return typed::aff<Anonymous>(res);
+}
+
+typed::space<> typed::space<>::unit(const isl::ctx &ctx)
+{
+ auto res = isl::space::unit(ctx);
+ return typed::space<>(res);
+}
+
+typed::set<> typed::space<>::universe_set() const
+{
+ auto res = isl::space::universe_set();
+ return typed::set<>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::space<Domain, Range> typed::space<Domain>::add_named_tuple(const typed::id<Anonymous> &tuple_id, unsigned int dim) const
+{
+ auto res = isl::space::add_named_tuple(tuple_id, dim);
+ return typed::space<Domain, Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::space<Domain, Range> typed::space<Domain>::add_named_tuple(const std::string &tuple_id, unsigned int dim) const
+{
+ auto res = isl::space::add_named_tuple(tuple_id, dim);
+ return typed::space<Domain, Range>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::space<Domain>::add_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+typed::space<Domain> typed::space<Domain>::add_param(const std::string &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::space<Domain, Range> typed::space<Domain>::add_unnamed_tuple(unsigned int dim) const
+{
+ auto res = isl::space::add_unnamed_tuple(dim);
+ return typed::space<Domain, Range>(res);
+}
+
+template <typename Domain>
+typed::space<> typed::space<Domain>::domain() const
+{
+ auto res = isl::space::domain();
+ return typed::space<>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain, Domain> typed::space<Domain>::identity_multi_aff_on_domain() const
+{
+ auto res = isl::space::identity_multi_aff_on_domain();
+ return typed::multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain, Domain> typed::space<Domain>::identity_multi_pw_aff_on_domain() const
+{
+ auto res = isl::space::identity_multi_pw_aff_on_domain();
+ return typed::multi_pw_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Domain> typed::space<Domain>::identity_pw_multi_aff_on_domain() const
+{
+ auto res = isl::space::identity_pw_multi_aff_on_domain();
+ return typed::pw_multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::space<Domain, Domain> typed::space<Domain>::map_from_set() const
+{
+ auto res = isl::space::map_from_set();
+ return typed::space<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::space<Domain>::multi_aff(const typed::aff_list<Anonymous> &list) const
+{
+ auto res = isl::space::multi_aff(list);
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::multi_aff<Domain, Range> typed::space<Domain>::multi_aff_on_domain(const typed::multi_val<Range> &mv) const
+{
+ auto res = isl::space::multi_aff_on_domain(mv);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain>
+typed::multi_id<Domain> typed::space<Domain>::multi_id(const typed::id_list<Anonymous> &list) const
+{
+ auto res = isl::space::multi_id(list);
+ return typed::multi_id<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::space<Domain>::multi_pw_aff(const typed::pw_aff_list<Anonymous> &list) const
+{
+ auto res = isl::space::multi_pw_aff(list);
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::space<Domain>::multi_union_pw_aff(const typed::union_pw_aff_list<Anonymous> &list) const
+{
+ auto res = isl::space::multi_union_pw_aff(list);
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::space<Domain>::multi_val(const typed::val_list<Anonymous> &list) const
+{
+ auto res = isl::space::multi_val(list);
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::space<Domain>::param_aff_on_domain(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::param_aff_on_domain(id);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::space<Domain>::param_aff_on_domain(const std::string &id) const
+{
+ auto res = isl::space::param_aff_on_domain(id);
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::space<> typed::space<Domain>::params() const
+{
+ auto res = isl::space::params();
+ return typed::space<>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::space<pair<Domain, Range>> typed::space<Domain>::product(const typed::space<Range> &right) const
+{
+ auto res = isl::space::product(right);
+ return typed::space<pair<Domain, Range>>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::space<Domain2> typed::space<Domain>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::set_range_tuple(id);
+ return typed::space<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::space<Domain2> typed::space<Domain>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::space::set_range_tuple(id);
+ return typed::space<Domain2>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::space<Domain>::universe_set() const
+{
+ auto res = isl::space::universe_set();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::aff<Domain, Anonymous> typed::space<Domain>::zero_aff_on_domain() const
+{
+ auto res = isl::space::zero_aff_on_domain();
+ return typed::aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_aff<Domain> typed::space<Domain>::zero_multi_aff() const
+{
+ auto res = isl::space::zero_multi_aff();
+ return typed::multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_pw_aff<Domain> typed::space<Domain>::zero_multi_pw_aff() const
+{
+ auto res = isl::space::zero_multi_pw_aff();
+ return typed::multi_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::space<Domain>::zero_multi_union_pw_aff() const
+{
+ auto res = isl::space::zero_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_val<Domain> typed::space<Domain>::zero_multi_val() const
+{
+ auto res = isl::space::zero_multi_val();
+ return typed::multi_val<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Domain, Range> typed::space<Domain, Range>::add_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Domain, Range> typed::space<Domain, Range>::add_param(const std::string &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Domain> typed::space<Domain, Range>::domain() const
+{
+ auto res = isl::space::domain();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<pair<Domain, Range>, Domain> typed::space<Domain, Range>::domain_map_multi_aff() const
+{
+ auto res = isl::space::domain_map_multi_aff();
+ return typed::multi_aff<pair<Domain, Range>, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>, Domain> typed::space<Domain, Range>::domain_map_pw_multi_aff() const
+{
+ auto res = isl::space::domain_map_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::space<Domain, Range>::multi_aff(const typed::aff_list<Domain, Anonymous> &list) const
+{
+ auto res = isl::space::multi_aff(list);
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::space<Domain, Range>::multi_pw_aff(const typed::pw_aff_list<Domain, Anonymous> &list) const
+{
+ auto res = isl::space::multi_pw_aff(list);
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::space<Domain, Range>::multi_union_pw_aff(const typed::union_pw_aff_list<Domain, Anonymous> &list) const
+{
+ auto res = isl::space::multi_union_pw_aff(list);
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<> typed::space<Domain, Range>::params() const
+{
+ auto res = isl::space::params();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::space<pair<Domain, Domain2>, pair<Range, Range2>> typed::space<Domain, Range>::product(const typed::space<Domain2, Range2> &right) const
+{
+ auto res = isl::space::product(right);
+ return typed::space<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Range> typed::space<Domain, Range>::range() const
+{
+ auto res = isl::space::range();
+ return typed::space<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<pair<Domain, Range>, Range> typed::space<Domain, Range>::range_map_multi_aff() const
+{
+ auto res = isl::space::range_map_multi_aff();
+ return typed::multi_aff<pair<Domain, Range>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>, Range> typed::space<Domain, Range>::range_map_pw_multi_aff() const
+{
+ auto res = isl::space::range_map_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Range>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Range, Domain> typed::space<Domain, Range>::reverse() const
+{
+ auto res = isl::space::reverse();
+ return typed::space<Range, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::space<Domain2, Range> typed::space<Domain, Range>::set_domain_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::set_domain_tuple(id);
+ return typed::space<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::space<Domain2, Range> typed::space<Domain, Range>::set_domain_tuple(const std::string &id) const
+{
+ auto res = isl::space::set_domain_tuple(id);
+ return typed::space<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::space<Domain, Range2> typed::space<Domain, Range>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::set_range_tuple(id);
+ return typed::space<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::space<Domain, Range2> typed::space<Domain, Range>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::space::set_range_tuple(id);
+ return typed::space<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::space<Domain, Range>::universe_map() const
+{
+ auto res = isl::space::universe_map();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<pair<Domain, Range>> typed::space<Domain, Range>::wrap() const
+{
+ auto res = isl::space::wrap();
+ return typed::space<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<Domain, Range> typed::space<Domain, Range>::zero_multi_aff() const
+{
+ auto res = isl::space::zero_multi_aff();
+ return typed::multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<Domain, Range> typed::space<Domain, Range>::zero_multi_pw_aff() const
+{
+ auto res = isl::space::zero_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::space<Domain, Range>::zero_multi_union_pw_aff() const
+{
+ auto res = isl::space::zero_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::space<pair<Domain, Range>, Arg2> typed::space<pair<Domain, Range>>::add_named_tuple(const typed::id<Anonymous> &tuple_id, unsigned int dim) const
+{
+ auto res = isl::space::add_named_tuple(tuple_id, dim);
+ return typed::space<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::space<pair<Domain, Range>, Arg2> typed::space<pair<Domain, Range>>::add_named_tuple(const std::string &tuple_id, unsigned int dim) const
+{
+ auto res = isl::space::add_named_tuple(tuple_id, dim);
+ return typed::space<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<pair<Domain, Range>> typed::space<pair<Domain, Range>>::add_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<pair<Domain, Range>> typed::space<pair<Domain, Range>>::add_param(const std::string &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::space<pair<Domain, Range>, Arg2> typed::space<pair<Domain, Range>>::add_unnamed_tuple(unsigned int dim) const
+{
+ auto res = isl::space::add_unnamed_tuple(dim);
+ return typed::space<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<> typed::space<pair<Domain, Range>>::domain() const
+{
+ auto res = isl::space::domain();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<pair<Domain, Range>, pair<Domain, Range>> typed::space<pair<Domain, Range>>::identity_multi_aff_on_domain() const
+{
+ auto res = isl::space::identity_multi_aff_on_domain();
+ return typed::multi_aff<pair<Domain, Range>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<pair<Domain, Range>, pair<Domain, Range>> typed::space<pair<Domain, Range>>::identity_multi_pw_aff_on_domain() const
+{
+ auto res = isl::space::identity_multi_pw_aff_on_domain();
+ return typed::multi_pw_aff<pair<Domain, Range>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<pair<Domain, Range>, pair<Domain, Range>> typed::space<pair<Domain, Range>>::identity_pw_multi_aff_on_domain() const
+{
+ auto res = isl::space::identity_pw_multi_aff_on_domain();
+ return typed::pw_multi_aff<pair<Domain, Range>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<pair<Domain, Range>, pair<Domain, Range>> typed::space<pair<Domain, Range>>::map_from_set() const
+{
+ auto res = isl::space::map_from_set();
+ return typed::space<pair<Domain, Range>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<pair<Domain, Range>> typed::space<pair<Domain, Range>>::multi_aff(const typed::aff_list<Anonymous> &list) const
+{
+ auto res = isl::space::multi_aff(list);
+ return typed::multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::multi_aff<pair<Domain, Range>, Arg2> typed::space<pair<Domain, Range>>::multi_aff_on_domain(const typed::multi_val<Arg2> &mv) const
+{
+ auto res = isl::space::multi_aff_on_domain(mv);
+ return typed::multi_aff<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_id<pair<Domain, Range>> typed::space<pair<Domain, Range>>::multi_id(const typed::id_list<Anonymous> &list) const
+{
+ auto res = isl::space::multi_id(list);
+ return typed::multi_id<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::space<pair<Domain, Range>>::multi_pw_aff(const typed::pw_aff_list<Anonymous> &list) const
+{
+ auto res = isl::space::multi_pw_aff(list);
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<pair<Domain, Range>> typed::space<pair<Domain, Range>>::multi_union_pw_aff(const typed::union_pw_aff_list<Anonymous> &list) const
+{
+ auto res = isl::space::multi_union_pw_aff(list);
+ return typed::multi_union_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<pair<Domain, Range>> typed::space<pair<Domain, Range>>::multi_val(const typed::val_list<Anonymous> &list) const
+{
+ auto res = isl::space::multi_val(list);
+ return typed::multi_val<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::aff<pair<Domain, Range>, Anonymous> typed::space<pair<Domain, Range>>::param_aff_on_domain(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::param_aff_on_domain(id);
+ return typed::aff<pair<Domain, Range>, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+typed::aff<pair<Domain, Range>, Anonymous> typed::space<pair<Domain, Range>>::param_aff_on_domain(const std::string &id) const
+{
+ auto res = isl::space::param_aff_on_domain(id);
+ return typed::aff<pair<Domain, Range>, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<> typed::space<pair<Domain, Range>>::params() const
+{
+ auto res = isl::space::params();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::space<pair<pair<Domain, Range>, Arg2>> typed::space<pair<Domain, Range>>::product(const typed::space<Arg2> &right) const
+{
+ auto res = isl::space::product(right);
+ return typed::space<pair<pair<Domain, Range>, Arg2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::space<pair<Domain, Range>>::universe_set() const
+{
+ auto res = isl::space::universe_set();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<Domain, Range> typed::space<pair<Domain, Range>>::unwrap() const
+{
+ auto res = isl::space::unwrap();
+ return typed::space<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::aff<pair<Domain, Range>, Anonymous> typed::space<pair<Domain, Range>>::zero_aff_on_domain() const
+{
+ auto res = isl::space::zero_aff_on_domain();
+ return typed::aff<pair<Domain, Range>, Anonymous>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_aff<pair<Domain, Range>> typed::space<pair<Domain, Range>>::zero_multi_aff() const
+{
+ auto res = isl::space::zero_multi_aff();
+ return typed::multi_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_pw_aff<pair<Domain, Range>> typed::space<pair<Domain, Range>>::zero_multi_pw_aff() const
+{
+ auto res = isl::space::zero_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<pair<Domain, Range>> typed::space<pair<Domain, Range>>::zero_multi_union_pw_aff() const
+{
+ auto res = isl::space::zero_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_val<pair<Domain, Range>> typed::space<pair<Domain, Range>>::zero_multi_val() const
+{
+ auto res = isl::space::zero_multi_val();
+ return typed::multi_val<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<pair<Domain, Range>, Range2> typed::space<pair<Domain, Range>, Range2>::add_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<pair<Domain, Range>, Range2> typed::space<pair<Domain, Range>, Range2>::add_param(const std::string &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Domain, pair<Range, Range2>> typed::space<pair<Domain, Range>, Range2>::curry() const
+{
+ auto res = isl::space::curry();
+ return typed::space<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<pair<Domain, Range>> typed::space<pair<Domain, Range>, Range2>::domain() const
+{
+ auto res = isl::space::domain();
+ return typed::space<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> typed::space<pair<Domain, Range>, Range2>::domain_map_multi_aff() const
+{
+ auto res = isl::space::domain_map_multi_aff();
+ return typed::multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> typed::space<pair<Domain, Range>, Range2>::domain_map_pw_multi_aff() const
+{
+ auto res = isl::space::domain_map_pw_multi_aff();
+ return typed::pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Anonymous, Range2> typed::space<pair<Domain, Range>, Range2>::flatten_domain() const
+{
+ auto res = isl::space::flatten_domain();
+ return typed::space<Anonymous, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<pair<Domain, Range>, Range2> typed::space<pair<Domain, Range>, Range2>::multi_aff(const typed::aff_list<pair<Domain, Range>, Anonymous> &list) const
+{
+ auto res = isl::space::multi_aff(list);
+ return typed::multi_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<pair<Domain, Range>, Range2> typed::space<pair<Domain, Range>, Range2>::multi_pw_aff(const typed::pw_aff_list<pair<Domain, Range>, Anonymous> &list) const
+{
+ auto res = isl::space::multi_pw_aff(list);
+ return typed::multi_pw_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<Domain, Range>, Range2> typed::space<pair<Domain, Range>, Range2>::multi_union_pw_aff(const typed::union_pw_aff_list<pair<Domain, Range>, Anonymous> &list) const
+{
+ auto res = isl::space::multi_union_pw_aff(list);
+ return typed::multi_union_pw_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<> typed::space<pair<Domain, Range>, Range2>::params() const
+{
+ auto res = isl::space::params();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::space<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> typed::space<pair<Domain, Range>, Range2>::product(const typed::space<Domain2, Arg3> &right) const
+{
+ auto res = isl::space::product(right);
+ return typed::space<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Range2> typed::space<pair<Domain, Range>, Range2>::range() const
+{
+ auto res = isl::space::range();
+ return typed::space<Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<pair<pair<Domain, Range>, Range2>, Range2> typed::space<pair<Domain, Range>, Range2>::range_map_multi_aff() const
+{
+ auto res = isl::space::range_map_multi_aff();
+ return typed::multi_aff<pair<pair<Domain, Range>, Range2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<pair<Domain, Range>, Range2>, Range2> typed::space<pair<Domain, Range>, Range2>::range_map_pw_multi_aff() const
+{
+ auto res = isl::space::range_map_pw_multi_aff();
+ return typed::pw_multi_aff<pair<pair<Domain, Range>, Range2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Range2, pair<Domain, Range>> typed::space<pair<Domain, Range>, Range2>::reverse() const
+{
+ auto res = isl::space::reverse();
+ return typed::space<Range2, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg2>
+typed::space<pair<Domain, Range>, Arg2> typed::space<pair<Domain, Range>, Range2>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::set_range_tuple(id);
+ return typed::space<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg2>
+typed::space<pair<Domain, Range>, Arg2> typed::space<pair<Domain, Range>, Range2>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::space::set_range_tuple(id);
+ return typed::space<pair<Domain, Range>, Arg2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::space<pair<Domain, Range>, Range2>::universe_map() const
+{
+ auto res = isl::space::universe_map();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<pair<pair<Domain, Range>, Range2>> typed::space<pair<Domain, Range>, Range2>::wrap() const
+{
+ auto res = isl::space::wrap();
+ return typed::space<pair<pair<Domain, Range>, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<pair<Domain, Range>, Range2> typed::space<pair<Domain, Range>, Range2>::zero_multi_aff() const
+{
+ auto res = isl::space::zero_multi_aff();
+ return typed::multi_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<pair<Domain, Range>, Range2> typed::space<pair<Domain, Range>, Range2>::zero_multi_pw_aff() const
+{
+ auto res = isl::space::zero_multi_pw_aff();
+ return typed::multi_pw_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<Domain, Range>, Range2> typed::space<pair<Domain, Range>, Range2>::zero_multi_union_pw_aff() const
+{
+ auto res = isl::space::zero_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Domain, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::add_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Domain, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::add_param(const std::string &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Domain> typed::space<Domain, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::space::domain();
+ return typed::space<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<pair<Domain, pair<Range, Range2>>, Domain> typed::space<Domain, pair<Range, Range2>>::domain_map_multi_aff() const
+{
+ auto res = isl::space::domain_map_multi_aff();
+ return typed::multi_aff<pair<Domain, pair<Range, Range2>>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain> typed::space<Domain, pair<Range, Range2>>::domain_map_pw_multi_aff() const
+{
+ auto res = isl::space::domain_map_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Domain, Anonymous> typed::space<Domain, pair<Range, Range2>>::flatten_range() const
+{
+ auto res = isl::space::flatten_range();
+ return typed::space<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::multi_aff(const typed::aff_list<Domain, Anonymous> &list) const
+{
+ auto res = isl::space::multi_aff(list);
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::multi_pw_aff(const typed::pw_aff_list<Domain, Anonymous> &list) const
+{
+ auto res = isl::space::multi_pw_aff(list);
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::multi_union_pw_aff(const typed::union_pw_aff_list<Domain, Anonymous> &list) const
+{
+ auto res = isl::space::multi_union_pw_aff(list);
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<> typed::space<Domain, pair<Range, Range2>>::params() const
+{
+ auto res = isl::space::params();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::space<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::space<Domain, pair<Range, Range2>>::product(const typed::space<Domain2, Arg3> &right) const
+{
+ auto res = isl::space::product(right);
+ return typed::space<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::range() const
+{
+ auto res = isl::space::range();
+ return typed::space<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::range_map_multi_aff() const
+{
+ auto res = isl::space::range_map_multi_aff();
+ return typed::multi_aff<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::range_map_pw_multi_aff() const
+{
+ auto res = isl::space::range_map_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<Domain, pair<Range2, Range>> typed::space<Domain, pair<Range, Range2>>::range_reverse() const
+{
+ auto res = isl::space::range_reverse();
+ return typed::space<Domain, pair<Range2, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<pair<Range, Range2>, Domain> typed::space<Domain, pair<Range, Range2>>::reverse() const
+{
+ auto res = isl::space::reverse();
+ return typed::space<pair<Range, Range2>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::space<Domain2, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::set_domain_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::set_domain_tuple(id);
+ return typed::space<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::space<Domain2, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::set_domain_tuple(const std::string &id) const
+{
+ auto res = isl::space::set_domain_tuple(id);
+ return typed::space<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<pair<Domain, Range>, Range2> typed::space<Domain, pair<Range, Range2>>::uncurry() const
+{
+ auto res = isl::space::uncurry();
+ return typed::space<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::universe_map() const
+{
+ auto res = isl::space::universe_map();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<pair<Domain, pair<Range, Range2>>> typed::space<Domain, pair<Range, Range2>>::wrap() const
+{
+ auto res = isl::space::wrap();
+ return typed::space<pair<Domain, pair<Range, Range2>>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_aff<Domain, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::zero_multi_aff() const
+{
+ auto res = isl::space::zero_multi_aff();
+ return typed::multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_pw_aff<Domain, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::zero_multi_pw_aff() const
+{
+ auto res = isl::space::zero_multi_pw_aff();
+ return typed::multi_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::space<Domain, pair<Range, Range2>>::zero_multi_union_pw_aff() const
+{
+ auto res = isl::space::zero_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<T1, T2>, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::add_param(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<T1, T2>, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::add_param(const std::string &id) const
+{
+ auto res = isl::space::add_param(id);
+ return typed::space<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<T1, pair<T2, pair<Range, Range2>>> typed::space<pair<T1, T2>, pair<Range, Range2>>::curry() const
+{
+ auto res = isl::space::curry();
+ return typed::space<T1, pair<T2, pair<Range, Range2>>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<T1, T2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::space::domain();
+ return typed::space<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::domain_map_multi_aff() const
+{
+ auto res = isl::space::domain_map_multi_aff();
+ return typed::multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::domain_map_pw_multi_aff() const
+{
+ auto res = isl::space::domain_map_pw_multi_aff();
+ return typed::pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<Anonymous, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::flatten_domain() const
+{
+ auto res = isl::space::flatten_domain();
+ return typed::space<Anonymous, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<T1, T2>, Anonymous> typed::space<pair<T1, T2>, pair<Range, Range2>>::flatten_range() const
+{
+ auto res = isl::space::flatten_range();
+ return typed::space<pair<T1, T2>, Anonymous>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::multi_aff(const typed::aff_list<pair<T1, T2>, Anonymous> &list) const
+{
+ auto res = isl::space::multi_aff(list);
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::multi_pw_aff(const typed::pw_aff_list<pair<T1, T2>, Anonymous> &list) const
+{
+ auto res = isl::space::multi_pw_aff(list);
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::multi_union_pw_aff(const typed::union_pw_aff_list<pair<T1, T2>, Anonymous> &list) const
+{
+ auto res = isl::space::multi_union_pw_aff(list);
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<> typed::space<pair<T1, T2>, pair<Range, Range2>>::params() const
+{
+ auto res = isl::space::params();
+ return typed::space<>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::space<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::product(const typed::space<Domain2, Arg2> &right) const
+{
+ auto res = isl::space::product(right);
+ return typed::space<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::range() const
+{
+ auto res = isl::space::range();
+ return typed::space<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::range_map_multi_aff() const
+{
+ auto res = isl::space::range_map_multi_aff();
+ return typed::multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::range_map_pw_multi_aff() const
+{
+ auto res = isl::space::range_map_pw_multi_aff();
+ return typed::pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<T1, T2>, pair<Range2, Range>> typed::space<pair<T1, T2>, pair<Range, Range2>>::range_reverse() const
+{
+ auto res = isl::space::range_reverse();
+ return typed::space<pair<T1, T2>, pair<Range2, Range>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<Range, Range2>, pair<T1, T2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::reverse() const
+{
+ auto res = isl::space::reverse();
+ return typed::space<pair<Range, Range2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<pair<T1, T2>, Range>, Range2> typed::space<pair<T1, T2>, pair<Range, Range2>>::uncurry() const
+{
+ auto res = isl::space::uncurry();
+ return typed::space<pair<pair<T1, T2>, Range>, Range2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::universe_map() const
+{
+ auto res = isl::space::universe_map();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<pair<pair<T1, T2>, pair<Range, Range2>>> typed::space<pair<T1, T2>, pair<Range, Range2>>::wrap() const
+{
+ auto res = isl::space::wrap();
+ return typed::space<pair<pair<T1, T2>, pair<Range, Range2>>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::zero_multi_aff() const
+{
+ auto res = isl::space::zero_multi_aff();
+ return typed::multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::zero_multi_pw_aff() const
+{
+ auto res = isl::space::zero_multi_pw_aff();
+ return typed::multi_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::space<pair<T1, T2>, pair<Range, Range2>>::zero_multi_union_pw_aff() const
+{
+ auto res = isl::space::zero_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range>::union_map(const typed::basic_map<Domain, Range> &bmap)
+ : isl::union_map(bmap)
+{
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range>::union_map(const typed::map<Domain, Range> &map)
+ : isl::union_map(map)
+{
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range>::union_map(const isl::ctx &ctx, const std::string &str)
+ : isl::union_map(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<Domain2, Range> typed::union_map<Domain, Range>::apply_domain(const typed::union_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<Domain2, Range> typed::union_map<Domain, Range>::apply_domain(const typed::basic_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<Domain2, Range> typed::union_map<Domain, Range>::apply_domain(const typed::map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Range>::apply_range(const typed::union_map<Range, Range2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Range>::apply_range(const typed::basic_map<Range, Range2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Range>::apply_range(const typed::map<Range, Range2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::union_map<Domain, Range>::as_map() const
+{
+ auto res = isl::union_map::as_map();
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::union_map<Domain, Range>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_map<Domain, Range>::as_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<Domain> typed::union_map<Domain, Range>::bind_range(const typed::multi_id<Range> &tuple) const
+{
+ auto res = isl::union_map::bind_range(tuple);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::coalesce() const
+{
+ auto res = isl::union_map::coalesce();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::detect_equalities() const
+{
+ auto res = isl::union_map::detect_equalities();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<Domain> typed::union_map<Domain, Range>::domain() const
+{
+ auto res = isl::union_map::domain();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<pair<Domain, Range>, Domain> typed::union_map<Domain, Range>::domain_map() const
+{
+ auto res = isl::union_map::domain_map();
+ return typed::union_map<pair<Domain, Range>, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Range>, Domain> typed::union_map<Domain, Range>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, Range>, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, Range> typed::union_map<Domain, Range>::domain_product(const typed::union_map<Domain2, Range> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, Range> typed::union_map<Domain, Range>::domain_product(const typed::basic_map<Domain2, Range> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, Range> typed::union_map<Domain, Range>::domain_product(const typed::map<Domain2, Range> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_map::empty(ctx);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+bool typed::union_map<Domain, Range>::every_map(const std::function<bool(typed::map<Domain, Range>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<Domain, Range>(arg0));
+ };
+ return isl::union_map::every_map(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::map<Domain, Range> typed::union_map<Domain, Range>::extract_map(const typed::space<Domain, Range> &space) const
+{
+ auto res = isl::union_map::extract_map(space);
+ return typed::map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+void typed::union_map<Domain, Range>::foreach_map(const std::function<void(typed::map<Domain, Range>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<Domain, Range>(arg0));
+ };
+ return isl::union_map::foreach_map(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::gist(const typed::union_map<Domain, Range> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::gist(const typed::basic_map<Domain, Range> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::gist(const typed::map<Domain, Range> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::gist_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::gist_domain(const typed::basic_set<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::gist_domain(const typed::point<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::gist_domain(const typed::set<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::intersect(const typed::union_map<Domain, Range> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::intersect(const typed::basic_map<Domain, Range> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::intersect(const typed::map<Domain, Range> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_map::intersect_domain(space);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_map::intersect_domain(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::intersect_range(const typed::space<Range> &space) const
+{
+ auto res = isl::union_map::intersect_range(space);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::intersect_range(const typed::union_set<Range> &uset) const
+{
+ auto res = isl::union_map::intersect_range(uset);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::lexmax() const
+{
+ auto res = isl::union_map::lexmax();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::lexmin() const
+{
+ auto res = isl::union_map::lexmin();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::map_list<Domain, Range> typed::union_map<Domain, Range>::map_list() const
+{
+ auto res = isl::union_map::map_list();
+ return typed::map_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<Domain2, Range> typed::union_map<Domain, Range>::preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::union_map::preimage_domain(ma);
+ return typed::union_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<Domain2, Range> typed::union_map<Domain, Range>::preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::union_map::preimage_domain(mpa);
+ return typed::union_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<Domain2, Range> typed::union_map<Domain, Range>::preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::union_map::preimage_domain(pma);
+ return typed::union_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_map<Domain2, Range> typed::union_map<Domain, Range>::preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::union_map::preimage_domain(upma);
+ return typed::union_map<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Range>::preimage_range(const typed::multi_aff<Range2, Range> &ma) const
+{
+ auto res = isl::union_map::preimage_range(ma);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Range>::preimage_range(const typed::pw_multi_aff<Range2, Range> &pma) const
+{
+ auto res = isl::union_map::preimage_range(pma);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Range>::preimage_range(const typed::union_pw_multi_aff<Range2, Range> &upma) const
+{
+ auto res = isl::union_map::preimage_range(upma);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> typed::union_map<Domain, Range>::product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> typed::union_map<Domain, Range>::product(const typed::basic_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> typed::union_map<Domain, Range>::product(const typed::map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::project_out_all_params() const
+{
+ auto res = isl::union_map::project_out_all_params();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<Range> typed::union_map<Domain, Range>::range() const
+{
+ auto res = isl::union_map::range();
+ return typed::union_set<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<pair<Domain, Range>, Range> typed::union_map<Domain, Range>::range_map() const
+{
+ auto res = isl::union_map::range_map();
+ return typed::union_map<pair<Domain, Range>, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, Range>::range_product(const typed::union_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, Range>::range_product(const typed::basic_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, Range>::range_product(const typed::map<Domain, Range2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Range, Domain> typed::union_map<Domain, Range>::reverse() const
+{
+ auto res = isl::union_map::reverse();
+ return typed::union_map<Range, Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<> typed::union_map<Domain, Range>::space() const
+{
+ auto res = isl::union_map::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::subtract(const typed::union_map<Domain, Range> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::subtract(const typed::basic_map<Domain, Range> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::subtract(const typed::map<Domain, Range> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::subtract_domain(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::subtract_domain(const typed::basic_set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::subtract_domain(const typed::point<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::subtract_domain(const typed::set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::subtract_range(const typed::union_set<Range> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::subtract_range(const typed::basic_set<Range> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::subtract_range(const typed::point<Range> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::subtract_range(const typed::set<Range> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::unite(const typed::union_map<Domain, Range> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::unite(const typed::basic_map<Domain, Range> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::unite(const typed::map<Domain, Range> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_map<Domain, Range>::universe() const
+{
+ auto res = isl::union_map::universe();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_map<Domain, Range>::wrap() const
+{
+ auto res = isl::union_map::wrap();
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2>::union_map(const typed::basic_map<pair<Domain, Range>, Range2> &bmap)
+ : isl::union_map(bmap)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2>::union_map(const typed::map<pair<Domain, Range>, Range2> &map)
+ : isl::union_map(map)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2>::union_map(const isl::ctx &ctx, const std::string &str)
+ : isl::union_map(ctx, str)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, Range2> typed::union_map<pair<Domain, Range>, Range2>::apply_domain(const typed::union_map<pair<Domain, Range>, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, Range2> typed::union_map<pair<Domain, Range>, Range2>::apply_domain(const typed::basic_map<pair<Domain, Range>, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, Range2> typed::union_map<pair<Domain, Range>, Range2>::apply_domain(const typed::map<pair<Domain, Range>, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, Arg3> typed::union_map<pair<Domain, Range>, Range2>::apply_range(const typed::union_map<Range2, Arg3> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, Arg3> typed::union_map<pair<Domain, Range>, Range2>::apply_range(const typed::basic_map<Range2, Arg3> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, Arg3> typed::union_map<pair<Domain, Range>, Range2>::apply_range(const typed::map<Range2, Arg3> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::as_map() const
+{
+ auto res = isl::union_map::as_map();
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::as_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_set<pair<Domain, Range>> typed::union_map<pair<Domain, Range>, Range2>::bind_range(const typed::multi_id<Range2> &tuple) const
+{
+ auto res = isl::union_map::bind_range(tuple);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::coalesce() const
+{
+ auto res = isl::union_map::coalesce();
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<pair<Domain, Range>, Range2>::curry() const
+{
+ auto res = isl::union_map::curry();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::detect_equalities() const
+{
+ auto res = isl::union_map::detect_equalities();
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_set<pair<Domain, Range>> typed::union_map<pair<Domain, Range>, Range2>::domain() const
+{
+ auto res = isl::union_map::domain();
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<pair<Domain, Range>, Range2>::domain_factor_domain() const
+{
+ auto res = isl::union_map::domain_factor_domain();
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Range, Range2> typed::union_map<pair<Domain, Range>, Range2>::domain_factor_range() const
+{
+ auto res = isl::union_map::domain_factor_range();
+ return typed::union_map<Range, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> typed::union_map<pair<Domain, Range>, Range2>::domain_map() const
+{
+ auto res = isl::union_map::domain_map();
+ return typed::union_map<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>> typed::union_map<pair<Domain, Range>, Range2>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<pair<Domain, Range>, Range2>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2> typed::union_map<pair<Domain, Range>, Range2>::domain_product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2> typed::union_map<pair<Domain, Range>, Range2>::domain_product(const typed::basic_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2> typed::union_map<pair<Domain, Range>, Range2>::domain_product(const typed::map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<pair<Domain, Range>, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_map::empty(ctx);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+bool typed::union_map<pair<Domain, Range>, Range2>::every_map(const std::function<bool(typed::map<pair<Domain, Range>, Range2>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<pair<Domain, Range>, Range2>(arg0));
+ };
+ return isl::union_map::every_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::extract_map(const typed::space<pair<Domain, Range>, Range2> &space) const
+{
+ auto res = isl::union_map::extract_map(space);
+ return typed::map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+void typed::union_map<pair<Domain, Range>, Range2>::foreach_map(const std::function<void(typed::map<pair<Domain, Range>, Range2>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<pair<Domain, Range>, Range2>(arg0));
+ };
+ return isl::union_map::foreach_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::gist(const typed::union_map<pair<Domain, Range>, Range2> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::gist(const typed::basic_map<pair<Domain, Range>, Range2> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::gist(const typed::map<pair<Domain, Range>, Range2> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::gist_domain(const typed::union_set<pair<Domain, Range>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::gist_domain(const typed::basic_set<pair<Domain, Range>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::gist_domain(const typed::point<pair<Domain, Range>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::gist_domain(const typed::set<pair<Domain, Range>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::intersect(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::intersect(const typed::basic_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::intersect(const typed::map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::intersect_domain(const typed::space<pair<Domain, Range>> &space) const
+{
+ auto res = isl::union_map::intersect_domain(space);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::intersect_domain(const typed::union_set<pair<Domain, Range>> &uset) const
+{
+ auto res = isl::union_map::intersect_domain(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::intersect_range(const typed::space<Range2> &space) const
+{
+ auto res = isl::union_map::intersect_range(space);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::intersect_range(const typed::union_set<Range2> &uset) const
+{
+ auto res = isl::union_map::intersect_range(uset);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::lexmax() const
+{
+ auto res = isl::union_map::lexmax();
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::lexmin() const
+{
+ auto res = isl::union_map::lexmin();
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map_list<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::map_list() const
+{
+ auto res = isl::union_map::map_list();
+ return typed::map_list<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, Range2> typed::union_map<pair<Domain, Range>, Range2>::preimage_domain(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const
+{
+ auto res = isl::union_map::preimage_domain(ma);
+ return typed::union_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, Range2> typed::union_map<pair<Domain, Range>, Range2>::preimage_domain(const typed::multi_pw_aff<Domain2, pair<Domain, Range>> &mpa) const
+{
+ auto res = isl::union_map::preimage_domain(mpa);
+ return typed::union_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, Range2> typed::union_map<pair<Domain, Range>, Range2>::preimage_domain(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const
+{
+ auto res = isl::union_map::preimage_domain(pma);
+ return typed::union_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, Range2> typed::union_map<pair<Domain, Range>, Range2>::preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const
+{
+ auto res = isl::union_map::preimage_domain(upma);
+ return typed::union_map<Domain2, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, Arg3> typed::union_map<pair<Domain, Range>, Range2>::preimage_range(const typed::multi_aff<Arg3, Range2> &ma) const
+{
+ auto res = isl::union_map::preimage_range(ma);
+ return typed::union_map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, Arg3> typed::union_map<pair<Domain, Range>, Range2>::preimage_range(const typed::pw_multi_aff<Arg3, Range2> &pma) const
+{
+ auto res = isl::union_map::preimage_range(pma);
+ return typed::union_map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, Arg3> typed::union_map<pair<Domain, Range>, Range2>::preimage_range(const typed::union_pw_multi_aff<Arg3, Range2> &upma) const
+{
+ auto res = isl::union_map::preimage_range(upma);
+ return typed::union_map<pair<Domain, Range>, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> typed::union_map<pair<Domain, Range>, Range2>::product(const typed::union_map<Domain2, Arg3> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> typed::union_map<pair<Domain, Range>, Range2>::product(const typed::basic_map<Domain2, Arg3> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>> typed::union_map<pair<Domain, Range>, Range2>::product(const typed::map<Domain2, Arg3> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<pair<Domain, Range>, Domain2>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::project_out_all_params() const
+{
+ auto res = isl::union_map::project_out_all_params();
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_set<Range2> typed::union_map<pair<Domain, Range>, Range2>::range() const
+{
+ auto res = isl::union_map::range();
+ return typed::union_set<Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<pair<Domain, Range>, Range2>, Range2> typed::union_map<pair<Domain, Range>, Range2>::range_map() const
+{
+ auto res = isl::union_map::range_map();
+ return typed::union_map<pair<pair<Domain, Range>, Range2>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>> typed::union_map<pair<Domain, Range>, Range2>::range_product(const typed::union_map<pair<Domain, Range>, Arg3> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>> typed::union_map<pair<Domain, Range>, Range2>::range_product(const typed::basic_map<pair<Domain, Range>, Arg3> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>> typed::union_map<pair<Domain, Range>, Range2>::range_product(const typed::map<pair<Domain, Range>, Arg3> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<pair<Domain, Range>, pair<Range2, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Range2, pair<Domain, Range>> typed::union_map<pair<Domain, Range>, Range2>::reverse() const
+{
+ auto res = isl::union_map::reverse();
+ return typed::union_map<Range2, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<> typed::union_map<pair<Domain, Range>, Range2>::space() const
+{
+ auto res = isl::union_map::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::subtract(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::subtract(const typed::basic_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::subtract(const typed::map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::subtract_domain(const typed::union_set<pair<Domain, Range>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::subtract_domain(const typed::basic_set<pair<Domain, Range>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::subtract_domain(const typed::point<pair<Domain, Range>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::subtract_domain(const typed::set<pair<Domain, Range>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::subtract_range(const typed::union_set<Range2> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::subtract_range(const typed::basic_set<Range2> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::subtract_range(const typed::point<Range2> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::subtract_range(const typed::set<Range2> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::unite(const typed::union_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::unite(const typed::basic_map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::unite(const typed::map<pair<Domain, Range>, Range2> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<pair<Domain, Range>, Range2>::universe() const
+{
+ auto res = isl::union_map::universe();
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_set<pair<pair<Domain, Range>, Range2>> typed::union_map<pair<Domain, Range>, Range2>::wrap() const
+{
+ auto res = isl::union_map::wrap();
+ return typed::union_set<pair<pair<Domain, Range>, Range2>>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain>::union_map(const typed::basic_map<Domain, Domain> &bmap)
+ : isl::union_map(bmap)
+{
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain>::union_map(const typed::map<Domain, Domain> &map)
+ : isl::union_map(map)
+{
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain>::union_map(const isl::ctx &ctx, const std::string &str)
+ : isl::union_map(ctx, str)
+{
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<Domain2, Domain> typed::union_map<Domain, Domain>::apply_domain(const typed::union_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<Domain2, Domain> typed::union_map<Domain, Domain>::apply_domain(const typed::basic_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<Domain2, Domain> typed::union_map<Domain, Domain>::apply_domain(const typed::map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Domain>::apply_range(const typed::union_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Domain>::apply_range(const typed::basic_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Domain>::apply_range(const typed::map<Domain, Range2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::union_map<Domain, Domain>::as_map() const
+{
+ auto res = isl::union_map::as_map();
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Domain> typed::union_map<Domain, Domain>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Domain> typed::union_map<Domain, Domain>::as_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_map<Domain, Domain>::bind_range(const typed::multi_id<Domain> &tuple) const
+{
+ auto res = isl::union_map::bind_range(tuple);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::coalesce() const
+{
+ auto res = isl::union_map::coalesce();
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_map<Domain, Domain>::deltas() const
+{
+ auto res = isl::union_map::deltas();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::detect_equalities() const
+{
+ auto res = isl::union_map::detect_equalities();
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_map<Domain, Domain>::domain() const
+{
+ auto res = isl::union_map::domain();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<pair<Domain, Domain>, Domain> typed::union_map<Domain, Domain>::domain_map() const
+{
+ auto res = isl::union_map::domain_map();
+ return typed::union_map<pair<Domain, Domain>, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<pair<Domain, Domain>, Domain> typed::union_map<Domain, Domain>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, Domain>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, Domain> typed::union_map<Domain, Domain>::domain_product(const typed::union_map<Domain2, Domain> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, Domain> typed::union_map<Domain, Domain>::domain_product(const typed::basic_map<Domain2, Domain> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, Domain> typed::union_map<Domain, Domain>::domain_product(const typed::map<Domain2, Domain> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_map::empty(ctx);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::eq_at(const typed::multi_union_pw_aff<Domain, Range> &mupa) const
+{
+ auto res = isl::union_map::eq_at(mupa);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::eq_at(const typed::multi_pw_aff<Domain, Range> &mupa) const
+{
+ auto res = isl::union_map::eq_at(mupa);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::eq_at(const typed::union_pw_aff<Domain, Range> &mupa) const
+{
+ auto res = isl::union_map::eq_at(mupa);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+bool typed::union_map<Domain, Domain>::every_map(const std::function<bool(typed::map<Domain, Domain>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<Domain, Domain>(arg0));
+ };
+ return isl::union_map::every_map(lambda);
+}
+
+template <typename Domain>
+typed::map<Domain, Domain> typed::union_map<Domain, Domain>::extract_map(const typed::space<Domain, Domain> &space) const
+{
+ auto res = isl::union_map::extract_map(space);
+ return typed::map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+void typed::union_map<Domain, Domain>::foreach_map(const std::function<void(typed::map<Domain, Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<Domain, Domain>(arg0));
+ };
+ return isl::union_map::foreach_map(lambda);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::gist(const typed::union_map<Domain, Domain> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::gist(const typed::basic_map<Domain, Domain> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::gist(const typed::map<Domain, Domain> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::gist_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::gist_domain(const typed::basic_set<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::gist_domain(const typed::point<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::gist_domain(const typed::set<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::intersect(const typed::union_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::intersect(const typed::basic_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::intersect(const typed::map<Domain, Domain> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_map::intersect_domain(space);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_map::intersect_domain(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::intersect_range(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_map::intersect_range(space);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::intersect_range(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_map::intersect_range(uset);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::lexmax() const
+{
+ auto res = isl::union_map::lexmax();
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::lexmin() const
+{
+ auto res = isl::union_map::lexmin();
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::map_list<Domain, Domain> typed::union_map<Domain, Domain>::map_list() const
+{
+ auto res = isl::union_map::map_list();
+ return typed::map_list<Domain, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<Domain2, Domain> typed::union_map<Domain, Domain>::preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::union_map::preimage_domain(ma);
+ return typed::union_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<Domain2, Domain> typed::union_map<Domain, Domain>::preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::union_map::preimage_domain(mpa);
+ return typed::union_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<Domain2, Domain> typed::union_map<Domain, Domain>::preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::union_map::preimage_domain(pma);
+ return typed::union_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_map<Domain2, Domain> typed::union_map<Domain, Domain>::preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::union_map::preimage_domain(upma);
+ return typed::union_map<Domain2, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Domain>::preimage_range(const typed::multi_aff<Range2, Domain> &ma) const
+{
+ auto res = isl::union_map::preimage_range(ma);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Domain>::preimage_range(const typed::pw_multi_aff<Range2, Domain> &pma) const
+{
+ auto res = isl::union_map::preimage_range(pma);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, Domain>::preimage_range(const typed::union_pw_multi_aff<Range2, Domain> &upma) const
+{
+ auto res = isl::union_map::preimage_range(upma);
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>> typed::union_map<Domain, Domain>::product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>> typed::union_map<Domain, Domain>::product(const typed::basic_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>> typed::union_map<Domain, Domain>::product(const typed::map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::project_out_all_params() const
+{
+ auto res = isl::union_map::project_out_all_params();
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_map<Domain, Domain>::range() const
+{
+ auto res = isl::union_map::range();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<pair<Domain, Domain>, Domain> typed::union_map<Domain, Domain>::range_map() const
+{
+ auto res = isl::union_map::range_map();
+ return typed::union_map<pair<Domain, Domain>, Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, pair<Domain, Range2>> typed::union_map<Domain, Domain>::range_product(const typed::union_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<Domain, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, pair<Domain, Range2>> typed::union_map<Domain, Domain>::range_product(const typed::basic_map<Domain, Range2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<Domain, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_map<Domain, pair<Domain, Range2>> typed::union_map<Domain, Domain>::range_product(const typed::map<Domain, Range2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<Domain, pair<Domain, Range2>>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::reverse() const
+{
+ auto res = isl::union_map::reverse();
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::space<> typed::union_map<Domain, Domain>::space() const
+{
+ auto res = isl::union_map::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::subtract(const typed::union_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::subtract(const typed::basic_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::subtract(const typed::map<Domain, Domain> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::subtract_domain(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::subtract_domain(const typed::basic_set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::subtract_domain(const typed::point<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::subtract_domain(const typed::set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::subtract_range(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::subtract_range(const typed::basic_set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::subtract_range(const typed::point<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::subtract_range(const typed::set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::unite(const typed::union_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::unite(const typed::basic_map<Domain, Domain> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::unite(const typed::map<Domain, Domain> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_map<Domain, Domain>::universe() const
+{
+ auto res = isl::union_map::universe();
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<pair<Domain, Domain>> typed::union_map<Domain, Domain>::wrap() const
+{
+ auto res = isl::union_map::wrap();
+ return typed::union_set<pair<Domain, Domain>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>>::union_map(const typed::basic_map<Domain, pair<Range, Range2>> &bmap)
+ : isl::union_map(bmap)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>>::union_map(const typed::map<Domain, pair<Range, Range2>> &map)
+ : isl::union_map(map)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>>::union_map(const isl::ctx &ctx, const std::string &str)
+ : isl::union_map(ctx, str)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::apply_domain(const typed::union_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::apply_domain(const typed::basic_map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::apply_domain(const typed::map<Domain, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, Arg3> typed::union_map<Domain, pair<Range, Range2>>::apply_range(const typed::union_map<pair<Range, Range2>, Arg3> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, Arg3> typed::union_map<Domain, pair<Range, Range2>>::apply_range(const typed::basic_map<pair<Range, Range2>, Arg3> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, Arg3> typed::union_map<Domain, pair<Range, Range2>>::apply_range(const typed::map<pair<Range, Range2>, Arg3> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::as_map() const
+{
+ auto res = isl::union_map::as_map();
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::as_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_set<Domain> typed::union_map<Domain, pair<Range, Range2>>::bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const
+{
+ auto res = isl::union_map::bind_range(tuple);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::union_map::coalesce();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::detect_equalities() const
+{
+ auto res = isl::union_map::detect_equalities();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_set<Domain> typed::union_map<Domain, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::union_map::domain();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, pair<Range, Range2>>, Domain> typed::union_map<Domain, pair<Range, Range2>>::domain_map() const
+{
+ auto res = isl::union_map::domain_map();
+ return typed::union_map<pair<Domain, pair<Range, Range2>>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain> typed::union_map<Domain, pair<Range, Range2>>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<Domain, pair<Range, Range2>>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::domain_product(const typed::basic_map<Domain2, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::domain_product(const typed::map<Domain2, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_map::empty(ctx);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+bool typed::union_map<Domain, pair<Range, Range2>>::every_map(const std::function<bool(typed::map<Domain, pair<Range, Range2>>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<Domain, pair<Range, Range2>>(arg0));
+ };
+ return isl::union_map::every_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::extract_map(const typed::space<Domain, pair<Range, Range2>> &space) const
+{
+ auto res = isl::union_map::extract_map(space);
+ return typed::map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+void typed::union_map<Domain, pair<Range, Range2>>::foreach_map(const std::function<void(typed::map<Domain, pair<Range, Range2>>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<Domain, pair<Range, Range2>>(arg0));
+ };
+ return isl::union_map::foreach_map(lambda);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::gist(const typed::union_map<Domain, pair<Range, Range2>> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::gist(const typed::basic_map<Domain, pair<Range, Range2>> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::gist(const typed::map<Domain, pair<Range, Range2>> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::gist_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::gist_domain(const typed::basic_set<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::gist_domain(const typed::point<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::gist_domain(const typed::set<Domain> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::intersect(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::intersect(const typed::basic_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::intersect(const typed::map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_map::intersect_domain(space);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_map::intersect_domain(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::intersect_range(const typed::space<pair<Range, Range2>> &space) const
+{
+ auto res = isl::union_map::intersect_range(space);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const
+{
+ auto res = isl::union_map::intersect_range(uset);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::lexmax() const
+{
+ auto res = isl::union_map::lexmax();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::lexmin() const
+{
+ auto res = isl::union_map::lexmin();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::map_list<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::map_list() const
+{
+ auto res = isl::union_map::map_list();
+ return typed::map_list<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::preimage_domain(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::union_map::preimage_domain(ma);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::preimage_domain(const typed::multi_pw_aff<Domain2, Domain> &mpa) const
+{
+ auto res = isl::union_map::preimage_domain(mpa);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::preimage_domain(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::union_map::preimage_domain(pma);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::preimage_domain(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::union_map::preimage_domain(upma);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, Arg3> typed::union_map<Domain, pair<Range, Range2>>::preimage_range(const typed::multi_aff<Arg3, pair<Range, Range2>> &ma) const
+{
+ auto res = isl::union_map::preimage_range(ma);
+ return typed::union_map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, Arg3> typed::union_map<Domain, pair<Range, Range2>>::preimage_range(const typed::pw_multi_aff<Arg3, pair<Range, Range2>> &pma) const
+{
+ auto res = isl::union_map::preimage_range(pma);
+ return typed::union_map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, Arg3> typed::union_map<Domain, pair<Range, Range2>>::preimage_range(const typed::union_pw_multi_aff<Arg3, pair<Range, Range2>> &upma) const
+{
+ auto res = isl::union_map::preimage_range(upma);
+ return typed::union_map<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::union_map<Domain, pair<Range, Range2>>::product(const typed::union_map<Domain2, Arg3> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::union_map<Domain, pair<Range, Range2>>::product(const typed::basic_map<Domain2, Arg3> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2, typename Arg3>
+typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>> typed::union_map<Domain, pair<Range, Range2>>::product(const typed::map<Domain2, Arg3> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<Domain, Domain2>, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::project_out_all_params() const
+{
+ auto res = isl::union_map::project_out_all_params();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_set<pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::range() const
+{
+ auto res = isl::union_map::range();
+ return typed::union_set<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, Range> typed::union_map<Domain, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::union_map::range_factor_domain();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, Range2> typed::union_map<Domain, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::union_map::range_factor_range();
+ return typed::union_map<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::range_map() const
+{
+ auto res = isl::union_map::range_map();
+ return typed::union_map<pair<Domain, pair<Range, Range2>>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>> typed::union_map<Domain, pair<Range, Range2>>::range_product(const typed::union_map<Domain, Arg3> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>> typed::union_map<Domain, pair<Range, Range2>>::range_product(const typed::basic_map<Domain, Arg3> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>> typed::union_map<Domain, pair<Range, Range2>>::range_product(const typed::map<Domain, Arg3> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range2, Range>> typed::union_map<Domain, pair<Range, Range2>>::range_reverse() const
+{
+ auto res = isl::union_map::range_reverse();
+ return typed::union_map<Domain, pair<Range2, Range>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Range, Range2>, Domain> typed::union_map<Domain, pair<Range, Range2>>::reverse() const
+{
+ auto res = isl::union_map::reverse();
+ return typed::union_map<pair<Range, Range2>, Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<> typed::union_map<Domain, pair<Range, Range2>>::space() const
+{
+ auto res = isl::union_map::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::subtract(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::subtract(const typed::basic_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::subtract(const typed::map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::subtract_domain(const typed::union_set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::subtract_domain(const typed::basic_set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::subtract_domain(const typed::point<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::subtract_domain(const typed::set<Domain> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::subtract_range(const typed::basic_set<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::subtract_range(const typed::point<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::subtract_range(const typed::set<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<pair<Domain, Range>, Range2> typed::union_map<Domain, pair<Range, Range2>>::uncurry() const
+{
+ auto res = isl::union_map::uncurry();
+ return typed::union_map<pair<Domain, Range>, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::unite(const typed::union_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::unite(const typed::basic_map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::unite(const typed::map<Domain, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_map<Domain, pair<Range, Range2>>::universe() const
+{
+ auto res = isl::union_map::universe();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_set<pair<Domain, pair<Range, Range2>>> typed::union_map<Domain, pair<Range, Range2>>::wrap() const
+{
+ auto res = isl::union_map::wrap();
+ return typed::union_set<pair<Domain, pair<Range, Range2>>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>>::union_map(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &bmap)
+ : isl::union_map(bmap)
+{
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>>::union_map(const typed::map<pair<T1, T2>, pair<T1, T2>> &map)
+ : isl::union_map(map)
+{
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>>::union_map(const isl::ctx &ctx, const std::string &str)
+ : isl::union_map(ctx, str)
+{
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::apply_domain(const typed::map<pair<T1, T2>, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, Range2> typed::union_map<pair<T1, T2>, pair<T1, T2>>::apply_range(const typed::union_map<pair<T1, T2>, Range2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, Range2> typed::union_map<pair<T1, T2>, pair<T1, T2>>::apply_range(const typed::basic_map<pair<T1, T2>, Range2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, Range2> typed::union_map<pair<T1, T2>, pair<T1, T2>>::apply_range(const typed::map<pair<T1, T2>, Range2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::as_map() const
+{
+ auto res = isl::union_map::as_map();
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::as_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_set<pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::bind_range(const typed::multi_id<pair<T1, T2>> &tuple) const
+{
+ auto res = isl::union_map::bind_range(tuple);
+ return typed::union_set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::coalesce() const
+{
+ auto res = isl::union_map::coalesce();
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<T1, pair<T2, pair<T1, T2>>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::curry() const
+{
+ auto res = isl::union_map::curry();
+ return typed::union_map<T1, pair<T2, pair<T1, T2>>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_set<pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::deltas() const
+{
+ auto res = isl::union_map::deltas();
+ return typed::union_set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::detect_equalities() const
+{
+ auto res = isl::union_map::detect_equalities();
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_set<pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::domain() const
+{
+ auto res = isl::union_map::domain();
+ return typed::union_set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<T1, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::domain_factor_domain() const
+{
+ auto res = isl::union_map::domain_factor_domain();
+ return typed::union_map<T1, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<T2, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::domain_factor_range() const
+{
+ auto res = isl::union_map::domain_factor_range();
+ return typed::union_map<T2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::domain_map() const
+{
+ auto res = isl::union_map::domain_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::domain_product(const typed::union_map<Domain2, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::domain_product(const typed::basic_map<Domain2, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::domain_product(const typed::map<Domain2, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_map::empty(ctx);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::eq_at(const typed::multi_union_pw_aff<pair<T1, T2>, Range> &mupa) const
+{
+ auto res = isl::union_map::eq_at(mupa);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::eq_at(const typed::multi_pw_aff<pair<T1, T2>, Range> &mupa) const
+{
+ auto res = isl::union_map::eq_at(mupa);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::eq_at(const typed::union_pw_aff<pair<T1, T2>, Range> &mupa) const
+{
+ auto res = isl::union_map::eq_at(mupa);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+bool typed::union_map<pair<T1, T2>, pair<T1, T2>>::every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<T1, T2>>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<pair<T1, T2>, pair<T1, T2>>(arg0));
+ };
+ return isl::union_map::every_map(lambda);
+}
+
+template <typename T1, typename T2>
+typed::map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::extract_map(const typed::space<pair<T1, T2>, pair<T1, T2>> &space) const
+{
+ auto res = isl::union_map::extract_map(space);
+ return typed::map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+void typed::union_map<pair<T1, T2>, pair<T1, T2>>::foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<T1, T2>>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<pair<T1, T2>, pair<T1, T2>>(arg0));
+ };
+ return isl::union_map::foreach_map(lambda);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::gist(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::gist(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::gist(const typed::map<pair<T1, T2>, pair<T1, T2>> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::gist_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::gist_domain(const typed::basic_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::gist_domain(const typed::point<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::gist_domain(const typed::set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::intersect(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::intersect(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::intersect(const typed::map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::union_map::intersect_domain(space);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_map::intersect_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::union_map::intersect_range(space);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::intersect_range(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_map::intersect_range(uset);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::lexmax() const
+{
+ auto res = isl::union_map::lexmax();
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::lexmin() const
+{
+ auto res = isl::union_map::lexmin();
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::map_list<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::map_list() const
+{
+ auto res = isl::union_map::map_list();
+ return typed::map_list<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const
+{
+ auto res = isl::union_map::preimage_domain(ma);
+ return typed::union_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const
+{
+ auto res = isl::union_map::preimage_domain(mpa);
+ return typed::union_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const
+{
+ auto res = isl::union_map::preimage_domain(pma);
+ return typed::union_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const
+{
+ auto res = isl::union_map::preimage_domain(upma);
+ return typed::union_map<Domain2, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, Range2> typed::union_map<pair<T1, T2>, pair<T1, T2>>::preimage_range(const typed::multi_aff<Range2, pair<T1, T2>> &ma) const
+{
+ auto res = isl::union_map::preimage_range(ma);
+ return typed::union_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, Range2> typed::union_map<pair<T1, T2>, pair<T1, T2>>::preimage_range(const typed::pw_multi_aff<Range2, pair<T1, T2>> &pma) const
+{
+ auto res = isl::union_map::preimage_range(pma);
+ return typed::union_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, Range2> typed::union_map<pair<T1, T2>, pair<T1, T2>>::preimage_range(const typed::union_pw_multi_aff<Range2, pair<T1, T2>> &upma) const
+{
+ auto res = isl::union_map::preimage_range(upma);
+ return typed::union_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::product(const typed::union_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::product(const typed::basic_map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Domain2, typename Range2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::product(const typed::map<Domain2, Range2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::project_out_all_params() const
+{
+ auto res = isl::union_map::project_out_all_params();
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_set<pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::range() const
+{
+ auto res = isl::union_map::range();
+ return typed::union_set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, T1> typed::union_map<pair<T1, T2>, pair<T1, T2>>::range_factor_domain() const
+{
+ auto res = isl::union_map::range_factor_domain();
+ return typed::union_map<pair<T1, T2>, T1>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, T2> typed::union_map<pair<T1, T2>, pair<T1, T2>>::range_factor_range() const
+{
+ auto res = isl::union_map::range_factor_range();
+ return typed::union_map<pair<T1, T2>, T2>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::range_map() const
+{
+ auto res = isl::union_map::range_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<T1, T2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::range_product(const typed::union_map<pair<T1, T2>, Range2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::range_product(const typed::basic_map<pair<T1, T2>, Range2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+template <typename Range2>
+typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::range_product(const typed::map<pair<T1, T2>, Range2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<pair<T1, T2>, pair<pair<T1, T2>, Range2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T2, T1>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::range_reverse() const
+{
+ auto res = isl::union_map::range_reverse();
+ return typed::union_map<pair<T1, T2>, pair<T2, T1>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::reverse() const
+{
+ auto res = isl::union_map::reverse();
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::space<> typed::union_map<pair<T1, T2>, pair<T1, T2>>::space() const
+{
+ auto res = isl::union_map::space();
+ return typed::space<>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::subtract(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::subtract(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::subtract(const typed::map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::subtract_domain(const typed::basic_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::subtract_domain(const typed::point<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::subtract_domain(const typed::set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::subtract_range(const typed::union_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::subtract_range(const typed::basic_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::subtract_range(const typed::point<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::subtract_range(const typed::set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<pair<T1, T2>, T1>, T2> typed::union_map<pair<T1, T2>, pair<T1, T2>>::uncurry() const
+{
+ auto res = isl::union_map::uncurry();
+ return typed::union_map<pair<pair<T1, T2>, T1>, T2>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::unite(const typed::union_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::unite(const typed::basic_map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::unite(const typed::map<pair<T1, T2>, pair<T1, T2>> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_map<pair<T1, T2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::universe() const
+{
+ auto res = isl::union_map::universe();
+ return typed::union_map<pair<T1, T2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2>
+typed::union_set<pair<pair<T1, T2>, pair<T1, T2>>> typed::union_map<pair<T1, T2>, pair<T1, T2>>::wrap() const
+{
+ auto res = isl::union_map::wrap();
+ return typed::union_set<pair<pair<T1, T2>, pair<T1, T2>>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>>::union_map(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &bmap)
+ : isl::union_map(bmap)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>>::union_map(const typed::map<pair<T1, T2>, pair<Range, Range2>> &map)
+ : isl::union_map(map)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>>::union_map(const isl::ctx &ctx, const std::string &str)
+ : isl::union_map(ctx, str)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::apply_domain(const typed::union_map<pair<T1, T2>, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::apply_domain(const typed::basic_map<pair<T1, T2>, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::apply_domain(const typed::map<pair<T1, T2>, Domain2> &umap2) const
+{
+ auto res = isl::union_map::apply_domain(umap2);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, Arg2> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::apply_range(const typed::union_map<pair<Range, Range2>, Arg2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, Arg2> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::apply_range(const typed::basic_map<pair<Range, Range2>, Arg2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, Arg2> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::apply_range(const typed::map<pair<Range, Range2>, Arg2> &umap2) const
+{
+ auto res = isl::union_map::apply_range(umap2);
+ return typed::union_map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::as_map() const
+{
+ auto res = isl::union_map::as_map();
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_map::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::as_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::as_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_set<pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::bind_range(const typed::multi_id<pair<Range, Range2>> &tuple) const
+{
+ auto res = isl::union_map::bind_range(tuple);
+ return typed::union_set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::union_map::coalesce();
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<T1, pair<T2, pair<Range, Range2>>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::curry() const
+{
+ auto res = isl::union_map::curry();
+ return typed::union_map<T1, pair<T2, pair<Range, Range2>>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::detect_equalities() const
+{
+ auto res = isl::union_map::detect_equalities();
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_set<pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::union_map::domain();
+ return typed::union_set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<T1, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::domain_factor_domain() const
+{
+ auto res = isl::union_map::domain_factor_domain();
+ return typed::union_map<T1, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<T2, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::domain_factor_range() const
+{
+ auto res = isl::union_map::domain_factor_range();
+ return typed::union_map<T2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::domain_map() const
+{
+ auto res = isl::union_map::domain_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::domain_map_union_pw_multi_aff() const
+{
+ auto res = isl::union_map::domain_map_union_pw_multi_aff();
+ return typed::union_pw_multi_aff<pair<pair<T1, T2>, pair<Range, Range2>>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::domain_product(const typed::union_map<Domain2, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::domain_product(const typed::basic_map<Domain2, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::domain_product(const typed::map<Domain2, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::domain_product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_map::empty(ctx);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+bool typed::union_map<pair<T1, T2>, pair<Range, Range2>>::every_map(const std::function<bool(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &test) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return test(typed::map<pair<T1, T2>, pair<Range, Range2>>(arg0));
+ };
+ return isl::union_map::every_map(lambda);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::extract_map(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const
+{
+ auto res = isl::union_map::extract_map(space);
+ return typed::map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+void typed::union_map<pair<T1, T2>, pair<Range, Range2>>::foreach_map(const std::function<void(typed::map<pair<T1, T2>, pair<Range, Range2>>)> &fn) const
+{
+ auto lambda = [&] (isl::map arg0) {
+ return fn(typed::map<pair<T1, T2>, pair<Range, Range2>>(arg0));
+ };
+ return isl::union_map::foreach_map(lambda);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::map<pair<T1, T2>, pair<Range, Range2>> &context) const
+{
+ auto res = isl::union_map::gist(context);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::gist_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::gist_domain(const typed::basic_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::gist_domain(const typed::point<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::gist_domain(const typed::set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_map::gist_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::intersect(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::intersect(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::intersect(const typed::map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::intersect(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::union_map::intersect_domain(space);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_map::intersect_domain(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_map::intersect_params(set);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::space<pair<Range, Range2>> &space) const
+{
+ auto res = isl::union_map::intersect_range(space);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::intersect_range(const typed::union_set<pair<Range, Range2>> &uset) const
+{
+ auto res = isl::union_map::intersect_range(uset);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::lexmax() const
+{
+ auto res = isl::union_map::lexmax();
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::lexmin() const
+{
+ auto res = isl::union_map::lexmin();
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::map_list<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::map_list() const
+{
+ auto res = isl::union_map::map_list();
+ return typed::map_list<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::multi_aff<Domain2, pair<T1, T2>> &ma) const
+{
+ auto res = isl::union_map::preimage_domain(ma);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::multi_pw_aff<Domain2, pair<T1, T2>> &mpa) const
+{
+ auto res = isl::union_map::preimage_domain(mpa);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &pma) const
+{
+ auto res = isl::union_map::preimage_domain(pma);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_map<Domain2, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::preimage_domain(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma) const
+{
+ auto res = isl::union_map::preimage_domain(upma);
+ return typed::union_map<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, Arg2> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::preimage_range(const typed::multi_aff<Arg2, pair<Range, Range2>> &ma) const
+{
+ auto res = isl::union_map::preimage_range(ma);
+ return typed::union_map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, Arg2> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::preimage_range(const typed::pw_multi_aff<Arg2, pair<Range, Range2>> &pma) const
+{
+ auto res = isl::union_map::preimage_range(pma);
+ return typed::union_map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, Arg2> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::preimage_range(const typed::union_pw_multi_aff<Arg2, pair<Range, Range2>> &upma) const
+{
+ auto res = isl::union_map::preimage_range(upma);
+ return typed::union_map<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::product(const typed::union_map<Domain2, Arg2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::product(const typed::basic_map<Domain2, Arg2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2, typename Arg2>
+typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::product(const typed::map<Domain2, Arg2> &umap2) const
+{
+ auto res = isl::union_map::product(umap2);
+ return typed::union_map<pair<pair<T1, T2>, Domain2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::project_out_all_params() const
+{
+ auto res = isl::union_map::project_out_all_params();
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_set<pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::range() const
+{
+ auto res = isl::union_map::range();
+ return typed::union_set<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, Range> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::union_map::range_factor_domain();
+ return typed::union_map<pair<T1, T2>, Range>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, Range2> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::union_map::range_factor_range();
+ return typed::union_map<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::range_map() const
+{
+ auto res = isl::union_map::range_map();
+ return typed::union_map<pair<pair<T1, T2>, pair<Range, Range2>>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::union_map<pair<T1, T2>, Arg2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::basic_map<pair<T1, T2>, Arg2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::map<pair<T1, T2>, Arg2> &umap2) const
+{
+ auto res = isl::union_map::range_product(umap2);
+ return typed::union_map<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range2, Range>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::range_reverse() const
+{
+ auto res = isl::union_map::range_reverse();
+ return typed::union_map<pair<T1, T2>, pair<Range2, Range>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<Range, Range2>, pair<T1, T2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::reverse() const
+{
+ auto res = isl::union_map::reverse();
+ return typed::union_map<pair<Range, Range2>, pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::space() const
+{
+ auto res = isl::union_map::space();
+ return typed::space<>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::subtract(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::subtract(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::subtract(const typed::map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::subtract(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::union_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::basic_set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::point<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::set<pair<T1, T2>> &dom) const
+{
+ auto res = isl::union_map::subtract_domain(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::subtract_range(const typed::union_set<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::subtract_range(const typed::basic_set<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::subtract_range(const typed::point<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::subtract_range(const typed::set<pair<Range, Range2>> &dom) const
+{
+ auto res = isl::union_map::subtract_range(dom);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<pair<T1, T2>, Range>, Range2> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::uncurry() const
+{
+ auto res = isl::union_map::uncurry();
+ return typed::union_map<pair<pair<T1, T2>, Range>, Range2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::unite(const typed::union_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::unite(const typed::basic_map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::unite(const typed::map<pair<T1, T2>, pair<Range, Range2>> &umap2) const
+{
+ auto res = isl::union_map::unite(umap2);
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::universe() const
+{
+ auto res = isl::union_map::universe();
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_set<pair<pair<T1, T2>, pair<Range, Range2>>> typed::union_map<pair<T1, T2>, pair<Range, Range2>>::wrap() const
+{
+ auto res = isl::union_map::wrap();
+ return typed::union_set<pair<pair<T1, T2>, pair<Range, Range2>>>(res);
+}
+
+typed::union_pw_aff<Anonymous>::union_pw_aff(const typed::aff<Anonymous> &aff)
+ : isl::union_pw_aff(aff)
+{
+}
+
+typed::union_pw_aff<Anonymous>::union_pw_aff(const typed::pw_aff<Anonymous> &pa)
+ : isl::union_pw_aff(pa)
+{
+}
+
+typed::union_pw_aff<Anonymous>::union_pw_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::union_pw_aff(ctx, str)
+{
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::add(const typed::multi_union_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::union_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::add(const typed::union_pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::add(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_multi_aff<Anonymous> typed::union_pw_aff<Anonymous>::add(const typed::union_pw_multi_aff<Anonymous> &upma2) const
+{
+ auto res = isl::union_pw_aff::add(upma2);
+ return typed::union_pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::add(const typed::aff<Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::add(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::add(const typed::pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::add(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_aff<Anonymous>::apply(const typed::union_pw_multi_aff<Anonymous, Range> &upma2) const
+{
+ auto res = isl::union_pw_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_pw_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::union_pw_aff<Anonymous>::as_pw_multi_aff() const
+{
+ auto res = isl::union_pw_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::at(int pos) const
+{
+ auto res = isl::union_pw_aff::at(pos);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_set<> typed::union_pw_aff<Anonymous>::bind(const typed::multi_id<Anonymous> &tuple) const
+{
+ auto res = isl::union_pw_aff::bind(tuple);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_pw_aff<Anonymous>::bind(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::union_pw_aff::bind(id);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_pw_aff<Anonymous>::bind(const std::string &id) const
+{
+ auto res = isl::union_pw_aff::bind(id);
+ return typed::union_set<>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::coalesce() const
+{
+ auto res = isl::union_pw_aff::coalesce();
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_set<> typed::union_pw_aff<Anonymous>::domain() const
+{
+ auto res = isl::union_pw_aff::domain();
+ return typed::union_set<>(res);
+}
+
+typed::pw_multi_aff<Anonymous> typed::union_pw_aff<Anonymous>::extract_pw_multi_aff(const typed::space<Anonymous> &space) const
+{
+ auto res = isl::union_pw_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::gist(const typed::basic_set<> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::gist(const typed::point<> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::gist(const typed::set<> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_pw_aff::intersect_params(set);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_pw_aff::intersect_params(set);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_pw_aff::intersect_params(set);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff_list<Anonymous> typed::union_pw_aff<Anonymous>::list() const
+{
+ auto res = isl::union_pw_aff::list();
+ return typed::union_pw_aff_list<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::neg() const
+{
+ auto res = isl::union_pw_aff::neg();
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::pw_multi_aff_list<Anonymous> typed::union_pw_aff<Anonymous>::pw_multi_aff_list() const
+{
+ auto res = isl::union_pw_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::scale(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::union_pw_aff::scale(mv);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::scale(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::union_pw_aff::scale(v);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::scale(long v) const
+{
+ auto res = isl::union_pw_aff::scale(v);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::scale_down(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::union_pw_aff::scale_down(mv);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::scale_down(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::union_pw_aff::scale_down(v);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::scale_down(long v) const
+{
+ auto res = isl::union_pw_aff::scale_down(v);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::set_at(int pos, const typed::union_pw_aff<Anonymous> &el) const
+{
+ auto res = isl::union_pw_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain2>
+typed::multi_union_pw_aff<Domain2> typed::union_pw_aff<Anonymous>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::union_pw_aff::set_range_tuple(id);
+ return typed::multi_union_pw_aff<Domain2>(res);
+}
+
+template <typename Domain2>
+typed::multi_union_pw_aff<Domain2> typed::union_pw_aff<Anonymous>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::union_pw_aff::set_range_tuple(id);
+ return typed::multi_union_pw_aff<Domain2>(res);
+}
+
+typed::space<> typed::union_pw_aff<Anonymous>::space() const
+{
+ auto res = isl::union_pw_aff::space();
+ return typed::space<>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::sub(const typed::multi_union_pw_aff<Anonymous> &multi2) const
+{
+ auto res = isl::union_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::sub(const typed::union_pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::sub(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_multi_aff<Anonymous> typed::union_pw_aff<Anonymous>::sub(const typed::union_pw_multi_aff<Anonymous> &upma2) const
+{
+ auto res = isl::union_pw_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::sub(const typed::aff<Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::sub(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::sub(const typed::pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::sub(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::multi_union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::union_add(const typed::multi_union_pw_aff<Anonymous> &mupa2) const
+{
+ auto res = isl::union_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::union_add(const typed::union_pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::union_add(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_multi_aff<Anonymous> typed::union_pw_aff<Anonymous>::union_add(const typed::union_pw_multi_aff<Anonymous> &upma2) const
+{
+ auto res = isl::union_pw_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::union_add(const typed::aff<Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::union_add(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Anonymous>::union_add(const typed::pw_aff<Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::union_add(upa2);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous>::union_pw_aff(const typed::aff<Domain, Anonymous> &aff)
+ : isl::union_pw_aff(aff)
+{
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous>::union_pw_aff(const typed::pw_aff<Domain, Anonymous> &pa)
+ : isl::union_pw_aff(pa)
+{
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous>::union_pw_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::union_pw_aff(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::add(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::union_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::add(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const
+{
+ auto res = isl::union_pw_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::add(const typed::aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::add(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::add(const typed::pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::add(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, Range2> typed::union_pw_aff<Domain, Anonymous>::apply(const typed::union_pw_multi_aff<Anonymous, Range2> &upma2) const
+{
+ auto res = isl::union_pw_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_pw_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::as_pw_multi_aff() const
+{
+ auto res = isl::union_pw_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::as_union_map() const
+{
+ auto res = isl::union_pw_aff::as_union_map();
+ return typed::union_map<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::at(int pos) const
+{
+ auto res = isl::union_pw_aff::at(pos);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_pw_aff<Domain, Anonymous>::bind(const typed::multi_id<Anonymous> &tuple) const
+{
+ auto res = isl::union_pw_aff::bind(tuple);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_pw_aff<Domain, Anonymous>::bind(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::union_pw_aff::bind(id);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_pw_aff<Domain, Anonymous>::bind(const std::string &id) const
+{
+ auto res = isl::union_pw_aff::bind(id);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::coalesce() const
+{
+ auto res = isl::union_pw_aff::coalesce();
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_pw_aff<Domain, Anonymous>::domain() const
+{
+ auto res = isl::union_pw_aff::domain();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::extract_pw_multi_aff(const typed::space<Domain, Anonymous> &space) const
+{
+ auto res = isl::union_pw_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::gist(const typed::point<Domain> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_pw_aff::intersect_domain(space);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_pw_aff::intersect_domain(uset);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_pw_aff::intersect_params(set);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_pw_aff::intersect_params(set);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_pw_aff::intersect_params(set);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff_list<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::list() const
+{
+ auto res = isl::union_pw_aff::list();
+ return typed::union_pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::neg() const
+{
+ auto res = isl::union_pw_aff::neg();
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_pw_aff<Domain2, Anonymous> typed::union_pw_aff<Domain, Anonymous>::pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Domain, Anonymous>::pullback(const typed::union_pw_multi_aff<Domain> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_pw_aff<Domain2, Anonymous> typed::union_pw_aff<Domain, Anonymous>::pullback(const typed::multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Domain, Anonymous>::pullback(const typed::multi_aff<Domain> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_pw_aff<Domain2, Anonymous> typed::union_pw_aff<Domain, Anonymous>::pullback(const typed::pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Domain, Anonymous>::pullback(const typed::pw_multi_aff<Domain> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_pw_aff<Domain2, Anonymous> typed::union_pw_aff<Domain, Anonymous>::pullback(const typed::union_pw_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Domain2, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<Domain, Anonymous>::pullback(const typed::union_pw_aff<Domain> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::pw_multi_aff_list() const
+{
+ auto res = isl::union_pw_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Anonymous, Range2>> typed::union_pw_aff<Domain, Anonymous>::range_product(const typed::multi_union_pw_aff<Domain, Range2> &multi2) const
+{
+ auto res = isl::union_pw_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<Domain, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Anonymous, Range2>> typed::union_pw_aff<Domain, Anonymous>::range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const
+{
+ auto res = isl::union_pw_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::scale(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::union_pw_aff::scale(mv);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::scale(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::union_pw_aff::scale(v);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::scale(long v) const
+{
+ auto res = isl::union_pw_aff::scale(v);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::scale_down(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::union_pw_aff::scale_down(mv);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::scale_down(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::union_pw_aff::scale_down(v);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::scale_down(long v) const
+{
+ auto res = isl::union_pw_aff::scale_down(v);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::set_at(int pos, const typed::union_pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::union_pw_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, Range2> typed::union_pw_aff<Domain, Anonymous>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::union_pw_aff::set_range_tuple(id);
+ return typed::multi_union_pw_aff<Domain, Range2>(res);
+}
+
+template <typename Domain>
+template <typename Range2>
+typed::multi_union_pw_aff<Domain, Range2> typed::union_pw_aff<Domain, Anonymous>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::union_pw_aff::set_range_tuple(id);
+ return typed::multi_union_pw_aff<Domain, Range2>(res);
+}
+
+template <typename Domain>
+typed::space<> typed::union_pw_aff<Domain, Anonymous>::space() const
+{
+ auto res = isl::union_pw_aff::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::sub(const typed::multi_union_pw_aff<Domain, Anonymous> &multi2) const
+{
+ auto res = isl::union_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::sub(const typed::union_pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::sub(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::sub(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const
+{
+ auto res = isl::union_pw_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::sub(const typed::aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::sub(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::sub(const typed::pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::sub(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::subtract_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_pw_aff::subtract_domain(space);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::subtract_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_pw_aff::subtract_domain(uset);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::union_add(const typed::multi_union_pw_aff<Domain, Anonymous> &mupa2) const
+{
+ auto res = isl::union_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::union_add(const typed::union_pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::union_add(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::union_add(const typed::union_pw_multi_aff<Domain, Anonymous> &upma2) const
+{
+ auto res = isl::union_pw_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::union_add(const typed::aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::union_add(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff<Domain, Anonymous>::union_add(const typed::pw_aff<Domain, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::union_add(upa2);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::union_pw_aff(const typed::aff<pair<Domain, Domain2>, Anonymous> &aff)
+ : isl::union_pw_aff(aff)
+{
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::union_pw_aff(const typed::pw_aff<pair<Domain, Domain2>, Anonymous> &pa)
+ : isl::union_pw_aff(pa)
+{
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::union_pw_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::union_pw_aff(ctx, str)
+{
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::add(const typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> &multi2) const
+{
+ auto res = isl::union_pw_aff::add(multi2);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::add(const typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::add(upa2);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::add(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> &upma2) const
+{
+ auto res = isl::union_pw_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::add(const typed::aff<pair<Domain, Domain2>, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::add(upa2);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::add(const typed::pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::add(upa2);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+template <typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::apply(const typed::union_pw_multi_aff<Anonymous, Range2> &upma2) const
+{
+ auto res = isl::union_pw_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_pw_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::pw_multi_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::as_pw_multi_aff() const
+{
+ auto res = isl::union_pw_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_map<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::as_union_map() const
+{
+ auto res = isl::union_pw_aff::as_union_map();
+ return typed::union_map<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::at(int pos) const
+{
+ auto res = isl::union_pw_aff::at(pos);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_set<pair<Domain, Domain2>> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::bind(const typed::multi_id<Anonymous> &tuple) const
+{
+ auto res = isl::union_pw_aff::bind(tuple);
+ return typed::union_set<pair<Domain, Domain2>>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_set<pair<Domain, Domain2>> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::bind(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::union_pw_aff::bind(id);
+ return typed::union_set<pair<Domain, Domain2>>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_set<pair<Domain, Domain2>> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::bind(const std::string &id) const
+{
+ auto res = isl::union_pw_aff::bind(id);
+ return typed::union_set<pair<Domain, Domain2>>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::coalesce() const
+{
+ auto res = isl::union_pw_aff::coalesce();
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_set<pair<Domain, Domain2>> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::domain() const
+{
+ auto res = isl::union_pw_aff::domain();
+ return typed::union_set<pair<Domain, Domain2>>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::pw_multi_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::extract_pw_multi_aff(const typed::space<pair<Domain, Domain2>, Anonymous> &space) const
+{
+ auto res = isl::union_pw_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::gist(const typed::union_set<pair<Domain, Domain2>> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::gist(const typed::basic_set<pair<Domain, Domain2>> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::gist(const typed::point<pair<Domain, Domain2>> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::gist(const typed::set<pair<Domain, Domain2>> &context) const
+{
+ auto res = isl::union_pw_aff::gist(context);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::intersect_domain(const typed::space<pair<Domain, Domain2>> &space) const
+{
+ auto res = isl::union_pw_aff::intersect_domain(space);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::intersect_domain(const typed::union_set<pair<Domain, Domain2>> &uset) const
+{
+ auto res = isl::union_pw_aff::intersect_domain(uset);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_pw_aff::intersect_params(set);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_pw_aff::intersect_params(set);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_pw_aff::intersect_params(set);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff_list<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::list() const
+{
+ auto res = isl::union_pw_aff::list();
+ return typed::union_pw_aff_list<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::neg() const
+{
+ auto res = isl::union_pw_aff::neg();
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain> &upma2) const
+{
+ auto res = isl::union_pw_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+template <typename Arg2>
+typed::union_pw_aff<Arg2, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::pullback(const typed::union_pw_multi_aff<Arg2, pair<Domain, Domain2>> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Arg2, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::pullback(const typed::union_pw_multi_aff<pair<Domain, Domain2>> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+template <typename Arg2>
+typed::union_pw_aff<Arg2, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::pullback(const typed::multi_aff<Arg2, pair<Domain, Domain2>> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Arg2, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::pullback(const typed::multi_aff<pair<Domain, Domain2>> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+template <typename Arg2>
+typed::union_pw_aff<Arg2, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::pullback(const typed::pw_multi_aff<Arg2, pair<Domain, Domain2>> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Arg2, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::pullback(const typed::pw_multi_aff<pair<Domain, Domain2>> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+template <typename Arg2>
+typed::union_pw_aff<Arg2, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::pullback(const typed::union_pw_aff<Arg2, pair<Domain, Domain2>> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Arg2, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::pullback(const typed::union_pw_aff<pair<Domain, Domain2>> &upma) const
+{
+ auto res = isl::union_pw_aff::pullback(upma);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::pw_multi_aff_list<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::pw_multi_aff_list() const
+{
+ auto res = isl::union_pw_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+template <typename Range2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::range_product(const typed::multi_union_pw_aff<pair<Domain, Domain2>, Range2> &multi2) const
+{
+ auto res = isl::union_pw_aff::range_product(multi2);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain, typename Domain2>
+template <typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::range_product(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> &upma2) const
+{
+ auto res = isl::union_pw_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Anonymous, Range2>>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::scale(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::union_pw_aff::scale(mv);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::scale(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::union_pw_aff::scale(v);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::scale(long v) const
+{
+ auto res = isl::union_pw_aff::scale(v);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::scale_down(const typed::multi_val<Anonymous> &mv) const
+{
+ auto res = isl::union_pw_aff::scale_down(mv);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::scale_down(const typed::val<Anonymous> &v) const
+{
+ auto res = isl::union_pw_aff::scale_down(v);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::scale_down(long v) const
+{
+ auto res = isl::union_pw_aff::scale_down(v);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::set_at(int pos, const typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> &el) const
+{
+ auto res = isl::union_pw_aff::set_at(pos, el);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+template <typename Range2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Range2> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::set_range_tuple(const typed::id<Anonymous> &id) const
+{
+ auto res = isl::union_pw_aff::set_range_tuple(id);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Domain2>
+template <typename Range2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Range2> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::set_range_tuple(const std::string &id) const
+{
+ auto res = isl::union_pw_aff::set_range_tuple(id);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::space<> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::space() const
+{
+ auto res = isl::union_pw_aff::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::sub(const typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> &multi2) const
+{
+ auto res = isl::union_pw_aff::sub(multi2);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::sub(const typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::sub(upa2);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::sub(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> &upma2) const
+{
+ auto res = isl::union_pw_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::sub(const typed::aff<pair<Domain, Domain2>, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::sub(upa2);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::sub(const typed::pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::sub(upa2);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::subtract_domain(const typed::space<pair<Domain, Domain2>> &space) const
+{
+ auto res = isl::union_pw_aff::subtract_domain(space);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::subtract_domain(const typed::union_set<pair<Domain, Domain2>> &uset) const
+{
+ auto res = isl::union_pw_aff::subtract_domain(uset);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::union_add(const typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous> &mupa2) const
+{
+ auto res = isl::union_pw_aff::union_add(mupa2);
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::union_add(const typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::union_add(upa2);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::union_add(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous> &upma2) const
+{
+ auto res = isl::union_pw_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::union_add(const typed::aff<pair<Domain, Domain2>, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::union_add(upa2);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+template <typename Domain, typename Domain2>
+typed::union_pw_aff<pair<Domain, Domain2>, Anonymous> typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>::union_add(const typed::pw_aff<pair<Domain, Domain2>, Anonymous> &upa2) const
+{
+ auto res = isl::union_pw_aff::union_add(upa2);
+ return typed::union_pw_aff<pair<Domain, Domain2>, Anonymous>(res);
+}
+
+typed::union_pw_aff_list<Anonymous>::union_pw_aff_list(const isl::ctx &ctx, int n)
+ : isl::union_pw_aff_list(ctx, n)
+{
+}
+
+typed::union_pw_aff_list<Anonymous>::union_pw_aff_list(const typed::union_pw_aff<Anonymous> &el)
+ : isl::union_pw_aff_list(el)
+{
+}
+
+typed::union_pw_aff_list<Anonymous>::union_pw_aff_list(const isl::ctx &ctx, const std::string &str)
+ : isl::union_pw_aff_list(ctx, str)
+{
+}
+
+typed::union_pw_aff_list<Anonymous> typed::union_pw_aff_list<Anonymous>::add(const typed::union_pw_aff<Anonymous> &el) const
+{
+ auto res = isl::union_pw_aff_list::add(el);
+ return typed::union_pw_aff_list<Anonymous>(res);
+}
+
+typed::union_pw_aff_list<Anonymous> typed::union_pw_aff_list<Anonymous>::add(const typed::aff<Anonymous> &el) const
+{
+ auto res = isl::union_pw_aff_list::add(el);
+ return typed::union_pw_aff_list<Anonymous>(res);
+}
+
+typed::union_pw_aff_list<Anonymous> typed::union_pw_aff_list<Anonymous>::add(const typed::pw_aff<Anonymous> &el) const
+{
+ auto res = isl::union_pw_aff_list::add(el);
+ return typed::union_pw_aff_list<Anonymous>(res);
+}
+
+typed::union_pw_aff<Anonymous> typed::union_pw_aff_list<Anonymous>::at(int index) const
+{
+ auto res = isl::union_pw_aff_list::at(index);
+ return typed::union_pw_aff<Anonymous>(res);
+}
+
+typed::union_pw_aff_list<Anonymous> typed::union_pw_aff_list<Anonymous>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::union_pw_aff_list::drop(first, n);
+ return typed::union_pw_aff_list<Anonymous>(res);
+}
+
+void typed::union_pw_aff_list<Anonymous>::foreach(const std::function<void(typed::union_pw_aff<Anonymous>)> &fn) const
+{
+ auto lambda = [&] (isl::union_pw_aff arg0) {
+ return fn(typed::union_pw_aff<Anonymous>(arg0));
+ };
+ return isl::union_pw_aff_list::foreach(lambda);
+}
+
+template <typename Domain>
+typed::union_pw_aff_list<Domain, Anonymous>::union_pw_aff_list(const isl::ctx &ctx, int n)
+ : isl::union_pw_aff_list(ctx, n)
+{
+}
+
+template <typename Domain>
+typed::union_pw_aff_list<Domain, Anonymous>::union_pw_aff_list(const typed::union_pw_aff<Domain, Anonymous> &el)
+ : isl::union_pw_aff_list(el)
+{
+}
+
+template <typename Domain>
+typed::union_pw_aff_list<Domain, Anonymous>::union_pw_aff_list(const isl::ctx &ctx, const std::string &str)
+ : isl::union_pw_aff_list(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::union_pw_aff_list<Domain, Anonymous> typed::union_pw_aff_list<Domain, Anonymous>::add(const typed::union_pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::union_pw_aff_list::add(el);
+ return typed::union_pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff_list<Domain, Anonymous> typed::union_pw_aff_list<Domain, Anonymous>::add(const typed::aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::union_pw_aff_list::add(el);
+ return typed::union_pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff_list<Domain, Anonymous> typed::union_pw_aff_list<Domain, Anonymous>::add(const typed::pw_aff<Domain, Anonymous> &el) const
+{
+ auto res = isl::union_pw_aff_list::add(el);
+ return typed::union_pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff<Domain, Anonymous> typed::union_pw_aff_list<Domain, Anonymous>::at(int index) const
+{
+ auto res = isl::union_pw_aff_list::at(index);
+ return typed::union_pw_aff<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+typed::union_pw_aff_list<Domain, Anonymous> typed::union_pw_aff_list<Domain, Anonymous>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::union_pw_aff_list::drop(first, n);
+ return typed::union_pw_aff_list<Domain, Anonymous>(res);
+}
+
+template <typename Domain>
+void typed::union_pw_aff_list<Domain, Anonymous>::foreach(const std::function<void(typed::union_pw_aff<Domain, Anonymous>)> &fn) const
+{
+ auto lambda = [&] (isl::union_pw_aff arg0) {
+ return fn(typed::union_pw_aff<Domain, Anonymous>(arg0));
+ };
+ return isl::union_pw_aff_list::foreach(lambda);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain>::union_pw_multi_aff(const typed::multi_aff<Domain> &ma)
+ : isl::union_pw_multi_aff(ma)
+{
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain>::union_pw_multi_aff(const typed::pw_multi_aff<Domain> &pma)
+ : isl::union_pw_multi_aff(pma)
+{
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain>::union_pw_multi_aff(const typed::union_pw_aff<Domain> &upa)
+ : isl::union_pw_multi_aff(upa)
+{
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain>::union_pw_multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::union_pw_multi_aff(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::add(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::add(const typed::multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::add(const typed::pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::add(const typed::union_pw_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<Domain>::apply(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<Domain>::apply(const typed::multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<Domain>::apply(const typed::pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<Domain>::apply(const typed::union_pw_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain>
+typed::multi_union_pw_aff<Domain> typed::union_pw_multi_aff<Domain>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_pw_multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::as_pw_multi_aff() const
+{
+ auto res = isl::union_pw_multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::coalesce() const
+{
+ auto res = isl::union_pw_multi_aff::coalesce();
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<> typed::union_pw_multi_aff<Domain>::domain() const
+{
+ auto res = isl::union_pw_multi_aff::domain();
+ return typed::union_set<>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_pw_multi_aff::empty(ctx);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::extract_pw_multi_aff(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_pw_multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::gist(const typed::basic_set<> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::gist(const typed::point<> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::gist(const typed::set<> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::pw_multi_aff_list<Domain> typed::union_pw_multi_aff<Domain>::pw_multi_aff_list() const
+{
+ auto res = isl::union_pw_multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain>(res);
+}
+
+template <typename Domain>
+typed::space<> typed::union_pw_multi_aff<Domain>::space() const
+{
+ auto res = isl::union_pw_multi_aff::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::sub(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::sub(const typed::multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::sub(const typed::pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::sub(const typed::union_pw_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::union_add(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::union_add(const typed::multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::union_add(const typed::pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_pw_multi_aff<Domain> typed::union_pw_multi_aff<Domain>::union_add(const typed::union_pw_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range>::union_pw_multi_aff(const typed::multi_aff<Domain, Range> &ma)
+ : isl::union_pw_multi_aff(ma)
+{
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range>::union_pw_multi_aff(const typed::pw_multi_aff<Domain, Range> &pma)
+ : isl::union_pw_multi_aff(pma)
+{
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range>::union_pw_multi_aff(const typed::union_pw_aff<Domain, Range> &upa)
+ : isl::union_pw_multi_aff(upa)
+{
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range>::union_pw_multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::union_pw_multi_aff(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::add(const typed::multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::add(const typed::pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::add(const typed::union_pw_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, Range2> typed::union_pw_multi_aff<Domain, Range>::apply(const typed::union_pw_multi_aff<Range, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, Range2> typed::union_pw_multi_aff<Domain, Range>::apply(const typed::multi_aff<Range, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, Range2> typed::union_pw_multi_aff<Domain, Range>::apply(const typed::pw_multi_aff<Range, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, Range2> typed::union_pw_multi_aff<Domain, Range>::apply(const typed::union_pw_aff<Range, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::multi_union_pw_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_pw_multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::as_pw_multi_aff() const
+{
+ auto res = isl::union_pw_multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::as_union_map() const
+{
+ auto res = isl::union_pw_multi_aff::as_union_map();
+ return typed::union_map<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::coalesce() const
+{
+ auto res = isl::union_pw_multi_aff::coalesce();
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<Domain> typed::union_pw_multi_aff<Domain, Range>::domain() const
+{
+ auto res = isl::union_pw_multi_aff::domain();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_pw_multi_aff::empty(ctx);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::extract_pw_multi_aff(const typed::space<Domain, Range> &space) const
+{
+ auto res = isl::union_pw_multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::gist(const typed::point<Domain> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, Range> typed::union_pw_multi_aff<Domain, Range>::pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<Domain, Range>::pullback(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, Range> typed::union_pw_multi_aff<Domain, Range>::pullback(const typed::multi_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<Domain, Range>::pullback(const typed::multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, Range> typed::union_pw_multi_aff<Domain, Range>::pullback(const typed::pw_multi_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<Domain, Range>::pullback(const typed::pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, Range> typed::union_pw_multi_aff<Domain, Range>::pullback(const typed::union_pw_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<Domain, Range>::pullback(const typed::union_pw_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::pw_multi_aff_list<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::pw_multi_aff_list() const
+{
+ auto res = isl::union_pw_multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, Range>::range_product(const typed::union_pw_multi_aff<Domain, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, Range>::range_product(const typed::multi_aff<Domain, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, Range>::range_product(const typed::pw_multi_aff<Domain, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, Range>::range_product(const typed::union_pw_aff<Domain, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<> typed::union_pw_multi_aff<Domain, Range>::space() const
+{
+ auto res = isl::union_pw_multi_aff::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::sub(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::sub(const typed::multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::sub(const typed::pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::sub(const typed::union_pw_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::subtract_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_pw_multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::subtract_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_pw_multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::union_add(const typed::union_pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::union_add(const typed::multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::union_add(const typed::pw_multi_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, Range>::union_add(const typed::union_pw_aff<Domain, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::union_pw_multi_aff(const typed::multi_aff<pair<Domain, Domain2>, Range> &ma)
+ : isl::union_pw_multi_aff(ma)
+{
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::union_pw_multi_aff(const typed::pw_multi_aff<pair<Domain, Domain2>, Range> &pma)
+ : isl::union_pw_multi_aff(pma)
+{
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::union_pw_multi_aff(const typed::union_pw_aff<pair<Domain, Domain2>, Range> &upa)
+ : isl::union_pw_multi_aff(upa)
+{
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::union_pw_multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::union_pw_multi_aff(ctx, str)
+{
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::add(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::add(const typed::multi_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::add(const typed::pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::add(const typed::union_pw_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::apply(const typed::union_pw_multi_aff<Range, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::apply(const typed::multi_aff<Range, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::apply(const typed::pw_multi_aff<Range, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::apply(const typed::union_pw_aff<Range, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::multi_union_pw_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_pw_multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::as_pw_multi_aff() const
+{
+ auto res = isl::union_pw_multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_map<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::as_union_map() const
+{
+ auto res = isl::union_pw_multi_aff::as_union_map();
+ return typed::union_map<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::coalesce() const
+{
+ auto res = isl::union_pw_multi_aff::coalesce();
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_set<pair<Domain, Domain2>> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::domain() const
+{
+ auto res = isl::union_pw_multi_aff::domain();
+ return typed::union_set<pair<Domain, Domain2>>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_pw_multi_aff::empty(ctx);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::extract_pw_multi_aff(const typed::space<pair<Domain, Domain2>, Range> &space) const
+{
+ auto res = isl::union_pw_multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::gist(const typed::union_set<pair<Domain, Domain2>> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::gist(const typed::basic_set<pair<Domain, Domain2>> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::gist(const typed::point<pair<Domain, Domain2>> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::gist(const typed::set<pair<Domain, Domain2>> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::intersect_domain(const typed::space<pair<Domain, Domain2>> &space) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::intersect_domain(const typed::union_set<pair<Domain, Domain2>> &uset) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::preimage_domain_wrapped_domain(const typed::multi_aff<Domain3, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::preimage_domain_wrapped_domain(const typed::union_pw_aff<Domain3, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Arg3>
+typed::union_pw_multi_aff<Arg3, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::pullback(const typed::union_pw_multi_aff<Arg3, pair<Domain, Domain2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Arg3, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::pullback(const typed::union_pw_multi_aff<pair<Domain, Domain2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Arg3>
+typed::union_pw_multi_aff<Arg3, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::pullback(const typed::multi_aff<Arg3, pair<Domain, Domain2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Arg3, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::pullback(const typed::multi_aff<pair<Domain, Domain2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Arg3>
+typed::union_pw_multi_aff<Arg3, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::pullback(const typed::pw_multi_aff<Arg3, pair<Domain, Domain2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Arg3, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::pullback(const typed::pw_multi_aff<pair<Domain, Domain2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Arg3>
+typed::union_pw_multi_aff<Arg3, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::pullback(const typed::union_pw_aff<Arg3, pair<Domain, Domain2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Arg3, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::pullback(const typed::union_pw_aff<pair<Domain, Domain2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::pw_multi_aff_list<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::pw_multi_aff_list() const
+{
+ auto res = isl::union_pw_multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::range_product(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::range_product(const typed::multi_aff<pair<Domain, Domain2>, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::range_product(const typed::pw_multi_aff<pair<Domain, Domain2>, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+template <typename Range2>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::range_product(const typed::union_pw_aff<pair<Domain, Domain2>, Range2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::space<> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::space() const
+{
+ auto res = isl::union_pw_multi_aff::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::sub(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::sub(const typed::multi_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::sub(const typed::pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::sub(const typed::union_pw_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::subtract_domain(const typed::space<pair<Domain, Domain2>> &space) const
+{
+ auto res = isl::union_pw_multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::subtract_domain(const typed::union_set<pair<Domain, Domain2>> &uset) const
+{
+ auto res = isl::union_pw_multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::union_add(const typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::union_add(const typed::multi_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::union_add(const typed::pw_multi_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Domain2, typename Range>
+typed::union_pw_multi_aff<pair<Domain, Domain2>, Range> typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>::union_add(const typed::union_pw_aff<pair<Domain, Domain2>, Range> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<Domain, Domain2>, Range>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::union_pw_multi_aff(const typed::multi_aff<Domain, pair<Range, Range2>> &ma)
+ : isl::union_pw_multi_aff(ma)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::union_pw_multi_aff(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &pma)
+ : isl::union_pw_multi_aff(pma)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::union_pw_multi_aff(const typed::union_pw_aff<Domain, pair<Range, Range2>> &upa)
+ : isl::union_pw_multi_aff(upa)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::union_pw_multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::union_pw_multi_aff(ctx, str)
+{
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::add(const typed::multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::add(const typed::union_pw_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, Arg3> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg3> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, Arg3> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::apply(const typed::multi_aff<pair<Range, Range2>, Arg3> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, Arg3> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::apply(const typed::pw_multi_aff<pair<Range, Range2>, Arg3> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, Arg3> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::apply(const typed::union_pw_aff<pair<Range, Range2>, Arg3> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<Domain, Arg3>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::multi_union_pw_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_pw_multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::as_pw_multi_aff() const
+{
+ auto res = isl::union_pw_multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_map<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::as_union_map() const
+{
+ auto res = isl::union_pw_multi_aff::as_union_map();
+ return typed::union_map<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::union_pw_multi_aff::coalesce();
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_set<Domain> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::union_pw_multi_aff::domain();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_pw_multi_aff::empty(ctx);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::extract_pw_multi_aff(const typed::space<Domain, pair<Range, Range2>> &space) const
+{
+ auto res = isl::union_pw_multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::gist(const typed::point<Domain> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::intersect_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::intersect_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::multi_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::union_pw_aff<Domain2, Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::pullback(const typed::union_pw_aff<Domain> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::pw_multi_aff_list<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::pw_multi_aff_list() const
+{
+ auto res = isl::union_pw_multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, Range> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::union_pw_multi_aff::range_factor_domain();
+ return typed::union_pw_multi_aff<Domain, Range>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, Range2> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::union_pw_multi_aff::range_factor_range();
+ return typed::union_pw_multi_aff<Domain, Range2>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::union_pw_multi_aff<Domain, Arg3> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::multi_aff<Domain, Arg3> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::pw_multi_aff<Domain, Arg3> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+template <typename Arg3>
+typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::range_product(const typed::union_pw_aff<Domain, Arg3> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<pair<Range, Range2>, Arg3>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::space<> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::space() const
+{
+ auto res = isl::union_pw_multi_aff::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::sub(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::sub(const typed::multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::sub(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::sub(const typed::union_pw_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::subtract_domain(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_pw_multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::subtract_domain(const typed::union_set<Domain> &uset) const
+{
+ auto res = isl::union_pw_multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::union_pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::pw_multi_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename Domain, typename Range, typename Range2>
+typed::union_pw_multi_aff<Domain, pair<Range, Range2>> typed::union_pw_multi_aff<Domain, pair<Range, Range2>>::union_add(const typed::union_pw_aff<Domain, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<Domain, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_pw_multi_aff(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &ma)
+ : isl::union_pw_multi_aff(ma)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_pw_multi_aff(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &pma)
+ : isl::union_pw_multi_aff(pma)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_pw_multi_aff(const typed::union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upa)
+ : isl::union_pw_multi_aff(upa)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_pw_multi_aff(const isl::ctx &ctx, const std::string &str)
+ : isl::union_pw_multi_aff(ctx, str)
+{
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::add(const typed::union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, Arg2> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::apply(const typed::union_pw_multi_aff<pair<Range, Range2>, Arg2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, Arg2> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::apply(const typed::multi_aff<pair<Range, Range2>, Arg2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, Arg2> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::apply(const typed::pw_multi_aff<pair<Range, Range2>, Arg2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, Arg2> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::apply(const typed::union_pw_aff<pair<Range, Range2>, Arg2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::apply(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, Arg2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_multi_union_pw_aff() const
+{
+ auto res = isl::union_pw_multi_aff::as_multi_union_pw_aff();
+ return typed::multi_union_pw_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_pw_multi_aff() const
+{
+ auto res = isl::union_pw_multi_aff::as_pw_multi_aff();
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_map<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::as_union_map() const
+{
+ auto res = isl::union_pw_multi_aff::as_union_map();
+ return typed::union_map<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::coalesce() const
+{
+ auto res = isl::union_pw_multi_aff::coalesce();
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_set<pair<T1, T2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::domain() const
+{
+ auto res = isl::union_pw_multi_aff::domain();
+ return typed::union_set<pair<T1, T2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_pw_multi_aff::empty(ctx);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::extract_pw_multi_aff(const typed::space<pair<T1, T2>, pair<Range, Range2>> &space) const
+{
+ auto res = isl::union_pw_multi_aff::extract_pw_multi_aff(space);
+ return typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::union_set<pair<T1, T2>> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::basic_set<pair<T1, T2>> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::point<pair<T1, T2>> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::gist(const typed::set<pair<T1, T2>> &context) const
+{
+ auto res = isl::union_pw_multi_aff::gist(context);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_domain(space);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_domain(uset);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_pw_multi_aff::intersect_params(set);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<Domain3, T1> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::preimage_domain_wrapped_domain(const typed::multi_aff<Domain3, T1> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::preimage_domain_wrapped_domain(const typed::pw_multi_aff<Domain3, T1> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain3>
+typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::preimage_domain_wrapped_domain(const typed::union_pw_aff<Domain3, T1> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2);
+ return typed::union_pw_multi_aff<pair<Domain3, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<Domain2, pair<T1, T2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::union_pw_multi_aff<pair<T1, T2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::multi_aff<Domain2, pair<T1, T2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::multi_aff<pair<T1, T2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<Domain2, pair<T1, T2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::pw_multi_aff<pair<T1, T2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Domain2>
+typed::union_pw_multi_aff<Domain2, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::union_pw_aff<Domain2, pair<T1, T2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<Domain2, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pullback(const typed::union_pw_aff<pair<T1, T2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::pullback(upma2);
+ return typed::union_pw_multi_aff<pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::pw_multi_aff_list<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::pw_multi_aff_list() const
+{
+ auto res = isl::union_pw_multi_aff::pw_multi_aff_list();
+ return typed::pw_multi_aff_list<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, Range> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_factor_domain() const
+{
+ auto res = isl::union_pw_multi_aff::range_factor_domain();
+ return typed::union_pw_multi_aff<pair<T1, T2>, Range>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, Range2> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_factor_range() const
+{
+ auto res = isl::union_pw_multi_aff::range_factor_range();
+ return typed::union_pw_multi_aff<pair<T1, T2>, Range2>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::union_pw_multi_aff<pair<T1, T2>, Arg2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::multi_aff<pair<T1, T2>, Arg2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::pw_multi_aff<pair<T1, T2>, Arg2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+template <typename Arg2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::range_product(const typed::union_pw_aff<pair<T1, T2>, Arg2> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::range_product(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<pair<Range, Range2>, Arg2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::space<> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::space() const
+{
+ auto res = isl::union_pw_multi_aff::space();
+ return typed::space<>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::sub(const typed::union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::sub(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::space<pair<T1, T2>> &space) const
+{
+ auto res = isl::union_pw_multi_aff::subtract_domain(space);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::subtract_domain(const typed::union_set<pair<T1, T2>> &uset) const
+{
+ auto res = isl::union_pw_multi_aff::subtract_domain(uset);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+template <typename T1, typename T2, typename Range, typename Range2>
+typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>> typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>::union_add(const typed::union_pw_aff<pair<T1, T2>, pair<Range, Range2>> &upma2) const
+{
+ auto res = isl::union_pw_multi_aff::union_add(upma2);
+ return typed::union_pw_multi_aff<pair<T1, T2>, pair<Range, Range2>>(res);
+}
+
+typed::union_set<>::union_set(const typed::basic_set<> &bset)
+ : isl::union_set(bset)
+{
+}
+
+typed::union_set<>::union_set(const typed::point<> &pnt)
+ : isl::union_set(pnt)
+{
+}
+
+typed::union_set<>::union_set(const typed::set<> &set)
+ : isl::union_set(set)
+{
+}
+
+typed::union_set<>::union_set(const isl::ctx &ctx, const std::string &str)
+ : isl::union_set(ctx, str)
+{
+}
+
+typed::union_set<> typed::union_set<>::coalesce() const
+{
+ auto res = isl::union_set::coalesce();
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::detect_equalities() const
+{
+ auto res = isl::union_set::detect_equalities();
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_set::empty(ctx);
+ return typed::union_set<>(res);
+}
+
+bool typed::union_set<>::every_set(const std::function<bool(typed::set<>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<>(arg0));
+ };
+ return isl::union_set::every_set(lambda);
+}
+
+typed::set<> typed::union_set<>::extract_set(const typed::space<> &space) const
+{
+ auto res = isl::union_set::extract_set(space);
+ return typed::set<>(res);
+}
+
+void typed::union_set<>::foreach_point(const std::function<void(typed::point<>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<>(arg0));
+ };
+ return isl::union_set::foreach_point(lambda);
+}
+
+void typed::union_set<>::foreach_set(const std::function<void(typed::set<>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<>(arg0));
+ };
+ return isl::union_set::foreach_set(lambda);
+}
+
+typed::union_set<> typed::union_set<>::gist(const typed::union_set<> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::gist(const typed::basic_set<> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::gist(const typed::point<> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::gist(const typed::set<> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::intersect(const typed::union_set<> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::intersect(const typed::basic_set<> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::intersect(const typed::point<> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::intersect(const typed::set<> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::space<> typed::union_set<>::space() const
+{
+ auto res = isl::union_set::space();
+ return typed::space<>(res);
+}
+
+typed::union_set<> typed::union_set<>::subtract(const typed::union_set<> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::subtract(const typed::basic_set<> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::subtract(const typed::point<> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::subtract(const typed::set<> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::unite(const typed::union_set<> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::unite(const typed::basic_set<> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::unite(const typed::point<> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::unite(const typed::set<> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<>(res);
+}
+
+typed::union_set<> typed::union_set<>::universe() const
+{
+ auto res = isl::union_set::universe();
+ return typed::union_set<>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain>::union_set(const typed::basic_set<Domain> &bset)
+ : isl::union_set(bset)
+{
+}
+
+template <typename Domain>
+typed::union_set<Domain>::union_set(const typed::point<Domain> &pnt)
+ : isl::union_set(pnt)
+{
+}
+
+template <typename Domain>
+typed::union_set<Domain>::union_set(const typed::set<Domain> &set)
+ : isl::union_set(set)
+{
+}
+
+template <typename Domain>
+typed::union_set<Domain>::union_set(const isl::ctx &ctx, const std::string &str)
+ : isl::union_set(ctx, str)
+{
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_set<Range> typed::union_set<Domain>::apply(const typed::union_map<Domain, Range> &umap) const
+{
+ auto res = isl::union_set::apply(umap);
+ return typed::union_set<Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_set<Range> typed::union_set<Domain>::apply(const typed::basic_map<Domain, Range> &umap) const
+{
+ auto res = isl::union_set::apply(umap);
+ return typed::union_set<Range>(res);
+}
+
+template <typename Domain>
+template <typename Range>
+typed::union_set<Range> typed::union_set<Domain>::apply(const typed::map<Domain, Range> &umap) const
+{
+ auto res = isl::union_set::apply(umap);
+ return typed::union_set<Range>(res);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::union_set<Domain>::as_set() const
+{
+ auto res = isl::union_set::as_set();
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::coalesce() const
+{
+ auto res = isl::union_set::coalesce();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::detect_equalities() const
+{
+ auto res = isl::union_set::detect_equalities();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_set::empty(ctx);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+bool typed::union_set<Domain>::every_set(const std::function<bool(typed::set<Domain>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<Domain>(arg0));
+ };
+ return isl::union_set::every_set(lambda);
+}
+
+template <typename Domain>
+typed::set<Domain> typed::union_set<Domain>::extract_set(const typed::space<Domain> &space) const
+{
+ auto res = isl::union_set::extract_set(space);
+ return typed::set<Domain>(res);
+}
+
+template <typename Domain>
+void typed::union_set<Domain>::foreach_point(const std::function<void(typed::point<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<Domain>(arg0));
+ };
+ return isl::union_set::foreach_point(lambda);
+}
+
+template <typename Domain>
+void typed::union_set<Domain>::foreach_set(const std::function<void(typed::set<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<Domain>(arg0));
+ };
+ return isl::union_set::foreach_set(lambda);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::gist(const typed::union_set<Domain> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::gist(const typed::basic_set<Domain> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::gist(const typed::point<Domain> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::gist(const typed::set<Domain> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_map<Domain, Domain> typed::union_set<Domain>::identity() const
+{
+ auto res = isl::union_set::identity();
+ return typed::union_map<Domain, Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::intersect(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::intersect(const typed::basic_set<Domain> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::intersect(const typed::point<Domain> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::intersect(const typed::set<Domain> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_set::intersect_params(set);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_set::intersect_params(set);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_set::intersect_params(set);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::lexmax() const
+{
+ auto res = isl::union_set::lexmax();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::lexmin() const
+{
+ auto res = isl::union_set::lexmin();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_set<Domain2> typed::union_set<Domain>::preimage(const typed::multi_aff<Domain2, Domain> &ma) const
+{
+ auto res = isl::union_set::preimage(ma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_set<Domain2> typed::union_set<Domain>::preimage(const typed::pw_multi_aff<Domain2, Domain> &pma) const
+{
+ auto res = isl::union_set::preimage(pma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain>
+template <typename Domain2>
+typed::union_set<Domain2> typed::union_set<Domain>::preimage(const typed::union_pw_multi_aff<Domain2, Domain> &upma) const
+{
+ auto res = isl::union_set::preimage(upma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain>
+typed::space<> typed::union_set<Domain>::space() const
+{
+ auto res = isl::union_set::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::subtract(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::subtract(const typed::basic_set<Domain> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::subtract(const typed::point<Domain> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::subtract(const typed::set<Domain> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::unite(const typed::union_set<Domain> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::unite(const typed::basic_set<Domain> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::unite(const typed::point<Domain> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::unite(const typed::set<Domain> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set<Domain>::universe() const
+{
+ auto res = isl::union_set::universe();
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>>::union_set(const typed::basic_set<pair<Domain, Range>> &bset)
+ : isl::union_set(bset)
+{
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>>::union_set(const typed::point<pair<Domain, Range>> &pnt)
+ : isl::union_set(pnt)
+{
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>>::union_set(const typed::set<pair<Domain, Range>> &set)
+ : isl::union_set(set)
+{
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>>::union_set(const isl::ctx &ctx, const std::string &str)
+ : isl::union_set(ctx, str)
+{
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::union_set<Arg2> typed::union_set<pair<Domain, Range>>::apply(const typed::union_map<pair<Domain, Range>, Arg2> &umap) const
+{
+ auto res = isl::union_set::apply(umap);
+ return typed::union_set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::union_set<Arg2> typed::union_set<pair<Domain, Range>>::apply(const typed::basic_map<pair<Domain, Range>, Arg2> &umap) const
+{
+ auto res = isl::union_set::apply(umap);
+ return typed::union_set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Arg2>
+typed::union_set<Arg2> typed::union_set<pair<Domain, Range>>::apply(const typed::map<pair<Domain, Range>, Arg2> &umap) const
+{
+ auto res = isl::union_set::apply(umap);
+ return typed::union_set<Arg2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::as_set() const
+{
+ auto res = isl::union_set::as_set();
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::coalesce() const
+{
+ auto res = isl::union_set::coalesce();
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::detect_equalities() const
+{
+ auto res = isl::union_set::detect_equalities();
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::empty(const isl::ctx &ctx)
+{
+ auto res = isl::union_set::empty(ctx);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+bool typed::union_set<pair<Domain, Range>>::every_set(const std::function<bool(typed::set<pair<Domain, Range>>)> &test) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return test(typed::set<pair<Domain, Range>>(arg0));
+ };
+ return isl::union_set::every_set(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::extract_set(const typed::space<pair<Domain, Range>> &space) const
+{
+ auto res = isl::union_set::extract_set(space);
+ return typed::set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+void typed::union_set<pair<Domain, Range>>::foreach_point(const std::function<void(typed::point<pair<Domain, Range>>)> &fn) const
+{
+ auto lambda = [&] (isl::point arg0) {
+ return fn(typed::point<pair<Domain, Range>>(arg0));
+ };
+ return isl::union_set::foreach_point(lambda);
+}
+
+template <typename Domain, typename Range>
+void typed::union_set<pair<Domain, Range>>::foreach_set(const std::function<void(typed::set<pair<Domain, Range>>)> &fn) const
+{
+ auto lambda = [&] (isl::set arg0) {
+ return fn(typed::set<pair<Domain, Range>>(arg0));
+ };
+ return isl::union_set::foreach_set(lambda);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::gist(const typed::union_set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::gist(const typed::basic_set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::gist(const typed::point<pair<Domain, Range>> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::gist(const typed::set<pair<Domain, Range>> &context) const
+{
+ auto res = isl::union_set::gist(context);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<pair<Domain, Range>, pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::identity() const
+{
+ auto res = isl::union_set::identity();
+ return typed::union_map<pair<Domain, Range>, pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::intersect(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::intersect(const typed::basic_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::intersect(const typed::point<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::intersect(const typed::set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::intersect(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::intersect_params(const typed::set<> &set) const
+{
+ auto res = isl::union_set::intersect_params(set);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::intersect_params(const typed::basic_set<> &set) const
+{
+ auto res = isl::union_set::intersect_params(set);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::intersect_params(const typed::point<> &set) const
+{
+ auto res = isl::union_set::intersect_params(set);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::lexmax() const
+{
+ auto res = isl::union_set::lexmax();
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::lexmin() const
+{
+ auto res = isl::union_set::lexmin();
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_set<Domain2> typed::union_set<pair<Domain, Range>>::preimage(const typed::multi_aff<Domain2, pair<Domain, Range>> &ma) const
+{
+ auto res = isl::union_set::preimage(ma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_set<Domain2> typed::union_set<pair<Domain, Range>>::preimage(const typed::pw_multi_aff<Domain2, pair<Domain, Range>> &pma) const
+{
+ auto res = isl::union_set::preimage(pma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+template <typename Domain2>
+typed::union_set<Domain2> typed::union_set<pair<Domain, Range>>::preimage(const typed::union_pw_multi_aff<Domain2, pair<Domain, Range>> &upma) const
+{
+ auto res = isl::union_set::preimage(upma);
+ return typed::union_set<Domain2>(res);
+}
+
+template <typename Domain, typename Range>
+typed::space<> typed::union_set<pair<Domain, Range>>::space() const
+{
+ auto res = isl::union_set::space();
+ return typed::space<>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::subtract(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::subtract(const typed::basic_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::subtract(const typed::point<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::subtract(const typed::set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::subtract(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::unite(const typed::union_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::unite(const typed::basic_set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::unite(const typed::point<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::unite(const typed::set<pair<Domain, Range>> &uset2) const
+{
+ auto res = isl::union_set::unite(uset2);
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_set<pair<Domain, Range>> typed::union_set<pair<Domain, Range>>::universe() const
+{
+ auto res = isl::union_set::universe();
+ return typed::union_set<pair<Domain, Range>>(res);
+}
+
+template <typename Domain, typename Range>
+typed::union_map<Domain, Range> typed::union_set<pair<Domain, Range>>::unwrap() const
+{
+ auto res = isl::union_set::unwrap();
+ return typed::union_map<Domain, Range>(res);
+}
+
+typed::union_set_list<>::union_set_list(const isl::ctx &ctx, int n)
+ : isl::union_set_list(ctx, n)
+{
+}
+
+typed::union_set_list<>::union_set_list(const typed::union_set<> &el)
+ : isl::union_set_list(el)
+{
+}
+
+typed::union_set_list<>::union_set_list(const isl::ctx &ctx, const std::string &str)
+ : isl::union_set_list(ctx, str)
+{
+}
+
+typed::union_set_list<> typed::union_set_list<>::add(const typed::union_set<> &el) const
+{
+ auto res = isl::union_set_list::add(el);
+ return typed::union_set_list<>(res);
+}
+
+typed::union_set_list<> typed::union_set_list<>::add(const typed::basic_set<> &el) const
+{
+ auto res = isl::union_set_list::add(el);
+ return typed::union_set_list<>(res);
+}
+
+typed::union_set_list<> typed::union_set_list<>::add(const typed::point<> &el) const
+{
+ auto res = isl::union_set_list::add(el);
+ return typed::union_set_list<>(res);
+}
+
+typed::union_set_list<> typed::union_set_list<>::add(const typed::set<> &el) const
+{
+ auto res = isl::union_set_list::add(el);
+ return typed::union_set_list<>(res);
+}
+
+typed::union_set_list<> typed::union_set_list<>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::union_set_list::drop(first, n);
+ return typed::union_set_list<>(res);
+}
+
+void typed::union_set_list<>::foreach(const std::function<void(typed::union_set<>)> &fn) const
+{
+ auto lambda = [&] (isl::union_set arg0) {
+ return fn(typed::union_set<>(arg0));
+ };
+ return isl::union_set_list::foreach(lambda);
+}
+
+template <typename Domain>
+typed::union_set_list<Domain>::union_set_list(const isl::ctx &ctx, int n)
+ : isl::union_set_list(ctx, n)
+{
+}
+
+template <typename Domain>
+typed::union_set_list<Domain>::union_set_list(const typed::union_set<Domain> &el)
+ : isl::union_set_list(el)
+{
+}
+
+template <typename Domain>
+typed::union_set_list<Domain>::union_set_list(const isl::ctx &ctx, const std::string &str)
+ : isl::union_set_list(ctx, str)
+{
+}
+
+template <typename Domain>
+typed::union_set_list<Domain> typed::union_set_list<Domain>::add(const typed::union_set<Domain> &el) const
+{
+ auto res = isl::union_set_list::add(el);
+ return typed::union_set_list<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set_list<Domain> typed::union_set_list<Domain>::add(const typed::basic_set<Domain> &el) const
+{
+ auto res = isl::union_set_list::add(el);
+ return typed::union_set_list<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set_list<Domain> typed::union_set_list<Domain>::add(const typed::point<Domain> &el) const
+{
+ auto res = isl::union_set_list::add(el);
+ return typed::union_set_list<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set_list<Domain> typed::union_set_list<Domain>::add(const typed::set<Domain> &el) const
+{
+ auto res = isl::union_set_list::add(el);
+ return typed::union_set_list<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set<Domain> typed::union_set_list<Domain>::at(int index) const
+{
+ auto res = isl::union_set_list::at(index);
+ return typed::union_set<Domain>(res);
+}
+
+template <typename Domain>
+typed::union_set_list<Domain> typed::union_set_list<Domain>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::union_set_list::drop(first, n);
+ return typed::union_set_list<Domain>(res);
+}
+
+template <typename Domain>
+void typed::union_set_list<Domain>::foreach(const std::function<void(typed::union_set<Domain>)> &fn) const
+{
+ auto lambda = [&] (isl::union_set arg0) {
+ return fn(typed::union_set<Domain>(arg0));
+ };
+ return isl::union_set_list::foreach(lambda);
+}
+
+typed::val<Anonymous>::val(const isl::ctx &ctx, long i)
+ : isl::val(ctx, i)
+{
+}
+
+typed::val<Anonymous>::val(const isl::ctx &ctx, const std::string &str)
+ : isl::val(ctx, str)
+{
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::add(const typed::val<Anonymous> &v2) const
+{
+ auto res = isl::val::add(v2);
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::add(long v2) const
+{
+ auto res = isl::val::add(v2);
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::ceil() const
+{
+ auto res = isl::val::ceil();
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::floor() const
+{
+ auto res = isl::val::floor();
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::max(const typed::val<Anonymous> &v2) const
+{
+ auto res = isl::val::max(v2);
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::max(long v2) const
+{
+ auto res = isl::val::max(v2);
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::min(const typed::val<Anonymous> &v2) const
+{
+ auto res = isl::val::min(v2);
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::min(long v2) const
+{
+ auto res = isl::val::min(v2);
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::mod(const typed::val<Anonymous> &v2) const
+{
+ auto res = isl::val::mod(v2);
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::mod(long v2) const
+{
+ auto res = isl::val::mod(v2);
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::neg() const
+{
+ auto res = isl::val::neg();
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::sub(const typed::val<Anonymous> &v2) const
+{
+ auto res = isl::val::sub(v2);
+ return typed::val<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val<Anonymous>::sub(long v2) const
+{
+ auto res = isl::val::sub(v2);
+ return typed::val<Anonymous>(res);
+}
+
+typed::val_list<Anonymous>::val_list(const isl::ctx &ctx, int n)
+ : isl::val_list(ctx, n)
+{
+}
+
+typed::val_list<Anonymous>::val_list(const typed::val<Anonymous> &el)
+ : isl::val_list(el)
+{
+}
+
+typed::val_list<Anonymous>::val_list(const isl::ctx &ctx, const std::string &str)
+ : isl::val_list(ctx, str)
+{
+}
+
+typed::val_list<Anonymous> typed::val_list<Anonymous>::add(const typed::val<Anonymous> &el) const
+{
+ auto res = isl::val_list::add(el);
+ return typed::val_list<Anonymous>(res);
+}
+
+typed::val_list<Anonymous> typed::val_list<Anonymous>::add(long el) const
+{
+ auto res = isl::val_list::add(el);
+ return typed::val_list<Anonymous>(res);
+}
+
+typed::val<Anonymous> typed::val_list<Anonymous>::at(int index) const
+{
+ auto res = isl::val_list::at(index);
+ return typed::val<Anonymous>(res);
+}
+
+typed::val_list<Anonymous> typed::val_list<Anonymous>::drop(unsigned int first, unsigned int n) const
+{
+ auto res = isl::val_list::drop(first, n);
+ return typed::val_list<Anonymous>(res);
+}
+
+void typed::val_list<Anonymous>::foreach(const std::function<void(typed::val<Anonymous>)> &fn) const
+{
+ auto lambda = [&] (isl::val arg0) {
+ return fn(typed::val<Anonymous>(arg0));
+ };
+ return isl::val_list::foreach(lambda);
+}
+
+} // namespace typed
+} // namespace isl
+
+#endif /* ISL_TYPED_CPP */