diff --git a/polly/include/polly/CodeGen/IslNodeBuilder.h b/polly/include/polly/CodeGen/IslNodeBuilder.h --- a/polly/include/polly/CodeGen/IslNodeBuilder.h +++ b/polly/include/polly/CodeGen/IslNodeBuilder.h @@ -217,7 +217,8 @@ // of loop iterations. // // 3. With the existing code, upper bounds have been easier to implement. - isl::ast_expr getUpperBound(isl::ast_node For, CmpInst::Predicate &Predicate); + isl::ast_expr getUpperBound(isl::ast_node_for For, + CmpInst::Predicate &Predicate); /// Return non-negative number of iterations in case of the following form /// of a loop and -1 otherwise. @@ -228,7 +229,7 @@ /// /// NumIter is a non-negative integer value. Condition can have /// isl_ast_op_lt type. - int getNumberOfIterations(isl::ast_node For); + int getNumberOfIterations(isl::ast_node_for For); /// Compute the values and loops referenced in this subtree. /// @@ -317,7 +318,7 @@ bool preloadInvariantEquivClass(InvariantEquivClassTy &IAClass); void createForVector(__isl_take isl_ast_node *For, int VectorWidth); - void createForSequential(isl::ast_node For, bool MarkParallel); + void createForSequential(isl::ast_node_for For, bool MarkParallel); /// Create LLVM-IR that executes a for node thread parallel. /// diff --git a/polly/include/polly/Support/GICHelper.h b/polly/include/polly/Support/GICHelper.h --- a/polly/include/polly/Support/GICHelper.h +++ b/polly/include/polly/Support/GICHelper.h @@ -186,6 +186,51 @@ ISL_OBJECT_TO_STRING(union_pw_multi_aff) //@} +/// c++ wrapper for isl's dump() method. +//@{ +#define ISL_DUMP_OBJECT(name) \ + inline void dumpIslObj(const isl::name &Obj) { isl_##name##_dump(Obj.get()); } + +ISL_DUMP_OBJECT(aff) +ISL_DUMP_OBJECT(aff_list) +ISL_DUMP_OBJECT(ast_expr) +ISL_DUMP_OBJECT(ast_node) +ISL_DUMP_OBJECT(ast_node_list) +ISL_DUMP_OBJECT(basic_map) +ISL_DUMP_OBJECT(basic_map_list) +ISL_DUMP_OBJECT(basic_set) +ISL_DUMP_OBJECT(basic_set_list) +ISL_DUMP_OBJECT(constraint) +ISL_DUMP_OBJECT(id) +ISL_DUMP_OBJECT(id_list) +ISL_DUMP_OBJECT(id_to_ast_expr) +ISL_DUMP_OBJECT(local_space) +ISL_DUMP_OBJECT(map) +ISL_DUMP_OBJECT(map_list) +ISL_DUMP_OBJECT(multi_aff) +ISL_DUMP_OBJECT(multi_pw_aff) +ISL_DUMP_OBJECT(multi_union_pw_aff) +ISL_DUMP_OBJECT(multi_val) +ISL_DUMP_OBJECT(point) +ISL_DUMP_OBJECT(pw_aff) +ISL_DUMP_OBJECT(pw_aff_list) +ISL_DUMP_OBJECT(pw_multi_aff) +ISL_DUMP_OBJECT(schedule) +ISL_DUMP_OBJECT(schedule_constraints) +ISL_DUMP_OBJECT(schedule_node) +ISL_DUMP_OBJECT(set) +ISL_DUMP_OBJECT(set_list) +ISL_DUMP_OBJECT(space) +ISL_DUMP_OBJECT(union_map) +ISL_DUMP_OBJECT(union_pw_aff) +ISL_DUMP_OBJECT(union_pw_aff_list) +ISL_DUMP_OBJECT(union_pw_multi_aff) +ISL_DUMP_OBJECT(union_set) +ISL_DUMP_OBJECT(union_set_list) +ISL_DUMP_OBJECT(val) +ISL_DUMP_OBJECT(val_list) +//@} + inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, __isl_keep isl_union_map *Map) { OS << polly::stringFromIslObj(Map, "null"); diff --git a/polly/include/polly/ZoneAlgo.h b/polly/include/polly/ZoneAlgo.h --- a/polly/include/polly/ZoneAlgo.h +++ b/polly/include/polly/ZoneAlgo.h @@ -369,8 +369,8 @@ /// should have been replaced by their incoming values. /// /// @see #NormalizedPHI - isl::boolean isNormalized(isl::map Map); - isl::boolean isNormalized(isl::union_map Map); + bool isNormalized(isl::map Map); + bool isNormalized(isl::union_map Map); /// @} public: diff --git a/polly/lib/Analysis/ScopBuilder.cpp b/polly/lib/Analysis/ScopBuilder.cpp --- a/polly/lib/Analysis/ScopBuilder.cpp +++ b/polly/lib/Analysis/ScopBuilder.cpp @@ -838,7 +838,7 @@ isl_set_universe(isl_space_set_alloc(scop->getIslCtx().get(), 0, LD + 1)); InvalidDomainMap[EntryBB] = isl::manage(isl_set_empty(isl_set_get_space(S))); - isl::noexceptions::set Domain = isl::manage(S); + isl::set Domain = isl::manage(S); scop->setDomain(EntryBB, Domain); if (IsOnlyNonAffineRegion) @@ -1307,10 +1307,8 @@ // It is easier to insert the marks here that do it retroactively. isl::id IslLoopId = createIslLoopAttr(scop->getIslCtx(), L); if (!IslLoopId.is_null()) - Schedule = Schedule.get_root() - .get_child(0) - .insert_mark(IslLoopId) - .get_schedule(); + Schedule = + Schedule.get_root().child(0).insert_mark(IslLoopId).get_schedule(); LoopData->Schedule = combineInSequence(LoopData->Schedule, Schedule); } @@ -3346,7 +3344,7 @@ "Assumed at least one output dimension"); Pos = MaxPMA.dim(isl::dim::out) - 1; - LastDimAff = MaxPMA.get_pw_aff(Pos); + LastDimAff = MaxPMA.at(Pos); OneAff = isl::aff(isl::local_space(LastDimAff.get_domain_space())); OneAff = OneAff.add_constant_si(1); LastDimAff = LastDimAff.add(OneAff); diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -1085,7 +1085,7 @@ getStatement()->getParent()->getBestKnownDefinedBehaviorContext(); StmtDomain = StmtDomain.intersect_params(DefinedContext); isl::set NewDomain = NewAccess.domain(); - assert(!StmtDomain.is_subset(NewDomain).is_false() && + assert(StmtDomain.is_subset(NewDomain) && "Partial READ accesses not supported"); } @@ -1986,8 +1986,8 @@ isl::set NegativeContext = getInvalidContext(); PositiveContext = PositiveContext.intersect_params(Context); PositiveContext = PositiveContext.intersect_params(getDomains().params()); - return PositiveContext.is_empty().is_false() && - PositiveContext.is_subset(NegativeContext).is_false(); + return !PositiveContext.is_empty() && + !PositiveContext.is_subset(NegativeContext); } MemoryAccess *Scop::lookupBasePtrAccess(MemoryAccess *MA) { diff --git a/polly/lib/CodeGen/BlockGenerators.cpp b/polly/lib/CodeGen/BlockGenerators.cpp --- a/polly/lib/CodeGen/BlockGenerators.cpp +++ b/polly/lib/CodeGen/BlockGenerators.cpp @@ -566,7 +566,7 @@ auto StmtDom = Stmt.getDomain().intersect_params(Stmt.getParent()->getContext()); auto AccDom = MA->getAccessRelation().domain(); - assert(!StmtDom.is_subset(AccDom).is_false() && + assert(StmtDom.is_subset(AccDom) && "Scalar must be loaded in all statement instances"); #endif @@ -672,8 +672,7 @@ isl::union_map USchedule = AstBuild.get_schedule().intersect_domain(Domain); isl::map Schedule = isl::map::from_union_map(USchedule); - assert(Schedule.is_empty().is_false() && - "The stmt must have a valid instance"); + assert(!Schedule.is_empty() && "The stmt must have a valid instance"); isl::multi_pw_aff ScheduleMultiPwAff = isl::pw_multi_aff::from_map(Schedule.reverse()); @@ -693,8 +692,7 @@ if (i > 0) Values.push_back(RuntimeDebugBuilder::getPrintableString(Builder, ",")); - isl::ast_expr IsInSet = - RestrictedBuild.expr_from(ScheduleMultiPwAff.get_pw_aff(i)); + isl::ast_expr IsInSet = RestrictedBuild.expr_from(ScheduleMultiPwAff.at(i)); Values.push_back(ExprBuilder->create(IsInSet.copy())); } diff --git a/polly/lib/CodeGen/IslAst.cpp b/polly/lib/CodeGen/IslAst.cpp --- a/polly/lib/CodeGen/IslAst.cpp +++ b/polly/lib/CodeGen/IslAst.cpp @@ -678,8 +678,8 @@ __isl_take isl_ast_print_options *O, __isl_keep isl_ast_node *Node, void *User) { - isl::ast_node AstNode = isl::manage_copy(Node); - isl::ast_expr NodeExpr = AstNode.user_get_expr(); + isl::ast_node_user AstNode = isl::manage_copy(Node).as(); + isl::ast_expr NodeExpr = AstNode.expr(); isl::ast_expr CallExpr = NodeExpr.get_op_arg(0); isl::id CallExprId = CallExpr.get_id(); ScopStmt *AccessStmt = (ScopStmt *)CallExprId.get_user(); diff --git a/polly/lib/CodeGen/IslNodeBuilder.cpp b/polly/lib/CodeGen/IslNodeBuilder.cpp --- a/polly/lib/CodeGen/IslNodeBuilder.cpp +++ b/polly/lib/CodeGen/IslNodeBuilder.cpp @@ -107,10 +107,10 @@ clEnumValN(OpenMPBackend::LLVM, "LLVM", "LLVM OpenMP")), cl::Hidden, cl::init(OpenMPBackend::GNU), cl::cat(PollyCategory)); -isl::ast_expr IslNodeBuilder::getUpperBound(isl::ast_node For, +isl::ast_expr IslNodeBuilder::getUpperBound(isl::ast_node_for For, ICmpInst::Predicate &Predicate) { - isl::ast_expr Cond = For.for_get_cond(); - isl::ast_expr Iterator = For.for_get_iterator(); + isl::ast_expr Cond = For.cond(); + isl::ast_expr Iterator = For.iterator(); assert(isl_ast_expr_get_type(Cond.get()) == isl_ast_expr_op && "conditional expression is not an atomic upper bound"); @@ -163,16 +163,17 @@ return true; } -int IslNodeBuilder::getNumberOfIterations(isl::ast_node For) { +int IslNodeBuilder::getNumberOfIterations(isl::ast_node_for For) { assert(isl_ast_node_get_type(For.get()) == isl_ast_node_for); - isl::ast_node Body = For.for_get_body(); + isl::ast_node Body = For.body(); // First, check if we can actually handle this code. switch (isl_ast_node_get_type(Body.get())) { case isl_ast_node_user: break; case isl_ast_node_block: { - isl::ast_node_list List = Body.block_get_children(); + isl::ast_node_block BodyBlock = Body.as(); + isl::ast_node_list List = BodyBlock.children(); for (isl::ast_node Node : List) { isl_ast_node_type NodeType = isl_ast_node_get_type(Node.get()); if (NodeType != isl_ast_node_user) @@ -184,10 +185,10 @@ return -1; } - isl::ast_expr Init = For.for_get_init(); + isl::ast_expr Init = For.init(); if (!checkIslAstExprInt(Init.release(), isl_val_is_zero)) return -1; - isl::ast_expr Inc = For.for_get_inc(); + isl::ast_expr Inc = For.inc(); if (!checkIslAstExprInt(Inc.release(), isl_val_is_one)) return -1; CmpInst::Predicate Predicate; @@ -413,11 +414,12 @@ if (strcmp(isl_id_get_name(Id), "SIMD") == 0 && isl_ast_node_get_type(Child) == isl_ast_node_for) { bool Vector = PollyVectorizerChoice == VECTORIZER_POLLY; - int VectorWidth = getNumberOfIterations(isl::manage_copy(Child)); + int VectorWidth = + getNumberOfIterations(isl::manage_copy(Child).as()); if (Vector && 1 < VectorWidth && VectorWidth <= 16) createForVector(Child, VectorWidth); else - createForSequential(isl::manage(Child), true); + createForSequential(isl::manage(Child).as(), true); isl_id_free(Id); return; } @@ -518,18 +520,21 @@ /// /// @param Node The band node to be modified. /// @return The modified schedule node. -static bool IsLoopVectorizerDisabled(isl::ast_node Node) { +static bool IsLoopVectorizerDisabled(isl::ast_node_for Node) { assert(isl_ast_node_get_type(Node.get()) == isl_ast_node_for); - auto Body = Node.for_get_body(); + isl::ast_node Body = Node.body(); if (isl_ast_node_get_type(Body.get()) != isl_ast_node_mark) return false; - auto Id = Body.mark_get_id(); + + isl::ast_node_mark BodyMark = Body.as(); + auto Id = BodyMark.id(); if (strcmp(Id.get_name().c_str(), "Loop Vectorizer Disabled") == 0) return true; return false; } -void IslNodeBuilder::createForSequential(isl::ast_node For, bool MarkParallel) { +void IslNodeBuilder::createForSequential(isl::ast_node_for For, + bool MarkParallel) { Value *ValueLB, *ValueUB, *ValueInc; Type *MaxType; BasicBlock *ExitBlock; @@ -538,7 +543,7 @@ bool LoopVectorizerDisabled = IsLoopVectorizerDisabled(For); - isl::ast_node Body = For.for_get_body(); + isl::ast_node Body = For.body(); // isl_ast_node_for_is_degenerate(For) // @@ -546,9 +551,9 @@ // However, for now we just reuse the logic for normal loops, which will // create a loop with a single iteration. - isl::ast_expr Init = For.for_get_init(); - isl::ast_expr Inc = For.for_get_inc(); - isl::ast_expr Iterator = For.for_get_iterator(); + isl::ast_expr Init = For.init(); + isl::ast_expr Inc = For.inc(); + isl::ast_expr Iterator = For.iterator(); isl::id IteratorID = Iterator.get_id(); isl::ast_expr UB = getUpperBound(For, Predicate); @@ -654,7 +659,8 @@ Inc = isl_ast_node_for_get_inc(For); Iterator = isl_ast_node_for_get_iterator(For); IteratorID = isl_ast_expr_get_id(Iterator); - UB = getUpperBound(isl::manage_copy(For), Predicate).release(); + UB = getUpperBound(isl::manage_copy(For).as(), Predicate) + .release(); ValueLB = ExprBuilder.create(Init); ValueUB = ExprBuilder.create(UB); @@ -782,7 +788,8 @@ if (Vector && IslAstInfo::isInnermostParallel(isl::manage_copy(For)) && !IslAstInfo::isReductionParallel(isl::manage_copy(For))) { - int VectorWidth = getNumberOfIterations(isl::manage_copy(For)); + int VectorWidth = + getNumberOfIterations(isl::manage_copy(For).as()); if (1 < VectorWidth && VectorWidth <= 16 && !hasPartialAccesses(For)) { createForVector(For, VectorWidth); return; @@ -795,7 +802,7 @@ } bool Parallel = (IslAstInfo::isParallel(isl::manage_copy(For)) && !IslAstInfo::isReductionParallel(isl::manage_copy(For))); - createForSequential(isl::manage(For), Parallel); + createForSequential(isl::manage(For).as(), Parallel); } void IslNodeBuilder::createIf(__isl_take isl_ast_node *If) { diff --git a/polly/lib/CodeGen/PPCGCodeGeneration.cpp b/polly/lib/CodeGen/PPCGCodeGeneration.cpp --- a/polly/lib/CodeGen/PPCGCodeGeneration.cpp +++ b/polly/lib/CodeGen/PPCGCodeGeneration.cpp @@ -1124,11 +1124,11 @@ if (!gpu_array_is_scalar(Array)) { isl::multi_pw_aff ArrayBound = isl::manage_copy(Array->bound); - isl::pw_aff OffsetDimZero = ArrayBound.get_pw_aff(0); + isl::pw_aff OffsetDimZero = ArrayBound.at(0); isl::ast_expr Res = Build.expr_from(OffsetDimZero); for (unsigned int i = 1; i < Array->n_index; i++) { - isl::pw_aff Bound_I = ArrayBound.get_pw_aff(i); + isl::pw_aff Bound_I = ArrayBound.at(i); isl::ast_expr Expr = Build.expr_from(Bound_I); Res = Res.mul(Expr); } @@ -1307,7 +1307,7 @@ } void GPUNodeBuilder::createFor(__isl_take isl_ast_node *Node) { - createForSequential(isl::manage(Node), false); + createForSequential(isl::manage(Node).as(), false); } void GPUNodeBuilder::createKernelCopy(ppcg_kernel_stmt *KernelStmt) { @@ -1596,7 +1596,7 @@ isl::multi_pw_aff GridSizePwAffs = isl::manage_copy(Kernel->grid_size); for (long i = 0; i < Kernel->n_grid; i++) { - isl::pw_aff Size = GridSizePwAffs.get_pw_aff(i); + isl::pw_aff Size = GridSizePwAffs.at(i); isl::ast_expr GridSize = Context.expr_from(Size); Value *Res = ExprBuilder.create(GridSize.release()); Res = Builder.CreateTrunc(Res, Builder.getInt32Ty()); diff --git a/polly/lib/External/isl/include/isl/isl-noexceptions.h b/polly/lib/External/isl/include/isl/isl-noexceptions.h --- a/polly/lib/External/isl/include/isl/isl-noexceptions.h +++ b/polly/lib/External/isl/include/isl/isl-noexceptions.h @@ -1,4 +1,4 @@ -/// These are automatically generated checked C++ bindings for isl. +/// These are automatically generated 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 @@ -7,146 +7,254 @@ // clang-format off -#ifndef ISL_CPP_CHECKED -#define ISL_CPP_CHECKED +#ifndef ISL_CPP +#define ISL_CPP -#include -#include -#include -#include +#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include #include +#include + +/* ISL_USE_EXCEPTIONS should be defined to 1 if exceptions are available. + * gcc and clang define __cpp_exceptions; MSVC and xlC define _CPPUNWIND. + * Older versions of gcc (e.g., 4.9) only define __EXCEPTIONS. + * If exceptions are not available, any error condition will result + * in an abort. + */ +#ifndef ISL_USE_EXCEPTIONS +#if defined(__cpp_exceptions) || defined(_CPPUNWIND) || defined(__EXCEPTIONS) +#define ISL_USE_EXCEPTIONS 1 +#else +#define ISL_USE_EXCEPTIONS 0 +#endif +#endif namespace isl { -inline namespace noexceptions { - -#define ISLPP_STRINGIZE_(X) #X -#define ISLPP_STRINGIZE(X) ISLPP_STRINGIZE_(X) - -#define ISLPP_ASSERT(test, message) \ - do { \ - if (test) \ - break; \ - fputs("Assertion \"" #test "\" failed at " __FILE__ \ - ":" ISLPP_STRINGIZE(__LINE__) "\n " message "\n", \ - stderr); \ - abort(); \ - } while (0) - -class boolean { -private: - mutable bool checked = false; - isl_bool val; - friend boolean manage(isl_bool val); - boolean(isl_bool val): val(val) {} +class ctx { + isl_ctx *ptr; public: - boolean() - : val(isl_bool_error) {} - ~boolean() { - // ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state"); - } - - /* implicit */ boolean(bool val) - : val(val ? isl_bool_true : isl_bool_false) {} + /* implicit */ ctx(isl_ctx *ctx) : ptr(ctx) {} + isl_ctx *release() { + auto tmp = ptr; + ptr = nullptr; + return tmp; + } + isl_ctx *get() { + return ptr; + } +}; - bool is_error() const { checked = true; return val == isl_bool_error; } - bool is_false() const { checked = true; return val == isl_bool_false; } - bool is_true() const { checked = true; return val == isl_bool_true; } +/* Macros hiding try/catch. + * If exceptions are not available, then no exceptions will be thrown and + * there is nothing to catch. + */ +#if ISL_USE_EXCEPTIONS +#define ISL_CPP_TRY try +#define ISL_CPP_CATCH_ALL catch (...) +#else +#define ISL_CPP_TRY if (1) +#define ISL_CPP_CATCH_ALL if (0) +#endif + +#if ISL_USE_EXCEPTIONS + +/* Class capturing isl errors. + * + * The what() return value is stored in a reference counted string + * to ensure that the copy constructor and the assignment operator + * do not throw any exceptions. + */ +class exception : public std::exception { + std::shared_ptr what_str; - operator bool() const { - // ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked error state"); - ISLPP_ASSERT(!is_error(), "IMPLEMENTATION ERROR: Unhandled error state"); - return is_true(); - } +protected: + inline exception(const char *what_arg, const char *msg, + const char *file, int line); +public: + exception() {} + exception(const char *what_arg) { + what_str = std::make_shared(what_arg); + } + static inline void throw_error(enum isl_error error, const char *msg, + const char *file, int line); + virtual const char *what() const noexcept { + return what_str->c_str(); + } - boolean operator!() const { - if (is_error()) - return *this; - return !is_true(); - } + /* Default behavior on error conditions that occur inside isl calls + * performed from inside the bindings. + * In the case exceptions are available, isl should continue + * without printing a warning since the warning message + * will be included in the exception thrown from inside the bindings. + */ + static constexpr auto on_error = ISL_ON_ERROR_CONTINUE; + /* Wrapper for throwing an exception with the given message. + */ + static void throw_invalid(const char *msg, const char *file, int line) { + throw_error(isl_error_invalid, msg, file, line); + } + static inline void throw_last_error(ctx ctx); }; -inline boolean manage(isl_bool val) { - return boolean(val); +/* Create an exception of a type described by "what_arg", with + * error message "msg" in line "line" of file "file". + * + * Create a string holding the what() return value that + * corresponds to what isl would have printed. + * If no error message or no error file was set, then use "what_arg" instead. + */ +exception::exception(const char *what_arg, const char *msg, const char *file, + int line) +{ + if (!msg || !file) + what_str = std::make_shared(what_arg); + else + what_str = std::make_shared(std::string(file) + + ":" + std::to_string(line) + ": " + msg); } -class ctx { - isl_ctx *ptr; -public: - /* implicit */ ctx(isl_ctx *ctx) - : ptr(ctx) {} - isl_ctx *release() { - auto tmp = ptr; - ptr = nullptr; - return tmp; - } - isl_ctx *get() { - return ptr; - } +class exception_abort : public exception { + friend exception; + exception_abort(const char *msg, const char *file, int line) : + exception("execution aborted", msg, file, line) {} +}; + +class exception_alloc : public exception { + friend exception; + exception_alloc(const char *msg, const char *file, int line) : + exception("memory allocation failure", msg, file, line) {} +}; + +class exception_unknown : public exception { + friend exception; + exception_unknown(const char *msg, const char *file, int line) : + exception("unknown failure", msg, file, line) {} +}; + +class exception_internal : public exception { + friend exception; + exception_internal(const char *msg, const char *file, int line) : + exception("internal error", msg, file, line) {} +}; + +class exception_invalid : public exception { + friend exception; + exception_invalid(const char *msg, const char *file, int line) : + exception("invalid argument", msg, file, line) {} +}; + +class exception_quota : public exception { + friend exception; + exception_quota(const char *msg, const char *file, int line) : + exception("quota exceeded", msg, file, line) {} +}; + +class exception_unsupported : public exception { + friend exception; + exception_unsupported(const char *msg, const char *file, int line) : + exception("unsupported operation", msg, file, line) {} }; -/* Class encapsulating an isl_stat value. +/* Throw an exception of the class that corresponds to "error", with + * error message "msg" in line "line" of file "file". + * + * isl_error_none is treated as an invalid error type. */ -class stat { -private: - mutable bool checked = false; - isl_stat val; +void exception::throw_error(enum isl_error error, const char *msg, + const char *file, int line) +{ + switch (error) { + case isl_error_none: + break; + case isl_error_abort: throw exception_abort(msg, file, line); + case isl_error_alloc: throw exception_alloc(msg, file, line); + case isl_error_unknown: throw exception_unknown(msg, file, line); + case isl_error_internal: throw exception_internal(msg, file, line); + case isl_error_invalid: throw exception_invalid(msg, file, line); + case isl_error_quota: throw exception_quota(msg, file, line); + case isl_error_unsupported: + throw exception_unsupported(msg, file, line); + } + + throw exception_invalid("invalid error type", file, line); +} + +/* Throw an exception corresponding to the last error on "ctx" and + * reset the error. + * + * If "ctx" is NULL or if it is not in an error state at the start, + * then an invalid argument exception is thrown. + */ +void exception::throw_last_error(ctx ctx) +{ + enum isl_error error; + const char *msg, *file; + int line; + + error = isl_ctx_last_error(ctx.get()); + msg = isl_ctx_last_error_msg(ctx.get()); + file = isl_ctx_last_error_file(ctx.get()); + line = isl_ctx_last_error_line(ctx.get()); + isl_ctx_reset_error(ctx.get()); + + throw_error(error, msg, file, line); +} + +#else - friend stat manage(isl_stat val); +#include +#include + +class exception { public: - constexpr stat(isl_stat val) : val(val) {} - static stat ok() { - return stat(isl_stat_ok); - } - static stat error() { - return stat(isl_stat_error); + /* Default behavior on error conditions that occur inside isl calls + * performed from inside the bindings. + * In the case exceptions are not available, isl should abort. + */ + static constexpr auto on_error = ISL_ON_ERROR_ABORT; + /* Wrapper for throwing an exception with the given message. + * In the case exceptions are not available, print an error and abort. + */ + static void throw_invalid(const char *msg, const char *file, int line) { + fprintf(stderr, "%s:%d: %s\n", file, line, msg); + abort(); } - stat() : val(isl_stat_error) {} - ~stat() { - // ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state"); + /* Throw an exception corresponding to the last + * error on "ctx". + * isl should already abort when an error condition occurs, + * so this function should never be called. + */ + static void throw_last_error(ctx ctx) { + abort(); } +}; - isl_stat release() { - checked = true; - return val; - } +#endif - bool is_error() const { - checked = true; - return val == isl_stat_error; +/* Helper class for setting the on_error and resetting the option + * to the original value when leaving the scope. + */ +class options_scoped_set_on_error { + isl_ctx *ctx; + int saved_on_error; +public: + options_scoped_set_on_error(class ctx ctx, int on_error) { + this->ctx = ctx.get(); + saved_on_error = isl_options_get_on_error(this->ctx); + isl_options_set_on_error(this->ctx, on_error); } - bool is_ok() const { - checked = true; - return val == isl_stat_ok; + ~options_scoped_set_on_error() { + isl_options_set_on_error(ctx, saved_on_error); } }; - -inline stat manage(isl_stat val) -{ - return stat(val); -} - enum class dim { cst = isl_dim_cst, param = isl_dim_param, @@ -157,27 +265,72 @@ all = isl_dim_all }; -} } // namespace isl -namespace isl { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -inline namespace noexceptions { +namespace isl { // forward declarations class aff; class aff_list; class ast_build; class ast_expr; -class ast_expr_list; +class ast_expr_id; +class ast_expr_int; +class ast_expr_op; +class ast_expr_op_access; +class ast_expr_op_add; +class ast_expr_op_address_of; +class ast_expr_op_and; +class ast_expr_op_and_then; +class ast_expr_op_call; +class ast_expr_op_cond; +class ast_expr_op_div; +class ast_expr_op_eq; +class ast_expr_op_fdiv_q; +class ast_expr_op_ge; +class ast_expr_op_gt; +class ast_expr_op_le; +class ast_expr_op_lt; +class ast_expr_op_max; +class ast_expr_op_member; +class ast_expr_op_min; +class ast_expr_op_minus; +class ast_expr_op_mul; +class ast_expr_op_or; +class ast_expr_op_or_else; +class ast_expr_op_pdiv_q; +class ast_expr_op_pdiv_r; +class ast_expr_op_select; +class ast_expr_op_sub; +class ast_expr_op_zdiv_r; class ast_node; +class ast_node_block; +class ast_node_for; +class ast_node_if; class ast_node_list; +class ast_node_mark; +class ast_node_user; class basic_map; class basic_map_list; class basic_set; class basic_set_list; class constraint; -class constraint_list; class fixed_box; class id; class id_list; @@ -185,7 +338,6 @@ class local_space; class map; class map_list; -class mat; class multi_aff; class multi_id; class multi_pw_aff; @@ -196,32 +348,33 @@ class pw_aff_list; class pw_multi_aff; class pw_multi_aff_list; -class pw_qpolynomial; -class pw_qpolynomial_fold_list; -class pw_qpolynomial_list; -class qpolynomial; -class qpolynomial_list; class schedule; class schedule_constraints; class schedule_node; +class schedule_node_band; +class schedule_node_context; +class schedule_node_domain; +class schedule_node_expansion; +class schedule_node_extension; +class schedule_node_filter; +class schedule_node_guard; +class schedule_node_leaf; +class schedule_node_mark; +class schedule_node_sequence; +class schedule_node_set; class set; class set_list; class space; -class term; class union_access_info; class union_flow; class union_map; -class union_map_list; class union_pw_aff; class union_pw_aff_list; class union_pw_multi_aff; -class union_pw_multi_aff_list; -class union_pw_qpolynomial; class union_set; class union_set_list; class val; class val_list; -class vec; // declarations for isl::aff inline aff manage(__isl_take isl_aff *ptr); @@ -231,6 +384,7 @@ friend inline aff manage(__isl_take isl_aff *ptr); friend inline aff manage_copy(__isl_keep isl_aff *ptr); +protected: isl_aff *ptr = nullptr; inline explicit aff(__isl_take isl_aff *ptr); @@ -249,81 +403,182 @@ inline __isl_give isl_aff *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; inline isl::aff add(isl::aff aff2) const; - inline isl::aff add_coefficient_si(isl::dim type, int pos, int v) const; - inline isl::aff add_coefficient_val(isl::dim type, int pos, isl::val v) 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_num_si(int v) const; + inline isl::aff add_constant(long v) const; + inline isl::multi_aff add_constant(const isl::multi_val &mv) const; inline isl::aff add_constant_si(int v) const; - inline isl::aff add_dims(isl::dim type, unsigned int n) const; - inline isl::aff align_params(isl::space model) const; + inline isl::pw_aff add_dims(isl::dim type, unsigned int n) const; + inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) 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 int coefficient_sgn(isl::dim type, int pos) 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::val denominator_val() const; + inline isl::val get_denominator_val() const; inline isl_size dim(isl::dim type) const; + inline isl::id dim_id(isl::dim type, unsigned int pos) const; inline isl::aff div(isl::aff aff2) const; - inline isl::aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::basic_set eq_basic_set(isl::aff aff2) const; + inline isl::pw_aff div(const isl::pw_aff &pa2) const; + inline isl::set domain() const; + inline isl::space domain_space() const; + inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) 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 int find_dim_by_name(isl::dim type, const std::string &name) 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 isl::aff from_range() const; - inline isl::basic_set ge_basic_set(isl::aff aff2) const; + inline void foreach_piece(const std::function &fn) const; + inline void foreach_piece(const std::function &fn) const; + inline void foreach_pw_aff(const std::function &fn) const; inline isl::set ge_set(isl::aff aff2) const; - inline isl::val get_coefficient_val(isl::dim type, int pos) const; - inline isl::val get_constant_val() const; - inline isl::val get_denominator_val() const; - inline std::string get_dim_name(isl::dim type, unsigned int pos) const; - inline isl::aff get_div(int pos) const; - inline isl::local_space get_domain_local_space() const; - inline isl::space get_domain_space() const; - inline uint32_t get_hash() const; - inline isl::local_space get_local_space() const; - inline isl::space get_space() const; + inline isl::set ge_set(const isl::pw_aff &pwaff2) const; inline isl::aff gist(isl::set context) const; - inline isl::aff gist_params(isl::set context) const; - inline isl::basic_set gt_basic_set(isl::aff aff2) 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::aff insert_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean involves_locals() const; - inline boolean is_cst() const; - inline boolean is_nan() const; - inline isl::basic_set le_basic_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 is_equal(const isl::pw_aff &pa2) 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::basic_set lt_basic_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 move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; + inline isl::aff mod(long mod) const; inline isl::aff mul(isl::aff aff2) const; - static inline isl::aff nan_on_domain(isl::local_space ls); - static inline isl::aff nan_on_domain_space(isl::space space); + inline isl::pw_aff mul(const isl::pw_aff &pwaff2) const; + inline isl_size 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 isl::basic_set neg_basic_set() const; - static inline isl::aff param_on_domain_space_id(isl::space space, isl::id id); - inline boolean plain_is_equal(const isl::aff &aff2) const; - inline boolean plain_is_zero() const; - inline isl::aff project_domain_on_params() 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::aff pullback_aff(isl::aff aff2) 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::multi_aff reset_tuple_id(isl::dim type) 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_ui(unsigned int f) const; - inline isl::aff set_coefficient_si(isl::dim type, int pos, int v) const; - inline isl::aff set_coefficient_val(isl::dim type, int pos, 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_aff(int pos, const isl::aff &el) 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::aff set_constant_si(int v) const; - inline isl::aff set_constant_val(isl::val v) const; - inline isl::aff set_dim_id(isl::dim type, unsigned int pos, isl::id id) const; - inline isl::aff set_tuple_id(isl::dim type, isl::id id) const; + inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const; + inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) 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 isl::pw_aff set_tuple_id(isl::dim type, const isl::id &id) const; + inline isl::pw_aff set_tuple_id(isl::dim type, const std::string &id) const; + inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const; + inline isl_size 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::id tuple_id(isl::dim type) const; inline isl::aff unbind_params_insert_domain(isl::multi_id domain) const; - static inline isl::aff val_on_domain_space(isl::space space, isl::val val); + 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 var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos); - inline isl::basic_set zero_basic_set() const; static inline isl::aff zero_on_domain(isl::space space); }; @@ -335,6 +590,7 @@ friend inline aff_list manage(__isl_take isl_aff_list *ptr); friend inline aff_list manage_copy(__isl_keep isl_aff_list *ptr); +protected: isl_aff_list *ptr = nullptr; inline explicit aff_list(__isl_take isl_aff_list *ptr); @@ -342,6 +598,9 @@ public: inline /* implicit */ aff_list(); 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 &; @@ -350,23 +609,16 @@ inline __isl_give isl_aff_list *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; inline isl::aff_list add(isl::aff el) const; - static inline isl::aff_list alloc(isl::ctx ctx, int n); + 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 stat foreach(const std::function &fn) const; - static inline isl::aff_list from_aff(isl::aff el); - inline isl::aff get_aff(int index) const; - inline isl::aff get_at(int index) const; + inline void foreach(const std::function &fn) const; inline isl::aff_list insert(unsigned int pos, isl::aff el) const; - inline isl_size n_aff() const; - inline isl::aff_list reverse() const; - inline isl::aff_list set_aff(int index, isl::aff el) const; inline isl_size size() const; - inline isl::aff_list swap(unsigned int pos1, unsigned int pos2) const; }; // declarations for isl::ast_build @@ -377,6 +629,7 @@ friend inline ast_build manage(__isl_take isl_ast_build *ptr); friend inline ast_build manage_copy(__isl_keep isl_ast_build *ptr); +protected: isl_ast_build *ptr = nullptr; inline explicit ast_build(__isl_take isl_ast_build *ptr); @@ -394,19 +647,29 @@ inline bool is_null() const; inline isl::ctx ctx() const; +private: + inline ast_build ©_callbacks(const ast_build &obj); + struct at_each_domain_data { + std::function func; + std::exception_ptr eptr; + }; + std::shared_ptr at_each_domain_data; + static inline isl_ast_node *at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2); + inline void set_at_each_domain_data(const std::function &fn); +public: + inline isl::ast_build set_at_each_domain(const std::function &fn) const; inline isl::ast_expr access_from(isl::multi_pw_aff mpa) const; inline isl::ast_expr access_from(isl::pw_multi_aff pma) const; - inline isl::ast_node ast_from_schedule(isl::union_map schedule) const; inline isl::ast_expr call_from(isl::multi_pw_aff mpa) const; inline isl::ast_expr call_from(isl::pw_multi_aff pma) 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 get_schedule() const; - inline isl::space get_schedule_space() 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::ast_build restrict(isl::set set) const; + inline isl::union_map schedule() const; + inline isl::union_map get_schedule() const; }; // declarations for isl::ast_expr @@ -417,6 +680,7 @@ friend inline ast_expr manage(__isl_take isl_ast_expr *ptr); friend inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr); +protected: isl_ast_expr *ptr = nullptr; inline explicit ast_expr(__isl_take isl_ast_expr *ptr); @@ -431,5813 +695,8106 @@ inline __isl_keep isl_ast_expr *get() const; inline __isl_give isl_ast_expr *release(); inline bool is_null() const; +private: + template ::value>::type> + inline bool isa_type(T subtype) const; +public: + template inline bool isa() const; + template inline T as() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::ast_expr access(isl::ast_expr_list indices) const; inline isl::ast_expr add(isl::ast_expr expr2) const; inline isl::ast_expr address_of() const; - inline isl::ast_expr call(isl::ast_expr_list arguments) const; - inline isl::ast_expr div(isl::ast_expr expr2) const; inline isl::ast_expr eq(isl::ast_expr expr2) const; - static inline isl::ast_expr from_id(isl::id id); static inline isl::ast_expr from_val(isl::val v); - inline isl::ast_expr ge(isl::ast_expr expr2) const; + inline isl::id id() const; inline isl::id get_id() const; - inline isl::ast_expr get_op_arg(int pos) const; - inline isl_size get_op_n_arg() const; - inline isl::val get_val() const; - inline isl::ast_expr gt(isl::ast_expr expr2) const; - inline isl::id id_get_id() const; - inline isl::val int_get_val() const; - inline boolean is_equal(const isl::ast_expr &expr2) const; inline isl::ast_expr le(isl::ast_expr expr2) const; - inline isl::ast_expr lt(isl::ast_expr expr2) const; inline isl::ast_expr mul(isl::ast_expr expr2) const; - inline isl::ast_expr neg() const; - inline isl::ast_expr op_get_arg(int pos) const; - inline isl_size op_get_n_arg() const; - inline isl::ast_expr pdiv_q(isl::ast_expr expr2) const; - inline isl::ast_expr pdiv_r(isl::ast_expr expr2) const; - inline isl::ast_expr set_op_arg(int pos, isl::ast_expr arg) const; - inline isl::ast_expr sub(isl::ast_expr expr2) const; - inline isl::ast_expr substitute_ids(isl::id_to_ast_expr id2expr) const; + inline isl::ast_expr op_arg(int pos) const; + inline isl::ast_expr get_op_arg(int pos) const; inline std::string to_C_str() const; + inline isl::val val() const; + inline isl::val get_val() const; }; -// declarations for isl::ast_expr_list -inline ast_expr_list manage(__isl_take isl_ast_expr_list *ptr); -inline ast_expr_list manage_copy(__isl_keep isl_ast_expr_list *ptr); +// declarations for isl::ast_expr_id -class ast_expr_list { - friend inline ast_expr_list manage(__isl_take isl_ast_expr_list *ptr); - friend inline ast_expr_list manage_copy(__isl_keep isl_ast_expr_list *ptr); +class ast_expr_id : public ast_expr { + template + friend bool ast_expr::isa() const; + friend ast_expr_id ast_expr::as() const; + static const auto type = isl_ast_expr_id; - isl_ast_expr_list *ptr = nullptr; - - inline explicit ast_expr_list(__isl_take isl_ast_expr_list *ptr); +protected: + inline explicit ast_expr_id(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ ast_expr_list(); - inline /* implicit */ ast_expr_list(const ast_expr_list &obj); - inline ast_expr_list &operator=(ast_expr_list obj); - inline ~ast_expr_list(); - inline __isl_give isl_ast_expr_list *copy() const &; - inline __isl_give isl_ast_expr_list *copy() && = delete; - inline __isl_keep isl_ast_expr_list *get() const; - inline __isl_give isl_ast_expr_list *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_id(); + inline /* implicit */ ast_expr_id(const ast_expr_id &obj); + inline ast_expr_id &operator=(ast_expr_id obj); inline isl::ctx ctx() const; - inline void dump() const; - - inline isl::ast_expr_list add(isl::ast_expr el) const; - static inline isl::ast_expr_list alloc(isl::ctx ctx, int n); - inline isl::ast_expr_list clear() const; - inline isl::ast_expr_list concat(isl::ast_expr_list list2) const; - inline isl::ast_expr_list drop(unsigned int first, unsigned int n) const; - inline stat foreach(const std::function &fn) const; - static inline isl::ast_expr_list from_ast_expr(isl::ast_expr el); - inline isl::ast_expr get_ast_expr(int index) const; - inline isl::ast_expr get_at(int index) const; - inline isl::ast_expr_list insert(unsigned int pos, isl::ast_expr el) const; - inline isl_size n_ast_expr() const; - inline isl::ast_expr_list reverse() const; - inline isl::ast_expr_list set_ast_expr(int index, isl::ast_expr el) const; - inline isl_size size() const; - inline isl::ast_expr_list swap(unsigned int pos1, unsigned int pos2) const; -}; -// declarations for isl::ast_node -inline ast_node manage(__isl_take isl_ast_node *ptr); -inline ast_node manage_copy(__isl_keep isl_ast_node *ptr); + inline isl::id id() const; + inline isl::id get_id() const; +}; -class ast_node { - friend inline ast_node manage(__isl_take isl_ast_node *ptr); - friend inline ast_node manage_copy(__isl_keep isl_ast_node *ptr); +// declarations for isl::ast_expr_int - isl_ast_node *ptr = nullptr; +class ast_expr_int : public ast_expr { + template + friend bool ast_expr::isa() const; + friend ast_expr_int ast_expr::as() const; + static const auto type = isl_ast_expr_int; - inline explicit ast_node(__isl_take isl_ast_node *ptr); +protected: + inline explicit ast_expr_int(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ ast_node(); - inline /* implicit */ ast_node(const ast_node &obj); - inline ast_node &operator=(ast_node obj); - inline ~ast_node(); - inline __isl_give isl_ast_node *copy() const &; - inline __isl_give isl_ast_node *copy() && = delete; - inline __isl_keep isl_ast_node *get() const; - inline __isl_give isl_ast_node *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_int(); + inline /* implicit */ ast_expr_int(const ast_expr_int &obj); + inline ast_expr_int &operator=(ast_expr_int obj); inline isl::ctx ctx() const; - inline void dump() const; - - static inline isl::ast_node alloc_user(isl::ast_expr expr); - inline isl::ast_node_list block_get_children() const; - inline isl::ast_node for_get_body() const; - inline isl::ast_expr for_get_cond() const; - inline isl::ast_expr for_get_inc() const; - inline isl::ast_expr for_get_init() const; - inline isl::ast_expr for_get_iterator() const; - inline boolean for_is_degenerate() const; - inline isl::id get_annotation() const; - inline isl::ast_expr if_get_cond() const; - inline isl::ast_node if_get_else() const; - inline isl::ast_node if_get_else_node() const; - inline isl::ast_node if_get_then() const; - inline isl::ast_node if_get_then_node() const; - inline boolean if_has_else() const; - inline boolean if_has_else_node() const; - inline isl::id mark_get_id() const; - inline isl::ast_node mark_get_node() const; - inline isl::ast_node set_annotation(isl::id annotation) const; - inline std::string to_C_str() const; - inline isl::ast_expr user_get_expr() const; -}; -// declarations for isl::ast_node_list -inline ast_node_list manage(__isl_take isl_ast_node_list *ptr); -inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr); + inline isl::val val() const; + inline isl::val get_val() const; +}; -class ast_node_list { - friend inline ast_node_list manage(__isl_take isl_ast_node_list *ptr); - friend inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr); +// declarations for isl::ast_expr_op - isl_ast_node_list *ptr = nullptr; +class ast_expr_op : public ast_expr { + template + friend bool ast_expr::isa() const; + friend ast_expr_op ast_expr::as() const; + static const auto type = isl_ast_expr_op; - inline explicit ast_node_list(__isl_take isl_ast_node_list *ptr); +protected: + inline explicit ast_expr_op(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ ast_node_list(); - inline /* implicit */ ast_node_list(const ast_node_list &obj); - inline ast_node_list &operator=(ast_node_list obj); - inline ~ast_node_list(); - inline __isl_give isl_ast_node_list *copy() const &; - inline __isl_give isl_ast_node_list *copy() && = delete; - inline __isl_keep isl_ast_node_list *get() const; - inline __isl_give isl_ast_node_list *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op(); + inline /* implicit */ ast_expr_op(const ast_expr_op &obj); + inline ast_expr_op &operator=(ast_expr_op obj); +private: + template ::value>::type> + inline bool isa_type(T subtype) const; +public: + template inline bool isa() const; + template inline T as() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::ast_node_list add(isl::ast_node el) const; - static inline isl::ast_node_list alloc(isl::ctx ctx, int n); - 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 stat foreach(const std::function &fn) const; - static inline isl::ast_node_list from_ast_node(isl::ast_node el); - inline isl::ast_node get_ast_node(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 isl_size n_ast_node() const; - inline isl::ast_node_list reverse() const; - inline isl::ast_node_list set_ast_node(int index, isl::ast_node el) const; - inline isl_size size() const; - inline isl::ast_node_list swap(unsigned int pos1, unsigned int pos2) const; + inline isl::ast_expr arg(int pos) const; + inline isl::ast_expr get_arg(int pos) const; + inline isl_size n_arg() const; + inline isl_size get_n_arg() const; }; -// declarations for isl::basic_map -inline basic_map manage(__isl_take isl_basic_map *ptr); -inline basic_map manage_copy(__isl_keep isl_basic_map *ptr); - -class basic_map { - friend inline basic_map manage(__isl_take isl_basic_map *ptr); - friend inline basic_map manage_copy(__isl_keep isl_basic_map *ptr); +// declarations for isl::ast_expr_op_access - isl_basic_map *ptr = nullptr; +class ast_expr_op_access : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_access ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_access; - inline explicit basic_map(__isl_take isl_basic_map *ptr); +protected: + inline explicit ast_expr_op_access(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ basic_map(); - inline /* implicit */ basic_map(const basic_map &obj); - inline explicit basic_map(isl::ctx ctx, const std::string &str); - inline basic_map &operator=(basic_map obj); - inline ~basic_map(); - inline __isl_give isl_basic_map *copy() const &; - inline __isl_give isl_basic_map *copy() && = delete; - inline __isl_keep isl_basic_map *get() const; - inline __isl_give isl_basic_map *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_access(); + inline /* implicit */ ast_expr_op_access(const ast_expr_op_access &obj); + inline ast_expr_op_access &operator=(ast_expr_op_access obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::basic_map add_constraint(isl::constraint constraint) const; - inline isl::basic_map add_dims(isl::dim type, unsigned int n) const; - inline isl::basic_map affine_hull() const; - inline isl::basic_map align_params(isl::space model) const; - inline isl::basic_map apply_domain(isl::basic_map bmap2) const; - inline isl::basic_map apply_range(isl::basic_map bmap2) const; - inline boolean can_curry() const; - inline boolean can_uncurry() const; - inline boolean can_zip() const; - inline isl::basic_map curry() const; - inline isl::basic_set deltas() const; - inline isl::basic_map deltas_map() const; - inline isl::basic_map detect_equalities() const; - inline isl_size dim(isl::dim type) const; - inline isl::basic_set domain() const; - inline isl::basic_map domain_map() const; - inline isl::basic_map domain_product(isl::basic_map bmap2) const; - inline isl::basic_map drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::basic_map drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::basic_map drop_unused_params() const; - inline isl::basic_map eliminate(isl::dim type, unsigned int first, unsigned int n) const; - static inline isl::basic_map empty(isl::space space); - static inline isl::basic_map equal(isl::space space, unsigned int n_equal); - inline isl::mat equalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4, isl::dim c5) const; - inline isl::basic_map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::basic_map fix_si(isl::dim type, unsigned int pos, int value) const; - inline isl::basic_map fix_val(isl::dim type, unsigned int pos, isl::val v) const; - inline isl::basic_map flat_product(isl::basic_map bmap2) const; - inline isl::basic_map flat_range_product(isl::basic_map bmap2) const; - inline isl::basic_map flatten() const; - inline isl::basic_map flatten_domain() const; - inline isl::basic_map flatten_range() const; - inline stat foreach_constraint(const std::function &fn) const; - static inline isl::basic_map from_aff(isl::aff aff); - static inline isl::basic_map from_aff_list(isl::space domain_space, isl::aff_list list); - static inline isl::basic_map from_constraint(isl::constraint constraint); - static inline isl::basic_map from_domain(isl::basic_set bset); - static inline isl::basic_map from_domain_and_range(isl::basic_set domain, isl::basic_set range); - static inline isl::basic_map from_multi_aff(isl::multi_aff maff); - static inline isl::basic_map from_qpolynomial(isl::qpolynomial qp); - static inline isl::basic_map from_range(isl::basic_set bset); - inline isl::constraint_list get_constraint_list() const; - inline std::string get_dim_name(isl::dim type, unsigned int pos) const; - inline isl::aff get_div(int pos) const; - inline isl::local_space get_local_space() const; - inline isl::space get_space() const; - inline std::string get_tuple_name(isl::dim type) const; - inline isl::basic_map gist(isl::basic_map context) const; - inline isl::basic_map gist_domain(isl::basic_set context) const; - inline boolean has_dim_id(isl::dim type, unsigned int pos) const; - static inline isl::basic_map identity(isl::space space); - inline boolean image_is_bounded() const; - inline isl::mat inequalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4, isl::dim c5) const; - inline isl::basic_map insert_dims(isl::dim type, unsigned int pos, unsigned int n) const; - inline isl::basic_map intersect(isl::basic_map bmap2) const; - inline isl::basic_map intersect_domain(isl::basic_set bset) const; - inline isl::basic_map intersect_range(isl::basic_set bset) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean is_disjoint(const isl::basic_map &bmap2) const; - inline boolean is_empty() const; - inline boolean is_equal(const isl::basic_map &bmap2) const; - inline boolean is_rational() const; - inline boolean is_single_valued() const; - inline boolean is_strict_subset(const isl::basic_map &bmap2) const; - inline boolean is_subset(const isl::basic_map &bmap2) const; - inline boolean is_universe() const; - static inline isl::basic_map less_at(isl::space space, unsigned int pos); - inline isl::map lexmax() const; - inline isl::map lexmin() const; - inline isl::pw_multi_aff lexmin_pw_multi_aff() const; - inline isl::basic_map lower_bound_si(isl::dim type, unsigned int pos, int value) const; - static inline isl::basic_map more_at(isl::space space, unsigned int pos); - inline isl::basic_map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; - inline isl_size n_constraint() const; - static inline isl::basic_map nat_universe(isl::space space); - inline isl::basic_map neg() const; - inline isl::basic_map order_ge(isl::dim type1, int pos1, isl::dim type2, int pos2) const; - inline isl::basic_map order_gt(isl::dim type1, int pos1, isl::dim type2, int pos2) const; - inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const; - inline boolean plain_is_empty() const; - inline boolean plain_is_universe() const; - inline isl::basic_map preimage_domain_multi_aff(isl::multi_aff ma) const; - inline isl::basic_map preimage_range_multi_aff(isl::multi_aff ma) const; - inline isl::basic_map product(isl::basic_map bmap2) const; - inline isl::basic_map project_out(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::basic_set range() const; - inline isl::basic_map range_map() const; - inline isl::basic_map range_product(isl::basic_map bmap2) const; - inline isl::basic_map remove_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::basic_map remove_divs() const; - inline isl::basic_map remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::basic_map remove_redundancies() const; - inline isl::basic_map reverse() const; - inline isl::basic_map sample() const; - inline isl::basic_map set_tuple_id(isl::dim type, isl::id id) const; - inline isl::basic_map set_tuple_name(isl::dim type, const std::string &s) const; - inline isl::basic_map sum(isl::basic_map bmap2) const; - inline isl::basic_map uncurry() const; - inline isl::map unite(isl::basic_map bmap2) const; - static inline isl::basic_map universe(isl::space space); - inline isl::basic_map upper_bound_si(isl::dim type, unsigned int pos, int value) const; - inline isl::basic_set wrap() const; - inline isl::basic_map zip() const; }; -// declarations for isl::basic_map_list -inline basic_map_list manage(__isl_take isl_basic_map_list *ptr); -inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr); - -class basic_map_list { - friend inline basic_map_list manage(__isl_take isl_basic_map_list *ptr); - friend inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr); +// declarations for isl::ast_expr_op_add - isl_basic_map_list *ptr = nullptr; +class ast_expr_op_add : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_add ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_add; - inline explicit basic_map_list(__isl_take isl_basic_map_list *ptr); +protected: + inline explicit ast_expr_op_add(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ basic_map_list(); - inline /* implicit */ basic_map_list(const basic_map_list &obj); - inline basic_map_list &operator=(basic_map_list obj); - inline ~basic_map_list(); - inline __isl_give isl_basic_map_list *copy() const &; - inline __isl_give isl_basic_map_list *copy() && = delete; - inline __isl_keep isl_basic_map_list *get() const; - inline __isl_give isl_basic_map_list *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_add(); + inline /* implicit */ ast_expr_op_add(const ast_expr_op_add &obj); + inline ast_expr_op_add &operator=(ast_expr_op_add obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::basic_map_list add(isl::basic_map el) const; - static inline isl::basic_map_list alloc(isl::ctx ctx, int n); - inline isl::basic_map_list clear() const; - inline isl::basic_map_list concat(isl::basic_map_list list2) const; - inline isl::basic_map_list drop(unsigned int first, unsigned int n) const; - inline stat foreach(const std::function &fn) const; - static inline isl::basic_map_list from_basic_map(isl::basic_map el); - inline isl::basic_map get_at(int index) const; - inline isl::basic_map get_basic_map(int index) const; - inline isl::basic_map_list insert(unsigned int pos, isl::basic_map el) const; - inline isl_size n_basic_map() const; - inline isl::basic_map_list reverse() const; - inline isl::basic_map_list set_basic_map(int index, isl::basic_map el) const; - inline isl_size size() const; - inline isl::basic_map_list swap(unsigned int pos1, unsigned int pos2) const; }; -// declarations for isl::basic_set -inline basic_set manage(__isl_take isl_basic_set *ptr); -inline basic_set manage_copy(__isl_keep isl_basic_set *ptr); - -class basic_set { - friend inline basic_set manage(__isl_take isl_basic_set *ptr); - friend inline basic_set manage_copy(__isl_keep isl_basic_set *ptr); +// declarations for isl::ast_expr_op_address_of - isl_basic_set *ptr = nullptr; +class ast_expr_op_address_of : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_address_of ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_address_of; - inline explicit basic_set(__isl_take isl_basic_set *ptr); +protected: + inline explicit ast_expr_op_address_of(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ basic_set(); - inline /* implicit */ basic_set(const basic_set &obj); - inline /* implicit */ basic_set(isl::point pnt); - inline explicit basic_set(isl::ctx ctx, const std::string &str); - inline basic_set &operator=(basic_set obj); - inline ~basic_set(); - inline __isl_give isl_basic_set *copy() const &; - inline __isl_give isl_basic_set *copy() && = delete; - inline __isl_keep isl_basic_set *get() const; - inline __isl_give isl_basic_set *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_address_of(); + inline /* implicit */ ast_expr_op_address_of(const ast_expr_op_address_of &obj); + inline ast_expr_op_address_of &operator=(ast_expr_op_address_of obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::basic_set affine_hull() const; - inline isl::basic_set align_params(isl::space model) const; - inline isl::basic_set apply(isl::basic_map bmap) const; - static inline isl::basic_set box_from_points(isl::point pnt1, isl::point pnt2); - inline isl::basic_set coefficients() const; - inline isl::basic_set detect_equalities() const; - inline isl_size dim(isl::dim type) const; - inline isl::val dim_max_val(int pos) const; - inline isl::basic_set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::basic_set drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::basic_set drop_unused_params() const; - inline isl::basic_set eliminate(isl::dim type, unsigned int first, unsigned int n) const; - static inline isl::basic_set empty(isl::space space); - inline isl::mat equalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4) const; - inline isl::basic_set fix_si(isl::dim type, unsigned int pos, int value) const; - inline isl::basic_set fix_val(isl::dim type, unsigned int pos, isl::val v) const; - inline isl::basic_set flat_product(isl::basic_set bset2) const; - inline isl::basic_set flatten() const; - inline stat foreach_bound_pair(isl::dim type, unsigned int pos, const std::function &fn) const; - inline stat foreach_constraint(const std::function &fn) const; - static inline isl::basic_set from_constraint(isl::constraint constraint); - static inline isl::basic_set from_multi_aff(isl::multi_aff ma); - inline isl::basic_set from_params() const; - inline isl::constraint_list get_constraint_list() const; - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline std::string get_dim_name(isl::dim type, unsigned int pos) const; - inline isl::aff get_div(int pos) const; - inline isl::local_space get_local_space() const; - inline isl::space get_space() const; - inline std::string get_tuple_name() const; - inline isl::basic_set gist(isl::basic_set context) const; - inline isl::mat inequalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4) const; - inline isl::basic_set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const; - inline isl::basic_set intersect(isl::basic_set bset2) const; - inline isl::basic_set intersect_params(isl::basic_set bset2) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean is_bounded() const; - inline boolean is_disjoint(const isl::basic_set &bset2) const; - inline boolean is_empty() const; - inline boolean is_equal(const isl::basic_set &bset2) const; - inline int is_rational() const; - inline boolean is_subset(const isl::basic_set &bset2) const; - inline boolean is_universe() const; - inline boolean is_wrapping() const; - inline isl::set lexmax() const; - inline isl::set lexmin() const; - inline isl::basic_set lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const; - inline isl::val max_val(const isl::aff &obj) const; - inline isl::basic_set move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; - inline isl_size n_constraint() const; - inline isl_size n_dim() const; - static inline isl::basic_set nat_universe(isl::space space); - inline isl::basic_set neg() const; - inline isl::basic_set params() const; - inline boolean plain_is_empty() const; - inline boolean plain_is_equal(const isl::basic_set &bset2) const; - inline boolean plain_is_universe() const; - static inline isl::basic_set positive_orthant(isl::space space); - inline isl::basic_set preimage_multi_aff(isl::multi_aff ma) const; - inline isl::basic_set project_out(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::mat reduced_basis() const; - inline isl::basic_set remove_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::basic_set remove_divs() const; - inline isl::basic_set remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::basic_set remove_redundancies() const; - inline isl::basic_set remove_unknown_divs() const; - inline isl::basic_set sample() const; - inline isl::point sample_point() const; - inline isl::basic_set set_tuple_id(isl::id id) const; - inline isl::basic_set set_tuple_name(const std::string &s) const; - inline isl::basic_set solutions() const; - inline isl::set unite(isl::basic_set bset2) const; - static inline isl::basic_set universe(isl::space space); - inline isl::basic_map unwrap() const; - inline isl::basic_set upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const; }; -// declarations for isl::basic_set_list -inline basic_set_list manage(__isl_take isl_basic_set_list *ptr); -inline basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr); - -class basic_set_list { - friend inline basic_set_list manage(__isl_take isl_basic_set_list *ptr); - friend inline basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr); +// declarations for isl::ast_expr_op_and - isl_basic_set_list *ptr = nullptr; +class ast_expr_op_and : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_and ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_and; - inline explicit basic_set_list(__isl_take isl_basic_set_list *ptr); +protected: + inline explicit ast_expr_op_and(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ basic_set_list(); - inline /* implicit */ basic_set_list(const basic_set_list &obj); - inline basic_set_list &operator=(basic_set_list obj); - inline ~basic_set_list(); - inline __isl_give isl_basic_set_list *copy() const &; - inline __isl_give isl_basic_set_list *copy() && = delete; - inline __isl_keep isl_basic_set_list *get() const; - inline __isl_give isl_basic_set_list *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_and(); + inline /* implicit */ ast_expr_op_and(const ast_expr_op_and &obj); + inline ast_expr_op_and &operator=(ast_expr_op_and obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::basic_set_list add(isl::basic_set el) const; - static inline isl::basic_set_list alloc(isl::ctx ctx, int n); - inline isl::basic_set_list clear() const; - inline isl::basic_set_list coefficients() const; - inline isl::basic_set_list concat(isl::basic_set_list list2) const; - inline isl::basic_set_list drop(unsigned int first, unsigned int n) const; - inline stat foreach(const std::function &fn) const; - static inline isl::basic_set_list from_basic_set(isl::basic_set el); - inline isl::basic_set get_at(int index) const; - inline isl::basic_set get_basic_set(int index) const; - inline isl::basic_set_list insert(unsigned int pos, isl::basic_set el) const; - inline isl_size n_basic_set() const; - inline isl::basic_set_list reverse() const; - inline isl::basic_set_list set_basic_set(int index, isl::basic_set el) const; - inline isl_size size() const; - inline isl::basic_set_list swap(unsigned int pos1, unsigned int pos2) const; }; -// declarations for isl::constraint -inline constraint manage(__isl_take isl_constraint *ptr); -inline constraint manage_copy(__isl_keep isl_constraint *ptr); - -class constraint { - friend inline constraint manage(__isl_take isl_constraint *ptr); - friend inline constraint manage_copy(__isl_keep isl_constraint *ptr); +// declarations for isl::ast_expr_op_and_then - isl_constraint *ptr = nullptr; +class ast_expr_op_and_then : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_and_then ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_and_then; - inline explicit constraint(__isl_take isl_constraint *ptr); +protected: + inline explicit ast_expr_op_and_then(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ constraint(); - inline /* implicit */ constraint(const constraint &obj); - inline constraint &operator=(constraint obj); - inline ~constraint(); - inline __isl_give isl_constraint *copy() const &; - inline __isl_give isl_constraint *copy() && = delete; - inline __isl_keep isl_constraint *get() const; - inline __isl_give isl_constraint *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_and_then(); + inline /* implicit */ ast_expr_op_and_then(const ast_expr_op_and_then &obj); + inline ast_expr_op_and_then &operator=(ast_expr_op_and_then obj); inline isl::ctx ctx() const; - inline void dump() const; - static inline isl::constraint alloc_equality(isl::local_space ls); - static inline isl::constraint alloc_inequality(isl::local_space ls); - inline int cmp_last_non_zero(const isl::constraint &c2) const; - inline isl::aff get_aff() const; - inline isl::aff get_bound(isl::dim type, int pos) const; - inline isl::val get_coefficient_val(isl::dim type, int pos) const; - inline isl::val get_constant_val() const; - inline std::string get_dim_name(isl::dim type, unsigned int pos) const; - inline isl::aff get_div(int pos) const; - inline isl::local_space get_local_space() const; - inline isl::space get_space() const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean is_div_constraint() const; - inline boolean is_lower_bound(isl::dim type, unsigned int pos) const; - inline boolean is_upper_bound(isl::dim type, unsigned int pos) const; - inline int plain_cmp(const isl::constraint &c2) const; - inline isl::constraint set_coefficient_si(isl::dim type, int pos, int v) const; - inline isl::constraint set_coefficient_val(isl::dim type, int pos, isl::val v) const; - inline isl::constraint set_constant_si(int v) const; - inline isl::constraint set_constant_val(isl::val v) const; }; -// declarations for isl::constraint_list -inline constraint_list manage(__isl_take isl_constraint_list *ptr); -inline constraint_list manage_copy(__isl_keep isl_constraint_list *ptr); - -class constraint_list { - friend inline constraint_list manage(__isl_take isl_constraint_list *ptr); - friend inline constraint_list manage_copy(__isl_keep isl_constraint_list *ptr); +// declarations for isl::ast_expr_op_call - isl_constraint_list *ptr = nullptr; +class ast_expr_op_call : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_call ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_call; - inline explicit constraint_list(__isl_take isl_constraint_list *ptr); +protected: + inline explicit ast_expr_op_call(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ constraint_list(); - inline /* implicit */ constraint_list(const constraint_list &obj); - inline constraint_list &operator=(constraint_list obj); - inline ~constraint_list(); - inline __isl_give isl_constraint_list *copy() const &; - inline __isl_give isl_constraint_list *copy() && = delete; - inline __isl_keep isl_constraint_list *get() const; - inline __isl_give isl_constraint_list *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_call(); + inline /* implicit */ ast_expr_op_call(const ast_expr_op_call &obj); + inline ast_expr_op_call &operator=(ast_expr_op_call obj); inline isl::ctx ctx() const; - inline void dump() const; - - inline isl::constraint_list add(isl::constraint el) const; - static inline isl::constraint_list alloc(isl::ctx ctx, int n); - inline isl::constraint_list clear() const; - inline isl::constraint_list concat(isl::constraint_list list2) const; - inline isl::constraint_list drop(unsigned int first, unsigned int n) const; - inline stat foreach(const std::function &fn) const; - static inline isl::constraint_list from_constraint(isl::constraint el); - inline isl::constraint get_at(int index) const; - inline isl::constraint get_constraint(int index) const; - inline isl::constraint_list insert(unsigned int pos, isl::constraint el) const; - inline isl_size n_constraint() const; - inline isl::constraint_list reverse() const; - inline isl::constraint_list set_constraint(int index, isl::constraint el) const; - inline isl_size size() const; - inline isl::constraint_list swap(unsigned int pos1, unsigned int pos2) const; -}; -// declarations for isl::fixed_box -inline fixed_box manage(__isl_take isl_fixed_box *ptr); -inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr); +}; -class fixed_box { - friend inline fixed_box manage(__isl_take isl_fixed_box *ptr); - friend inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr); +// declarations for isl::ast_expr_op_cond - isl_fixed_box *ptr = nullptr; +class ast_expr_op_cond : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_cond ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_cond; - inline explicit fixed_box(__isl_take isl_fixed_box *ptr); +protected: + inline explicit ast_expr_op_cond(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ fixed_box(); - inline /* implicit */ fixed_box(const fixed_box &obj); - inline fixed_box &operator=(fixed_box obj); - inline ~fixed_box(); - inline __isl_give isl_fixed_box *copy() const &; - inline __isl_give isl_fixed_box *copy() && = delete; - inline __isl_keep isl_fixed_box *get() const; - inline __isl_give isl_fixed_box *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_cond(); + inline /* implicit */ ast_expr_op_cond(const ast_expr_op_cond &obj); + inline ast_expr_op_cond &operator=(ast_expr_op_cond obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::multi_aff get_offset() const; - inline isl::multi_val get_size() const; - inline isl::space get_space() const; - inline boolean is_valid() const; }; -// declarations for isl::id -inline id manage(__isl_take isl_id *ptr); -inline id manage_copy(__isl_keep isl_id *ptr); - -class id { - friend inline id manage(__isl_take isl_id *ptr); - friend inline id manage_copy(__isl_keep isl_id *ptr); +// declarations for isl::ast_expr_op_div - isl_id *ptr = nullptr; +class ast_expr_op_div : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_div ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_div; - inline explicit id(__isl_take isl_id *ptr); +protected: + inline explicit ast_expr_op_div(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ id(); - inline /* implicit */ id(const id &obj); - inline explicit id(isl::ctx ctx, const std::string &str); - inline id &operator=(id obj); - inline ~id(); - inline __isl_give isl_id *copy() const &; - inline __isl_give isl_id *copy() && = delete; - inline __isl_keep isl_id *get() const; - inline __isl_give isl_id *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_div(); + inline /* implicit */ ast_expr_op_div(const ast_expr_op_div &obj); + inline ast_expr_op_div &operator=(ast_expr_op_div obj); inline isl::ctx ctx() const; - inline void dump() const; - static inline isl::id alloc(isl::ctx ctx, const std::string &name, void * user); - inline uint32_t get_hash() const; - inline std::string get_name() const; - inline void * get_user() const; }; -// declarations for isl::id_list -inline id_list manage(__isl_take isl_id_list *ptr); -inline id_list manage_copy(__isl_keep isl_id_list *ptr); - -class id_list { - friend inline id_list manage(__isl_take isl_id_list *ptr); - friend inline id_list manage_copy(__isl_keep isl_id_list *ptr); +// declarations for isl::ast_expr_op_eq - isl_id_list *ptr = nullptr; +class ast_expr_op_eq : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_eq ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_eq; - inline explicit id_list(__isl_take isl_id_list *ptr); +protected: + inline explicit ast_expr_op_eq(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ id_list(); - inline /* implicit */ id_list(const id_list &obj); - inline id_list &operator=(id_list obj); - inline ~id_list(); - inline __isl_give isl_id_list *copy() const &; - inline __isl_give isl_id_list *copy() && = delete; - inline __isl_keep isl_id_list *get() const; - inline __isl_give isl_id_list *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_eq(); + inline /* implicit */ ast_expr_op_eq(const ast_expr_op_eq &obj); + inline ast_expr_op_eq &operator=(ast_expr_op_eq obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::id_list add(isl::id el) const; - static inline isl::id_list alloc(isl::ctx ctx, int n); - 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 stat foreach(const std::function &fn) const; - static inline isl::id_list from_id(isl::id el); - inline isl::id get_at(int index) const; - inline isl::id get_id(int index) const; - inline isl::id_list insert(unsigned int pos, isl::id el) const; - inline isl_size n_id() const; - inline isl::id_list reverse() const; - inline isl::id_list set_id(int index, isl::id el) const; - inline isl_size size() const; - inline isl::id_list swap(unsigned int pos1, unsigned int pos2) const; }; -// declarations for isl::id_to_ast_expr -inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr); -inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr); - -class id_to_ast_expr { - friend inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr); - friend inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr); +// declarations for isl::ast_expr_op_fdiv_q - isl_id_to_ast_expr *ptr = nullptr; +class ast_expr_op_fdiv_q : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_fdiv_q ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_fdiv_q; - inline explicit id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr); +protected: + inline explicit ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ id_to_ast_expr(); - inline /* implicit */ id_to_ast_expr(const id_to_ast_expr &obj); - inline id_to_ast_expr &operator=(id_to_ast_expr obj); - inline ~id_to_ast_expr(); - inline __isl_give isl_id_to_ast_expr *copy() const &; - inline __isl_give isl_id_to_ast_expr *copy() && = delete; - inline __isl_keep isl_id_to_ast_expr *get() const; - inline __isl_give isl_id_to_ast_expr *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_fdiv_q(); + inline /* implicit */ ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj); + inline ast_expr_op_fdiv_q &operator=(ast_expr_op_fdiv_q obj); inline isl::ctx ctx() const; - inline void dump() const; - static inline isl::id_to_ast_expr alloc(isl::ctx ctx, int min_size); - inline isl::id_to_ast_expr drop(isl::id key) const; - inline stat foreach(const std::function &fn) const; - inline isl::ast_expr get(isl::id key) const; - inline boolean has(const isl::id &key) const; - inline isl::id_to_ast_expr set(isl::id key, isl::ast_expr val) const; }; -// declarations for isl::local_space -inline local_space manage(__isl_take isl_local_space *ptr); -inline local_space manage_copy(__isl_keep isl_local_space *ptr); +// declarations for isl::ast_expr_op_ge -class local_space { - friend inline local_space manage(__isl_take isl_local_space *ptr); - friend inline local_space manage_copy(__isl_keep isl_local_space *ptr); +class ast_expr_op_ge : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_ge ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_ge; - isl_local_space *ptr = nullptr; +protected: + inline explicit ast_expr_op_ge(__isl_take isl_ast_expr *ptr); - inline explicit local_space(__isl_take isl_local_space *ptr); +public: + inline /* implicit */ ast_expr_op_ge(); + inline /* implicit */ ast_expr_op_ge(const ast_expr_op_ge &obj); + inline ast_expr_op_ge &operator=(ast_expr_op_ge obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_gt + +class ast_expr_op_gt : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_gt ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_gt; + +protected: + inline explicit ast_expr_op_gt(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ local_space(); - inline /* implicit */ local_space(const local_space &obj); - inline explicit local_space(isl::space space); - inline local_space &operator=(local_space obj); - inline ~local_space(); - inline __isl_give isl_local_space *copy() const &; - inline __isl_give isl_local_space *copy() && = delete; - inline __isl_keep isl_local_space *get() const; - inline __isl_give isl_local_space *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_gt(); + inline /* implicit */ ast_expr_op_gt(const ast_expr_op_gt &obj); + inline ast_expr_op_gt &operator=(ast_expr_op_gt obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::local_space add_dims(isl::dim type, unsigned int n) const; - inline isl_size dim(isl::dim type) const; - inline isl::local_space domain() const; - inline isl::local_space drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::local_space flatten_domain() const; - inline isl::local_space flatten_range() const; - inline isl::local_space from_domain() const; - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline std::string get_dim_name(isl::dim type, unsigned int pos) const; - inline isl::aff get_div(int pos) const; - inline isl::space get_space() const; - inline boolean has_dim_id(isl::dim type, unsigned int pos) const; - inline boolean has_dim_name(isl::dim type, unsigned int pos) const; - inline isl::local_space insert_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::local_space intersect(isl::local_space ls2) const; - inline boolean is_equal(const isl::local_space &ls2) const; - inline boolean is_params() const; - inline boolean is_set() const; - inline isl::local_space range() const; - inline isl::local_space set_dim_id(isl::dim type, unsigned int pos, isl::id id) const; - inline isl::local_space set_from_params() const; - inline isl::local_space set_tuple_id(isl::dim type, isl::id id) const; - inline isl::local_space wrap() const; }; -// declarations for isl::map -inline map manage(__isl_take isl_map *ptr); -inline map manage_copy(__isl_keep isl_map *ptr); +// declarations for isl::ast_expr_op_le -class map { - friend inline map manage(__isl_take isl_map *ptr); - friend inline map manage_copy(__isl_keep isl_map *ptr); +class ast_expr_op_le : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_le ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_le; - isl_map *ptr = nullptr; +protected: + inline explicit ast_expr_op_le(__isl_take isl_ast_expr *ptr); - inline explicit map(__isl_take isl_map *ptr); +public: + inline /* implicit */ ast_expr_op_le(); + inline /* implicit */ ast_expr_op_le(const ast_expr_op_le &obj); + inline ast_expr_op_le &operator=(ast_expr_op_le obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_lt + +class ast_expr_op_lt : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_lt ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_lt; + +protected: + inline explicit ast_expr_op_lt(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ map(); - inline /* implicit */ map(const map &obj); - inline /* implicit */ map(isl::basic_map bmap); - inline explicit map(isl::ctx ctx, const std::string &str); - inline map &operator=(map obj); - inline ~map(); - inline __isl_give isl_map *copy() const &; - inline __isl_give isl_map *copy() && = delete; - inline __isl_keep isl_map *get() const; - inline __isl_give isl_map *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_lt(); + inline /* implicit */ ast_expr_op_lt(const ast_expr_op_lt &obj); + inline ast_expr_op_lt &operator=(ast_expr_op_lt obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::map add_constraint(isl::constraint constraint) const; - inline isl::map add_dims(isl::dim type, unsigned int n) const; - inline isl::basic_map affine_hull() const; - inline isl::map align_params(isl::space model) const; - inline isl::map apply_domain(isl::map map2) const; - inline isl::map apply_range(isl::map map2) const; - inline isl::set bind_domain(isl::multi_id tuple) const; - inline isl::set bind_range(isl::multi_id tuple) const; - inline boolean can_curry() const; - inline boolean can_range_curry() const; - inline boolean can_uncurry() const; - inline boolean can_zip() const; - inline isl::map coalesce() const; - inline isl::map complement() const; - inline isl::basic_map convex_hull() const; - inline isl::map curry() const; - inline isl::set deltas() const; - inline isl::map deltas_map() const; - inline isl::map detect_equalities() const; - inline isl_size dim(isl::dim type) const; - inline isl::pw_aff dim_max(int pos) const; - inline isl::pw_aff dim_min(int pos) const; - inline isl::set domain() const; - inline isl::map domain_factor_domain() const; - inline isl::map domain_factor_range() const; - inline boolean domain_is_wrapping() const; - inline isl::map domain_map() const; - inline isl::map domain_product(isl::map map2) const; - inline isl_size domain_tuple_dim() const; - inline isl::map drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::map drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::map drop_unused_params() const; - inline isl::map eliminate(isl::dim type, unsigned int first, unsigned int n) const; - static inline isl::map empty(isl::space space); - inline isl::map eq_at(isl::multi_pw_aff mpa) const; - inline isl::map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const; - inline isl::map factor_domain() const; - inline isl::map factor_range() const; - inline int find_dim_by_id(isl::dim type, const isl::id &id) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::map fix_si(isl::dim type, unsigned int pos, int value) const; - inline isl::map fix_val(isl::dim type, unsigned int pos, isl::val v) const; - inline isl::map fixed_power_val(isl::val exp) const; - inline isl::map flat_domain_product(isl::map map2) const; - inline isl::map flat_product(isl::map map2) const; - inline isl::map flat_range_product(isl::map map2) const; - inline isl::map flatten() const; - inline isl::map flatten_domain() const; - inline isl::map flatten_range() const; - inline isl::map floordiv_val(isl::val d) const; - inline stat foreach_basic_map(const std::function &fn) const; - static inline isl::map from_aff(isl::aff aff); - static inline isl::map from_domain(isl::set set); - static inline isl::map from_domain_and_range(isl::set domain, isl::set range); - static inline isl::map from_multi_aff(isl::multi_aff maff); - static inline isl::map from_multi_pw_aff(isl::multi_pw_aff mpa); - static inline isl::map from_pw_aff(isl::pw_aff pwaff); - static inline isl::map from_pw_multi_aff(isl::pw_multi_aff pma); - static inline isl::map from_range(isl::set set); - static inline isl::map from_union_map(isl::union_map umap); - inline isl::basic_map_list get_basic_map_list() const; - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline std::string get_dim_name(isl::dim type, unsigned int pos) const; - inline uint32_t get_hash() const; - inline isl::fixed_box get_range_simple_fixed_box_hull() const; - inline isl::space get_space() const; - inline isl::id get_tuple_id(isl::dim type) const; - inline std::string get_tuple_name(isl::dim type) const; - inline isl::map gist(isl::map context) const; - inline isl::map gist_basic_map(isl::basic_map context) const; - inline isl::map gist_domain(isl::set context) const; - inline isl::map gist_params(isl::set context) const; - inline isl::map gist_range(isl::set context) const; - inline boolean has_dim_id(isl::dim type, unsigned int pos) const; - inline boolean has_dim_name(isl::dim type, unsigned int pos) const; - inline boolean has_equal_space(const isl::map &map2) const; - inline boolean has_tuple_id(isl::dim type) const; - inline boolean has_tuple_name(isl::dim type) const; - static inline isl::map identity(isl::space space); - inline isl::map insert_dims(isl::dim type, unsigned int pos, unsigned int n) const; - inline isl::map intersect(isl::map map2) const; - inline isl::map intersect_domain(isl::set set) const; - inline isl::map intersect_domain_factor_domain(isl::map factor) const; - inline isl::map intersect_domain_factor_range(isl::map factor) const; - inline isl::map intersect_params(isl::set params) const; - inline isl::map intersect_range(isl::set set) const; - inline isl::map intersect_range_factor_domain(isl::map factor) const; - inline isl::map intersect_range_factor_range(isl::map factor) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean is_bijective() const; - inline boolean is_disjoint(const isl::map &map2) const; - inline boolean is_empty() const; - inline boolean is_equal(const isl::map &map2) const; - inline boolean is_identity() const; - inline boolean is_injective() const; - inline boolean is_product() const; - inline boolean is_single_valued() const; - inline boolean is_strict_subset(const isl::map &map2) const; - inline boolean is_subset(const isl::map &map2) const; - inline int is_translation() const; - static inline isl::map lex_ge(isl::space set_space); - inline isl::map lex_ge_at(isl::multi_pw_aff mpa) const; - static inline isl::map lex_ge_first(isl::space space, unsigned int n); - inline isl::map lex_ge_map(isl::map map2) const; - static inline isl::map lex_gt(isl::space set_space); - inline isl::map lex_gt_at(isl::multi_pw_aff mpa) const; - static inline isl::map lex_gt_first(isl::space space, unsigned int n); - inline isl::map lex_gt_map(isl::map map2) const; - static inline isl::map lex_le(isl::space set_space); - inline isl::map lex_le_at(isl::multi_pw_aff mpa) const; - static inline isl::map lex_le_first(isl::space space, unsigned int n); - inline isl::map lex_le_map(isl::map map2) const; - static inline isl::map lex_lt(isl::space set_space); - inline isl::map lex_lt_at(isl::multi_pw_aff mpa) const; - static inline isl::map lex_lt_first(isl::space space, unsigned int n); - inline isl::map lex_lt_map(isl::map map2) 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(isl::multi_pw_aff lower) const; - inline isl::map lower_bound_si(isl::dim type, unsigned int pos, int value) const; - inline isl::map lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const; - inline isl::multi_pw_aff max_multi_pw_aff() const; - inline isl::multi_pw_aff min_multi_pw_aff() const; - inline isl::map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; - inline isl_size n_basic_map() const; - static inline isl::map nat_universe(isl::space space); - inline isl::map neg() const; - inline isl::map oppose(isl::dim type1, int pos1, isl::dim type2, int pos2) const; - inline isl::map order_ge(isl::dim type1, int pos1, isl::dim type2, int pos2) const; - inline isl::map order_gt(isl::dim type1, int pos1, isl::dim type2, int pos2) const; - inline isl::map order_le(isl::dim type1, int pos1, isl::dim type2, int pos2) const; - inline isl::map order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const; - inline isl::set params() const; - inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const; - inline boolean plain_is_empty() const; - inline boolean plain_is_equal(const isl::map &map2) const; - inline boolean plain_is_injective() const; - inline boolean plain_is_single_valued() const; - inline boolean plain_is_universe() const; - inline isl::basic_map plain_unshifted_simple_hull() 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::map preimage_range(isl::multi_aff ma) const; - inline isl::map preimage_range(isl::pw_multi_aff pma) const; - inline isl::map product(isl::map map2) const; - inline isl::map project_out(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::map project_out_all_params() const; - inline isl::set range() const; - inline isl::map range_curry() const; - inline isl::map range_factor_domain() const; - inline isl::map range_factor_range() const; - inline boolean range_is_wrapping() const; - inline isl::map range_map() const; - inline isl::map range_product(isl::map map2) const; - inline isl::map range_reverse() const; - inline isl_size range_tuple_dim() const; - inline isl::map remove_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::map remove_divs() const; - inline isl::map remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::map remove_redundancies() const; - inline isl::map remove_unknown_divs() const; - inline isl::map reset_tuple_id(isl::dim type) const; - inline isl::map reset_user() const; - inline isl::map reverse() const; - inline isl::basic_map sample() const; - inline isl::map set_dim_id(isl::dim type, unsigned int pos, isl::id id) const; - inline isl::map set_tuple_id(isl::dim type, isl::id id) const; - inline isl::map set_tuple_name(isl::dim type, const std::string &s) const; - inline isl::basic_map simple_hull() const; - inline isl::map subtract(isl::map map2) const; - inline isl::map subtract_domain(isl::set dom) const; - inline isl::map subtract_range(isl::set dom) const; - inline isl::map sum(isl::map map2) const; - inline isl::map uncurry() const; - inline isl::map unite(isl::map map2) const; - static inline isl::map universe(isl::space space); - inline isl::basic_map unshifted_simple_hull() const; - inline isl::basic_map unshifted_simple_hull_from_map_list(isl::map_list list) const; - inline isl::map upper_bound(isl::multi_pw_aff upper) const; - inline isl::map upper_bound_si(isl::dim type, unsigned int pos, int value) const; - inline isl::map upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const; - inline isl::set wrap() 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); +// declarations for isl::ast_expr_op_max - isl_map_list *ptr = nullptr; +class ast_expr_op_max : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_max ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_max; - inline explicit map_list(__isl_take isl_map_list *ptr); +protected: + inline explicit ast_expr_op_max(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ map_list(); - inline /* implicit */ map_list(const map_list &obj); - 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 /* implicit */ ast_expr_op_max(); + inline /* implicit */ ast_expr_op_max(const ast_expr_op_max &obj); + inline ast_expr_op_max &operator=(ast_expr_op_max obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::map_list add(isl::map el) const; - static inline isl::map_list alloc(isl::ctx ctx, int n); - 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 stat foreach(const std::function &fn) const; - static inline isl::map_list from_map(isl::map el); - inline isl::map get_at(int index) const; - inline isl::map get_map(int index) const; - inline isl::map_list insert(unsigned int pos, isl::map el) const; - inline isl_size n_map() const; - inline isl::map_list reverse() const; - inline isl::map_list set_map(int index, isl::map el) const; - inline isl_size size() const; - inline isl::map_list swap(unsigned int pos1, unsigned int pos2) const; }; -// declarations for isl::mat -inline mat manage(__isl_take isl_mat *ptr); -inline mat manage_copy(__isl_keep isl_mat *ptr); +// declarations for isl::ast_expr_op_member + +class ast_expr_op_member : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_member ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_member; + +protected: + inline explicit ast_expr_op_member(__isl_take isl_ast_expr *ptr); + +public: + inline /* implicit */ ast_expr_op_member(); + inline /* implicit */ ast_expr_op_member(const ast_expr_op_member &obj); + inline ast_expr_op_member &operator=(ast_expr_op_member obj); + inline isl::ctx ctx() const; + +}; -class mat { - friend inline mat manage(__isl_take isl_mat *ptr); - friend inline mat manage_copy(__isl_keep isl_mat *ptr); +// declarations for isl::ast_expr_op_min - isl_mat *ptr = nullptr; +class ast_expr_op_min : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_min ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_min; - inline explicit mat(__isl_take isl_mat *ptr); +protected: + inline explicit ast_expr_op_min(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ mat(); - inline /* implicit */ mat(const mat &obj); - inline mat &operator=(mat obj); - inline ~mat(); - inline __isl_give isl_mat *copy() const &; - inline __isl_give isl_mat *copy() && = delete; - inline __isl_keep isl_mat *get() const; - inline __isl_give isl_mat *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_min(); + inline /* implicit */ ast_expr_op_min(const ast_expr_op_min &obj); + inline ast_expr_op_min &operator=(ast_expr_op_min obj); inline isl::ctx ctx() const; - inline void dump() const; - - inline isl::mat add_rows(unsigned int n) const; - inline isl::mat add_zero_cols(unsigned int n) const; - inline isl::mat add_zero_rows(unsigned int n) const; - inline isl::mat aff_direct_sum(isl::mat right) const; - static inline isl::mat alloc(isl::ctx ctx, unsigned int n_row, unsigned int n_col); - inline isl_size cols() const; - inline isl::mat concat(isl::mat bot) const; - inline isl::mat diagonal(isl::mat mat2) const; - inline isl::mat drop_cols(unsigned int col, unsigned int n) const; - inline isl::mat drop_rows(unsigned int row, unsigned int n) const; - static inline isl::mat from_row_vec(isl::vec vec); - inline isl::val get_element_val(int row, int col) const; - inline boolean has_linearly_independent_rows(const isl::mat &mat2) const; - inline int initial_non_zero_cols() const; - inline isl::mat insert_cols(unsigned int col, unsigned int n) const; - inline isl::mat insert_rows(unsigned int row, unsigned int n) const; - inline isl::mat insert_zero_cols(unsigned int first, unsigned int n) const; - inline isl::mat insert_zero_rows(unsigned int row, unsigned int n) const; - inline isl::mat inverse_product(isl::mat right) const; - inline boolean is_equal(const isl::mat &mat2) const; - inline isl::mat lin_to_aff() const; - inline isl::mat move_cols(unsigned int dst_col, unsigned int src_col, unsigned int n) const; - inline isl::mat normalize() const; - inline isl::mat normalize_row(int row) const; - inline isl::mat product(isl::mat right) const; - inline isl_size rank() const; - inline isl::mat right_inverse() const; - inline isl::mat right_kernel() const; - inline isl::mat row_basis() const; - inline isl::mat row_basis_extension(isl::mat mat2) const; - inline isl_size rows() const; - inline isl::mat set_element_si(int row, int col, int v) const; - inline isl::mat set_element_val(int row, int col, isl::val v) const; - inline isl::mat swap_cols(unsigned int i, unsigned int j) const; - inline isl::mat swap_rows(unsigned int i, unsigned int j) const; - inline isl::mat transpose() const; - inline isl::mat unimodular_complete(int row) const; - inline isl::mat vec_concat(isl::vec bot) const; - inline isl::vec vec_inverse_product(isl::vec vec) const; - inline isl::vec vec_product(isl::vec vec) 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); +// declarations for isl::ast_expr_op_minus -class multi_aff { - friend inline multi_aff manage(__isl_take isl_multi_aff *ptr); - friend inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr); +class ast_expr_op_minus : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_minus ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_minus; - isl_multi_aff *ptr = nullptr; +protected: + inline explicit ast_expr_op_minus(__isl_take isl_ast_expr *ptr); - inline explicit multi_aff(__isl_take isl_multi_aff *ptr); +public: + inline /* implicit */ ast_expr_op_minus(); + inline /* implicit */ ast_expr_op_minus(const ast_expr_op_minus &obj); + inline ast_expr_op_minus &operator=(ast_expr_op_minus obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_mul + +class ast_expr_op_mul : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_mul ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_mul; + +protected: + inline explicit ast_expr_op_mul(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ multi_aff(); - inline /* implicit */ multi_aff(const multi_aff &obj); - inline /* implicit */ multi_aff(isl::aff aff); - inline explicit multi_aff(isl::space space, isl::aff_list list); - inline explicit multi_aff(isl::ctx ctx, const std::string &str); - inline multi_aff &operator=(multi_aff obj); - inline ~multi_aff(); - inline __isl_give isl_multi_aff *copy() const &; - inline __isl_give isl_multi_aff *copy() && = delete; - inline __isl_keep isl_multi_aff *get() const; - inline __isl_give isl_multi_aff *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_mul(); + inline /* implicit */ ast_expr_op_mul(const ast_expr_op_mul &obj); + inline ast_expr_op_mul &operator=(ast_expr_op_mul obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::multi_aff add(isl::multi_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_dims(isl::dim type, unsigned int n) const; - inline isl::multi_aff align_params(isl::space model) 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_size dim(isl::dim type) const; - static inline isl::multi_aff domain_map(isl::space space); - inline isl::multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::multi_aff factor_range() const; - inline int find_dim_by_id(isl::dim type, const isl::id &id) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::multi_aff flat_range_product(isl::multi_aff multi2) const; - inline isl::multi_aff flatten_domain() const; - inline isl::multi_aff flatten_range() const; - inline isl::multi_aff floor() const; - inline isl::multi_aff from_range() const; - inline isl::aff get_aff(int pos) const; - inline isl::aff get_at(int pos) const; - inline isl::multi_val get_constant_multi_val() const; - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline isl::space get_domain_space() const; - inline isl::aff_list get_list() const; - inline isl::space get_space() const; - inline isl::id get_tuple_id(isl::dim type) const; - inline std::string get_tuple_name(isl::dim type) const; - inline isl::multi_aff gist(isl::set context) const; - inline isl::multi_aff gist_params(isl::set context) const; - inline boolean has_tuple_id(isl::dim type) const; - static inline isl::multi_aff identity(isl::space space); - inline isl::multi_aff identity() const; - static inline isl::multi_aff identity_on_domain(isl::space space); - inline isl::multi_aff insert_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::multi_aff insert_domain(isl::space domain) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean involves_locals() const; - inline boolean involves_nan() const; - inline isl::set lex_ge_set(isl::multi_aff ma2) const; - inline isl::set lex_gt_set(isl::multi_aff ma2) const; - inline isl::set lex_le_set(isl::multi_aff ma2) const; - inline isl::set lex_lt_set(isl::multi_aff ma2) const; - inline isl::multi_aff mod_multi_val(isl::multi_val mv) const; - inline isl::multi_aff move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; - static inline isl::multi_aff multi_val_on_space(isl::space space, isl::multi_val mv); - inline isl::multi_aff neg() const; - inline int plain_cmp(const isl::multi_aff &multi2) const; - inline boolean plain_is_equal(const isl::multi_aff &multi2) const; - inline isl::multi_aff product(isl::multi_aff multi2) const; - inline isl::multi_aff project_domain_on_params() const; - static inline isl::multi_aff project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n); - inline isl::multi_aff pullback(isl::multi_aff ma2) const; - inline isl::multi_aff range_factor_domain() const; - inline isl::multi_aff range_factor_range() const; - inline boolean range_is_wrapping() 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_aff range_splice(unsigned int pos, isl::multi_aff multi2) const; - inline isl::multi_aff reset_tuple_id(isl::dim type) const; - inline isl::multi_aff reset_user() 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_down(isl::multi_val mv) const; - inline isl::multi_aff scale_down(isl::val v) const; - inline isl::multi_aff set_aff(int pos, isl::aff el) const; - inline isl::multi_aff set_at(int pos, isl::aff el) const; - inline isl::multi_aff set_dim_id(isl::dim type, unsigned int pos, isl::id id) const; - inline isl::multi_aff set_tuple_id(isl::dim type, isl::id id) const; - inline isl::multi_aff set_tuple_name(isl::dim type, const std::string &s) const; - inline isl_size size() const; - inline isl::multi_aff splice(unsigned int in_pos, unsigned int out_pos, isl::multi_aff multi2) const; - inline isl::multi_aff sub(isl::multi_aff multi2) const; - inline isl::multi_aff unbind_params_insert_domain(isl::multi_id domain) const; - static inline isl::multi_aff zero(isl::space space); }; -// declarations for isl::multi_id -inline multi_id manage(__isl_take isl_multi_id *ptr); -inline multi_id manage_copy(__isl_keep isl_multi_id *ptr); +// declarations for isl::ast_expr_op_or -class multi_id { - friend inline multi_id manage(__isl_take isl_multi_id *ptr); - friend inline multi_id manage_copy(__isl_keep isl_multi_id *ptr); +class ast_expr_op_or : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_or ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_or; - isl_multi_id *ptr = nullptr; +protected: + inline explicit ast_expr_op_or(__isl_take isl_ast_expr *ptr); - inline explicit multi_id(__isl_take isl_multi_id *ptr); +public: + inline /* implicit */ ast_expr_op_or(); + inline /* implicit */ ast_expr_op_or(const ast_expr_op_or &obj); + inline ast_expr_op_or &operator=(ast_expr_op_or obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_or_else + +class ast_expr_op_or_else : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_or_else ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_or_else; + +protected: + inline explicit ast_expr_op_or_else(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ multi_id(); - inline /* implicit */ multi_id(const multi_id &obj); - inline explicit multi_id(isl::space space, isl::id_list list); - inline explicit multi_id(isl::ctx ctx, const std::string &str); - inline multi_id &operator=(multi_id obj); - inline ~multi_id(); - inline __isl_give isl_multi_id *copy() const &; - inline __isl_give isl_multi_id *copy() && = delete; - inline __isl_keep isl_multi_id *get() const; - inline __isl_give isl_multi_id *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_or_else(); + inline /* implicit */ ast_expr_op_or_else(const ast_expr_op_or_else &obj); + inline ast_expr_op_or_else &operator=(ast_expr_op_or_else obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::multi_id align_params(isl::space model) const; - inline isl::multi_id factor_range() const; - inline isl::multi_id flat_range_product(isl::multi_id multi2) const; - inline isl::multi_id flatten_range() const; - inline isl::multi_id from_range() const; - inline isl::id get_at(int pos) const; - inline isl::space get_domain_space() const; - inline isl::id get_id(int pos) const; - inline isl::id_list get_list() const; - inline isl::space get_space() const; - inline boolean plain_is_equal(const isl::multi_id &multi2) const; - inline isl::multi_id range_factor_domain() const; - inline isl::multi_id range_factor_range() const; - inline boolean range_is_wrapping() const; - inline isl::multi_id range_product(isl::multi_id multi2) const; - inline isl::multi_id range_splice(unsigned int pos, isl::multi_id multi2) const; - inline isl::multi_id reset_user() const; - inline isl::multi_id set_at(int pos, isl::id el) const; - inline isl::multi_id set_id(int pos, isl::id el) const; - inline isl_size size() const; }; -// declarations for isl::multi_pw_aff -inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr); -inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr); +// declarations for isl::ast_expr_op_pdiv_q -class multi_pw_aff { - friend inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr); - friend inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr); +class ast_expr_op_pdiv_q : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_pdiv_q ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_pdiv_q; - isl_multi_pw_aff *ptr = nullptr; +protected: + inline explicit ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr); - inline explicit multi_pw_aff(__isl_take isl_multi_pw_aff *ptr); +public: + inline /* implicit */ ast_expr_op_pdiv_q(); + inline /* implicit */ ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj); + inline ast_expr_op_pdiv_q &operator=(ast_expr_op_pdiv_q obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_pdiv_r + +class ast_expr_op_pdiv_r : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_pdiv_r ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_pdiv_r; + +protected: + inline explicit ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ multi_pw_aff(); - inline /* implicit */ multi_pw_aff(const multi_pw_aff &obj); - inline /* implicit */ multi_pw_aff(isl::aff aff); - inline /* implicit */ multi_pw_aff(isl::multi_aff ma); - inline /* implicit */ multi_pw_aff(isl::pw_aff pa); - inline explicit multi_pw_aff(isl::space space, isl::pw_aff_list list); - inline /* implicit */ multi_pw_aff(isl::pw_multi_aff pma); - inline explicit multi_pw_aff(isl::ctx ctx, const std::string &str); - inline multi_pw_aff &operator=(multi_pw_aff obj); - inline ~multi_pw_aff(); - inline __isl_give isl_multi_pw_aff *copy() const &; - inline __isl_give isl_multi_pw_aff *copy() && = delete; - inline __isl_keep isl_multi_pw_aff *get() const; - inline __isl_give isl_multi_pw_aff *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_pdiv_r(); + inline /* implicit */ ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj); + inline ast_expr_op_pdiv_r &operator=(ast_expr_op_pdiv_r obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::multi_pw_aff add(isl::multi_pw_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_dims(isl::dim type, unsigned int n) const; - inline isl::multi_pw_aff align_params(isl::space model) 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_size dim(isl::dim type) const; - inline isl::set domain() const; - inline isl::multi_pw_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::map eq_map(isl::multi_pw_aff mpa2) const; - inline isl::multi_pw_aff factor_range() const; - inline int find_dim_by_id(isl::dim type, const isl::id &id) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::multi_pw_aff flat_range_product(isl::multi_pw_aff multi2) const; - inline isl::multi_pw_aff flatten_range() const; - inline isl::multi_pw_aff from_range() const; - inline isl::pw_aff get_at(int pos) const; - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline isl::space get_domain_space() const; - inline uint32_t get_hash() const; - inline isl::pw_aff_list get_list() const; - inline isl::pw_aff get_pw_aff(int pos) const; - inline isl::space get_space() const; - inline isl::id get_tuple_id(isl::dim type) const; - inline std::string get_tuple_name(isl::dim type) const; - inline isl::multi_pw_aff gist(isl::set set) const; - inline isl::multi_pw_aff gist_params(isl::set set) const; - inline boolean has_tuple_id(isl::dim type) const; - static inline isl::multi_pw_aff identity(isl::space space); - 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_dims(isl::dim type, unsigned int first, unsigned int n) const; - 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_pw_aff intersect_params(isl::set set) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean involves_nan() const; - inline boolean involves_param(const isl::id &id) const; - inline boolean involves_param(const isl::id_list &list) const; - inline boolean is_cst() const; - inline boolean is_equal(const isl::multi_pw_aff &mpa2) const; - inline isl::map lex_ge_map(isl::multi_pw_aff mpa2) const; - inline isl::map lex_gt_map(isl::multi_pw_aff mpa2) const; - inline isl::map lex_le_map(isl::multi_pw_aff mpa2) const; - inline isl::map lex_lt_map(isl::multi_pw_aff mpa2) 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 mod_multi_val(isl::multi_val mv) const; - inline isl::multi_pw_aff move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; - inline isl::multi_pw_aff neg() const; - inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const; - inline isl::multi_pw_aff product(isl::multi_pw_aff multi2) const; - inline isl::multi_pw_aff project_domain_on_params() 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_pw_aff range_factor_domain() const; - inline isl::multi_pw_aff range_factor_range() const; - inline boolean range_is_wrapping() const; - inline isl::multi_pw_aff range_product(isl::multi_pw_aff multi2) const; - inline isl::multi_pw_aff range_splice(unsigned int pos, isl::multi_pw_aff multi2) const; - inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const; - inline isl::multi_pw_aff reset_user() 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_down(isl::multi_val mv) const; - inline isl::multi_pw_aff scale_down(isl::val v) const; - inline isl::multi_pw_aff set_at(int pos, isl::pw_aff el) const; - inline isl::multi_pw_aff set_dim_id(isl::dim type, unsigned int pos, isl::id id) const; - inline isl::multi_pw_aff set_pw_aff(int pos, isl::pw_aff el) const; - inline isl::multi_pw_aff set_tuple_id(isl::dim type, isl::id id) const; - inline isl::multi_pw_aff set_tuple_name(isl::dim type, const std::string &s) const; - inline isl_size size() const; - inline isl::multi_pw_aff splice(unsigned int in_pos, unsigned int out_pos, isl::multi_pw_aff multi2) const; - inline isl::multi_pw_aff sub(isl::multi_pw_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; - static inline isl::multi_pw_aff zero(isl::space space); }; -// declarations for isl::multi_union_pw_aff -inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr); -inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr); - -class multi_union_pw_aff { - friend inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr); - friend inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr); +// declarations for isl::ast_expr_op_select - isl_multi_union_pw_aff *ptr = nullptr; +class ast_expr_op_select : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_select ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_select; - inline explicit multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr); +protected: + inline explicit ast_expr_op_select(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ multi_union_pw_aff(); - inline /* implicit */ multi_union_pw_aff(const multi_union_pw_aff &obj); - inline /* implicit */ multi_union_pw_aff(isl::multi_pw_aff mpa); - inline /* implicit */ multi_union_pw_aff(isl::union_pw_aff upa); - inline explicit multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list); - inline explicit multi_union_pw_aff(isl::union_pw_multi_aff upma); - inline explicit multi_union_pw_aff(isl::ctx ctx, const std::string &str); - inline multi_union_pw_aff &operator=(multi_union_pw_aff obj); - inline ~multi_union_pw_aff(); - inline __isl_give isl_multi_union_pw_aff *copy() const &; - inline __isl_give isl_multi_union_pw_aff *copy() && = delete; - inline __isl_keep isl_multi_union_pw_aff *get() const; - inline __isl_give isl_multi_union_pw_aff *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_select(); + inline /* implicit */ ast_expr_op_select(const ast_expr_op_select &obj); + inline ast_expr_op_select &operator=(ast_expr_op_select obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::multi_union_pw_aff add(isl::multi_union_pw_aff multi2) const; - inline isl::multi_union_pw_aff align_params(isl::space model) const; - inline isl::union_pw_aff apply_aff(isl::aff aff) const; - inline isl::union_pw_aff apply_pw_aff(isl::pw_aff pa) const; - inline isl::multi_union_pw_aff apply_pw_multi_aff(isl::pw_multi_aff pma) const; - inline isl::union_set bind(isl::multi_id tuple) const; - inline isl::multi_union_pw_aff coalesce() const; - inline isl_size dim(isl::dim type) const; - inline isl::union_set domain() const; - inline isl::multi_union_pw_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::multi_pw_aff extract_multi_pw_aff(isl::space space) const; - inline isl::multi_union_pw_aff factor_range() const; - inline int find_dim_by_id(isl::dim type, const isl::id &id) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::multi_union_pw_aff flat_range_product(isl::multi_union_pw_aff multi2) const; - inline isl::multi_union_pw_aff flatten_range() const; - inline isl::multi_union_pw_aff floor() const; - static inline isl::multi_union_pw_aff from_multi_aff(isl::multi_aff ma); - inline isl::multi_union_pw_aff from_range() const; - static inline isl::multi_union_pw_aff from_union_map(isl::union_map umap); - inline isl::union_pw_aff get_at(int pos) const; - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline isl::space get_domain_space() const; - inline isl::union_pw_aff_list get_list() const; - inline isl::space get_space() const; - inline isl::id get_tuple_id(isl::dim type) const; - inline std::string get_tuple_name(isl::dim type) const; - inline isl::union_pw_aff get_union_pw_aff(int pos) const; - inline isl::multi_union_pw_aff gist(isl::union_set context) const; - inline isl::multi_union_pw_aff gist_params(isl::set context) const; - inline boolean has_tuple_id(isl::dim type) 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 isl::multi_union_pw_aff intersect_range(isl::set set) const; - inline boolean involves_nan() const; - inline isl::multi_val max_multi_val() const; - inline isl::multi_val min_multi_val() const; - inline isl::multi_union_pw_aff mod_multi_val(isl::multi_val mv) const; - static inline isl::multi_union_pw_aff multi_aff_on_domain(isl::union_set domain, isl::multi_aff ma); - static inline isl::multi_union_pw_aff multi_val_on_domain(isl::union_set domain, isl::multi_val mv); - inline isl::multi_union_pw_aff neg() const; - inline boolean 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; - static inline isl::multi_union_pw_aff pw_multi_aff_on_domain(isl::union_set domain, isl::pw_multi_aff pma); - inline isl::multi_union_pw_aff range_factor_domain() const; - inline isl::multi_union_pw_aff range_factor_range() const; - inline boolean range_is_wrapping() const; - inline isl::multi_union_pw_aff range_product(isl::multi_union_pw_aff multi2) const; - inline isl::multi_union_pw_aff range_splice(unsigned int pos, isl::multi_union_pw_aff multi2) const; - inline isl::multi_union_pw_aff reset_tuple_id(isl::dim type) const; - inline isl::multi_union_pw_aff reset_user() 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_down(isl::multi_val mv) const; - inline isl::multi_union_pw_aff scale_down(isl::val 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_dim_id(isl::dim type, unsigned int pos, isl::id id) const; - inline isl::multi_union_pw_aff set_tuple_id(isl::dim type, isl::id id) const; - inline isl::multi_union_pw_aff set_tuple_name(isl::dim type, const std::string &s) const; - inline isl::multi_union_pw_aff set_union_pw_aff(int pos, isl::union_pw_aff el) const; - inline isl_size size() 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::union_set zero_union_set() const; }; -// declarations for isl::multi_val -inline multi_val manage(__isl_take isl_multi_val *ptr); -inline multi_val manage_copy(__isl_keep isl_multi_val *ptr); +// declarations for isl::ast_expr_op_sub -class multi_val { - friend inline multi_val manage(__isl_take isl_multi_val *ptr); - friend inline multi_val manage_copy(__isl_keep isl_multi_val *ptr); +class ast_expr_op_sub : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_sub ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_sub; - isl_multi_val *ptr = nullptr; +protected: + inline explicit ast_expr_op_sub(__isl_take isl_ast_expr *ptr); - inline explicit multi_val(__isl_take isl_multi_val *ptr); +public: + inline /* implicit */ ast_expr_op_sub(); + inline /* implicit */ ast_expr_op_sub(const ast_expr_op_sub &obj); + inline ast_expr_op_sub &operator=(ast_expr_op_sub obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_zdiv_r + +class ast_expr_op_zdiv_r : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_zdiv_r ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_zdiv_r; + +protected: + inline explicit ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr); public: - inline /* implicit */ multi_val(); - inline /* implicit */ multi_val(const multi_val &obj); - inline explicit multi_val(isl::space space, isl::val_list list); - inline explicit multi_val(isl::ctx ctx, const std::string &str); - inline multi_val &operator=(multi_val obj); - inline ~multi_val(); - inline __isl_give isl_multi_val *copy() const &; - inline __isl_give isl_multi_val *copy() && = delete; - inline __isl_keep isl_multi_val *get() const; - inline __isl_give isl_multi_val *release(); - inline bool is_null() const; + inline /* implicit */ ast_expr_op_zdiv_r(); + inline /* implicit */ ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj); + inline ast_expr_op_zdiv_r &operator=(ast_expr_op_zdiv_r obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::multi_val add(isl::multi_val multi2) const; - inline isl::multi_val add(isl::val v) const; - inline isl::multi_val add_dims(isl::dim type, unsigned int n) const; - inline isl::multi_val align_params(isl::space model) const; - inline isl_size dim(isl::dim type) const; - inline isl::multi_val drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::multi_val factor_range() const; - inline int find_dim_by_id(isl::dim type, const isl::id &id) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::multi_val flat_range_product(isl::multi_val multi2) const; - inline isl::multi_val flatten_range() const; - inline isl::multi_val from_range() const; - inline isl::val get_at(int pos) const; - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline isl::space get_domain_space() const; - inline isl::val_list get_list() const; - inline isl::space get_space() const; - inline isl::id get_tuple_id(isl::dim type) const; - inline std::string get_tuple_name(isl::dim type) const; - inline isl::val get_val(int pos) const; - inline boolean has_tuple_id(isl::dim type) const; - inline isl::multi_val insert_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean involves_nan() const; - inline boolean is_zero() 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 mod_multi_val(isl::multi_val mv) const; - inline isl::multi_val mod_val(isl::val v) const; - inline isl::multi_val neg() const; - inline boolean plain_is_equal(const isl::multi_val &multi2) const; - inline isl::multi_val product(isl::multi_val multi2) const; - inline isl::multi_val project_domain_on_params() const; - inline isl::multi_val range_factor_domain() const; - inline isl::multi_val range_factor_range() const; - inline boolean range_is_wrapping() const; - inline isl::multi_val range_product(isl::multi_val multi2) const; - inline isl::multi_val range_splice(unsigned int pos, isl::multi_val multi2) const; - inline isl::multi_val reset_tuple_id(isl::dim type) const; - inline isl::multi_val reset_user() 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_down(isl::multi_val mv) const; - inline isl::multi_val scale_down(isl::val v) const; - inline isl::multi_val set_at(int pos, isl::val el) const; - inline isl::multi_val set_dim_id(isl::dim type, unsigned int pos, isl::id id) const; - inline isl::multi_val set_tuple_id(isl::dim type, isl::id id) const; - inline isl::multi_val set_tuple_name(isl::dim type, const std::string &s) const; - inline isl::multi_val set_val(int pos, isl::val el) const; - inline isl_size size() const; - inline isl::multi_val splice(unsigned int in_pos, unsigned int out_pos, isl::multi_val multi2) const; - inline isl::multi_val sub(isl::multi_val multi2) const; - static inline isl::multi_val zero(isl::space space); }; -// declarations for isl::point -inline point manage(__isl_take isl_point *ptr); -inline point manage_copy(__isl_keep isl_point *ptr); +// declarations for isl::ast_node +inline ast_node manage(__isl_take isl_ast_node *ptr); +inline ast_node manage_copy(__isl_keep isl_ast_node *ptr); -class point { - friend inline point manage(__isl_take isl_point *ptr); - friend inline point manage_copy(__isl_keep isl_point *ptr); +class ast_node { + friend inline ast_node manage(__isl_take isl_ast_node *ptr); + friend inline ast_node manage_copy(__isl_keep isl_ast_node *ptr); - isl_point *ptr = nullptr; +protected: + isl_ast_node *ptr = nullptr; - inline explicit point(__isl_take isl_point *ptr); + inline explicit ast_node(__isl_take isl_ast_node *ptr); public: - inline /* implicit */ point(); - inline /* implicit */ point(const point &obj); - inline explicit point(isl::space dim); - inline point &operator=(point obj); - inline ~point(); - inline __isl_give isl_point *copy() const &; - inline __isl_give isl_point *copy() && = delete; - inline __isl_keep isl_point *get() const; - inline __isl_give isl_point *release(); + inline /* implicit */ ast_node(); + inline /* implicit */ ast_node(const ast_node &obj); + inline ast_node &operator=(ast_node obj); + inline ~ast_node(); + inline __isl_give isl_ast_node *copy() const &; + inline __isl_give isl_ast_node *copy() && = delete; + inline __isl_keep isl_ast_node *get() const; + inline __isl_give isl_ast_node *release(); inline bool is_null() const; +private: + template ::value>::type> + inline bool isa_type(T subtype) const; +public: + template inline bool isa() const; + template inline T as() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::point add_ui(isl::dim type, int pos, unsigned int val) const; - inline isl::val get_coordinate_val(isl::dim type, int pos) const; - inline isl::multi_val get_multi_val() const; - inline isl::space get_space() const; - inline isl::point set_coordinate_val(isl::dim type, int pos, isl::val v) const; - inline isl::point sub_ui(isl::dim type, int pos, unsigned int val) const; + inline isl::id annotation() const; + inline isl::id get_annotation() const; + inline std::string to_C_str() const; + inline isl::ast_node_list to_list() const; }; -// declarations for isl::pw_aff -inline pw_aff manage(__isl_take isl_pw_aff *ptr); -inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr); +// declarations for isl::ast_node_block -class pw_aff { - friend inline pw_aff manage(__isl_take isl_pw_aff *ptr); - friend inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr); +class ast_node_block : public ast_node { + template + friend bool ast_node::isa() const; + friend ast_node_block ast_node::as() const; + static const auto type = isl_ast_node_block; - isl_pw_aff *ptr = nullptr; +protected: + inline explicit ast_node_block(__isl_take isl_ast_node *ptr); - inline explicit pw_aff(__isl_take isl_pw_aff *ptr); +public: + inline /* implicit */ ast_node_block(); + inline /* implicit */ ast_node_block(const ast_node_block &obj); + inline ast_node_block &operator=(ast_node_block obj); + inline isl::ctx ctx() const; + + inline isl::ast_node_list children() const; + inline isl::ast_node_list get_children() const; +}; + +// declarations for isl::ast_node_for + +class ast_node_for : public ast_node { + template + friend bool ast_node::isa() const; + friend ast_node_for ast_node::as() const; + static const auto type = isl_ast_node_for; + +protected: + inline explicit ast_node_for(__isl_take isl_ast_node *ptr); public: - inline /* implicit */ pw_aff(); - inline /* implicit */ pw_aff(const pw_aff &obj); - inline /* implicit */ pw_aff(isl::aff aff); - inline explicit pw_aff(isl::ctx ctx, const std::string &str); - inline explicit pw_aff(isl::set domain, isl::val v); - inline explicit pw_aff(isl::local_space ls); - inline pw_aff &operator=(pw_aff obj); - inline ~pw_aff(); - inline __isl_give isl_pw_aff *copy() const &; - inline __isl_give isl_pw_aff *copy() && = delete; - inline __isl_keep isl_pw_aff *get() const; - inline __isl_give isl_pw_aff *release(); - inline bool is_null() const; + inline /* implicit */ ast_node_for(); + inline /* implicit */ ast_node_for(const ast_node_for &obj); + inline ast_node_for &operator=(ast_node_for obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::pw_aff add(isl::pw_aff pwaff2) const; - inline isl::pw_aff add_constant(isl::val v) const; - inline isl::pw_aff add_dims(isl::dim type, unsigned int n) const; - inline isl::pw_aff align_params(isl::space model) const; - static inline isl::pw_aff alloc(isl::set set, isl::aff aff); - inline isl::aff as_aff() const; - inline isl::set bind(isl::id id) const; - inline isl::pw_aff bind_domain(isl::multi_id tuple) const; - inline isl::pw_aff bind_domain_wrapped_domain(isl::multi_id tuple) const; - inline isl::pw_aff ceil() const; - inline isl::pw_aff coalesce() const; - inline isl::pw_aff cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const; - inline isl_size dim(isl::dim type) const; - inline isl::pw_aff div(isl::pw_aff pa2) const; - inline isl::set domain() const; - inline isl::pw_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::pw_aff drop_unused_params() const; - static inline isl::pw_aff empty(isl::space space); - inline isl::map eq_map(isl::pw_aff pa2) const; - inline isl::set eq_set(isl::pw_aff pwaff2) const; - inline isl::val eval(isl::point pnt) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::pw_aff floor() const; - inline stat foreach_piece(const std::function &fn) const; - inline isl::pw_aff from_range() const; - inline isl::map ge_map(isl::pw_aff pa2) const; - inline isl::set ge_set(isl::pw_aff pwaff2) const; - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline std::string get_dim_name(isl::dim type, unsigned int pos) const; - inline isl::space get_domain_space() const; - inline uint32_t get_hash() const; - inline isl::space get_space() const; - inline isl::id get_tuple_id(isl::dim type) const; - inline isl::pw_aff gist(isl::set context) const; - inline isl::pw_aff gist_params(isl::set context) const; - inline isl::map gt_map(isl::pw_aff pa2) const; - inline isl::set gt_set(isl::pw_aff pwaff2) const; - inline boolean has_dim_id(isl::dim type, unsigned int pos) const; - inline boolean has_tuple_id(isl::dim type) const; - inline isl::pw_aff insert_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::pw_aff insert_domain(isl::space domain) const; - inline isl::pw_aff intersect_domain(isl::set set) const; - inline isl::pw_aff intersect_domain_wrapped_domain(isl::set set) const; - inline isl::pw_aff intersect_domain_wrapped_range(isl::set set) const; - inline isl::pw_aff intersect_params(isl::set set) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean involves_nan() const; - inline boolean involves_param_id(const isl::id &id) const; - inline boolean is_cst() const; - inline boolean is_empty() const; - inline boolean is_equal(const isl::pw_aff &pa2) const; - inline boolean isa_aff() const; - inline isl::map le_map(isl::pw_aff pa2) const; - inline isl::set le_set(isl::pw_aff pwaff2) const; - inline isl::map lt_map(isl::pw_aff pa2) const; - inline isl::set lt_set(isl::pw_aff pwaff2) const; - inline isl::pw_aff max(isl::pw_aff pwaff2) const; - inline isl::pw_aff min(isl::pw_aff pwaff2) const; - inline isl::pw_aff mod(isl::val mod) const; - inline isl::pw_aff move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; - inline isl::pw_aff mul(isl::pw_aff pwaff2) const; - inline isl_size n_piece() const; - static inline isl::pw_aff nan_on_domain(isl::local_space ls); - static inline isl::pw_aff nan_on_domain_space(isl::space space); - inline isl::set ne_set(isl::pw_aff pwaff2) const; - inline isl::pw_aff neg() const; - inline isl::set non_zero_set() const; - inline isl::set nonneg_set() const; - static inline isl::pw_aff param_on_domain(isl::set domain, isl::id id); - inline isl::set params() const; - inline int plain_cmp(const isl::pw_aff &pa2) const; - inline boolean plain_is_equal(const isl::pw_aff &pwaff2) const; - inline isl::set pos_set() const; - inline isl::pw_aff project_domain_on_params() 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::pw_aff reset_tuple_id(isl::dim type) const; - inline isl::pw_aff reset_user() const; - inline isl::pw_aff scale(isl::val v) const; - inline isl::pw_aff scale_down(isl::val f) const; - inline isl::pw_aff set_dim_id(isl::dim type, unsigned int pos, isl::id id) const; - inline isl::pw_aff set_tuple_id(isl::dim type, isl::id id) const; - inline isl::pw_aff sub(isl::pw_aff pwaff2) const; - inline isl::pw_aff subtract_domain(isl::set 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 union_add(isl::pw_aff pwaff2) const; - inline isl::pw_aff union_max(isl::pw_aff pwaff2) const; - inline isl::pw_aff union_min(isl::pw_aff pwaff2) const; - static inline isl::pw_aff var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos); - inline isl::set zero_set() const; -}; - -// declarations for isl::pw_aff_list -inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr); -inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr); - -class pw_aff_list { - friend inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr); - friend inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr); - - isl_pw_aff_list *ptr = nullptr; - - inline explicit pw_aff_list(__isl_take isl_pw_aff_list *ptr); - -public: - inline /* implicit */ pw_aff_list(); - inline /* implicit */ pw_aff_list(const pw_aff_list &obj); - inline pw_aff_list &operator=(pw_aff_list obj); - inline ~pw_aff_list(); - inline __isl_give isl_pw_aff_list *copy() const &; - inline __isl_give isl_pw_aff_list *copy() && = delete; - inline __isl_keep isl_pw_aff_list *get() const; - inline __isl_give isl_pw_aff_list *release(); - inline bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; - - inline isl::pw_aff_list add(isl::pw_aff el) const; - static inline isl::pw_aff_list alloc(isl::ctx ctx, int n); - 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 isl::set eq_set(isl::pw_aff_list list2) const; - inline stat foreach(const std::function &fn) const; - static inline isl::pw_aff_list from_pw_aff(isl::pw_aff el); - inline isl::set ge_set(isl::pw_aff_list list2) const; - inline isl::pw_aff get_at(int index) const; - inline isl::pw_aff get_pw_aff(int index) const; - inline isl::set gt_set(isl::pw_aff_list list2) const; - inline isl::pw_aff_list insert(unsigned int pos, isl::pw_aff el) const; - inline isl::set le_set(isl::pw_aff_list list2) const; - inline isl::set lt_set(isl::pw_aff_list list2) const; - inline isl::pw_aff max() const; - inline isl::pw_aff min() const; - inline isl_size n_pw_aff() const; - inline isl::set ne_set(isl::pw_aff_list list2) const; - inline isl::pw_aff_list reverse() const; - inline isl::pw_aff_list set_pw_aff(int index, isl::pw_aff el) const; - inline isl_size size() const; - inline isl::pw_aff_list swap(unsigned int pos1, unsigned int pos2) const; + inline isl::ast_node body() const; + inline isl::ast_node get_body() const; + inline isl::ast_expr cond() const; + inline isl::ast_expr get_cond() const; + inline isl::ast_expr inc() const; + 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; }; -// declarations for isl::pw_multi_aff -inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr); -inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr); - -class pw_multi_aff { - friend inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr); - friend inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr); +// declarations for isl::ast_node_if - isl_pw_multi_aff *ptr = nullptr; +class ast_node_if : public ast_node { + template + friend bool ast_node::isa() const; + friend ast_node_if ast_node::as() const; + static const auto type = isl_ast_node_if; - inline explicit pw_multi_aff(__isl_take isl_pw_multi_aff *ptr); +protected: + inline explicit ast_node_if(__isl_take isl_ast_node *ptr); public: - inline /* implicit */ pw_multi_aff(); - inline /* implicit */ pw_multi_aff(const pw_multi_aff &obj); - inline /* implicit */ pw_multi_aff(isl::multi_aff ma); - inline /* implicit */ pw_multi_aff(isl::pw_aff pa); - inline explicit pw_multi_aff(isl::ctx ctx, const std::string &str); - inline pw_multi_aff &operator=(pw_multi_aff obj); - inline ~pw_multi_aff(); - inline __isl_give isl_pw_multi_aff *copy() const &; - inline __isl_give isl_pw_multi_aff *copy() && = delete; - inline __isl_keep isl_pw_multi_aff *get() const; - inline __isl_give isl_pw_multi_aff *release(); - inline bool is_null() const; + inline /* implicit */ ast_node_if(); + inline /* implicit */ ast_node_if(const ast_node_if &obj); + inline ast_node_if &operator=(ast_node_if obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::pw_multi_aff add(isl::pw_multi_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 align_params(isl::space model) const; - static inline isl::pw_multi_aff alloc(isl::set set, isl::multi_aff maff); - inline isl::multi_aff as_multi_aff() 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_size dim(isl::dim type) const; - inline isl::set domain() const; - static inline isl::pw_multi_aff domain_map(isl::space space); - inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::pw_multi_aff drop_unused_params() const; - static inline isl::pw_multi_aff empty(isl::space space); - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::pw_multi_aff fix_si(isl::dim type, unsigned int pos, int value) const; - inline isl::pw_multi_aff flat_range_product(isl::pw_multi_aff pma2) const; - inline stat foreach_piece(const std::function &fn) const; - static inline isl::pw_multi_aff from_domain(isl::set set); - static inline isl::pw_multi_aff from_map(isl::map map); - static inline isl::pw_multi_aff from_multi_pw_aff(isl::multi_pw_aff mpa); - static inline isl::pw_multi_aff from_set(isl::set set); - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline std::string get_dim_name(isl::dim type, unsigned int pos) const; - inline isl::space get_domain_space() const; - inline isl::pw_aff get_pw_aff(int pos) const; - inline isl::space get_space() const; - inline isl::id get_tuple_id(isl::dim type) const; - inline std::string get_tuple_name(isl::dim type) const; - inline isl::pw_multi_aff gist(isl::set set) const; - inline isl::pw_multi_aff gist_params(isl::set set) const; - inline boolean has_tuple_id(isl::dim type) const; - inline boolean has_tuple_name(isl::dim type) const; - static inline isl::pw_multi_aff identity(isl::space space); - 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::pw_multi_aff intersect_domain_wrapped_domain(isl::set set) const; - inline isl::pw_multi_aff intersect_domain_wrapped_range(isl::set set) const; - inline isl::pw_multi_aff intersect_params(isl::set set) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean involves_locals() const; - inline boolean involves_nan() const; - inline boolean involves_param_id(const isl::id &id) const; - inline boolean is_equal(const isl::pw_multi_aff &pma2) const; - inline boolean isa_multi_aff() const; - inline isl::multi_val max_multi_val() 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 isl_size n_piece() const; - inline isl::pw_multi_aff neg() const; - inline boolean plain_is_equal(const isl::pw_multi_aff &pma2) const; - inline isl::pw_multi_aff preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const; - inline isl::pw_multi_aff product(isl::pw_multi_aff pma2) const; - inline isl::pw_multi_aff project_domain_on_params() const; - static inline isl::pw_multi_aff project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n); - 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::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::pw_multi_aff range_product(isl::pw_multi_aff pma2) const; - inline isl::pw_multi_aff reset_tuple_id(isl::dim type) const; - inline isl::pw_multi_aff reset_user() const; - inline isl::pw_multi_aff scale(isl::val v) const; - inline isl::pw_multi_aff scale_down(isl::val v) const; - inline isl::pw_multi_aff scale_multi_val(isl::multi_val mv) const; - inline isl::pw_multi_aff set_dim_id(isl::dim type, unsigned int pos, isl::id id) const; - inline isl::pw_multi_aff set_pw_aff(unsigned int pos, isl::pw_aff pa) const; - inline isl::pw_multi_aff set_tuple_id(isl::dim type, isl::id id) const; - inline isl::pw_multi_aff sub(isl::pw_multi_aff pma2) const; - inline isl::pw_multi_aff subtract_domain(isl::set set) const; - inline isl::pw_multi_aff union_add(isl::pw_multi_aff pma2) const; - inline isl::pw_multi_aff union_lexmax(isl::pw_multi_aff pma2) const; - inline isl::pw_multi_aff union_lexmin(isl::pw_multi_aff pma2) const; - static inline isl::pw_multi_aff zero(isl::space space); + inline isl::ast_expr cond() const; + 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; }; -// declarations for isl::pw_multi_aff_list -inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr); -inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr); +// declarations for isl::ast_node_list +inline ast_node_list manage(__isl_take isl_ast_node_list *ptr); +inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr); -class pw_multi_aff_list { - friend inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr); - friend inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr); +class ast_node_list { + friend inline ast_node_list manage(__isl_take isl_ast_node_list *ptr); + friend inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr); - isl_pw_multi_aff_list *ptr = nullptr; +protected: + isl_ast_node_list *ptr = nullptr; - inline explicit pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr); + inline explicit ast_node_list(__isl_take isl_ast_node_list *ptr); public: - inline /* implicit */ pw_multi_aff_list(); - inline /* implicit */ pw_multi_aff_list(const pw_multi_aff_list &obj); - 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_give isl_pw_multi_aff_list *copy() && = delete; - inline __isl_keep isl_pw_multi_aff_list *get() const; - inline __isl_give isl_pw_multi_aff_list *release(); + inline /* implicit */ ast_node_list(); + inline /* implicit */ ast_node_list(const ast_node_list &obj); + inline explicit ast_node_list(isl::ctx ctx, int n); + inline explicit ast_node_list(isl::ast_node el); + inline ast_node_list &operator=(ast_node_list obj); + inline ~ast_node_list(); + inline __isl_give isl_ast_node_list *copy() const &; + inline __isl_give isl_ast_node_list *copy() && = delete; + inline __isl_keep isl_ast_node_list *get() const; + inline __isl_give isl_ast_node_list *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::pw_multi_aff_list add(isl::pw_multi_aff el) const; - static inline isl::pw_multi_aff_list alloc(isl::ctx ctx, int n); - 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 stat foreach(const std::function &fn) const; - static inline isl::pw_multi_aff_list from_pw_multi_aff(isl::pw_multi_aff el); - inline isl::pw_multi_aff get_at(int index) const; - inline isl::pw_multi_aff get_pw_multi_aff(int index) const; - inline isl::pw_multi_aff_list insert(unsigned int pos, isl::pw_multi_aff el) const; - inline isl_size n_pw_multi_aff() const; - inline isl::pw_multi_aff_list reverse() const; - inline isl::pw_multi_aff_list set_pw_multi_aff(int index, isl::pw_multi_aff el) 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 &fn) const; + inline isl::ast_node_list insert(unsigned int pos, isl::ast_node el) const; inline isl_size size() const; - inline isl::pw_multi_aff_list swap(unsigned int pos1, unsigned int pos2) const; }; -// declarations for isl::pw_qpolynomial -inline pw_qpolynomial manage(__isl_take isl_pw_qpolynomial *ptr); -inline pw_qpolynomial manage_copy(__isl_keep isl_pw_qpolynomial *ptr); - -class pw_qpolynomial { - friend inline pw_qpolynomial manage(__isl_take isl_pw_qpolynomial *ptr); - friend inline pw_qpolynomial manage_copy(__isl_keep isl_pw_qpolynomial *ptr); +// declarations for isl::ast_node_mark - isl_pw_qpolynomial *ptr = nullptr; +class ast_node_mark : public ast_node { + template + friend bool ast_node::isa() const; + friend ast_node_mark ast_node::as() const; + static const auto type = isl_ast_node_mark; - inline explicit pw_qpolynomial(__isl_take isl_pw_qpolynomial *ptr); +protected: + inline explicit ast_node_mark(__isl_take isl_ast_node *ptr); public: - inline /* implicit */ pw_qpolynomial(); - inline /* implicit */ pw_qpolynomial(const pw_qpolynomial &obj); - inline explicit pw_qpolynomial(isl::ctx ctx, const std::string &str); - inline pw_qpolynomial &operator=(pw_qpolynomial obj); - inline ~pw_qpolynomial(); - inline __isl_give isl_pw_qpolynomial *copy() const &; - inline __isl_give isl_pw_qpolynomial *copy() && = delete; - inline __isl_keep isl_pw_qpolynomial *get() const; - inline __isl_give isl_pw_qpolynomial *release(); - inline bool is_null() const; + inline /* implicit */ ast_node_mark(); + inline /* implicit */ ast_node_mark(const ast_node_mark &obj); + inline ast_node_mark &operator=(ast_node_mark obj); inline isl::ctx ctx() const; - inline void dump() const; - inline isl::pw_qpolynomial add(isl::pw_qpolynomial pwqp2) const; - inline isl::pw_qpolynomial add_dims(isl::dim type, unsigned int n) const; - static inline isl::pw_qpolynomial alloc(isl::set set, isl::qpolynomial qp); - inline isl::qpolynomial as_qpolynomial() const; - inline isl::pw_qpolynomial coalesce() const; - inline isl_size dim(isl::dim type) const; - inline isl::set domain() const; - inline isl::pw_qpolynomial drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::pw_qpolynomial drop_unused_params() const; - inline isl::val eval(isl::point pnt) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::pw_qpolynomial fix_val(isl::dim type, unsigned int n, isl::val v) const; - inline stat foreach_piece(const std::function &fn) const; - static inline isl::pw_qpolynomial from_pw_aff(isl::pw_aff pwaff); - static inline isl::pw_qpolynomial from_qpolynomial(isl::qpolynomial qp); - inline isl::pw_qpolynomial from_range() const; - inline isl::space get_domain_space() const; - inline isl::space get_space() const; - inline isl::pw_qpolynomial gist(isl::set context) const; - inline isl::pw_qpolynomial gist_params(isl::set context) const; - inline boolean has_equal_space(const isl::pw_qpolynomial &pwqp2) const; - inline isl::pw_qpolynomial insert_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::pw_qpolynomial intersect_domain(isl::set set) const; - inline isl::pw_qpolynomial intersect_domain_wrapped_domain(isl::set set) const; - inline isl::pw_qpolynomial intersect_domain_wrapped_range(isl::set set) const; - inline isl::pw_qpolynomial intersect_params(isl::set set) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean involves_nan() const; - inline boolean involves_param_id(const isl::id &id) const; - inline boolean is_zero() const; - inline boolean isa_qpolynomial() const; - inline isl::val max() const; - inline isl::val min() const; - inline isl::pw_qpolynomial move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; - inline isl::pw_qpolynomial mul(isl::pw_qpolynomial pwqp2) const; - inline isl_size n_piece() const; - inline isl::pw_qpolynomial neg() const; - inline boolean plain_is_equal(const isl::pw_qpolynomial &pwqp2) const; - inline isl::pw_qpolynomial pow(unsigned int exponent) const; - inline isl::pw_qpolynomial project_domain_on_params() const; - inline isl::pw_qpolynomial reset_domain_space(isl::space space) const; - inline isl::pw_qpolynomial reset_user() const; - inline isl::pw_qpolynomial scale_down_val(isl::val v) const; - inline isl::pw_qpolynomial scale_val(isl::val v) const; - inline isl::pw_qpolynomial split_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::pw_qpolynomial split_periods(int max_periods) const; - inline isl::pw_qpolynomial sub(isl::pw_qpolynomial pwqp2) const; - inline isl::pw_qpolynomial subtract_domain(isl::set set) const; - inline isl::pw_qpolynomial to_polynomial(int sign) const; - static inline isl::pw_qpolynomial zero(isl::space space); + inline isl::id id() const; + inline isl::id get_id() const; + inline isl::ast_node node() const; + inline isl::ast_node get_node() const; }; -// declarations for isl::pw_qpolynomial_fold_list -inline pw_qpolynomial_fold_list manage(__isl_take isl_pw_qpolynomial_fold_list *ptr); -inline pw_qpolynomial_fold_list manage_copy(__isl_keep isl_pw_qpolynomial_fold_list *ptr); +// declarations for isl::ast_node_user -class pw_qpolynomial_fold_list { - friend inline pw_qpolynomial_fold_list manage(__isl_take isl_pw_qpolynomial_fold_list *ptr); - friend inline pw_qpolynomial_fold_list manage_copy(__isl_keep isl_pw_qpolynomial_fold_list *ptr); +class ast_node_user : public ast_node { + template + friend bool ast_node::isa() const; + friend ast_node_user ast_node::as() const; + static const auto type = isl_ast_node_user; - isl_pw_qpolynomial_fold_list *ptr = nullptr; - - inline explicit pw_qpolynomial_fold_list(__isl_take isl_pw_qpolynomial_fold_list *ptr); +protected: + inline explicit ast_node_user(__isl_take isl_ast_node *ptr); public: - inline /* implicit */ pw_qpolynomial_fold_list(); - inline /* implicit */ pw_qpolynomial_fold_list(const pw_qpolynomial_fold_list &obj); - inline pw_qpolynomial_fold_list &operator=(pw_qpolynomial_fold_list obj); - inline ~pw_qpolynomial_fold_list(); - inline __isl_give isl_pw_qpolynomial_fold_list *copy() const &; - inline __isl_give isl_pw_qpolynomial_fold_list *copy() && = delete; - inline __isl_keep isl_pw_qpolynomial_fold_list *get() const; - inline __isl_give isl_pw_qpolynomial_fold_list *release(); - inline bool is_null() const; + inline /* implicit */ ast_node_user(); + inline /* implicit */ ast_node_user(const ast_node_user &obj); + inline ast_node_user &operator=(ast_node_user obj); inline isl::ctx ctx() const; - inline void dump() const; - -}; - -// declarations for isl::pw_qpolynomial_list -inline pw_qpolynomial_list manage(__isl_take isl_pw_qpolynomial_list *ptr); -inline pw_qpolynomial_list manage_copy(__isl_keep isl_pw_qpolynomial_list *ptr); - -class pw_qpolynomial_list { - friend inline pw_qpolynomial_list manage(__isl_take isl_pw_qpolynomial_list *ptr); - friend inline pw_qpolynomial_list manage_copy(__isl_keep isl_pw_qpolynomial_list *ptr); - - isl_pw_qpolynomial_list *ptr = nullptr; - - inline explicit pw_qpolynomial_list(__isl_take isl_pw_qpolynomial_list *ptr); -public: - inline /* implicit */ pw_qpolynomial_list(); - inline /* implicit */ pw_qpolynomial_list(const pw_qpolynomial_list &obj); - inline pw_qpolynomial_list &operator=(pw_qpolynomial_list obj); - inline ~pw_qpolynomial_list(); - inline __isl_give isl_pw_qpolynomial_list *copy() const &; - inline __isl_give isl_pw_qpolynomial_list *copy() && = delete; - inline __isl_keep isl_pw_qpolynomial_list *get() const; - inline __isl_give isl_pw_qpolynomial_list *release(); - inline bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; - - inline isl::pw_qpolynomial_list add(isl::pw_qpolynomial el) const; - static inline isl::pw_qpolynomial_list alloc(isl::ctx ctx, int n); - inline isl::pw_qpolynomial_list clear() const; - inline isl::pw_qpolynomial_list concat(isl::pw_qpolynomial_list list2) const; - inline isl::pw_qpolynomial_list drop(unsigned int first, unsigned int n) const; - inline stat foreach(const std::function &fn) const; - static inline isl::pw_qpolynomial_list from_pw_qpolynomial(isl::pw_qpolynomial el); - inline isl::pw_qpolynomial get_at(int index) const; - inline isl::pw_qpolynomial get_pw_qpolynomial(int index) const; - inline isl::pw_qpolynomial_list insert(unsigned int pos, isl::pw_qpolynomial el) const; - inline isl_size n_pw_qpolynomial() const; - inline isl::pw_qpolynomial_list reverse() const; - inline isl::pw_qpolynomial_list set_pw_qpolynomial(int index, isl::pw_qpolynomial el) const; - inline isl_size size() const; - inline isl::pw_qpolynomial_list swap(unsigned int pos1, unsigned int pos2) const; + inline isl::ast_expr expr() const; + inline isl::ast_expr get_expr() const; }; -// declarations for isl::qpolynomial -inline qpolynomial manage(__isl_take isl_qpolynomial *ptr); -inline qpolynomial manage_copy(__isl_keep isl_qpolynomial *ptr); +// declarations for isl::basic_map +inline basic_map manage(__isl_take isl_basic_map *ptr); +inline basic_map manage_copy(__isl_keep isl_basic_map *ptr); -class qpolynomial { - friend inline qpolynomial manage(__isl_take isl_qpolynomial *ptr); - friend inline qpolynomial manage_copy(__isl_keep isl_qpolynomial *ptr); +class basic_map { + friend inline basic_map manage(__isl_take isl_basic_map *ptr); + friend inline basic_map manage_copy(__isl_keep isl_basic_map *ptr); - isl_qpolynomial *ptr = nullptr; +protected: + isl_basic_map *ptr = nullptr; - inline explicit qpolynomial(__isl_take isl_qpolynomial *ptr); + inline explicit basic_map(__isl_take isl_basic_map *ptr); public: - inline /* implicit */ qpolynomial(); - inline /* implicit */ qpolynomial(const qpolynomial &obj); - inline qpolynomial &operator=(qpolynomial obj); - inline ~qpolynomial(); - inline __isl_give isl_qpolynomial *copy() const &; - inline __isl_give isl_qpolynomial *copy() && = delete; - inline __isl_keep isl_qpolynomial *get() const; - inline __isl_give isl_qpolynomial *release(); + inline /* implicit */ basic_map(); + inline /* implicit */ basic_map(const basic_map &obj); + inline explicit basic_map(isl::ctx ctx, const std::string &str); + inline basic_map &operator=(basic_map obj); + inline ~basic_map(); + inline __isl_give isl_basic_map *copy() const &; + inline __isl_give isl_basic_map *copy() && = delete; + inline __isl_keep isl_basic_map *get() const; + inline __isl_give isl_basic_map *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::qpolynomial add(isl::qpolynomial qp2) const; - inline isl::qpolynomial add_dims(isl::dim type, unsigned int n) const; - inline isl::qpolynomial align_params(isl::space model) const; - inline stat as_polynomial_on_domain(const isl::basic_set &bset, const std::function &fn) const; + inline isl::map add_constraint(const isl::constraint &constraint) const; + inline isl::map add_dims(isl::dim type, unsigned int n) const; + inline isl::basic_map affine_hull() const; + inline isl::map align_params(const isl::space &model) 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::basic_map_list basic_map_list() const; + inline isl::set bind_domain(const isl::multi_id &tuple) const; + inline isl::set bind_range(const isl::multi_id &tuple) const; + inline bool can_curry() 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_size dim(isl::dim type) const; - inline isl::qpolynomial drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::val eval(isl::point pnt) const; - inline stat foreach_term(const std::function &fn) const; - static inline isl::qpolynomial from_aff(isl::aff aff); - static inline isl::qpolynomial from_constraint(isl::constraint c, isl::dim type, unsigned int pos); - static inline isl::qpolynomial from_term(isl::term term); - inline isl::val get_constant_val() const; - inline isl::space get_domain_space() const; - inline isl::space get_space() const; - inline isl::qpolynomial gist(isl::set context) const; - inline isl::qpolynomial gist_params(isl::set context) const; - inline isl::qpolynomial homogenize() const; - static inline isl::qpolynomial infty_on_domain(isl::space domain); - inline isl::qpolynomial insert_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean is_infty() const; - inline boolean is_nan() const; - inline boolean is_neginfty() const; - inline boolean is_zero() const; - inline isl::qpolynomial move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; - inline isl::qpolynomial mul(isl::qpolynomial qp2) const; - static inline isl::qpolynomial nan_on_domain(isl::space domain); - inline isl::qpolynomial neg() const; - static inline isl::qpolynomial neginfty_on_domain(isl::space domain); - static inline isl::qpolynomial one_on_domain(isl::space domain); - inline boolean plain_is_equal(const isl::qpolynomial &qp2) const; - inline isl::qpolynomial pow(unsigned int power) const; - inline isl::qpolynomial project_domain_on_params() const; - inline isl::qpolynomial scale_down_val(isl::val v) const; - inline isl::qpolynomial scale_val(isl::val v) const; - inline int sgn() const; - inline isl::qpolynomial sub(isl::qpolynomial qp2) const; - static inline isl::qpolynomial val_on_domain(isl::space space, isl::val val); - static inline isl::qpolynomial var_on_domain(isl::space domain, isl::dim type, unsigned int pos); - static inline isl::qpolynomial zero_on_domain(isl::space domain); -}; - -// declarations for isl::qpolynomial_list -inline qpolynomial_list manage(__isl_take isl_qpolynomial_list *ptr); -inline qpolynomial_list manage_copy(__isl_keep isl_qpolynomial_list *ptr); - -class qpolynomial_list { - friend inline qpolynomial_list manage(__isl_take isl_qpolynomial_list *ptr); - friend inline qpolynomial_list manage_copy(__isl_keep isl_qpolynomial_list *ptr); - - isl_qpolynomial_list *ptr = nullptr; - - inline explicit qpolynomial_list(__isl_take isl_qpolynomial_list *ptr); - -public: - inline /* implicit */ qpolynomial_list(); - inline /* implicit */ qpolynomial_list(const qpolynomial_list &obj); - inline qpolynomial_list &operator=(qpolynomial_list obj); - inline ~qpolynomial_list(); - inline __isl_give isl_qpolynomial_list *copy() const &; - inline __isl_give isl_qpolynomial_list *copy() && = delete; - inline __isl_keep isl_qpolynomial_list *get() const; - inline __isl_give isl_qpolynomial_list *release(); - inline bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; - - inline isl::qpolynomial_list add(isl::qpolynomial el) const; - static inline isl::qpolynomial_list alloc(isl::ctx ctx, int n); - inline isl::qpolynomial_list clear() const; - inline isl::qpolynomial_list concat(isl::qpolynomial_list list2) const; - inline isl::qpolynomial_list drop(unsigned int first, unsigned int n) const; - inline stat foreach(const std::function &fn) const; - static inline isl::qpolynomial_list from_qpolynomial(isl::qpolynomial el); - inline isl::qpolynomial get_at(int index) const; - inline isl::qpolynomial get_qpolynomial(int index) const; - inline isl::qpolynomial_list insert(unsigned int pos, isl::qpolynomial el) const; - inline isl_size n_qpolynomial() const; - inline isl::qpolynomial_list reverse() const; - inline isl::qpolynomial_list set_qpolynomial(int index, isl::qpolynomial el) const; - inline isl_size size() const; - inline isl::qpolynomial_list swap(unsigned int pos1, unsigned int pos2) const; -}; - -// declarations for isl::schedule -inline schedule manage(__isl_take isl_schedule *ptr); -inline schedule manage_copy(__isl_keep isl_schedule *ptr); - -class schedule { - friend inline schedule manage(__isl_take isl_schedule *ptr); - friend inline schedule manage_copy(__isl_keep isl_schedule *ptr); - - isl_schedule *ptr = nullptr; - - inline explicit schedule(__isl_take isl_schedule *ptr); - -public: - inline /* implicit */ schedule(); - inline /* implicit */ schedule(const schedule &obj); - inline explicit schedule(isl::ctx ctx, const std::string &str); - inline schedule &operator=(schedule obj); - inline ~schedule(); - inline __isl_give isl_schedule *copy() const &; - inline __isl_give isl_schedule *copy() && = delete; - inline __isl_keep isl_schedule *get() const; - inline __isl_give isl_schedule *release(); - inline bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; - - inline isl::schedule align_params(isl::space space) const; - static inline isl::schedule empty(isl::space space); - static inline isl::schedule from_domain(isl::union_set domain); - inline isl::union_set get_domain() const; - inline isl::union_map get_map() const; - inline isl::schedule_node get_root() const; - inline isl::schedule gist_domain_params(isl::set context) const; - inline isl::schedule insert_context(isl::set context) const; - inline isl::schedule insert_guard(isl::set guard) const; - inline isl::schedule insert_partial_schedule(isl::multi_union_pw_aff partial) const; - inline isl::schedule intersect_domain(isl::union_set domain) const; - inline boolean plain_is_equal(const isl::schedule &schedule2) const; - inline isl::schedule pullback(isl::union_pw_multi_aff upma) const; - inline isl::schedule reset_user() const; - inline isl::schedule sequence(isl::schedule schedule2) const; -}; - -// declarations for isl::schedule_constraints -inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr); -inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr); - -class schedule_constraints { - friend inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr); - friend inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr); - - isl_schedule_constraints *ptr = nullptr; - - inline explicit schedule_constraints(__isl_take isl_schedule_constraints *ptr); - -public: - inline /* implicit */ schedule_constraints(); - inline /* implicit */ schedule_constraints(const schedule_constraints &obj); - inline explicit schedule_constraints(isl::ctx ctx, const std::string &str); - inline schedule_constraints &operator=(schedule_constraints obj); - inline ~schedule_constraints(); - inline __isl_give isl_schedule_constraints *copy() const &; - inline __isl_give isl_schedule_constraints *copy() && = delete; - inline __isl_keep isl_schedule_constraints *get() const; - inline __isl_give isl_schedule_constraints *release(); - inline bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; - - inline isl::schedule_constraints apply(isl::union_map umap) const; - inline isl::schedule compute_schedule() const; - inline isl::union_map get_coincidence() const; - inline isl::union_map get_conditional_validity() const; - inline isl::union_map get_conditional_validity_condition() const; - inline isl::set get_context() const; - inline isl::union_set get_domain() const; - inline isl::union_map get_proximity() 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::pw_aff dim_max(int pos) const; + inline isl::pw_aff dim_min(int pos) const; + inline isl::basic_set domain() const; + inline isl::map domain_factor_domain() const; + inline isl::map domain_factor_range() const; + inline isl::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 isl_size 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; + static inline isl::basic_map equal(isl::space space, unsigned int n_equal); + inline isl::basic_map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const; + inline bool every_map(const std::function &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::basic_map fix_si(isl::dim type, unsigned int pos, int value) const; + inline isl::basic_map fix_val(isl::dim type, unsigned int pos, isl::val v) const; + inline isl::basic_map fix_val(isl::dim type, unsigned int pos, long v) const; + inline isl::union_map fixed_power(const isl::val &exp) const; + inline isl::union_map fixed_power(long exp) const; + inline isl::map flat_range_product(const isl::map &map2) const; + inline isl::union_map flat_range_product(const isl::union_map &umap2) const; + inline isl::basic_map flatten() const; + inline isl::basic_map flatten_domain() const; + inline isl::basic_map flatten_range() const; + inline isl::map floordiv_val(const isl::val &d) const; + inline isl::map floordiv_val(long d) const; + inline void foreach_basic_map(const std::function &fn) const; + inline void foreach_map(const std::function &fn) const; + static inline isl::basic_map from_aff(isl::aff aff); + static inline isl::basic_map from_domain_and_range(isl::basic_set domain, isl::basic_set range); + 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::map gist_params(const isl::set &context) const; + inline isl::union_map gist_range(const isl::union_set &uset) const; + inline bool has_domain_tuple_id() const; + inline bool has_equal_space(const isl::map &map2) const; + inline bool has_range_tuple_id() const; + inline bool has_tuple_id(isl::dim type) const; + inline bool has_tuple_name(isl::dim type) 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 involves_dims(isl::dim type, unsigned int first, unsigned int n) 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 lower_bound_si(isl::dim type, unsigned int pos, int value) 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::map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; + inline isl_size n_basic_map() const; + inline isl::map order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const; + inline isl::set params() const; + inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) 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(isl::dim type, unsigned int first, unsigned int n) 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::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 isl_size 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::map set_tuple_id(isl::dim type, const isl::id &id) const; + inline isl::map set_tuple_id(isl::dim type, 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 sum(const isl::map &map2) const; + inline isl::basic_map_list to_list() const; + inline isl::union_map to_union_map() const; + inline isl::id tuple_id(isl::dim type) 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; + static inline isl::basic_map universe(isl::space space); + inline isl::basic_map unshifted_simple_hull() const; + inline isl::map upper_bound(const isl::multi_pw_aff &upper) const; + inline isl::map upper_bound_si(isl::dim type, unsigned int pos, int value) const; + inline isl::set wrap() const; + inline isl::map zip() const; }; -// declarations for isl::schedule_node -inline schedule_node manage(__isl_take isl_schedule_node *ptr); -inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr); +// declarations for isl::basic_map_list +inline basic_map_list manage(__isl_take isl_basic_map_list *ptr); +inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr); -class schedule_node { - friend inline schedule_node manage(__isl_take isl_schedule_node *ptr); - friend inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr); +class basic_map_list { + friend inline basic_map_list manage(__isl_take isl_basic_map_list *ptr); + friend inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr); - isl_schedule_node *ptr = nullptr; +protected: + isl_basic_map_list *ptr = nullptr; - inline explicit schedule_node(__isl_take isl_schedule_node *ptr); + inline explicit basic_map_list(__isl_take isl_basic_map_list *ptr); public: - inline /* implicit */ schedule_node(); - inline /* implicit */ schedule_node(const schedule_node &obj); - inline schedule_node &operator=(schedule_node obj); - inline ~schedule_node(); - inline __isl_give isl_schedule_node *copy() const &; - inline __isl_give isl_schedule_node *copy() && = delete; - inline __isl_keep isl_schedule_node *get() const; - inline __isl_give isl_schedule_node *release(); + inline /* implicit */ basic_map_list(); + inline /* implicit */ basic_map_list(const basic_map_list &obj); + inline explicit basic_map_list(isl::ctx ctx, int n); + inline explicit basic_map_list(isl::basic_map el); + inline basic_map_list &operator=(basic_map_list obj); + inline ~basic_map_list(); + inline __isl_give isl_basic_map_list *copy() const &; + inline __isl_give isl_basic_map_list *copy() && = delete; + inline __isl_keep isl_basic_map_list *get() const; + inline __isl_give isl_basic_map_list *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::schedule_node align_params(isl::space space) const; - inline isl::schedule_node ancestor(int generation) const; - inline boolean band_member_get_coincident(int pos) const; - inline isl::schedule_node band_member_set_coincident(int pos, int coincident) const; - inline isl::schedule_node band_set_ast_build_options(isl::union_set options) const; - inline isl::schedule_node child(int pos) const; - inline isl::set context_get_context() const; - inline isl::schedule_node cut() const; - inline isl::union_set domain_get_domain() const; - inline isl::union_pw_multi_aff expansion_get_contraction() const; - inline isl::union_map expansion_get_expansion() const; - inline isl::union_map extension_get_extension() const; - inline isl::union_set filter_get_filter() const; - inline isl::schedule_node first_child() const; - inline stat foreach_ancestor_top_down(const std::function &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 isl_size get_ancestor_child_position(const isl::schedule_node &ancestor) const; - inline isl::schedule_node get_child(int pos) const; - inline isl_size get_child_position() const; - inline isl::union_set get_domain() const; - inline isl::multi_union_pw_aff get_prefix_schedule_multi_union_pw_aff() const; - inline isl::union_map get_prefix_schedule_relation() const; - inline isl::union_map get_prefix_schedule_union_map() const; - inline isl::union_pw_multi_aff get_prefix_schedule_union_pw_multi_aff() const; - inline isl::schedule get_schedule() const; - inline isl_size get_schedule_depth() const; - inline isl::schedule_node get_shared_ancestor(const isl::schedule_node &node2) const; - inline isl::union_pw_multi_aff get_subtree_contraction() const; - inline isl::union_map get_subtree_expansion() const; - inline isl::union_map get_subtree_schedule_union_map() const; - inline isl_size get_tree_depth() const; - inline isl::union_set get_universe_domain() const; - inline isl::schedule_node graft_after(isl::schedule_node graft) const; - inline isl::schedule_node graft_before(isl::schedule_node graft) const; - inline isl::schedule_node group(isl::id group_id) const; - inline isl::set guard_get_guard() const; - inline boolean has_children() const; - inline boolean has_next_sibling() const; - inline boolean has_parent() const; - inline boolean has_previous_sibling() const; - inline isl::schedule_node insert_context(isl::set context) const; - inline isl::schedule_node insert_filter(isl::union_set filter) const; - inline isl::schedule_node insert_guard(isl::set context) const; - inline isl::schedule_node insert_mark(isl::id mark) const; - inline isl::schedule_node insert_partial_schedule(isl::multi_union_pw_aff schedule) const; - inline isl::schedule_node insert_sequence(isl::union_set_list filters) const; - inline isl::schedule_node insert_set(isl::union_set_list filters) const; - inline boolean is_equal(const isl::schedule_node &node2) const; - inline boolean is_subtree_anchored() const; - inline isl::id mark_get_id() const; - inline isl_size n_children() const; - inline isl::schedule_node next_sibling() 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::schedule_node previous_sibling() const; - inline isl::schedule_node reset_user() const; - inline isl::schedule_node root() const; - inline isl::schedule_node sequence_splice_child(int pos) const; + inline isl::basic_map_list add(isl::basic_map el) const; + inline isl::basic_map at(int index) const; + inline isl::basic_map get_at(int index) const; + inline isl::basic_map_list clear() const; + inline isl::basic_map_list concat(isl::basic_map_list list2) const; + inline isl::basic_map_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline isl::basic_map_list insert(unsigned int pos, isl::basic_map el) const; + inline isl_size size() const; }; -// declarations for isl::set -inline set manage(__isl_take isl_set *ptr); -inline set manage_copy(__isl_keep isl_set *ptr); +// declarations for isl::basic_set +inline basic_set manage(__isl_take isl_basic_set *ptr); +inline basic_set manage_copy(__isl_keep isl_basic_set *ptr); -class set { - friend inline set manage(__isl_take isl_set *ptr); - friend inline set manage_copy(__isl_keep isl_set *ptr); +class basic_set { + friend inline basic_set manage(__isl_take isl_basic_set *ptr); + friend inline basic_set manage_copy(__isl_keep isl_basic_set *ptr); - isl_set *ptr = nullptr; +protected: + isl_basic_set *ptr = nullptr; - inline explicit set(__isl_take isl_set *ptr); + inline explicit basic_set(__isl_take isl_basic_set *ptr); public: - inline /* implicit */ set(); - inline /* implicit */ set(const set &obj); - inline /* implicit */ set(isl::basic_set bset); - inline /* implicit */ set(isl::point pnt); - inline explicit set(isl::union_set uset); - inline explicit set(isl::ctx ctx, const std::string &str); - inline set &operator=(set obj); - inline ~set(); - inline __isl_give isl_set *copy() const &; - inline __isl_give isl_set *copy() && = delete; - inline __isl_keep isl_set *get() const; - inline __isl_give isl_set *release(); + inline /* implicit */ basic_set(); + inline /* implicit */ basic_set(const basic_set &obj); + inline /* implicit */ basic_set(isl::point pnt); + inline explicit basic_set(isl::ctx ctx, const std::string &str); + inline basic_set &operator=(basic_set obj); + inline ~basic_set(); + inline __isl_give isl_basic_set *copy() const &; + inline __isl_give isl_basic_set *copy() && = delete; + inline __isl_keep isl_basic_set *get() const; + inline __isl_give isl_basic_set *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::set add_constraint(isl::constraint constraint) const; + inline isl::set add_constraint(const isl::constraint &constraint) const; inline isl::set add_dims(isl::dim type, unsigned int n) const; inline isl::basic_set affine_hull() const; - inline isl::set align_params(isl::space model) const; - inline isl::set apply(isl::map map) const; - inline isl::set bind(isl::multi_id tuple) const; - inline isl::basic_set bounded_simple_hull() const; - static inline isl::set box_from_points(isl::point pnt1, isl::point pnt2); + inline isl::set align_params(const isl::space &model) 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::basic_set_list basic_set_list() const; + inline isl::set bind(const isl::multi_id &tuple) const; inline isl::set coalesce() const; - inline isl::basic_set coefficients() const; inline isl::set complement() const; + inline isl::union_set compute_divs() const; + inline bool contains(const isl::space &space) const; inline isl::basic_set convex_hull() const; - inline isl::val count_val() const; - inline isl::set detect_equalities() const; + inline isl::basic_set detect_equalities() const; inline isl_size dim(isl::dim type) const; - inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const; - inline boolean dim_has_any_upper_bound(isl::dim type, unsigned int pos) const; - inline boolean dim_has_lower_bound(isl::dim type, unsigned int pos) const; - inline boolean dim_has_upper_bound(isl::dim type, unsigned int pos) const; - inline boolean dim_is_bounded(isl::dim type, unsigned int pos) const; + inline bool dim_has_any_lower_bound(isl::dim type, unsigned int pos) const; + inline isl::id dim_id(isl::dim type, unsigned int pos) const; inline isl::pw_aff dim_max(int pos) const; inline isl::val dim_max_val(int pos) const; inline isl::pw_aff dim_min(int pos) const; inline isl::val dim_min_val(int pos) const; + inline std::string dim_name(isl::dim type, unsigned int pos) const; + inline isl::aff div(int pos) const; + inline isl::aff get_div(int pos) const; inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::set drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::set drop_unused_params() const; inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const; - static inline isl::set empty(isl::space space); - inline isl::set equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const; + inline bool every_set(const std::function &test) const; + inline isl::set extract_set(const isl::space &space) const; inline int find_dim_by_id(isl::dim type, const isl::id &id) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::set fix_si(isl::dim type, unsigned int pos, int value) const; - inline isl::set fix_val(isl::dim type, unsigned int pos, isl::val v) const; - inline isl::set flat_product(isl::set set2) const; - inline isl::set flatten() const; - inline isl::map flatten_map() const; - inline int follows_at(const isl::set &set2, int pos) const; - inline stat foreach_basic_set(const std::function &fn) const; - inline stat foreach_point(const std::function &fn) const; - static inline isl::set from_multi_aff(isl::multi_aff ma); - static inline isl::set from_multi_pw_aff(isl::multi_pw_aff mpa); - inline isl::set from_params() const; - static inline isl::set from_pw_aff(isl::pw_aff pwaff); - static inline isl::set from_pw_multi_aff(isl::pw_multi_aff pma); - inline isl::basic_set_list get_basic_set_list() const; - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline std::string get_dim_name(isl::dim type, unsigned int pos) const; - inline isl::multi_val get_plain_multi_val_if_fixed() const; - inline isl::fixed_box get_simple_fixed_box_hull() const; - inline isl::space get_space() const; - inline isl::val get_stride(int pos) const; - inline isl::id get_tuple_id() const; - inline std::string get_tuple_name() const; - inline isl::set gist(isl::set context) const; - inline isl::set gist_basic_set(isl::basic_set context) const; - inline isl::set gist_params(isl::set context) const; - inline boolean has_dim_id(isl::dim type, unsigned int pos) const; - inline boolean has_dim_name(isl::dim type, unsigned int pos) const; - inline boolean has_equal_space(const isl::set &set2) const; - inline boolean has_tuple_id() const; - inline boolean has_tuple_name() const; + inline int find_dim_by_id(isl::dim type, const std::string &id) const; + inline isl::basic_set fix_si(isl::dim type, unsigned int pos, int value) const; + inline isl::basic_set fix_val(isl::dim type, unsigned int pos, isl::val v) const; + inline isl::basic_set fix_val(isl::dim type, unsigned int pos, long v) const; + inline isl::basic_set flatten() const; + inline void foreach_basic_set(const std::function &fn) const; + inline void foreach_point(const std::function &fn) const; + inline void foreach_set(const std::function &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::set gist_params(const isl::set &context) const; + inline bool has_equal_space(const isl::set &set2) const; inline isl::map identity() const; + inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const; inline isl::pw_aff indicator_function() const; inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const; - inline isl::map insert_domain(isl::space domain) const; - inline isl::set intersect(isl::set set2) const; - inline isl::set intersect_factor_domain(isl::set domain) const; - inline isl::set intersect_factor_range(isl::set range) const; - inline isl::set intersect_params(isl::set params) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean involves_locals() const; - inline boolean is_bounded() const; - inline boolean is_box() const; - inline boolean is_disjoint(const isl::set &set2) const; - inline boolean is_empty() const; - inline boolean is_equal(const isl::set &set2) const; - inline boolean is_params() const; - inline boolean is_singleton() const; - inline boolean is_strict_subset(const isl::set &set2) const; - inline boolean is_subset(const isl::set &set2) const; - inline boolean is_wrapping() const; - inline isl::map lex_ge_set(isl::set set2) const; - inline isl::map lex_gt_set(isl::set set2) const; - inline isl::map lex_lt_set(isl::set set2) 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_dims(isl::dim type, unsigned int first, unsigned int n) const; + inline bool involves_locals() const; + inline bool is_bounded() 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_params() 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(isl::multi_pw_aff lower) const; - inline isl::set lower_bound(isl::multi_val lower) 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::set lower_bound_si(isl::dim type, unsigned int pos, int value) const; - inline isl::set lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const; + inline isl::set lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const; + inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) 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::set move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; inline isl_size n_basic_set() const; - inline isl_size n_dim() const; - static inline isl::set nat_universe(isl::space space); - inline isl::set neg() const; - inline isl::set params() const; - inline int plain_cmp(const isl::set &set2) const; + inline isl::basic_set params() const; inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const; - inline boolean plain_is_disjoint(const isl::set &set2) const; - inline boolean plain_is_empty() const; - inline boolean plain_is_equal(const isl::set &set2) const; - inline boolean plain_is_universe() const; - inline isl::basic_set plain_unshifted_simple_hull() const; + inline isl::multi_val 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::set product(isl::set set2) const; - inline isl::map project_onto_map(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::set project_out(isl::dim type, unsigned int first, unsigned int n) 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::basic_set project_out(isl::dim type, unsigned int first, unsigned int n) 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(isl::id_list list) 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::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const; inline isl::set remove_divs() const; - inline isl::set remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; inline isl::set remove_redundancies() const; - inline isl::set remove_unknown_divs() const; - inline isl::set reset_space(isl::space space) const; inline isl::set reset_tuple_id() const; - inline isl::set reset_user() const; inline isl::basic_set sample() const; inline isl::point sample_point() const; - inline isl::set set_dim_id(isl::dim type, unsigned int pos, isl::id id) const; - inline isl::set set_tuple_id(isl::id id) const; - inline isl::set set_tuple_name(const std::string &s) const; + inline isl::set set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const; + inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const; + inline isl::set_list set_list() const; + inline isl::set set_tuple_id(const isl::id &id) const; + inline isl::set set_tuple_id(const std::string &id) const; + inline isl::fixed_box simple_fixed_box_hull() const; inline isl::basic_set simple_hull() const; - inline int size() const; - inline isl::basic_set solutions() const; - inline isl::set split_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::set subtract(isl::set set2) const; - inline isl::set sum(isl::set set2) const; + inline isl::space space() const; + inline isl::space get_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::basic_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 isl_size 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; - static inline isl::set universe(isl::space space); + inline isl::id tuple_id() const; + inline std::string tuple_name() 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; + static inline isl::basic_set universe(isl::space space); inline isl::basic_set unshifted_simple_hull() const; - inline isl::basic_set unshifted_simple_hull_from_set_list(isl::set_list list) const; inline isl::map unwrap() const; - inline isl::set upper_bound(isl::multi_pw_aff upper) const; - inline isl::set upper_bound(isl::multi_val upper) const; - inline isl::set upper_bound_si(isl::dim type, unsigned int pos, int value) const; - inline isl::set upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const; - inline isl::map wrapped_domain_map() const; + inline isl::set upper_bound(const isl::multi_pw_aff &upper) const; + inline isl::set upper_bound(const isl::multi_val &upper) const; + inline isl::set upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const; + inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const; }; -// declarations for isl::set_list -inline set_list manage(__isl_take isl_set_list *ptr); -inline set_list manage_copy(__isl_keep isl_set_list *ptr); +// declarations for isl::basic_set_list +inline basic_set_list manage(__isl_take isl_basic_set_list *ptr); +inline basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr); -class set_list { - friend inline set_list manage(__isl_take isl_set_list *ptr); - friend inline set_list manage_copy(__isl_keep isl_set_list *ptr); +class basic_set_list { + friend inline basic_set_list manage(__isl_take isl_basic_set_list *ptr); + friend inline basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr); - isl_set_list *ptr = nullptr; +protected: + isl_basic_set_list *ptr = nullptr; - inline explicit set_list(__isl_take isl_set_list *ptr); + inline explicit basic_set_list(__isl_take isl_basic_set_list *ptr); public: - inline /* implicit */ set_list(); - inline /* implicit */ set_list(const set_list &obj); - inline set_list &operator=(set_list obj); - inline ~set_list(); - inline __isl_give isl_set_list *copy() const &; - inline __isl_give isl_set_list *copy() && = delete; - inline __isl_keep isl_set_list *get() const; - inline __isl_give isl_set_list *release(); + inline /* implicit */ basic_set_list(); + inline /* implicit */ basic_set_list(const basic_set_list &obj); + inline explicit basic_set_list(isl::ctx ctx, int n); + inline explicit basic_set_list(isl::basic_set el); + inline basic_set_list &operator=(basic_set_list obj); + inline ~basic_set_list(); + inline __isl_give isl_basic_set_list *copy() const &; + inline __isl_give isl_basic_set_list *copy() && = delete; + inline __isl_keep isl_basic_set_list *get() const; + inline __isl_give isl_basic_set_list *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::set_list add(isl::set el) const; - static inline isl::set_list alloc(isl::ctx ctx, int n); - inline isl::set_list clear() const; - inline isl::set_list concat(isl::set_list list2) const; - inline isl::set_list drop(unsigned int first, unsigned int n) const; - inline stat foreach(const std::function &fn) const; - static inline isl::set_list from_set(isl::set el); - inline isl::set get_at(int index) const; - inline isl::set get_set(int index) const; - inline isl::set_list insert(unsigned int pos, isl::set el) const; - inline isl_size n_set() const; - inline isl::set_list reverse() const; - inline isl::set_list set_set(int index, isl::set el) const; + inline isl::basic_set_list add(isl::basic_set el) const; + inline isl::basic_set at(int index) const; + inline isl::basic_set get_at(int index) const; + inline isl::basic_set_list clear() const; + inline isl::basic_set_list concat(isl::basic_set_list list2) const; + inline isl::basic_set_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline isl::basic_set_list insert(unsigned int pos, isl::basic_set el) const; inline isl_size size() const; - inline isl::set_list swap(unsigned int pos1, unsigned int pos2) const; - inline isl::set unite() const; }; -// declarations for isl::space -inline space manage(__isl_take isl_space *ptr); -inline space manage_copy(__isl_keep isl_space *ptr); +// declarations for isl::constraint +inline constraint manage(__isl_take isl_constraint *ptr); +inline constraint manage_copy(__isl_keep isl_constraint *ptr); -class space { - friend inline space manage(__isl_take isl_space *ptr); - friend inline space manage_copy(__isl_keep isl_space *ptr); +class constraint { + friend inline constraint manage(__isl_take isl_constraint *ptr); + friend inline constraint manage_copy(__isl_keep isl_constraint *ptr); - isl_space *ptr = nullptr; +protected: + isl_constraint *ptr = nullptr; - inline explicit space(__isl_take isl_space *ptr); + inline explicit constraint(__isl_take isl_constraint *ptr); public: - inline /* implicit */ space(); - inline /* implicit */ space(const space &obj); - inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out); - inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int dim); - inline space &operator=(space obj); - inline ~space(); - inline __isl_give isl_space *copy() const &; - inline __isl_give isl_space *copy() && = delete; - inline __isl_keep isl_space *get() const; - inline __isl_give isl_space *release(); + inline /* implicit */ constraint(); + inline /* implicit */ constraint(const constraint &obj); + inline constraint &operator=(constraint obj); + inline ~constraint(); + inline __isl_give isl_constraint *copy() const &; + inline __isl_give isl_constraint *copy() && = delete; + inline __isl_keep isl_constraint *get() const; + inline __isl_give isl_constraint *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::space add_dims(isl::dim type, unsigned int n) const; - inline isl::space add_named_tuple(isl::id tuple_id, unsigned int dim) const; - inline isl::space add_param_id(isl::id id) const; - inline isl::space add_unnamed_tuple(unsigned int dim) const; - inline isl::space align_params(isl::space space2) const; - inline boolean can_curry() const; - inline boolean can_range_curry() const; - inline boolean can_uncurry() const; - inline boolean can_zip() const; - inline isl::space curry() const; - inline isl_size dim(isl::dim type) const; - inline isl::space domain() const; - inline isl::space domain_factor_domain() const; - inline isl::space domain_factor_range() const; - inline boolean domain_is_wrapping() const; - inline isl::space domain_map() const; - inline isl::space domain_product(isl::space right) const; - inline isl::space drop_all_params() const; - inline isl::space drop_dims(isl::dim type, unsigned int first, unsigned int num) const; - inline isl::space factor_domain() const; - inline isl::space factor_range() const; - inline int find_dim_by_id(isl::dim type, const isl::id &id) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::space flatten_domain() const; - inline isl::space flatten_range() const; - inline isl::space from_domain() const; - inline isl::space from_range() const; - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline std::string get_dim_name(isl::dim type, unsigned int pos) const; - inline isl::id get_tuple_id(isl::dim type) const; - inline std::string get_tuple_name(isl::dim type) const; - inline boolean has_dim_id(isl::dim type, unsigned int pos) const; - inline boolean has_dim_name(isl::dim type, unsigned int pos) const; - inline boolean has_equal_params(const isl::space &space2) const; - inline boolean has_equal_tuples(const isl::space &space2) const; - inline boolean has_tuple_id(isl::dim type) const; - inline boolean has_tuple_name(isl::dim type) const; - inline isl::space insert_dims(isl::dim type, unsigned int pos, unsigned int n) const; - inline boolean is_domain(const isl::space &space2) const; - inline boolean is_equal(const isl::space &space2) const; - inline boolean is_map() const; - inline boolean is_params() const; - inline boolean is_product() const; - inline boolean is_range(const isl::space &space2) const; - inline boolean is_set() const; - inline boolean is_wrapping() const; - inline isl::space join(isl::space right) const; - inline isl::space map_from_domain_and_range(isl::space range) const; - inline isl::space map_from_set() const; - inline isl::space move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; - inline isl::space params() const; - static inline isl::space params_alloc(isl::ctx ctx, unsigned int nparam); - inline isl::space product(isl::space right) const; - inline isl::space range() const; - inline isl::space range_curry() const; - inline isl::space range_factor_domain() const; - inline isl::space range_factor_range() const; - inline boolean range_is_wrapping() const; - inline isl::space range_map() const; - inline isl::space range_product(isl::space right) const; - inline isl::space range_reverse() const; - inline isl::space reset_tuple_id(isl::dim type) const; - inline isl::space reset_user() const; - inline isl::space reverse() const; - inline isl::space set_dim_id(isl::dim type, unsigned int pos, isl::id id) const; - inline isl::space set_from_params() const; - inline isl::space set_tuple_id(isl::dim type, isl::id id) const; - inline isl::space set_tuple_name(isl::dim type, const std::string &s) const; - inline boolean tuple_is_equal(isl::dim type1, const isl::space &space2, isl::dim type2) const; - inline isl::space uncurry() const; - static inline isl::space unit(isl::ctx ctx); - inline isl::space unwrap() const; - inline isl::space wrap() const; - inline isl::space zip() const; + static inline isl::constraint alloc_equality(isl::local_space ls); + static inline isl::constraint alloc_inequality(isl::local_space ls); + inline isl::constraint set_coefficient_si(isl::dim type, int pos, int v) const; + inline isl::constraint set_constant_si(int v) const; + inline isl::constraint set_constant_val(isl::val v) const; + inline isl::constraint set_constant_val(long v) const; }; -// declarations for isl::term -inline term manage(__isl_take isl_term *ptr); -inline term manage_copy(__isl_keep isl_term *ptr); +// declarations for isl::fixed_box +inline fixed_box manage(__isl_take isl_fixed_box *ptr); +inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr); -class term { - friend inline term manage(__isl_take isl_term *ptr); - friend inline term manage_copy(__isl_keep isl_term *ptr); +class fixed_box { + friend inline fixed_box manage(__isl_take isl_fixed_box *ptr); + friend inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr); - isl_term *ptr = nullptr; +protected: + isl_fixed_box *ptr = nullptr; - inline explicit term(__isl_take isl_term *ptr); + inline explicit fixed_box(__isl_take isl_fixed_box *ptr); public: - inline /* implicit */ term(); - inline /* implicit */ term(const term &obj); - inline term &operator=(term obj); - inline ~term(); - inline __isl_give isl_term *copy() const &; - inline __isl_give isl_term *copy() && = delete; - inline __isl_keep isl_term *get() const; - inline __isl_give isl_term *release(); + inline /* implicit */ fixed_box(); + inline /* implicit */ fixed_box(const fixed_box &obj); + inline fixed_box &operator=(fixed_box obj); + inline ~fixed_box(); + inline __isl_give isl_fixed_box *copy() const &; + inline __isl_give isl_fixed_box *copy() && = delete; + inline __isl_keep isl_fixed_box *get() const; + inline __isl_give isl_fixed_box *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline isl_size dim(isl::dim type) const; - inline isl::val get_coefficient_val() const; - inline isl::aff get_div(unsigned int pos) const; - inline isl_size get_exp(isl::dim type, unsigned int pos) 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; }; -// declarations for isl::union_access_info -inline union_access_info manage(__isl_take isl_union_access_info *ptr); -inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr); +// declarations for isl::id +inline id manage(__isl_take isl_id *ptr); +inline id manage_copy(__isl_keep isl_id *ptr); -class union_access_info { - friend inline union_access_info manage(__isl_take isl_union_access_info *ptr); - friend inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr); +class id { + friend inline id manage(__isl_take isl_id *ptr); + friend inline id manage_copy(__isl_keep isl_id *ptr); - isl_union_access_info *ptr = nullptr; +protected: + isl_id *ptr = nullptr; - inline explicit union_access_info(__isl_take isl_union_access_info *ptr); + inline explicit id(__isl_take isl_id *ptr); public: - inline /* implicit */ union_access_info(); - inline /* implicit */ union_access_info(const union_access_info &obj); - inline explicit union_access_info(isl::union_map sink); - inline union_access_info &operator=(union_access_info obj); - inline ~union_access_info(); - inline __isl_give isl_union_access_info *copy() const &; - inline __isl_give isl_union_access_info *copy() && = delete; - inline __isl_keep isl_union_access_info *get() const; - inline __isl_give isl_union_access_info *release(); + inline /* implicit */ id(); + inline /* implicit */ id(const id &obj); + inline explicit id(isl::ctx ctx, const std::string &str); + inline id &operator=(id obj); + inline ~id(); + inline __isl_give isl_id *copy() const &; + inline __isl_give isl_id *copy() && = delete; + inline __isl_keep isl_id *get() const; + inline __isl_give isl_id *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline isl::union_flow compute_flow() const; - inline isl::union_access_info set_kill(isl::union_map kill) const; - inline isl::union_access_info set_may_source(isl::union_map may_source) const; - inline isl::union_access_info set_must_source(isl::union_map must_source) const; - inline isl::union_access_info set_schedule(isl::schedule schedule) const; - inline isl::union_access_info set_schedule_map(isl::union_map schedule_map) const; + static inline isl::id alloc(isl::ctx ctx, const std::string &name, void * user); + inline std::string name() const; + inline std::string get_name() const; + inline isl::id_list to_list() const; + inline void * user() const; + inline void * get_user() const; }; -// declarations for isl::union_flow -inline union_flow manage(__isl_take isl_union_flow *ptr); -inline union_flow manage_copy(__isl_keep isl_union_flow *ptr); +// declarations for isl::id_list +inline id_list manage(__isl_take isl_id_list *ptr); +inline id_list manage_copy(__isl_keep isl_id_list *ptr); -class union_flow { - friend inline union_flow manage(__isl_take isl_union_flow *ptr); - friend inline union_flow manage_copy(__isl_keep isl_union_flow *ptr); +class id_list { + friend inline id_list manage(__isl_take isl_id_list *ptr); + friend inline id_list manage_copy(__isl_keep isl_id_list *ptr); - isl_union_flow *ptr = nullptr; +protected: + isl_id_list *ptr = nullptr; - inline explicit union_flow(__isl_take isl_union_flow *ptr); + inline explicit id_list(__isl_take isl_id_list *ptr); public: - inline /* implicit */ union_flow(); - inline /* implicit */ union_flow(const union_flow &obj); - inline union_flow &operator=(union_flow obj); - inline ~union_flow(); - inline __isl_give isl_union_flow *copy() const &; - inline __isl_give isl_union_flow *copy() && = delete; - inline __isl_keep isl_union_flow *get() const; - inline __isl_give isl_union_flow *release(); + inline /* implicit */ 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_give isl_id_list *copy() && = delete; + inline __isl_keep isl_id_list *get() const; + inline __isl_give isl_id_list *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline isl::union_map get_full_may_dependence() const; - inline isl::union_map get_full_must_dependence() const; - inline isl::union_map get_may_dependence() const; - inline isl::union_map get_may_no_source() const; - inline isl::union_map get_must_dependence() const; - inline isl::union_map get_must_no_source() 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 &fn) 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 isl_size size() const; }; -// declarations for isl::union_map -inline union_map manage(__isl_take isl_union_map *ptr); -inline union_map manage_copy(__isl_keep isl_union_map *ptr); +// declarations for isl::id_to_ast_expr +inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr); +inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr); -class union_map { - friend inline union_map manage(__isl_take isl_union_map *ptr); - friend inline union_map manage_copy(__isl_keep isl_union_map *ptr); - - isl_union_map *ptr = nullptr; - - inline explicit union_map(__isl_take isl_union_map *ptr); - -public: - inline /* implicit */ union_map(); - inline /* implicit */ union_map(const union_map &obj); - inline /* implicit */ union_map(isl::basic_map bmap); - inline /* implicit */ union_map(isl::map map); - inline explicit union_map(isl::union_pw_multi_aff upma); - inline explicit union_map(isl::ctx ctx, const std::string &str); - inline union_map &operator=(union_map obj); - inline ~union_map(); - inline __isl_give isl_union_map *copy() const &; - inline __isl_give isl_union_map *copy() && = delete; - inline __isl_keep isl_union_map *get() const; - inline __isl_give isl_union_map *release(); - inline bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; - - inline isl::union_map affine_hull() const; - inline isl::union_map align_params(isl::space model) 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::union_set bind_range(isl::multi_id tuple) const; - inline isl::union_map coalesce() const; - inline boolean contains(const isl::space &space) const; - inline isl::union_map curry() const; - inline isl::union_set deltas() const; - inline isl::union_map deltas_map() const; - inline isl::union_map detect_equalities() const; - inline isl_size dim(isl::dim type) const; - inline isl::union_set domain() const; - inline isl::union_map domain_factor_domain() const; - inline isl::union_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::union_map domain_product(isl::union_map umap2) const; - static inline isl::union_map empty(isl::ctx ctx); - inline isl::union_map eq_at(isl::multi_union_pw_aff mupa) const; - inline isl::map extract_map(isl::space space) const; - inline isl::union_map factor_domain() const; - inline isl::union_map factor_range() const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::union_map fixed_power(isl::val exp) const; - inline isl::union_map flat_domain_product(isl::union_map umap2) const; - inline isl::union_map flat_range_product(isl::union_map umap2) const; - inline stat foreach_map(const std::function &fn) const; - static inline isl::union_map from(isl::multi_union_pw_aff mupa); - 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); - static inline isl::union_map from_union_pw_aff(isl::union_pw_aff upa); - inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; - inline uint32_t get_hash() const; - inline isl::map_list get_map_list() 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 isl::union_map gist_range(isl::union_set uset) const; - inline isl::union_map intersect(isl::union_map umap2) const; - inline isl::union_map intersect_domain(isl::space space) const; - inline isl::union_map intersect_domain(isl::union_set uset) const; - inline isl::union_map intersect_domain_factor_domain(isl::union_map factor) const; - inline isl::union_map intersect_domain_factor_range(isl::union_map factor) const; - inline isl::union_map intersect_params(isl::set set) const; - inline isl::union_map intersect_range(isl::space space) const; - inline isl::union_map intersect_range(isl::union_set uset) const; - inline isl::union_map intersect_range_factor_domain(isl::union_map factor) const; - inline isl::union_map intersect_range_factor_range(isl::union_map factor) const; - inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline boolean is_bijective() const; - inline boolean is_disjoint(const isl::union_map &umap2) const; - inline boolean is_empty() const; - inline boolean is_equal(const isl::union_map &umap2) const; - inline boolean is_identity() const; - inline boolean is_injective() const; - inline boolean is_single_valued() const; - inline boolean is_strict_subset(const isl::union_map &umap2) const; - inline boolean is_subset(const isl::union_map &umap2) const; - inline boolean isa_map() const; - inline isl::union_map lex_ge_at_multi_union_pw_aff(isl::multi_union_pw_aff mupa) const; - inline isl::union_map lex_ge_union_map(isl::union_map umap2) const; - inline isl::union_map lex_gt_at_multi_union_pw_aff(isl::multi_union_pw_aff mupa) const; - inline isl::union_map lex_gt_union_map(isl::union_map umap2) const; - inline isl::union_map lex_le_at_multi_union_pw_aff(isl::multi_union_pw_aff mupa) const; - inline isl::union_map lex_le_union_map(isl::union_map umap2) const; - inline isl::union_map lex_lt_at_multi_union_pw_aff(isl::multi_union_pw_aff mupa) const; - inline isl::union_map lex_lt_union_map(isl::union_map umap2) const; - inline isl::union_map lexmax() const; - inline isl::union_map lexmin() const; - inline isl_size n_map() const; - inline isl::set params() const; - inline boolean plain_is_empty() const; - inline boolean plain_is_injective() 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 preimage_domain(isl::pw_multi_aff pma) const; - inline isl::union_map preimage_domain(isl::union_pw_multi_aff upma) const; - inline isl::union_map preimage_range(isl::multi_aff ma) const; - inline isl::union_map preimage_range(isl::pw_multi_aff pma) const; - inline isl::union_map preimage_range(isl::union_pw_multi_aff upma) const; - inline isl::union_map product(isl::union_map umap2) const; - inline isl::union_map project_out(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::union_map project_out_all_params() const; - inline isl::union_set range() const; - inline isl::union_map range_curry() const; - inline isl::union_map range_factor_domain() const; - inline isl::union_map range_factor_range() const; - inline isl::union_map range_map() const; - inline isl::union_map range_product(isl::union_map umap2) const; - inline isl::union_map range_reverse() const; - inline isl::union_map remove_divs() const; - inline isl::union_map remove_redundancies() const; - inline isl::union_map reset_user() const; - inline isl::union_map reverse() const; - inline isl::basic_map sample() const; - inline isl::union_map simple_hull() 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 isl::union_map uncurry() const; - inline isl::union_map unite(isl::union_map umap2) const; - inline isl::union_map universe() const; - inline isl::union_set wrap() const; - inline isl::union_map zip() const; -}; - -// declarations for isl::union_map_list -inline union_map_list manage(__isl_take isl_union_map_list *ptr); -inline union_map_list manage_copy(__isl_keep isl_union_map_list *ptr); - -class union_map_list { - friend inline union_map_list manage(__isl_take isl_union_map_list *ptr); - friend inline union_map_list manage_copy(__isl_keep isl_union_map_list *ptr); - - isl_union_map_list *ptr = nullptr; - - inline explicit union_map_list(__isl_take isl_union_map_list *ptr); - -public: - inline /* implicit */ union_map_list(); - inline /* implicit */ union_map_list(const union_map_list &obj); - inline union_map_list &operator=(union_map_list obj); - inline ~union_map_list(); - inline __isl_give isl_union_map_list *copy() const &; - inline __isl_give isl_union_map_list *copy() && = delete; - inline __isl_keep isl_union_map_list *get() const; - inline __isl_give isl_union_map_list *release(); - inline bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; - - inline isl::union_map_list add(isl::union_map el) const; - static inline isl::union_map_list alloc(isl::ctx ctx, int n); - inline isl::union_map_list clear() const; - inline isl::union_map_list concat(isl::union_map_list list2) const; - inline isl::union_map_list drop(unsigned int first, unsigned int n) const; - inline stat foreach(const std::function &fn) const; - static inline isl::union_map_list from_union_map(isl::union_map el); - inline isl::union_map get_at(int index) const; - inline isl::union_map get_union_map(int index) const; - inline isl::union_map_list insert(unsigned int pos, isl::union_map el) const; - inline isl_size n_union_map() const; - inline isl::union_map_list reverse() const; - inline isl::union_map_list set_union_map(int index, isl::union_map el) const; - inline isl_size size() const; - inline isl::union_map_list swap(unsigned int pos1, unsigned int pos2) const; -}; - -// declarations for isl::union_pw_aff -inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr); -inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr); - -class union_pw_aff { - friend inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr); - friend inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr); +class id_to_ast_expr { + friend inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr); + friend inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr); - isl_union_pw_aff *ptr = nullptr; +protected: + isl_id_to_ast_expr *ptr = nullptr; - inline explicit union_pw_aff(__isl_take isl_union_pw_aff *ptr); + inline explicit id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr); public: - inline /* implicit */ union_pw_aff(); - inline /* implicit */ union_pw_aff(const union_pw_aff &obj); - inline /* implicit */ union_pw_aff(isl::aff aff); - inline /* implicit */ union_pw_aff(isl::pw_aff pa); - inline explicit union_pw_aff(isl::ctx ctx, const std::string &str); - inline explicit union_pw_aff(isl::union_set domain, isl::val v); - inline union_pw_aff &operator=(union_pw_aff obj); - inline ~union_pw_aff(); - inline __isl_give isl_union_pw_aff *copy() const &; - inline __isl_give isl_union_pw_aff *copy() && = delete; - inline __isl_keep isl_union_pw_aff *get() const; - inline __isl_give isl_union_pw_aff *release(); + inline /* implicit */ id_to_ast_expr(); + inline /* implicit */ id_to_ast_expr(const id_to_ast_expr &obj); + inline id_to_ast_expr &operator=(id_to_ast_expr obj); + inline ~id_to_ast_expr(); + inline __isl_give isl_id_to_ast_expr *copy() const &; + inline __isl_give isl_id_to_ast_expr *copy() && = delete; + inline __isl_keep isl_id_to_ast_expr *get() const; + inline __isl_give isl_id_to_ast_expr *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::union_pw_aff add(isl::union_pw_aff upa2) const; - inline isl::union_pw_aff add_pw_aff(isl::pw_aff pa) const; - static inline isl::union_pw_aff aff_on_domain(isl::union_set domain, isl::aff aff); - inline isl::union_pw_aff align_params(isl::space model) const; - inline isl::union_set bind(isl::id id) const; - inline isl::union_pw_aff coalesce() const; - inline isl_size dim(isl::dim type) const; - inline isl::union_set domain() const; - inline isl::union_pw_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - static inline isl::union_pw_aff empty(isl::space space); - static inline isl::union_pw_aff empty_ctx(isl::ctx ctx); - static inline isl::union_pw_aff empty_space(isl::space space); - inline isl::pw_aff extract_pw_aff(isl::space space) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::union_pw_aff floor() const; - inline stat foreach_pw_aff(const std::function &fn) const; - inline isl::pw_aff_list get_pw_aff_list() const; - inline isl::space get_space() const; - inline isl::union_pw_aff gist(isl::union_set context) const; - inline isl::union_pw_aff gist_params(isl::set context) 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 boolean involves_nan() const; - inline isl::val max_val() const; - inline isl::val min_val() const; - inline isl::union_pw_aff mod_val(isl::val f) const; - inline isl_size n_pw_aff() const; - inline isl::union_pw_aff neg() const; - static inline isl::union_pw_aff param_on_domain_id(isl::union_set domain, isl::id id); - inline boolean plain_is_equal(const isl::union_pw_aff &upa2) const; - inline isl::union_pw_aff pullback(isl::union_pw_multi_aff upma) const; - static inline isl::union_pw_aff pw_aff_on_domain(isl::union_set domain, isl::pw_aff pa); - inline isl::union_pw_aff reset_user() const; - inline isl::union_pw_aff scale_down_val(isl::val v) const; - inline isl::union_pw_aff scale_val(isl::val v) const; - inline isl::union_pw_aff sub(isl::union_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 union_add(isl::union_pw_aff upa2) const; - inline isl::union_set zero_union_set() const; + static inline isl::id_to_ast_expr alloc(isl::ctx ctx, int min_size); + inline isl::id_to_ast_expr set(isl::id key, isl::ast_expr val) const; + inline isl::id_to_ast_expr set(const std::string &key, const isl::ast_expr &val) const; }; -// declarations for isl::union_pw_aff_list -inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr); -inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr); +// declarations for isl::local_space +inline local_space manage(__isl_take isl_local_space *ptr); +inline local_space manage_copy(__isl_keep isl_local_space *ptr); -class union_pw_aff_list { - friend inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr); - friend inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr); +class local_space { + friend inline local_space manage(__isl_take isl_local_space *ptr); + friend inline local_space manage_copy(__isl_keep isl_local_space *ptr); - isl_union_pw_aff_list *ptr = nullptr; +protected: + isl_local_space *ptr = nullptr; - inline explicit union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr); + inline explicit local_space(__isl_take isl_local_space *ptr); public: - inline /* implicit */ union_pw_aff_list(); - inline /* implicit */ union_pw_aff_list(const union_pw_aff_list &obj); - 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_give isl_union_pw_aff_list *copy() && = delete; - inline __isl_keep isl_union_pw_aff_list *get() const; - inline __isl_give isl_union_pw_aff_list *release(); + inline /* implicit */ local_space(); + inline /* implicit */ local_space(const local_space &obj); + inline explicit local_space(isl::space space); + inline local_space &operator=(local_space obj); + inline ~local_space(); + inline __isl_give isl_local_space *copy() const &; + inline __isl_give isl_local_space *copy() && = delete; + inline __isl_keep isl_local_space *get() const; + inline __isl_give isl_local_space *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::union_pw_aff_list add(isl::union_pw_aff el) const; - static inline isl::union_pw_aff_list alloc(isl::ctx ctx, int n); - 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 stat foreach(const std::function &fn) const; - static inline isl::union_pw_aff_list from_union_pw_aff(isl::union_pw_aff el); - inline isl::union_pw_aff get_at(int index) const; - inline isl::union_pw_aff get_union_pw_aff(int index) const; - inline isl::union_pw_aff_list insert(unsigned int pos, isl::union_pw_aff el) const; - inline isl_size n_union_pw_aff() const; - inline isl::union_pw_aff_list reverse() const; - inline isl::union_pw_aff_list set_union_pw_aff(int index, isl::union_pw_aff el) const; - inline isl_size size() const; - inline isl::union_pw_aff_list swap(unsigned int pos1, unsigned int pos2) const; }; -// declarations for isl::union_pw_multi_aff -inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr); -inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr); +// declarations for isl::map +inline map manage(__isl_take isl_map *ptr); +inline map manage_copy(__isl_keep isl_map *ptr); -class union_pw_multi_aff { - friend inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr); - friend inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr); +class map { + friend inline map manage(__isl_take isl_map *ptr); + friend inline map manage_copy(__isl_keep isl_map *ptr); - isl_union_pw_multi_aff *ptr = nullptr; +protected: + isl_map *ptr = nullptr; - inline explicit union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr); + inline explicit map(__isl_take isl_map *ptr); public: - inline /* implicit */ union_pw_multi_aff(); - inline /* implicit */ union_pw_multi_aff(const union_pw_multi_aff &obj); - inline /* implicit */ union_pw_multi_aff(isl::aff aff); - inline explicit union_pw_multi_aff(isl::union_set uset); - inline /* implicit */ union_pw_multi_aff(isl::multi_aff ma); - inline explicit union_pw_multi_aff(isl::multi_union_pw_aff mupa); - inline /* implicit */ union_pw_multi_aff(isl::pw_multi_aff pma); - inline explicit union_pw_multi_aff(isl::union_map umap); - inline /* implicit */ union_pw_multi_aff(isl::union_pw_aff upa); - inline explicit union_pw_multi_aff(isl::ctx ctx, const std::string &str); - inline union_pw_multi_aff &operator=(union_pw_multi_aff obj); - inline ~union_pw_multi_aff(); - inline __isl_give isl_union_pw_multi_aff *copy() const &; - inline __isl_give isl_union_pw_multi_aff *copy() && = delete; - inline __isl_keep isl_union_pw_multi_aff *get() const; - inline __isl_give isl_union_pw_multi_aff *release(); + inline /* implicit */ map(); + inline /* implicit */ map(const map &obj); + inline /* implicit */ map(isl::basic_map bmap); + inline explicit map(isl::ctx ctx, const std::string &str); + inline map &operator=(map obj); + inline ~map(); + inline __isl_give isl_map *copy() const &; + inline __isl_give isl_map *copy() && = delete; + inline __isl_keep isl_map *get() const; + inline __isl_give isl_map *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::union_pw_multi_aff add(isl::union_pw_multi_aff upma2) const; - inline isl::union_pw_multi_aff add_pw_multi_aff(isl::pw_multi_aff pma) const; - inline isl::union_pw_multi_aff align_params(isl::space model) const; - inline isl::union_pw_multi_aff apply(isl::union_pw_multi_aff upma2) const; + inline isl::map add_constraint(isl::constraint constraint) const; + inline isl::map add_dims(isl::dim type, unsigned int n) const; + inline isl::basic_map affine_hull() const; + inline isl::map align_params(isl::space model) 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 coalesce() const; + inline isl::union_pw_multi_aff as_union_pw_multi_aff() const; + inline isl::basic_map_list basic_map_list() const; + inline isl::basic_map_list get_basic_map_list() const; + inline isl::set bind_domain(isl::multi_id tuple) const; + inline isl::set bind_range(isl::multi_id tuple) const; + inline bool can_curry() 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_size dim(isl::dim type) const; - inline isl::union_set domain() const; - inline isl::union_pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - static inline isl::union_pw_multi_aff empty(isl::space space); - static inline isl::union_pw_multi_aff empty(isl::ctx ctx); - static inline isl::union_pw_multi_aff empty_space(isl::space space); - inline isl::pw_multi_aff extract_pw_multi_aff(isl::space space) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline isl::union_pw_multi_aff flat_range_product(isl::union_pw_multi_aff upma2) const; - inline stat foreach_pw_multi_aff(const std::function &fn) const; - static inline isl::union_pw_multi_aff from_union_set(isl::union_set uset); - inline isl::pw_multi_aff_list get_pw_multi_aff_list() const; + inline isl::pw_aff dim_max(int pos) const; + inline isl::pw_aff dim_min(int pos) const; + inline isl::set domain() const; + inline isl::map domain_factor_domain() const; + inline isl::map domain_factor_range() const; + inline isl::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 isl_size 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 isl::map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const; + inline bool every_map(const std::function &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::map fix_si(isl::dim type, unsigned int pos, int value) const; + inline isl::union_map fixed_power(const isl::val &exp) const; + inline isl::union_map fixed_power(long exp) const; + inline isl::map flat_range_product(isl::map map2) const; + inline isl::union_map flat_range_product(const isl::union_map &umap2) const; + inline isl::map flat_range_product(const isl::basic_map &map2) const; + inline isl::map flatten() const; + inline isl::map flatten_domain() const; + inline isl::map flatten_range() const; + inline isl::map floordiv_val(isl::val d) const; + inline isl::map floordiv_val(long d) const; + inline void foreach_basic_map(const std::function &fn) const; + inline void foreach_map(const std::function &fn) const; + static inline isl::map from_aff(isl::aff aff); + static inline isl::map from_domain(isl::set set); + static inline isl::map from_domain_and_range(isl::set domain, isl::set range); + static inline isl::map from_multi_aff(isl::multi_aff maff); + static inline isl::map from_pw_aff(isl::pw_aff pwaff); + static inline isl::map from_range(isl::set set); + static inline isl::map from_union_map(isl::union_map umap); + 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::map gist_params(isl::set context) const; + inline isl::union_map gist_range(const isl::union_set &uset) const; + inline bool has_domain_tuple_id() const; + inline bool has_equal_space(const isl::map &map2) const; + inline bool has_range_tuple_id() const; + inline bool has_tuple_id(isl::dim type) const; + inline bool has_tuple_name(isl::dim type) const; + static inline isl::map identity(isl::space space); + 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 involves_dims(isl::dim type, unsigned int first, unsigned int n) 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; + static inline isl::map lex_ge(isl::space set_space); + inline isl::map lex_ge_at(isl::multi_pw_aff mpa) const; + static inline isl::map lex_gt(isl::space set_space); + inline isl::map lex_gt_at(isl::multi_pw_aff mpa) const; + static inline isl::map lex_le(isl::space set_space); + inline isl::map lex_le_at(isl::multi_pw_aff mpa) const; + static inline isl::map lex_lt(isl::space set_space); + inline isl::map lex_lt_at(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(isl::multi_pw_aff lower) const; + inline isl::map lower_bound_si(isl::dim type, unsigned int pos, int value) 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::map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const; + inline isl_size n_basic_map() const; + inline isl::map order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const; + inline isl::set params() 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(isl::dim type, unsigned int first, unsigned int n) 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::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 isl_size 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::map set_tuple_id(isl::dim type, isl::id id) const; + inline isl::map set_tuple_id(isl::dim type, const std::string &id) const; + inline isl::space space() const; inline isl::space get_space() const; - inline isl::union_pw_aff get_union_pw_aff(int pos) const; - inline isl::union_pw_multi_aff gist(isl::union_set context) const; - inline isl::union_pw_multi_aff gist_params(isl::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 isl::union_pw_multi_aff intersect_domain_wrapped_domain(isl::union_set uset) const; - inline isl::union_pw_multi_aff intersect_domain_wrapped_range(isl::union_set uset) const; - inline isl::union_pw_multi_aff intersect_params(isl::set set) const; - inline boolean involves_locals() const; - inline boolean involves_nan() const; - inline boolean isa_pw_multi_aff() const; - static inline isl::union_pw_multi_aff multi_val_on_domain(isl::union_set domain, isl::multi_val mv); - inline isl_size n_pw_multi_aff() const; - inline isl::union_pw_multi_aff neg() const; - inline boolean plain_is_empty() const; - inline boolean plain_is_equal(const isl::union_pw_multi_aff &upma2) 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::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::union_pw_multi_aff reset_user() const; - inline isl::union_pw_multi_aff scale_down_val(isl::val val) const; - inline isl::union_pw_multi_aff scale_multi_val(isl::multi_val mv) const; - inline isl::union_pw_multi_aff scale_val(isl::val val) 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_pw_multi_aff union_add(isl::union_pw_multi_aff upma2) 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 sum(isl::map map2) const; + inline isl::map_list to_list() const; + inline isl::union_map to_union_map() const; + inline isl::id tuple_id(isl::dim type) const; + inline isl::id get_tuple_id(isl::dim type) 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 upper_bound_si(isl::dim type, unsigned int pos, int value) const; + inline isl::set wrap() const; + inline isl::map zip() const; }; -// declarations for isl::union_pw_multi_aff_list -inline union_pw_multi_aff_list manage(__isl_take isl_union_pw_multi_aff_list *ptr); -inline union_pw_multi_aff_list manage_copy(__isl_keep isl_union_pw_multi_aff_list *ptr); +// 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 union_pw_multi_aff_list { - friend inline union_pw_multi_aff_list manage(__isl_take isl_union_pw_multi_aff_list *ptr); - friend inline union_pw_multi_aff_list manage_copy(__isl_keep isl_union_pw_multi_aff_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); - isl_union_pw_multi_aff_list *ptr = nullptr; +protected: + isl_map_list *ptr = nullptr; - inline explicit union_pw_multi_aff_list(__isl_take isl_union_pw_multi_aff_list *ptr); + inline explicit map_list(__isl_take isl_map_list *ptr); public: - inline /* implicit */ union_pw_multi_aff_list(); - inline /* implicit */ union_pw_multi_aff_list(const union_pw_multi_aff_list &obj); - inline union_pw_multi_aff_list &operator=(union_pw_multi_aff_list obj); - inline ~union_pw_multi_aff_list(); - inline __isl_give isl_union_pw_multi_aff_list *copy() const &; - inline __isl_give isl_union_pw_multi_aff_list *copy() && = delete; - inline __isl_keep isl_union_pw_multi_aff_list *get() const; - inline __isl_give isl_union_pw_multi_aff_list *release(); + 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 void dump() const; - - inline isl::union_pw_multi_aff_list add(isl::union_pw_multi_aff el) const; - static inline isl::union_pw_multi_aff_list alloc(isl::ctx ctx, int n); - inline isl::union_pw_multi_aff_list clear() const; - inline isl::union_pw_multi_aff_list concat(isl::union_pw_multi_aff_list list2) const; - inline isl::union_pw_multi_aff_list drop(unsigned int first, unsigned int n) const; - inline stat foreach(const std::function &fn) const; - static inline isl::union_pw_multi_aff_list from_union_pw_multi_aff(isl::union_pw_multi_aff el); - inline isl::union_pw_multi_aff get_at(int index) const; - inline isl::union_pw_multi_aff get_union_pw_multi_aff(int index) const; - inline isl::union_pw_multi_aff_list insert(unsigned int pos, isl::union_pw_multi_aff el) const; - inline isl_size n_union_pw_multi_aff() const; - inline isl::union_pw_multi_aff_list reverse() const; - inline isl::union_pw_multi_aff_list set_union_pw_multi_aff(int index, isl::union_pw_multi_aff el) 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 &fn) const; + inline isl::map_list insert(unsigned int pos, isl::map el) const; inline isl_size size() const; - inline isl::union_pw_multi_aff_list swap(unsigned int pos1, unsigned int pos2) const; }; -// declarations for isl::union_pw_qpolynomial -inline union_pw_qpolynomial manage(__isl_take isl_union_pw_qpolynomial *ptr); -inline union_pw_qpolynomial manage_copy(__isl_keep isl_union_pw_qpolynomial *ptr); +// 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); -class union_pw_qpolynomial { - friend inline union_pw_qpolynomial manage(__isl_take isl_union_pw_qpolynomial *ptr); - friend inline union_pw_qpolynomial manage_copy(__isl_keep isl_union_pw_qpolynomial *ptr); +class multi_aff { + friend inline multi_aff manage(__isl_take isl_multi_aff *ptr); + friend inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr); - isl_union_pw_qpolynomial *ptr = nullptr; +protected: + isl_multi_aff *ptr = nullptr; - inline explicit union_pw_qpolynomial(__isl_take isl_union_pw_qpolynomial *ptr); + inline explicit multi_aff(__isl_take isl_multi_aff *ptr); public: - inline /* implicit */ union_pw_qpolynomial(); - inline /* implicit */ union_pw_qpolynomial(const union_pw_qpolynomial &obj); - inline explicit union_pw_qpolynomial(isl::ctx ctx, const std::string &str); - inline union_pw_qpolynomial &operator=(union_pw_qpolynomial obj); - inline ~union_pw_qpolynomial(); - inline __isl_give isl_union_pw_qpolynomial *copy() const &; - inline __isl_give isl_union_pw_qpolynomial *copy() && = delete; - inline __isl_keep isl_union_pw_qpolynomial *get() const; - inline __isl_give isl_union_pw_qpolynomial *release(); + inline /* implicit */ multi_aff(); + inline /* implicit */ multi_aff(const multi_aff &obj); + inline /* implicit */ multi_aff(isl::aff aff); + inline explicit multi_aff(isl::space space, isl::aff_list list); + inline explicit multi_aff(isl::ctx ctx, const std::string &str); + inline multi_aff &operator=(multi_aff obj); + inline ~multi_aff(); + inline __isl_give isl_multi_aff *copy() const &; + inline __isl_give isl_multi_aff *copy() && = delete; + inline __isl_keep isl_multi_aff *get() const; + inline __isl_give isl_multi_aff *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline isl::union_pw_qpolynomial add(isl::union_pw_qpolynomial upwqp2) const; - inline isl::union_pw_qpolynomial add_pw_qpolynomial(isl::pw_qpolynomial pwqp) const; - inline isl::union_pw_qpolynomial align_params(isl::space model) const; - inline isl::union_pw_qpolynomial coalesce() 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 add_pw_multi_aff(const isl::pw_multi_aff &pma) 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_size dim(isl::dim type) const; - inline isl::union_set domain() const; - inline isl::union_pw_qpolynomial drop_dims(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::val eval(isl::point pnt) const; - inline isl::pw_qpolynomial extract_pw_qpolynomial(isl::space space) const; - inline int find_dim_by_name(isl::dim type, const std::string &name) const; - inline stat foreach_pw_qpolynomial(const std::function &fn) const; - static inline isl::union_pw_qpolynomial from_pw_qpolynomial(isl::pw_qpolynomial pwqp); - inline isl::pw_qpolynomial_list get_pw_qpolynomial_list() const; + inline isl::set domain() const; + static inline isl::multi_aff domain_map(isl::space space); + inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const; + 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 void foreach_piece(const std::function &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; + static inline isl::multi_aff identity(isl::space space); + 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 isl_size 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 reset_tuple_id(isl::dim type) 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::multi_val mv) 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_aff(int pos, isl::aff el) 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_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const; + inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) 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 isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const; + inline isl_size size() const; + inline isl::space space() const; inline isl::space get_space() const; - inline isl::union_pw_qpolynomial gist(isl::union_set context) const; - inline isl::union_pw_qpolynomial gist_params(isl::set context) const; - inline isl::union_pw_qpolynomial intersect_domain(isl::union_set uset) const; - inline isl::union_pw_qpolynomial intersect_domain_space(isl::space space) const; - inline isl::union_pw_qpolynomial intersect_domain_union_set(isl::union_set uset) const; - inline isl::union_pw_qpolynomial intersect_domain_wrapped_domain(isl::union_set uset) const; - inline isl::union_pw_qpolynomial intersect_domain_wrapped_range(isl::union_set uset) const; - inline isl::union_pw_qpolynomial intersect_params(isl::set set) const; - inline boolean involves_nan() const; - inline isl::union_pw_qpolynomial mul(isl::union_pw_qpolynomial upwqp2) const; - inline isl_size n_pw_qpolynomial() const; - inline isl::union_pw_qpolynomial neg() const; - inline boolean plain_is_equal(const isl::union_pw_qpolynomial &upwqp2) const; - inline isl::union_pw_qpolynomial reset_user() const; - inline isl::union_pw_qpolynomial scale_down_val(isl::val v) const; - inline isl::union_pw_qpolynomial scale_val(isl::val v) const; - inline isl::union_pw_qpolynomial sub(isl::union_pw_qpolynomial upwqp2) const; - inline isl::union_pw_qpolynomial subtract_domain(isl::union_set uset) const; - inline isl::union_pw_qpolynomial subtract_domain_space(isl::space space) const; - inline isl::union_pw_qpolynomial subtract_domain_union_set(isl::union_set uset) const; - inline isl::union_pw_qpolynomial to_polynomial(int sign) const; - static inline isl::union_pw_qpolynomial zero(isl::space space); - static inline isl::union_pw_qpolynomial zero_ctx(isl::ctx ctx); - static inline isl::union_pw_qpolynomial zero_space(isl::space space); + 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::id tuple_id(isl::dim type) 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); }; -// declarations for isl::union_set -inline union_set manage(__isl_take isl_union_set *ptr); -inline union_set manage_copy(__isl_keep isl_union_set *ptr); +// declarations for isl::multi_id +inline multi_id manage(__isl_take isl_multi_id *ptr); +inline multi_id manage_copy(__isl_keep isl_multi_id *ptr); -class union_set { - friend inline union_set manage(__isl_take isl_union_set *ptr); - friend inline union_set manage_copy(__isl_keep isl_union_set *ptr); +class multi_id { + friend inline multi_id manage(__isl_take isl_multi_id *ptr); + friend inline multi_id manage_copy(__isl_keep isl_multi_id *ptr); - isl_union_set *ptr = nullptr; +protected: + isl_multi_id *ptr = nullptr; - inline explicit union_set(__isl_take isl_union_set *ptr); + inline explicit multi_id(__isl_take isl_multi_id *ptr); public: - inline /* implicit */ union_set(); - inline /* implicit */ union_set(const union_set &obj); - inline /* implicit */ union_set(isl::basic_set bset); - inline /* implicit */ union_set(isl::point pnt); - inline /* implicit */ union_set(isl::set set); - inline explicit union_set(isl::ctx ctx, const std::string &str); - inline union_set &operator=(union_set obj); - inline ~union_set(); - inline __isl_give isl_union_set *copy() const &; - inline __isl_give isl_union_set *copy() && = delete; - inline __isl_keep isl_union_set *get() const; - inline __isl_give isl_union_set *release(); + inline /* implicit */ multi_id(); + inline /* implicit */ multi_id(const multi_id &obj); + inline explicit multi_id(isl::space space, isl::id_list list); + inline explicit multi_id(isl::ctx ctx, const std::string &str); + inline multi_id &operator=(multi_id obj); + inline ~multi_id(); + inline __isl_give isl_multi_id *copy() const &; + inline __isl_give isl_multi_id *copy() && = delete; + inline __isl_keep isl_multi_id *get() const; + inline __isl_give isl_multi_id *release(); inline bool is_null() const; inline isl::ctx ctx() const; - inline void dump() const; - inline isl::union_set affine_hull() const; - inline isl::union_set align_params(isl::space model) const; - inline isl::union_set apply(isl::union_map umap) const; - inline isl::union_set coalesce() const; - inline isl::union_set coefficients() const; - inline isl::schedule compute_schedule(isl::union_map validity, isl::union_map proximity) const; - inline boolean contains(const isl::space &space) const; - inline isl::union_set detect_equalities() const; - inline isl_size dim(isl::dim type) const; - static inline isl::union_set empty(isl::ctx ctx); - inline isl::set extract_set(isl::space space) const; - inline stat foreach_point(const std::function &fn) const; - inline stat foreach_set(const std::function &fn) const; - inline isl::basic_set_list get_basic_set_list() const; - inline uint32_t get_hash() const; - inline isl::set_list get_set_list() 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 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 isl::multi_id set_id(int pos, isl::id el) const; + inline isl::multi_id set_id(int pos, const std::string &el) const; + inline isl_size size() 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_pw_multi_aff identity_union_pw_multi_aff() const; - inline isl::union_set intersect(isl::union_set uset2) const; - inline isl::union_set intersect_params(isl::set set) const; - inline boolean is_disjoint(const isl::union_set &uset2) const; - inline boolean is_empty() const; - inline boolean is_equal(const isl::union_set &uset2) const; - inline boolean is_params() const; - inline boolean is_strict_subset(const isl::union_set &uset2) const; - inline boolean is_subset(const isl::union_set &uset2) const; - inline boolean isa_set() const; - inline isl::union_map lex_ge_union_set(isl::union_set uset2) const; - inline isl::union_map lex_gt_union_set(isl::union_set uset2) const; - inline isl::union_map lex_le_union_set(isl::union_set uset2) const; - inline isl::union_map lex_lt_union_set(isl::union_set uset2) const; - inline isl::union_set lexmax() const; - inline isl::union_set lexmin() const; - inline isl::multi_val min_multi_union_pw_aff(const isl::multi_union_pw_aff &obj) const; - inline isl_size n_set() const; - inline isl::set params() const; - inline isl::union_set polyhedral_hull() const; - inline isl::union_set preimage(isl::multi_aff ma) 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::union_set product(isl::union_set uset2) const; - inline isl::union_set project_out(isl::dim type, unsigned int first, unsigned int n) const; - inline isl::union_set project_out_all_params() const; - inline isl::union_set remove_divs() const; - inline isl::union_set remove_redundancies() const; - inline isl::union_set reset_user() const; - inline isl::basic_set sample() const; - inline isl::point sample_point() const; - inline isl::union_set simple_hull() const; - inline isl::union_set solutions() const; - inline isl::union_set subtract(isl::union_set uset2) const; - inline isl::union_set unite(isl::union_set uset2) const; - inline isl::union_set universe() const; - inline isl::union_map unwrap() const; - inline isl::union_map wrapped_domain_map() const; }; -// declarations for isl::union_set_list -inline union_set_list manage(__isl_take isl_union_set_list *ptr); -inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr); +// declarations for isl::multi_pw_aff +inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr); +inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr); -class union_set_list { - friend inline union_set_list manage(__isl_take isl_union_set_list *ptr); - friend inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr); +class multi_pw_aff { + friend inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr); + friend inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr); - isl_union_set_list *ptr = nullptr; +protected: + isl_multi_pw_aff *ptr = nullptr; - inline explicit union_set_list(__isl_take isl_union_set_list *ptr); + inline explicit multi_pw_aff(__isl_take isl_multi_pw_aff *ptr); + +public: + inline /* implicit */ multi_pw_aff(); + inline /* implicit */ multi_pw_aff(const multi_pw_aff &obj); + inline /* implicit */ multi_pw_aff(isl::aff aff); + inline /* implicit */ multi_pw_aff(isl::multi_aff ma); + inline /* implicit */ multi_pw_aff(isl::pw_aff pa); + inline explicit multi_pw_aff(isl::space space, isl::pw_aff_list list); + inline /* implicit */ multi_pw_aff(isl::pw_multi_aff pma); + inline explicit multi_pw_aff(isl::ctx ctx, const std::string &str); + inline multi_pw_aff &operator=(multi_pw_aff obj); + inline ~multi_pw_aff(); + inline __isl_give isl_multi_pw_aff *copy() const &; + inline __isl_give isl_multi_pw_aff *copy() && = delete; + inline __isl_keep isl_multi_pw_aff *get() const; + inline __isl_give isl_multi_pw_aff *release(); + inline bool is_null() const; + 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_size dim(isl::dim type) const; + inline isl::set domain() const; + inline isl::multi_pw_aff flat_range_product(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::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; + static inline isl::multi_pw_aff identity(isl::space space); + 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 reset_tuple_id(isl::dim type) 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::multi_val mv) 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_pw_aff(int pos, isl::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 isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const; + inline isl_size size() 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); +}; + +// declarations for isl::multi_union_pw_aff +inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr); +inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr); + +class multi_union_pw_aff { + friend inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr); + friend inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr); + +protected: + isl_multi_union_pw_aff *ptr = nullptr; + + inline explicit multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr); + +public: + inline /* implicit */ multi_union_pw_aff(); + inline /* implicit */ multi_union_pw_aff(const multi_union_pw_aff &obj); + inline /* implicit */ multi_union_pw_aff(isl::multi_pw_aff mpa); + inline /* implicit */ multi_union_pw_aff(isl::union_pw_aff upa); + inline explicit multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list); + inline explicit multi_union_pw_aff(isl::union_pw_multi_aff upma); + inline explicit multi_union_pw_aff(isl::ctx ctx, const std::string &str); + inline multi_union_pw_aff &operator=(multi_union_pw_aff obj); + inline ~multi_union_pw_aff(); + inline __isl_give isl_multi_union_pw_aff *copy() const &; + inline __isl_give isl_multi_union_pw_aff *copy() && = delete; + inline __isl_keep isl_multi_union_pw_aff *get() const; + inline __isl_give isl_multi_union_pw_aff *release(); + inline bool is_null() const; + 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_size dim(isl::dim type) const; + inline isl::union_set domain() const; + inline isl::multi_union_pw_aff flat_range_product(isl::multi_union_pw_aff multi2) const; + static inline isl::multi_union_pw_aff from_union_map(isl::union_map umap); + 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 reset_tuple_id(isl::dim type) 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::multi_val mv) 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 isl::multi_union_pw_aff set_union_pw_aff(int pos, isl::union_pw_aff el) const; + inline isl_size 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); +}; + +// declarations for isl::multi_val +inline multi_val manage(__isl_take isl_multi_val *ptr); +inline multi_val manage_copy(__isl_keep isl_multi_val *ptr); + +class multi_val { + friend inline multi_val manage(__isl_take isl_multi_val *ptr); + friend inline multi_val manage_copy(__isl_keep isl_multi_val *ptr); + +protected: + isl_multi_val *ptr = nullptr; + + inline explicit multi_val(__isl_take isl_multi_val *ptr); + +public: + inline /* implicit */ multi_val(); + inline /* implicit */ multi_val(const multi_val &obj); + inline explicit multi_val(isl::space space, isl::val_list list); + inline explicit multi_val(isl::ctx ctx, const std::string &str); + inline multi_val &operator=(multi_val obj); + inline ~multi_val(); + inline __isl_give isl_multi_val *copy() const &; + inline __isl_give isl_multi_val *copy() && = delete; + inline __isl_keep isl_multi_val *get() const; + inline __isl_give isl_multi_val *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + 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::val at(int pos) const; + inline isl::val get_at(int pos) const; + inline isl_size dim(isl::dim type) 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::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 reset_tuple_id(isl::dim type) 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(isl::multi_val mv) const; + inline isl::multi_val scale_down(isl::val 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 isl::multi_val set_val(int pos, isl::val el) const; + inline isl::multi_val set_val(int pos, long el) const; + inline isl_size 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); +}; + +// declarations for isl::point +inline point manage(__isl_take isl_point *ptr); +inline point manage_copy(__isl_keep isl_point *ptr); + +class point { + friend inline point manage(__isl_take isl_point *ptr); + friend inline point manage_copy(__isl_keep isl_point *ptr); + +protected: + isl_point *ptr = nullptr; + + inline explicit point(__isl_take isl_point *ptr); + +public: + inline /* implicit */ point(); + inline /* implicit */ point(const point &obj); + inline explicit point(isl::space space); + inline point &operator=(point obj); + inline ~point(); + inline __isl_give isl_point *copy() const &; + inline __isl_give isl_point *copy() && = delete; + inline __isl_keep isl_point *get() const; + inline __isl_give isl_point *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::set add_constraint(const isl::constraint &constraint) const; + inline isl::set add_dims(isl::dim type, unsigned int n) const; + inline isl::basic_set affine_hull() const; + inline isl::set align_params(const isl::space &model) 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::basic_set_list basic_set_list() 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 bool contains(const isl::space &space) const; + inline isl::basic_set convex_hull() const; + inline isl::val coordinate_val(isl::dim type, int pos) const; + inline isl::val get_coordinate_val(isl::dim type, int pos) const; + inline isl::basic_set detect_equalities() const; + inline isl_size dim(isl::dim type) const; + inline bool dim_has_any_lower_bound(isl::dim type, unsigned int pos) const; + inline isl::id dim_id(isl::dim type, unsigned int pos) const; + inline isl::pw_aff dim_max(int pos) const; + inline isl::val dim_max_val(int pos) const; + inline isl::pw_aff dim_min(int pos) const; + inline isl::val dim_min_val(int pos) const; + inline std::string dim_name(isl::dim type, unsigned int pos) const; + inline isl::aff div(int pos) const; + inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; + inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const; + inline bool every_set(const std::function &test) const; + inline isl::set extract_set(const isl::space &space) const; + inline int find_dim_by_id(isl::dim type, const isl::id &id) const; + inline int find_dim_by_id(isl::dim type, const std::string &id) const; + inline isl::basic_set fix_si(isl::dim type, unsigned int pos, int value) const; + inline isl::basic_set fix_val(isl::dim type, unsigned int pos, const isl::val &v) const; + inline isl::basic_set fix_val(isl::dim type, unsigned int pos, long v) const; + inline isl::basic_set flatten() const; + inline void foreach_basic_set(const std::function &fn) const; + inline void foreach_point(const std::function &fn) const; + inline void foreach_set(const std::function &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::set gist_params(const isl::set &context) const; + inline bool has_equal_space(const isl::set &set2) const; + inline isl::map identity() const; + inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const; + inline isl::pw_aff indicator_function() const; + inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) 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_dims(isl::dim type, unsigned int first, unsigned int n) const; + inline bool involves_locals() const; + inline bool is_bounded() 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_params() 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::set lower_bound_si(isl::dim type, unsigned int pos, int value) const; + inline isl::set lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const; + inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) 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_size n_basic_set() const; + inline isl::basic_set params() const; + inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) 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::basic_set project_out(isl::dim type, unsigned int first, unsigned int n) 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::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const; + inline isl::set remove_divs() const; + inline isl::set remove_redundancies() const; + inline isl::set reset_tuple_id() const; + inline isl::basic_set sample() const; + inline isl::point sample_point() const; + inline isl::set set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const; + inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const; + inline isl::set_list set_list() const; + inline isl::set set_tuple_id(const isl::id &id) const; + inline isl::set set_tuple_id(const std::string &id) const; + inline isl::fixed_box simple_fixed_box_hull() const; + inline isl::basic_set simple_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::basic_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 isl_size tuple_dim() const; + inline isl::id tuple_id() const; + inline std::string tuple_name() 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; + inline isl::set upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const; + inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const; +}; + +// declarations for isl::pw_aff +inline pw_aff manage(__isl_take isl_pw_aff *ptr); +inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr); + +class pw_aff { + friend inline pw_aff manage(__isl_take isl_pw_aff *ptr); + friend inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr); + +protected: + isl_pw_aff *ptr = nullptr; + + inline explicit pw_aff(__isl_take isl_pw_aff *ptr); + +public: + inline /* implicit */ pw_aff(); + inline /* implicit */ pw_aff(const pw_aff &obj); + inline /* implicit */ pw_aff(isl::aff aff); + inline explicit pw_aff(isl::ctx ctx, const std::string &str); + inline explicit pw_aff(isl::set domain, isl::val v); + inline explicit pw_aff(isl::local_space ls); + inline pw_aff &operator=(pw_aff obj); + inline ~pw_aff(); + inline __isl_give isl_pw_aff *copy() const &; + inline __isl_give isl_pw_aff *copy() && = delete; + inline __isl_keep isl_pw_aff *get() const; + inline __isl_give isl_pw_aff *release(); + 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::pw_aff add_dims(isl::dim type, unsigned int n) const; + inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) 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::pw_aff bind_domain_wrapped_domain(isl::multi_id tuple) const; + inline isl::pw_aff ceil() const; + inline isl::pw_aff coalesce() const; + inline isl::pw_aff cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const; + inline isl_size dim(isl::dim type) const; + inline isl::id dim_id(isl::dim type, unsigned int pos) const; + inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; + inline isl::pw_aff div(isl::pw_aff pa2) const; + inline isl::set domain() const; + inline isl::space domain_space() const; + inline isl::space get_domain_space() const; + inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) 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 &fn) const; + inline void foreach_piece(const std::function &fn) const; + inline void foreach_pw_aff(const std::function &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 is_cst() const; + inline bool is_equal(const isl::pw_aff &pa2) 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 isl_size 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 reset_tuple_id(isl::dim type) 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::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const; + inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) 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 isl::pw_aff set_tuple_id(isl::dim type, isl::id id) const; + inline isl::pw_aff set_tuple_id(isl::dim type, const std::string &id) const; + inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const; + inline isl_size 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_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::id tuple_id(isl::dim type) const; + inline isl::id get_tuple_id(isl::dim type) 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; + static inline isl::pw_aff var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos); +}; + +// declarations for isl::pw_aff_list +inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr); +inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr); + +class pw_aff_list { + friend inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr); + friend inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr); + +protected: + isl_pw_aff_list *ptr = nullptr; + + inline explicit pw_aff_list(__isl_take isl_pw_aff_list *ptr); + +public: + inline /* implicit */ 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_give isl_pw_aff_list *copy() && = delete; + inline __isl_keep isl_pw_aff_list *get() const; + inline __isl_give isl_pw_aff_list *release(); + inline bool is_null() 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 &fn) const; + inline isl::pw_aff_list insert(unsigned int pos, isl::pw_aff el) const; + inline isl_size size() const; +}; + +// declarations for isl::pw_multi_aff +inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr); +inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr); + +class pw_multi_aff { + friend inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr); + friend inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr); + +protected: + isl_pw_multi_aff *ptr = nullptr; + + inline explicit pw_multi_aff(__isl_take isl_pw_multi_aff *ptr); + +public: + inline /* implicit */ pw_multi_aff(); + inline /* implicit */ pw_multi_aff(const pw_multi_aff &obj); + inline /* implicit */ pw_multi_aff(isl::multi_aff ma); + inline /* implicit */ pw_multi_aff(isl::pw_aff pa); + inline explicit pw_multi_aff(isl::ctx ctx, const std::string &str); + inline pw_multi_aff &operator=(pw_multi_aff obj); + inline ~pw_multi_aff(); + inline __isl_give isl_pw_multi_aff *copy() const &; + inline __isl_give isl_pw_multi_aff *copy() && = delete; + inline __isl_keep isl_pw_multi_aff *get() const; + inline __isl_give isl_pw_multi_aff *release(); + 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 add_pw_multi_aff(const isl::pw_multi_aff &pma) 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_size dim(isl::dim type) const; + inline isl::set domain() const; + static inline isl::pw_multi_aff domain_map(isl::space space); + inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) 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(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 &fn) const; + static inline isl::pw_multi_aff from_map(isl::map map); + 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 isl_size 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; + static inline isl::pw_multi_aff project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n); + 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 reset_tuple_id(isl::dim type) 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::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const; + inline isl::pw_multi_aff set_pw_aff(unsigned int pos, isl::pw_aff pa) 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 isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const; + inline isl_size 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::id tuple_id(isl::dim type) const; + inline isl::id get_tuple_id(isl::dim type) 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); +}; + +// declarations for isl::pw_multi_aff_list +inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr); +inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr); + +class pw_multi_aff_list { + friend inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr); + friend inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr); + +protected: + isl_pw_multi_aff_list *ptr = nullptr; + + inline explicit pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr); + +public: + inline /* implicit */ pw_multi_aff_list(); + 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_give isl_pw_multi_aff_list *copy() && = delete; + inline __isl_keep isl_pw_multi_aff_list *get() const; + inline __isl_give isl_pw_multi_aff_list *release(); + inline bool is_null() 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 &fn) const; + inline isl::pw_multi_aff_list insert(unsigned int pos, isl::pw_multi_aff el) const; + inline isl_size size() const; +}; + +// declarations for isl::schedule +inline schedule manage(__isl_take isl_schedule *ptr); +inline schedule manage_copy(__isl_keep isl_schedule *ptr); + +class schedule { + friend inline schedule manage(__isl_take isl_schedule *ptr); + friend inline schedule manage_copy(__isl_keep isl_schedule *ptr); + +protected: + isl_schedule *ptr = nullptr; + + inline explicit schedule(__isl_take isl_schedule *ptr); + +public: + inline /* implicit */ schedule(); + inline /* implicit */ schedule(const schedule &obj); + inline explicit schedule(isl::ctx ctx, const std::string &str); + inline schedule &operator=(schedule obj); + inline ~schedule(); + inline __isl_give isl_schedule *copy() const &; + inline __isl_give isl_schedule *copy() && = delete; + inline __isl_keep isl_schedule *get() const; + inline __isl_give isl_schedule *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::schedule align_params(isl::space space) const; + 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::schedule gist_domain_params(isl::set context) const; + inline isl::schedule insert_partial_schedule(isl::multi_union_pw_aff partial) const; + inline isl::schedule intersect_domain(isl::union_set domain) const; + 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 sequence(isl::schedule schedule2) const; +}; + +// declarations for isl::schedule_constraints +inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr); +inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr); + +class schedule_constraints { + friend inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr); + friend inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr); + +protected: + isl_schedule_constraints *ptr = nullptr; + + inline explicit schedule_constraints(__isl_take isl_schedule_constraints *ptr); + +public: + inline /* implicit */ schedule_constraints(); + inline /* implicit */ schedule_constraints(const schedule_constraints &obj); + inline explicit schedule_constraints(isl::ctx ctx, const std::string &str); + inline schedule_constraints &operator=(schedule_constraints obj); + inline ~schedule_constraints(); + inline __isl_give isl_schedule_constraints *copy() const &; + inline __isl_give isl_schedule_constraints *copy() && = delete; + inline __isl_keep isl_schedule_constraints *get() const; + inline __isl_give isl_schedule_constraints *release(); + inline bool is_null() const; + inline isl::ctx ctx() 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::union_map get_conditional_validity_condition() const; + inline isl::set context() 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::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 schedule_node manage(__isl_take isl_schedule_node *ptr); +inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr); + +class schedule_node { + friend inline schedule_node manage(__isl_take isl_schedule_node *ptr); + friend inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr); + +protected: + isl_schedule_node *ptr = nullptr; + + inline explicit schedule_node(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node(); + inline /* implicit */ schedule_node(const schedule_node &obj); + inline schedule_node &operator=(schedule_node obj); + inline ~schedule_node(); + inline __isl_give isl_schedule_node *copy() const &; + inline __isl_give isl_schedule_node *copy() && = delete; + inline __isl_keep isl_schedule_node *get() const; + inline __isl_give isl_schedule_node *release(); + inline bool is_null() const; +private: + template ::value>::type> + inline bool isa_type(T subtype) const; +public: + template inline bool isa() const; + template inline T as() const; + inline isl::ctx ctx() const; + + inline isl::schedule_node ancestor(int generation) const; + inline isl_size ancestor_child_position(const isl::schedule_node &ancestor) const; + inline isl_size get_ancestor_child_position(const isl::schedule_node &ancestor) const; + inline isl::schedule_node child(int pos) const; + inline isl_size child_position() const; + inline isl_size get_child_position() const; + inline isl::union_set domain() const; + inline isl::union_set get_domain() const; + inline bool every_descendant(const std::function &test) const; + inline isl::schedule_node first_child() const; + inline void foreach_ancestor_top_down(const std::function &fn) const; + inline void foreach_descendant_top_down(const std::function &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 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 bool has_next_sibling() const; + inline bool has_parent() const; + inline bool has_previous_sibling() const; + inline isl::schedule_node insert_context(isl::set context) const; + inline isl::schedule_node insert_filter(isl::union_set filter) const; + inline isl::schedule_node insert_guard(isl::set context) const; + inline isl::schedule_node insert_mark(isl::id mark) const; + inline isl::schedule_node insert_mark(const std::string &mark) const; + inline isl::schedule_node insert_partial_schedule(isl::multi_union_pw_aff schedule) const; + inline isl::schedule_node insert_sequence(isl::union_set_list filters) const; + inline isl::schedule_node insert_set(isl::union_set_list filters) const; + inline bool is_equal(const isl::schedule_node &node2) const; + inline bool is_subtree_anchored() const; + inline isl::schedule_node map_descendant_bottom_up(const std::function &fn) const; + inline isl_size n_children() const; + inline isl::schedule_node next_sibling() 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_relation() const; + inline isl::union_map get_prefix_schedule_relation() 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_size schedule_depth() const; + inline isl_size get_schedule_depth() 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 isl_size tree_depth() const; + inline isl_size get_tree_depth() const; + inline isl::union_set universe_domain() const; + inline isl::union_set get_universe_domain() const; +}; + +// declarations for isl::schedule_node_band + +class schedule_node_band : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_band schedule_node::as() const; + static const auto type = isl_schedule_node_band; + +protected: + inline explicit schedule_node_band(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node_band(); + inline /* implicit */ schedule_node_band(const schedule_node_band &obj); + inline schedule_node_band &operator=(schedule_node_band obj); + inline isl::ctx ctx() const; + + inline isl::union_set ast_build_options() const; + 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 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 isl_size 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 schedule_node_band set_permutable(int permutable) const; + inline schedule_node_band shift(isl::multi_union_pw_aff shift) const; + inline schedule_node_band split(int pos) const; + inline schedule_node_band tile(isl::multi_val sizes) const; + inline schedule_node_band member_set_ast_loop_default(int pos) const; + inline schedule_node_band member_set_ast_loop_atomic(int pos) const; + inline schedule_node_band member_set_ast_loop_unroll(int pos) const; + inline schedule_node_band member_set_ast_loop_separate(int pos) const; +}; + +// declarations for isl::schedule_node_context + +class schedule_node_context : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_context schedule_node::as() const; + static const auto type = isl_schedule_node_context; + +protected: + inline explicit schedule_node_context(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node_context(); + inline /* implicit */ schedule_node_context(const schedule_node_context &obj); + inline schedule_node_context &operator=(schedule_node_context obj); + inline isl::ctx ctx() const; + + inline isl::set context() const; + inline isl::set get_context() const; +}; + +// declarations for isl::schedule_node_domain + +class schedule_node_domain : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_domain schedule_node::as() const; + static const auto type = isl_schedule_node_domain; + +protected: + inline explicit schedule_node_domain(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node_domain(); + inline /* implicit */ schedule_node_domain(const schedule_node_domain &obj); + inline schedule_node_domain &operator=(schedule_node_domain obj); + inline isl::ctx ctx() const; + + inline isl::union_set domain() const; + inline isl::union_set get_domain() const; +}; + +// declarations for isl::schedule_node_expansion + +class schedule_node_expansion : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_expansion schedule_node::as() const; + static const auto type = isl_schedule_node_expansion; + +protected: + inline explicit schedule_node_expansion(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node_expansion(); + inline /* implicit */ schedule_node_expansion(const schedule_node_expansion &obj); + inline schedule_node_expansion &operator=(schedule_node_expansion obj); + inline isl::ctx ctx() const; + + inline isl::union_pw_multi_aff contraction() const; + inline isl::union_pw_multi_aff get_contraction() const; + inline isl::union_map expansion() const; + inline isl::union_map get_expansion() const; +}; + +// declarations for isl::schedule_node_extension + +class schedule_node_extension : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_extension schedule_node::as() const; + static const auto type = isl_schedule_node_extension; + +protected: + inline explicit schedule_node_extension(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node_extension(); + inline /* implicit */ schedule_node_extension(const schedule_node_extension &obj); + inline schedule_node_extension &operator=(schedule_node_extension obj); + inline isl::ctx ctx() const; + + inline isl::union_map extension() const; + inline isl::union_map get_extension() const; +}; + +// declarations for isl::schedule_node_filter + +class schedule_node_filter : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_filter schedule_node::as() const; + static const auto type = isl_schedule_node_filter; + +protected: + inline explicit schedule_node_filter(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node_filter(); + inline /* implicit */ schedule_node_filter(const schedule_node_filter &obj); + inline schedule_node_filter &operator=(schedule_node_filter obj); + inline isl::ctx ctx() const; + + inline isl::union_set filter() const; + inline isl::union_set get_filter() const; +}; + +// declarations for isl::schedule_node_guard + +class schedule_node_guard : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_guard schedule_node::as() const; + static const auto type = isl_schedule_node_guard; + +protected: + inline explicit schedule_node_guard(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node_guard(); + inline /* implicit */ schedule_node_guard(const schedule_node_guard &obj); + inline schedule_node_guard &operator=(schedule_node_guard obj); + inline isl::ctx ctx() const; + + inline isl::set guard() const; + inline isl::set get_guard() const; +}; + +// declarations for isl::schedule_node_leaf + +class schedule_node_leaf : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_leaf schedule_node::as() const; + static const auto type = isl_schedule_node_leaf; + +protected: + inline explicit schedule_node_leaf(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node_leaf(); + inline /* implicit */ schedule_node_leaf(const schedule_node_leaf &obj); + inline schedule_node_leaf &operator=(schedule_node_leaf obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::schedule_node_mark + +class schedule_node_mark : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_mark schedule_node::as() const; + static const auto type = isl_schedule_node_mark; + +protected: + inline explicit schedule_node_mark(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node_mark(); + inline /* implicit */ schedule_node_mark(const schedule_node_mark &obj); + inline schedule_node_mark &operator=(schedule_node_mark obj); + inline isl::ctx ctx() const; + + inline isl::id id() const; + inline isl::id get_id() const; +}; + +// declarations for isl::schedule_node_sequence + +class schedule_node_sequence : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_sequence schedule_node::as() const; + static const auto type = isl_schedule_node_sequence; + +protected: + inline explicit schedule_node_sequence(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node_sequence(); + inline /* implicit */ schedule_node_sequence(const schedule_node_sequence &obj); + inline schedule_node_sequence &operator=(schedule_node_sequence obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::schedule_node_set + +class schedule_node_set : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_set schedule_node::as() const; + static const auto type = isl_schedule_node_set; + +protected: + inline explicit schedule_node_set(__isl_take isl_schedule_node *ptr); + +public: + inline /* implicit */ schedule_node_set(); + inline /* implicit */ schedule_node_set(const schedule_node_set &obj); + inline schedule_node_set &operator=(schedule_node_set obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::set +inline set manage(__isl_take isl_set *ptr); +inline set manage_copy(__isl_keep isl_set *ptr); + +class set { + friend inline set manage(__isl_take isl_set *ptr); + friend inline set manage_copy(__isl_keep isl_set *ptr); + +protected: + isl_set *ptr = nullptr; + + inline explicit set(__isl_take isl_set *ptr); + +public: + inline /* implicit */ set(); + inline /* implicit */ set(const set &obj); + inline /* implicit */ set(isl::basic_set bset); + inline /* implicit */ set(isl::point pnt); + inline explicit set(isl::union_set uset); + inline explicit set(isl::ctx ctx, const std::string &str); + inline set &operator=(set obj); + inline ~set(); + inline __isl_give isl_set *copy() const &; + inline __isl_give isl_set *copy() && = delete; + inline __isl_keep isl_set *get() const; + inline __isl_give isl_set *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::set add_constraint(isl::constraint constraint) const; + inline isl::set add_dims(isl::dim type, unsigned int n) const; + inline isl::basic_set affine_hull() const; + inline isl::set align_params(isl::space model) 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::basic_set_list basic_set_list() const; + inline isl::basic_set_list get_basic_set_list() 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 bool contains(const isl::space &space) const; + inline isl::basic_set convex_hull() const; + inline isl::set detect_equalities() const; + inline isl_size dim(isl::dim type) const; + inline bool dim_has_any_lower_bound(isl::dim type, unsigned int pos) const; + inline isl::id dim_id(isl::dim type, unsigned int pos) const; + inline isl::id get_dim_id(isl::dim type, unsigned int pos) const; + inline isl::pw_aff dim_max(int pos) const; + inline isl::val dim_max_val(int pos) const; + inline isl::pw_aff dim_min(int pos) const; + inline isl::val dim_min_val(int pos) const; + inline std::string dim_name(isl::dim type, unsigned int pos) const; + inline std::string get_dim_name(isl::dim type, unsigned int pos) const; + inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; + inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const; + static inline isl::set empty(isl::space space); + inline bool every_set(const std::function &test) const; + inline isl::set extract_set(const isl::space &space) const; + inline int find_dim_by_id(isl::dim type, const isl::id &id) const; + inline int find_dim_by_id(isl::dim type, const std::string &id) const; + inline isl::set fix_si(isl::dim type, unsigned int pos, int value) const; + inline isl::set flatten() const; + inline void foreach_basic_set(const std::function &fn) const; + inline void foreach_point(const std::function &fn) const; + inline void foreach_set(const std::function &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::set gist_params(isl::set context) const; + inline bool has_equal_space(const isl::set &set2) const; + inline isl::map identity() const; + inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const; + inline isl::pw_aff indicator_function() const; + inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) 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_dims(isl::dim type, unsigned int first, unsigned int n) const; + inline bool involves_locals() const; + inline bool is_bounded() 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_params() 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::pw_multi_aff lexmin_pw_multi_aff() const; + inline isl::set lower_bound(isl::multi_pw_aff lower) const; + inline isl::set lower_bound(isl::multi_val lower) const; + inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const; + inline isl::set lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const; + inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) 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_size n_basic_set() const; + inline isl::set params() const; + inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) 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(isl::dim type, unsigned int first, unsigned int n) 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::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const; + inline isl::set remove_divs() const; + inline isl::set remove_redundancies() const; + inline isl::set reset_tuple_id() const; + inline isl::basic_set sample() const; + inline isl::point sample_point() const; + inline isl::set set_dim_id(isl::dim type, unsigned int pos, isl::id id) const; + inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const; + inline isl::set_list set_list() const; + inline isl::set set_tuple_id(isl::id id) const; + inline isl::set set_tuple_id(const std::string &id) const; + inline isl::fixed_box simple_fixed_box_hull() const; + inline isl::fixed_box get_simple_fixed_box_hull() const; + inline isl::basic_set simple_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::set_list to_list() const; + inline isl::union_set to_union_set() const; + inline isl::map translation() const; + inline isl_size tuple_dim() const; + inline isl::id tuple_id() const; + inline isl::id get_tuple_id() const; + inline std::string tuple_name() const; + inline std::string get_tuple_name() 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::set upper_bound(isl::multi_pw_aff upper) const; + inline isl::set upper_bound(isl::multi_val upper) const; + inline isl::set upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const; + inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const; +}; + +// declarations for isl::set_list +inline set_list manage(__isl_take isl_set_list *ptr); +inline set_list manage_copy(__isl_keep isl_set_list *ptr); + +class set_list { + friend inline set_list manage(__isl_take isl_set_list *ptr); + friend inline set_list manage_copy(__isl_keep isl_set_list *ptr); + +protected: + isl_set_list *ptr = nullptr; + + inline explicit set_list(__isl_take isl_set_list *ptr); + +public: + inline /* implicit */ set_list(); + inline /* implicit */ set_list(const set_list &obj); + inline explicit set_list(isl::ctx ctx, int n); + inline explicit set_list(isl::set el); + inline explicit set_list(isl::ctx ctx, const std::string &str); + inline set_list &operator=(set_list obj); + inline ~set_list(); + inline __isl_give isl_set_list *copy() const &; + inline __isl_give isl_set_list *copy() && = delete; + inline __isl_keep isl_set_list *get() const; + inline __isl_give isl_set_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::set_list add(isl::set el) const; + inline isl::set at(int index) const; + inline isl::set get_at(int index) const; + inline isl::set_list clear() const; + inline isl::set_list concat(isl::set_list list2) const; + inline isl::set_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline isl::set_list insert(unsigned int pos, isl::set el) const; + inline isl_size size() const; +}; + +// declarations for isl::space +inline space manage(__isl_take isl_space *ptr); +inline space manage_copy(__isl_keep isl_space *ptr); + +class space { + friend inline space manage(__isl_take isl_space *ptr); + friend inline space manage_copy(__isl_keep isl_space *ptr); + +protected: + isl_space *ptr = nullptr; + + inline explicit space(__isl_take isl_space *ptr); + +public: + inline /* implicit */ space(); + inline /* implicit */ space(const space &obj); + inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out); + inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int dim); + inline space &operator=(space obj); + inline ~space(); + inline __isl_give isl_space *copy() const &; + inline __isl_give isl_space *copy() && = delete; + inline __isl_keep isl_space *get() const; + inline __isl_give isl_space *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::space add_dims(isl::dim type, unsigned int n) 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 align_params(isl::space space2) const; + inline isl::space curry() const; + inline isl_size dim(isl::dim type) const; + inline isl::id dim_id(isl::dim type, unsigned int pos) const; + inline isl::id get_dim_id(isl::dim type, unsigned int pos) 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 drop_dims(isl::dim type, unsigned int first, unsigned int num) const; + inline int find_dim_by_id(isl::dim type, const isl::id &id) const; + inline int find_dim_by_id(isl::dim type, const std::string &id) const; + inline isl::space flatten_domain() const; + inline isl::space flatten_range() const; + inline bool has_domain_tuple_id() const; + inline bool has_equal_tuples(const isl::space &space2) const; + inline bool has_range_tuple_id() const; + inline bool has_tuple_id(isl::dim type) const; + inline bool has_tuple_name(isl::dim type) 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_params() const; + inline bool is_set() const; + inline bool is_wrapping() const; + inline isl::space map_from_domain_and_range(isl::space range) 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; + static inline isl::space params_alloc(isl::ctx ctx, unsigned int nparam); + 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_dim_id(isl::dim type, unsigned int pos, isl::id id) const; + inline isl::space set_dim_id(isl::dim type, unsigned int pos, const std::string &id) 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_from_params() 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 set_tuple_id(isl::dim type, isl::id id) const; + inline isl::space set_tuple_id(isl::dim type, const std::string &id) const; + inline isl::id tuple_id(isl::dim type) const; + inline isl::id get_tuple_id(isl::dim type) const; + inline std::string tuple_name(isl::dim type) const; + inline std::string get_tuple_name(isl::dim type) 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 union_access_info manage(__isl_take isl_union_access_info *ptr); +inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr); + +class union_access_info { + friend inline union_access_info manage(__isl_take isl_union_access_info *ptr); + friend inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr); + +protected: + isl_union_access_info *ptr = nullptr; + + inline explicit union_access_info(__isl_take isl_union_access_info *ptr); + +public: + inline /* implicit */ union_access_info(); + inline /* implicit */ union_access_info(const union_access_info &obj); + inline explicit union_access_info(isl::union_map sink); + inline union_access_info &operator=(union_access_info obj); + inline ~union_access_info(); + inline __isl_give isl_union_access_info *copy() const &; + inline __isl_give isl_union_access_info *copy() && = delete; + inline __isl_keep isl_union_access_info *get() const; + inline __isl_give isl_union_access_info *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_flow compute_flow() const; + inline isl::union_access_info set_kill(isl::union_map kill) const; + inline isl::union_access_info set_may_source(isl::union_map may_source) const; + inline isl::union_access_info set_must_source(isl::union_map must_source) const; + inline isl::union_access_info set_schedule(isl::schedule schedule) const; + inline isl::union_access_info set_schedule_map(isl::union_map schedule_map) const; +}; + +// declarations for isl::union_flow +inline union_flow manage(__isl_take isl_union_flow *ptr); +inline union_flow manage_copy(__isl_keep isl_union_flow *ptr); + +class union_flow { + friend inline union_flow manage(__isl_take isl_union_flow *ptr); + friend inline union_flow manage_copy(__isl_keep isl_union_flow *ptr); + +protected: + isl_union_flow *ptr = nullptr; + + inline explicit union_flow(__isl_take isl_union_flow *ptr); + +public: + inline /* implicit */ union_flow(); + inline /* implicit */ union_flow(const union_flow &obj); + inline union_flow &operator=(union_flow obj); + inline ~union_flow(); + inline __isl_give isl_union_flow *copy() const &; + inline __isl_give isl_union_flow *copy() && = delete; + inline __isl_keep isl_union_flow *get() const; + inline __isl_give isl_union_flow *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_map full_may_dependence() const; + inline isl::union_map get_full_may_dependence() const; + inline isl::union_map full_must_dependence() const; + inline isl::union_map get_full_must_dependence() const; + inline isl::union_map may_dependence() const; + inline isl::union_map get_may_dependence() const; + inline isl::union_map may_no_source() const; + inline isl::union_map get_may_no_source() const; + inline isl::union_map must_dependence() const; + inline isl::union_map get_must_dependence() const; + inline isl::union_map must_no_source() const; + inline isl::union_map get_must_no_source() const; +}; + +// declarations for isl::union_map +inline union_map manage(__isl_take isl_union_map *ptr); +inline union_map manage_copy(__isl_keep isl_union_map *ptr); + +class union_map { + friend inline union_map manage(__isl_take isl_union_map *ptr); + friend inline union_map manage_copy(__isl_keep isl_union_map *ptr); + +protected: + isl_union_map *ptr = nullptr; + + inline explicit union_map(__isl_take isl_union_map *ptr); + +public: + inline /* implicit */ union_map(); + inline /* implicit */ union_map(const union_map &obj); + inline /* implicit */ union_map(isl::basic_map bmap); + inline /* implicit */ union_map(isl::map map); + inline explicit union_map(isl::ctx ctx, const std::string &str); + inline union_map &operator=(union_map obj); + inline ~union_map(); + inline __isl_give isl_union_map *copy() const &; + inline __isl_give isl_union_map *copy() && = delete; + inline __isl_keep isl_union_map *get() const; + inline __isl_give isl_union_map *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + 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; + inline isl::union_map curry() const; + inline isl::union_set deltas() const; + inline isl::union_map detect_equalities() const; + inline isl::union_set domain() const; + inline isl::union_map domain_factor_domain() const; + inline isl::union_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::union_map domain_product(isl::union_map umap2) const; + static inline isl::union_map empty(isl::ctx ctx); + inline isl::union_map eq_at(isl::multi_union_pw_aff mupa) const; + inline bool every_map(const std::function &test) const; + inline isl::map extract_map(isl::space space) const; + inline isl::union_map factor_domain() const; + inline isl::union_map factor_range() const; + inline isl::union_map fixed_power(isl::val exp) const; + inline isl::union_map fixed_power(long exp) const; + inline isl::union_map flat_range_product(isl::union_map umap2) const; + inline void foreach_map(const std::function &fn) const; + static inline isl::union_map from(isl::multi_union_pw_aff mupa); + static inline isl::union_map from(isl::union_pw_multi_aff upma); + 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::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 isl::union_map gist_range(isl::union_set uset) const; + inline isl::union_map intersect(isl::union_map umap2) const; + inline isl::union_map intersect_domain(isl::space space) const; + inline isl::union_map intersect_domain(isl::union_set uset) const; + inline isl::union_map intersect_domain_factor_domain(isl::union_map factor) const; + inline isl::union_map intersect_domain_factor_range(isl::union_map factor) const; + inline isl::union_map intersect_params(isl::set set) const; + inline isl::union_map intersect_range(isl::space space) const; + inline isl::union_map intersect_range(isl::union_set uset) const; + inline isl::union_map intersect_range_factor_domain(isl::union_map factor) const; + inline isl::union_map intersect_range_factor_range(isl::union_map factor) const; + inline bool is_bijective() const; + inline bool is_disjoint(const isl::union_map &umap2) const; + inline bool is_empty() 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::union_map &umap2) const; + inline bool is_subset(const isl::union_map &umap2) 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::set params() 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 preimage_domain(isl::pw_multi_aff pma) const; + inline isl::union_map preimage_domain(isl::union_pw_multi_aff upma) const; + inline isl::union_map preimage_range(isl::multi_aff ma) const; + inline isl::union_map preimage_range(isl::pw_multi_aff pma) const; + inline isl::union_map preimage_range(isl::union_pw_multi_aff upma) const; + inline isl::union_map product(isl::union_map umap2) const; + inline isl::union_map project_out_all_params() const; + inline isl::union_set range() const; + inline isl::union_map range_factor_domain() const; + inline isl::union_map range_factor_range() const; + inline isl::union_map range_map() 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 isl::union_map uncurry() const; + inline isl::union_map unite(isl::union_map umap2) const; + inline isl::union_map universe() const; + inline isl::union_set wrap() const; + inline isl::union_map zip() const; +}; + +// declarations for isl::union_pw_aff +inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr); +inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr); + +class union_pw_aff { + friend inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr); + friend inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr); + +protected: + isl_union_pw_aff *ptr = nullptr; + + inline explicit union_pw_aff(__isl_take isl_union_pw_aff *ptr); + +public: + inline /* implicit */ union_pw_aff(); + inline /* implicit */ union_pw_aff(const union_pw_aff &obj); + inline /* implicit */ union_pw_aff(isl::aff aff); + inline /* implicit */ union_pw_aff(isl::pw_aff pa); + inline explicit union_pw_aff(isl::ctx ctx, const std::string &str); + inline explicit union_pw_aff(isl::union_set domain, isl::val v); + inline union_pw_aff &operator=(union_pw_aff obj); + inline ~union_pw_aff(); + inline __isl_give isl_union_pw_aff *copy() const &; + inline __isl_give isl_union_pw_aff *copy() && = delete; + inline __isl_keep isl_union_pw_aff *get() const; + inline __isl_give isl_union_pw_aff *release(); + 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 add_pw_multi_aff(const isl::pw_multi_aff &pma) 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_size dim(isl::dim type) const; + inline isl::union_set domain() const; + static inline isl::union_pw_aff empty(isl::space space); + 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 void foreach_pw_aff(const std::function &fn) 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 reset_tuple_id(isl::dim type) 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 isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const; + inline isl_size 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 union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr); +inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr); + +class union_pw_aff_list { + friend inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr); + friend inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr); + +protected: + isl_union_pw_aff_list *ptr = nullptr; + + inline explicit union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr); + +public: + inline /* implicit */ 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_give isl_union_pw_aff_list *copy() && = delete; + inline __isl_keep isl_union_pw_aff_list *get() const; + inline __isl_give isl_union_pw_aff_list *release(); + inline bool is_null() 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 &fn) const; + inline isl::union_pw_aff_list insert(unsigned int pos, isl::union_pw_aff el) const; + inline isl_size size() const; +}; + +// declarations for isl::union_pw_multi_aff +inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr); +inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr); + +class union_pw_multi_aff { + friend inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr); + friend inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr); + +protected: + isl_union_pw_multi_aff *ptr = nullptr; + + inline explicit union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr); + +public: + inline /* implicit */ union_pw_multi_aff(); + inline /* implicit */ union_pw_multi_aff(const union_pw_multi_aff &obj); + inline explicit union_pw_multi_aff(isl::union_set uset); + inline /* implicit */ union_pw_multi_aff(isl::multi_aff ma); + inline /* implicit */ union_pw_multi_aff(isl::pw_multi_aff pma); + inline explicit union_pw_multi_aff(isl::union_map umap); + inline /* implicit */ union_pw_multi_aff(isl::union_pw_aff upa); + inline explicit union_pw_multi_aff(isl::ctx ctx, const std::string &str); + inline union_pw_multi_aff &operator=(union_pw_multi_aff obj); + inline ~union_pw_multi_aff(); + inline __isl_give isl_union_pw_multi_aff *copy() const &; + inline __isl_give isl_union_pw_multi_aff *copy() && = delete; + inline __isl_keep isl_union_pw_multi_aff *get() const; + inline __isl_give isl_union_pw_multi_aff *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_pw_multi_aff add(isl::union_pw_multi_aff upma2) const; + inline isl::union_pw_multi_aff add_pw_multi_aff(isl::pw_multi_aff pma) 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::space space); + 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::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 isl::union_pw_multi_aff intersect_domain_wrapped_domain(isl::union_set uset) const; + inline isl::union_pw_multi_aff intersect_domain_wrapped_range(isl::union_set uset) const; + inline isl::union_pw_multi_aff intersect_params(isl::set set) const; + inline bool involves_locals() const; + inline bool isa_pw_multi_aff() 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_pw_multi_aff union_add(isl::union_pw_multi_aff upma2) const; +}; + +// declarations for isl::union_set +inline union_set manage(__isl_take isl_union_set *ptr); +inline union_set manage_copy(__isl_keep isl_union_set *ptr); + +class union_set { + friend inline union_set manage(__isl_take isl_union_set *ptr); + friend inline union_set manage_copy(__isl_keep isl_union_set *ptr); + +protected: + isl_union_set *ptr = nullptr; + + inline explicit union_set(__isl_take isl_union_set *ptr); + +public: + inline /* implicit */ union_set(); + inline /* implicit */ union_set(const union_set &obj); + inline /* implicit */ union_set(isl::basic_set bset); + inline /* implicit */ union_set(isl::point pnt); + inline /* implicit */ union_set(isl::set set); + inline explicit union_set(isl::ctx ctx, const std::string &str); + inline union_set &operator=(union_set obj); + inline ~union_set(); + inline __isl_give isl_union_set *copy() const &; + inline __isl_give isl_union_set *copy() && = delete; + inline __isl_keep isl_union_set *get() const; + inline __isl_give isl_union_set *release(); + inline bool is_null() const; + inline isl::ctx ctx() 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 bool contains(const isl::space &space) const; + inline isl::union_set detect_equalities() const; + static inline isl::union_set empty(isl::ctx ctx); + inline bool every_set(const std::function &test) const; + inline isl::set extract_set(isl::space space) const; + inline void foreach_point(const std::function &fn) const; + inline void foreach_set(const std::function &fn) 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_pw_multi_aff identity_union_pw_multi_aff() const; + inline isl::union_set intersect(isl::union_set uset2) const; + inline isl::union_set intersect_params(isl::set set) const; + inline bool is_disjoint(const isl::union_set &uset2) const; + inline bool is_empty() const; + inline bool is_equal(const isl::union_set &uset2) const; + inline bool is_strict_subset(const isl::union_set &uset2) const; + inline bool is_subset(const isl::union_set &uset2) const; + inline bool isa_set() const; + inline isl::union_set lexmax() const; + inline isl::union_set lexmin() const; + inline isl::set params() const; + inline isl::union_set polyhedral_hull() const; + inline isl::union_set preimage(isl::multi_aff ma) 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::set_list set_list() const; + inline isl::set_list get_set_list() 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; +}; + +// declarations for isl::union_set_list +inline union_set_list manage(__isl_take isl_union_set_list *ptr); +inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr); + +class union_set_list { + friend inline union_set_list manage(__isl_take isl_union_set_list *ptr); + friend inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr); + +protected: + isl_union_set_list *ptr = nullptr; + + inline explicit union_set_list(__isl_take isl_union_set_list *ptr); + +public: + inline /* implicit */ union_set_list(); + 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_give isl_union_set_list *copy() && = delete; + inline __isl_keep isl_union_set_list *get() const; + inline __isl_give isl_union_set_list *release(); + inline bool is_null() 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 &fn) const; + inline isl::union_set_list insert(unsigned int pos, isl::union_set el) const; + inline isl_size size() const; +}; + +// declarations for isl::val +inline val manage(__isl_take isl_val *ptr); +inline val manage_copy(__isl_keep isl_val *ptr); + +class val { + friend inline val manage(__isl_take isl_val *ptr); + friend inline val manage_copy(__isl_keep isl_val *ptr); + +protected: + isl_val *ptr = nullptr; + + inline explicit val(__isl_take isl_val *ptr); + +public: + inline /* implicit */ val(); + inline /* implicit */ val(const val &obj); + inline explicit val(isl::ctx ctx, long i); + inline explicit val(isl::ctx ctx, const std::string &str); + inline val &operator=(val obj); + inline ~val(); + inline __isl_give isl_val *copy() const &; + inline __isl_give isl_val *copy() && = delete; + inline __isl_keep isl_val *get() const; + inline __isl_give isl_val *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::val abs() const; + inline bool abs_eq(const isl::val &v2) const; + inline bool abs_eq(long v2) const; + inline isl::val add(isl::val v2) 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 bool eq(long v2) const; + inline isl::val floor() const; + inline isl::val gcd(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 bool gt(const isl::val &v2) const; + inline bool gt(long v2) const; + static inline isl::val infty(isl::ctx ctx); + static inline isl::val int_from_ui(isl::ctx ctx, unsigned long u); + inline isl::val inv() const; + inline bool is_divisible_by(const isl::val &v2) const; + inline bool is_divisible_by(long v2) const; + inline bool is_infty() const; + inline bool is_int() const; + inline bool is_nan() const; + inline bool is_neg() const; + inline bool is_neginfty() const; + inline bool is_negone() const; + inline bool is_nonneg() const; + inline bool is_nonpos() const; + inline bool is_one() const; + inline bool is_pos() const; + inline bool is_rat() const; + inline bool is_zero() const; + inline bool le(const isl::val &v2) const; + inline bool le(long v2) const; + inline bool lt(const isl::val &v2) const; + inline bool lt(long v2) const; + inline isl::val max(isl::val v2) const; + inline isl::val max(long v2) const; + inline isl::val min(isl::val v2) const; + inline isl::val min(long v2) const; + inline isl::val mod(isl::val v2) const; + inline isl::val mod(long v2) const; + inline isl::val mul(isl::val v2) const; + inline isl::val mul(long v2) const; + static inline isl::val nan(isl::ctx ctx); + inline bool ne(const isl::val &v2) const; + inline bool ne(long v2) const; + 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 sub_ui(unsigned long v2) const; + inline isl::val_list to_list() const; + inline isl::val trunc() const; + static inline isl::val zero(isl::ctx ctx); +}; + +// declarations for isl::val_list +inline val_list manage(__isl_take isl_val_list *ptr); +inline val_list manage_copy(__isl_keep isl_val_list *ptr); + +class val_list { + friend inline val_list manage(__isl_take isl_val_list *ptr); + friend inline val_list manage_copy(__isl_keep isl_val_list *ptr); + +protected: + isl_val_list *ptr = nullptr; + + inline explicit val_list(__isl_take isl_val_list *ptr); + +public: + inline /* implicit */ val_list(); + 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_give isl_val_list *copy() && = delete; + inline __isl_keep isl_val_list *get() const; + inline __isl_give isl_val_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() 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 &fn) 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 isl_size size() const; +}; + +// implementations for isl::aff +aff manage(__isl_take isl_aff *ptr) { + return aff(ptr); +} +aff manage_copy(__isl_keep isl_aff *ptr) { + ptr = isl_aff_copy(ptr); + return aff(ptr); +} + +aff::aff() + : ptr(nullptr) {} + +aff::aff(const aff &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +aff::aff(__isl_take isl_aff *ptr) + : ptr(ptr) {} + +aff::aff(isl::ctx ctx, const std::string &str) +{ + auto res = isl_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +aff::aff(isl::local_space ls, isl::val val) +{ + auto res = isl_aff_val_on_domain(ls.release(), val.release()); + ptr = res; +} + +aff::aff(isl::local_space ls) +{ + auto res = isl_aff_zero_on_domain(ls.release()); + ptr = res; +} + +aff &aff::operator=(aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +aff::~aff() { + if (ptr) + isl_aff_free(ptr); +} + +__isl_give isl_aff *aff::copy() const & { + return isl_aff_copy(ptr); +} + +__isl_keep isl_aff *aff::get() const { + return ptr; +} + +__isl_give isl_aff *aff::release() { + isl_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool aff::is_null() const { + return ptr == nullptr; +} + +isl::ctx aff::ctx() const { + return isl::ctx(isl_aff_get_ctx(ptr)); +} + +isl::aff aff::add(isl::aff aff2) const +{ + auto res = isl_aff_add(copy(), aff2.release()); + return manage(res); +} + +isl::multi_aff aff::add(const isl::multi_aff &multi2) const +{ + return isl::multi_aff(*this).add(multi2); +} + +isl::multi_pw_aff aff::add(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_aff(*this).add(multi2); +} + +isl::multi_union_pw_aff aff::add(const isl::multi_union_pw_aff &multi2) const +{ + return isl::pw_aff(*this).add(multi2); +} + +isl::pw_aff aff::add(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).add(pwaff2); +} + +isl::pw_multi_aff aff::add(const isl::pw_multi_aff &pma2) const +{ + return isl::pw_aff(*this).add(pma2); +} + +isl::union_pw_aff aff::add(const isl::union_pw_aff &upa2) const +{ + return isl::pw_aff(*this).add(upa2); +} + +isl::union_pw_multi_aff aff::add(const isl::union_pw_multi_aff &upma2) const +{ + return isl::pw_aff(*this).add(upma2); +} + +isl::aff aff::add_constant(isl::val v) const +{ + auto res = isl_aff_add_constant_val(copy(), v.release()); + return manage(res); +} + +isl::aff aff::add_constant(long v) const +{ + return this->add_constant(isl::val(ctx(), v)); +} + +isl::multi_aff aff::add_constant(const isl::multi_val &mv) const +{ + return isl::multi_aff(*this).add_constant(mv); +} + +isl::aff aff::add_constant_si(int v) const +{ + auto res = isl_aff_add_constant_si(copy(), v); + return manage(res); +} + +isl::pw_aff aff::add_dims(isl::dim type, unsigned int n) const +{ + return isl::pw_aff(*this).add_dims(type, n); +} + +isl::union_pw_multi_aff aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const +{ + return isl::pw_aff(*this).add_pw_multi_aff(pma); +} + +isl::union_pw_multi_aff aff::apply(const isl::union_pw_multi_aff &upma2) const +{ + return isl::pw_aff(*this).apply(upma2); +} + +isl::aff aff::as_aff() const +{ + return isl::pw_aff(*this).as_aff(); +} + +isl::map aff::as_map() const +{ + return isl::pw_aff(*this).as_map(); +} + +isl::multi_aff aff::as_multi_aff() const +{ + return isl::pw_aff(*this).as_multi_aff(); +} + +isl::multi_union_pw_aff aff::as_multi_union_pw_aff() const +{ + return isl::pw_aff(*this).as_multi_union_pw_aff(); +} + +isl::pw_multi_aff aff::as_pw_multi_aff() const +{ + return isl::pw_aff(*this).as_pw_multi_aff(); +} + +isl::set aff::as_set() const +{ + return isl::multi_aff(*this).as_set(); +} + +isl::union_map aff::as_union_map() const +{ + return isl::pw_aff(*this).as_union_map(); +} + +isl::aff aff::at(int pos) const +{ + return isl::multi_aff(*this).at(pos); +} + +isl::basic_set aff::bind(isl::id id) const +{ + auto res = isl_aff_bind_id(copy(), id.release()); + return manage(res); +} + +isl::basic_set aff::bind(const std::string &id) const +{ + return this->bind(isl::id(ctx(), id)); +} + +isl::basic_set aff::bind(const isl::multi_id &tuple) const +{ + return isl::multi_aff(*this).bind(tuple); +} + +isl::pw_aff aff::bind_domain(const isl::multi_id &tuple) const +{ + return isl::pw_aff(*this).bind_domain(tuple); +} + +isl::pw_aff aff::bind_domain_wrapped_domain(const isl::multi_id &tuple) const +{ + return isl::pw_aff(*this).bind_domain_wrapped_domain(tuple); +} + +isl::aff aff::ceil() const +{ + auto res = isl_aff_ceil(copy()); + return manage(res); +} + +isl::pw_aff aff::coalesce() const +{ + return isl::pw_aff(*this).coalesce(); +} + +isl::pw_aff aff::cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const +{ + return isl::pw_aff(*this).cond(pwaff_true, pwaff_false); +} + +isl::multi_val aff::constant_multi_val() const +{ + return isl::multi_aff(*this).constant_multi_val(); +} + +isl::val aff::constant_val() const +{ + auto res = isl_aff_get_constant_val(get()); + return manage(res); +} + +isl::val aff::get_constant_val() const +{ + return constant_val(); +} + +isl::val aff::denominator_val() const +{ + auto res = isl_aff_get_denominator_val(get()); + return manage(res); +} + +isl::val aff::get_denominator_val() const +{ + return denominator_val(); +} + +isl_size aff::dim(isl::dim type) const +{ + return isl::multi_aff(*this).dim(type); +} + +isl::id aff::dim_id(isl::dim type, unsigned int pos) const +{ + return isl::pw_aff(*this).dim_id(type, pos); +} + +isl::aff aff::div(isl::aff aff2) const +{ + auto res = isl_aff_div(copy(), aff2.release()); + return manage(res); +} + +isl::pw_aff aff::div(const isl::pw_aff &pa2) const +{ + return isl::pw_aff(*this).div(pa2); +} + +isl::set aff::domain() const +{ + return isl::pw_aff(*this).domain(); +} + +isl::space aff::domain_space() const +{ + return isl::pw_aff(*this).domain_space(); +} + +isl::pw_multi_aff aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +{ + return isl::pw_aff(*this).drop_dims(type, first, n); +} + +isl::set aff::eq_set(isl::aff aff2) const +{ + auto res = isl_aff_eq_set(copy(), aff2.release()); + return manage(res); +} + +isl::set aff::eq_set(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).eq_set(pwaff2); +} + +isl::val aff::eval(isl::point pnt) const +{ + auto res = isl_aff_eval(copy(), pnt.release()); + return manage(res); +} + +isl::pw_multi_aff aff::extract_pw_multi_aff(const isl::space &space) const +{ + return isl::pw_aff(*this).extract_pw_multi_aff(space); +} + +isl::multi_aff aff::flat_range_product(const isl::multi_aff &multi2) const +{ + return isl::multi_aff(*this).flat_range_product(multi2); +} + +isl::multi_pw_aff aff::flat_range_product(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_aff(*this).flat_range_product(multi2); +} + +isl::multi_union_pw_aff aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const +{ + return isl::pw_aff(*this).flat_range_product(multi2); +} + +isl::pw_multi_aff aff::flat_range_product(const isl::pw_multi_aff &pma2) const +{ + return isl::pw_aff(*this).flat_range_product(pma2); +} + +isl::union_pw_multi_aff aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const +{ + return isl::pw_aff(*this).flat_range_product(upma2); +} + +isl::aff aff::floor() const +{ + auto res = isl_aff_floor(copy()); + return manage(res); +} + +void aff::foreach_piece(const std::function &fn) const +{ + return isl::pw_aff(*this).foreach_piece(fn); +} + +void aff::foreach_piece(const std::function &fn) const +{ + return isl::pw_aff(*this).foreach_piece(fn); +} + +void aff::foreach_pw_aff(const std::function &fn) const +{ + return isl::pw_aff(*this).foreach_pw_aff(fn); +} + +isl::set aff::ge_set(isl::aff aff2) const +{ + auto res = isl_aff_ge_set(copy(), aff2.release()); + return manage(res); +} + +isl::set aff::ge_set(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).ge_set(pwaff2); +} + +isl::aff aff::gist(isl::set context) const +{ + auto res = isl_aff_gist(copy(), context.release()); + return manage(res); +} + +isl::union_pw_aff aff::gist(const isl::union_set &context) const +{ + return isl::pw_aff(*this).gist(context); +} + +isl::aff aff::gist(const isl::basic_set &context) const +{ + return this->gist(isl::set(context)); +} + +isl::aff aff::gist(const isl::point &context) const +{ + return this->gist(isl::set(context)); +} + +isl::set aff::gt_set(isl::aff aff2) const +{ + auto res = isl_aff_gt_set(copy(), aff2.release()); + return manage(res); +} + +isl::set aff::gt_set(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).gt_set(pwaff2); +} + +bool aff::has_range_tuple_id() const +{ + return isl::multi_aff(*this).has_range_tuple_id(); +} + +isl::multi_aff aff::identity() const +{ + return isl::multi_aff(*this).identity(); +} + +isl::pw_aff aff::insert_domain(const isl::space &domain) const +{ + return isl::pw_aff(*this).insert_domain(domain); +} + +isl::pw_aff aff::intersect_domain(const isl::set &set) const +{ + return isl::pw_aff(*this).intersect_domain(set); +} + +isl::union_pw_aff aff::intersect_domain(const isl::space &space) const +{ + return isl::pw_aff(*this).intersect_domain(space); +} + +isl::union_pw_aff aff::intersect_domain(const isl::union_set &uset) const +{ + return isl::pw_aff(*this).intersect_domain(uset); +} + +isl::union_pw_aff aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const +{ + return isl::pw_aff(*this).intersect_domain_wrapped_domain(uset); +} + +isl::union_pw_aff aff::intersect_domain_wrapped_range(const isl::union_set &uset) const +{ + return isl::pw_aff(*this).intersect_domain_wrapped_range(uset); +} + +isl::pw_aff aff::intersect_params(const isl::set &set) const +{ + return isl::pw_aff(*this).intersect_params(set); +} + +bool aff::involves_locals() const +{ + return isl::multi_aff(*this).involves_locals(); +} + +bool aff::involves_nan() const +{ + return isl::multi_aff(*this).involves_nan(); +} + +bool aff::involves_param(const isl::id &id) const +{ + return isl::pw_aff(*this).involves_param(id); +} + +bool aff::involves_param(const std::string &id) const +{ + return this->involves_param(isl::id(ctx(), id)); +} + +bool aff::involves_param(const isl::id_list &list) const +{ + return isl::pw_aff(*this).involves_param(list); +} + +bool aff::is_cst() const +{ + auto res = isl_aff_is_cst(get()); + return res; +} + +bool aff::is_equal(const isl::pw_aff &pa2) const +{ + return isl::pw_aff(*this).is_equal(pa2); +} + +bool aff::isa_aff() const +{ + return isl::pw_aff(*this).isa_aff(); +} + +bool aff::isa_multi_aff() const +{ + return isl::pw_aff(*this).isa_multi_aff(); +} + +bool aff::isa_pw_multi_aff() const +{ + return isl::pw_aff(*this).isa_pw_multi_aff(); +} + +isl::set aff::le_set(isl::aff aff2) const +{ + auto res = isl_aff_le_set(copy(), aff2.release()); + return manage(res); +} + +isl::set aff::le_set(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).le_set(pwaff2); +} + +isl::aff_list aff::list() const +{ + return isl::multi_aff(*this).list(); +} + +isl::set aff::lt_set(isl::aff aff2) const +{ + auto res = isl_aff_lt_set(copy(), aff2.release()); + return manage(res); +} + +isl::set aff::lt_set(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).lt_set(pwaff2); +} + +isl::multi_pw_aff aff::max(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_aff(*this).max(multi2); +} + +isl::pw_aff aff::max(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).max(pwaff2); +} + +isl::multi_val aff::max_multi_val() const +{ + return isl::pw_aff(*this).max_multi_val(); +} + +isl::multi_pw_aff aff::min(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_aff(*this).min(multi2); +} + +isl::pw_aff aff::min(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).min(pwaff2); +} + +isl::multi_val aff::min_multi_val() const +{ + return isl::pw_aff(*this).min_multi_val(); +} + +isl::aff aff::mod(isl::val mod) const +{ + auto res = isl_aff_mod_val(copy(), mod.release()); + return manage(res); +} + +isl::aff aff::mod(long mod) const +{ + return this->mod(isl::val(ctx(), mod)); +} + +isl::aff aff::mul(isl::aff aff2) const +{ + auto res = isl_aff_mul(copy(), aff2.release()); + return manage(res); +} + +isl::pw_aff aff::mul(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).mul(pwaff2); +} + +isl_size aff::n_piece() const +{ + return isl::pw_aff(*this).n_piece(); +} + +isl::set aff::ne_set(isl::aff aff2) const +{ + auto res = isl_aff_ne_set(copy(), aff2.release()); + return manage(res); +} + +isl::set aff::ne_set(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).ne_set(pwaff2); +} + +isl::aff aff::neg() const +{ + auto res = isl_aff_neg(copy()); + return manage(res); +} + +bool aff::plain_is_empty() const +{ + return isl::pw_aff(*this).plain_is_empty(); +} + +bool aff::plain_is_equal(const isl::multi_aff &multi2) const +{ + return isl::multi_aff(*this).plain_is_equal(multi2); +} + +bool aff::plain_is_equal(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_aff(*this).plain_is_equal(multi2); +} + +bool aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +{ + return isl::pw_aff(*this).plain_is_equal(multi2); +} + +isl::pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const +{ + return isl::pw_aff(*this).preimage_domain_wrapped_domain(pma2); +} + +isl::union_pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const +{ + return isl::pw_aff(*this).preimage_domain_wrapped_domain(upma2); +} + +isl::multi_aff aff::product(const isl::multi_aff &multi2) const +{ + return isl::multi_aff(*this).product(multi2); +} + +isl::multi_pw_aff aff::product(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_aff(*this).product(multi2); +} + +isl::pw_multi_aff aff::product(const isl::pw_multi_aff &pma2) const +{ + return isl::pw_aff(*this).product(pma2); +} + +isl::aff aff::pullback(isl::multi_aff ma) const +{ + auto res = isl_aff_pullback_multi_aff(copy(), ma.release()); + return manage(res); +} + +isl::pw_aff aff::pullback(const isl::multi_pw_aff &mpa) const +{ + return isl::pw_aff(*this).pullback(mpa); +} + +isl::pw_aff aff::pullback(const isl::pw_multi_aff &pma) const +{ + return isl::pw_aff(*this).pullback(pma); +} + +isl::union_pw_aff aff::pullback(const isl::union_pw_multi_aff &upma) const +{ + return isl::pw_aff(*this).pullback(upma); +} + +isl::aff aff::pullback(const isl::aff &ma) const +{ + return this->pullback(isl::multi_aff(ma)); +} + +isl::pw_multi_aff_list aff::pw_multi_aff_list() const +{ + return isl::pw_aff(*this).pw_multi_aff_list(); +} + +isl::pw_multi_aff aff::range_factor_domain() const +{ + return isl::pw_aff(*this).range_factor_domain(); +} + +isl::pw_multi_aff aff::range_factor_range() const +{ + return isl::pw_aff(*this).range_factor_range(); +} + +isl::multi_aff aff::range_product(const isl::multi_aff &multi2) const +{ + return isl::multi_aff(*this).range_product(multi2); +} + +isl::multi_pw_aff aff::range_product(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_aff(*this).range_product(multi2); +} + +isl::multi_union_pw_aff aff::range_product(const isl::multi_union_pw_aff &multi2) const +{ + return isl::pw_aff(*this).range_product(multi2); +} + +isl::pw_multi_aff aff::range_product(const isl::pw_multi_aff &pma2) const +{ + return isl::pw_aff(*this).range_product(pma2); +} + +isl::union_pw_multi_aff aff::range_product(const isl::union_pw_multi_aff &upma2) const +{ + return isl::pw_aff(*this).range_product(upma2); +} + +isl::id aff::range_tuple_id() const +{ + return isl::multi_aff(*this).range_tuple_id(); +} + +isl::multi_aff aff::reset_range_tuple_id() const +{ + return isl::multi_aff(*this).reset_range_tuple_id(); +} + +isl::multi_aff aff::reset_tuple_id(isl::dim type) const +{ + return isl::multi_aff(*this).reset_tuple_id(type); +} + +isl::aff aff::scale(isl::val v) const +{ + auto res = isl_aff_scale_val(copy(), v.release()); + return manage(res); +} + +isl::aff aff::scale(long v) const +{ + return this->scale(isl::val(ctx(), v)); +} + +isl::multi_aff aff::scale(const isl::multi_val &mv) const +{ + return isl::multi_aff(*this).scale(mv); +} + +isl::aff aff::scale_down(isl::val v) const +{ + auto res = isl_aff_scale_down_val(copy(), v.release()); + return manage(res); +} + +isl::aff aff::scale_down(long v) const +{ + return this->scale_down(isl::val(ctx(), v)); +} + +isl::multi_aff aff::scale_down(const isl::multi_val &mv) const +{ + return isl::multi_aff(*this).scale_down(mv); +} + +isl::multi_aff aff::set_aff(int pos, const isl::aff &el) const +{ + return isl::multi_aff(*this).set_aff(pos, el); +} + +isl::multi_aff aff::set_at(int pos, const isl::aff &el) const +{ + return isl::multi_aff(*this).set_at(pos, el); +} + +isl::multi_pw_aff aff::set_at(int pos, const isl::pw_aff &el) const +{ + return isl::pw_aff(*this).set_at(pos, el); +} + +isl::multi_union_pw_aff aff::set_at(int pos, const isl::union_pw_aff &el) const +{ + return isl::pw_aff(*this).set_at(pos, el); +} + +isl::aff aff::set_constant_si(int v) const +{ + auto res = isl_aff_set_constant_si(copy(), v); + return manage(res); +} + +isl::multi_pw_aff aff::set_pw_aff(int pos, const isl::pw_aff &el) const +{ + return isl::pw_aff(*this).set_pw_aff(pos, el); +} + +isl::pw_multi_aff aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const +{ + return isl::pw_aff(*this).set_pw_aff(pos, pa); +} + +isl::multi_aff aff::set_range_tuple(const isl::id &id) const +{ + return isl::multi_aff(*this).set_range_tuple(id); +} + +isl::multi_aff aff::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::id(ctx(), id)); +} + +isl::pw_aff aff::set_tuple_id(isl::dim type, const isl::id &id) const +{ + return isl::pw_aff(*this).set_tuple_id(type, id); +} + +isl::pw_aff aff::set_tuple_id(isl::dim type, const std::string &id) const +{ + return this->set_tuple_id(type, isl::id(ctx(), id)); +} + +isl::multi_union_pw_aff aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const +{ + return isl::pw_aff(*this).set_union_pw_aff(pos, el); +} + +isl_size aff::size() const +{ + return isl::multi_aff(*this).size(); +} + +isl::space aff::space() const +{ + return isl::pw_aff(*this).space(); +} + +isl::aff aff::sub(isl::aff aff2) const +{ + auto res = isl_aff_sub(copy(), aff2.release()); + return manage(res); +} + +isl::multi_aff aff::sub(const isl::multi_aff &multi2) const +{ + return isl::multi_aff(*this).sub(multi2); +} + +isl::multi_pw_aff aff::sub(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_aff(*this).sub(multi2); +} + +isl::multi_union_pw_aff aff::sub(const isl::multi_union_pw_aff &multi2) const +{ + return isl::pw_aff(*this).sub(multi2); +} + +isl::pw_aff aff::sub(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).sub(pwaff2); +} + +isl::pw_multi_aff aff::sub(const isl::pw_multi_aff &pma2) const +{ + return isl::pw_aff(*this).sub(pma2); +} + +isl::union_pw_aff aff::sub(const isl::union_pw_aff &upa2) const +{ + return isl::pw_aff(*this).sub(upa2); +} + +isl::union_pw_multi_aff aff::sub(const isl::union_pw_multi_aff &upma2) const +{ + return isl::pw_aff(*this).sub(upma2); +} + +isl::pw_aff aff::subtract_domain(const isl::set &set) const +{ + return isl::pw_aff(*this).subtract_domain(set); +} + +isl::union_pw_aff aff::subtract_domain(const isl::space &space) const +{ + return isl::pw_aff(*this).subtract_domain(space); +} + +isl::union_pw_aff aff::subtract_domain(const isl::union_set &uset) const +{ + return isl::pw_aff(*this).subtract_domain(uset); +} + +isl::pw_aff aff::tdiv_q(const isl::pw_aff &pa2) const +{ + return isl::pw_aff(*this).tdiv_q(pa2); +} + +isl::pw_aff aff::tdiv_r(const isl::pw_aff &pa2) const +{ + return isl::pw_aff(*this).tdiv_r(pa2); +} + +isl::aff_list aff::to_list() const +{ + auto res = isl_aff_to_list(copy()); + return manage(res); +} + +isl::multi_pw_aff aff::to_multi_pw_aff() const +{ + return isl::multi_aff(*this).to_multi_pw_aff(); +} + +isl::multi_union_pw_aff aff::to_multi_union_pw_aff() const +{ + return isl::multi_aff(*this).to_multi_union_pw_aff(); +} + +isl::pw_multi_aff aff::to_pw_multi_aff() const +{ + return isl::multi_aff(*this).to_pw_multi_aff(); +} + +isl::union_pw_aff aff::to_union_pw_aff() const +{ + return isl::pw_aff(*this).to_union_pw_aff(); +} + +isl::union_pw_multi_aff aff::to_union_pw_multi_aff() const +{ + return isl::pw_aff(*this).to_union_pw_multi_aff(); +} + +isl::id aff::tuple_id(isl::dim type) const +{ + return isl::pw_aff(*this).tuple_id(type); +} + +isl::aff aff::unbind_params_insert_domain(isl::multi_id domain) const +{ + auto res = isl_aff_unbind_params_insert_domain(copy(), domain.release()); + return manage(res); +} + +isl::multi_pw_aff aff::union_add(const isl::multi_pw_aff &mpa2) const +{ + return isl::pw_aff(*this).union_add(mpa2); +} + +isl::multi_union_pw_aff aff::union_add(const isl::multi_union_pw_aff &mupa2) const +{ + return isl::pw_aff(*this).union_add(mupa2); +} + +isl::pw_aff aff::union_add(const isl::pw_aff &pwaff2) const +{ + return isl::pw_aff(*this).union_add(pwaff2); +} + +isl::pw_multi_aff aff::union_add(const isl::pw_multi_aff &pma2) const +{ + return isl::pw_aff(*this).union_add(pma2); +} + +isl::union_pw_aff aff::union_add(const isl::union_pw_aff &upa2) const +{ + return isl::pw_aff(*this).union_add(upa2); +} + +isl::union_pw_multi_aff aff::union_add(const isl::union_pw_multi_aff &upma2) const +{ + return isl::pw_aff(*this).union_add(upma2); +} + +isl::aff aff::var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos) +{ + auto res = isl_aff_var_on_domain(ls.release(), static_cast(type), pos); + return manage(res); +} + +isl::aff aff::zero_on_domain(isl::space space) +{ + auto res = isl_aff_zero_on_domain_space(space.release()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const aff &obj) +{ + char *str = isl_aff_to_str(obj.get()); + os << str; + free(str); + return os; +} + +// implementations for isl::aff_list +aff_list manage(__isl_take isl_aff_list *ptr) { + return aff_list(ptr); +} +aff_list manage_copy(__isl_keep isl_aff_list *ptr) { + ptr = isl_aff_list_copy(ptr); + return aff_list(ptr); +} + +aff_list::aff_list() + : ptr(nullptr) {} + +aff_list::aff_list(const aff_list &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +aff_list::aff_list(__isl_take isl_aff_list *ptr) + : ptr(ptr) {} + +aff_list::aff_list(isl::ctx ctx, int n) +{ + auto res = isl_aff_list_alloc(ctx.release(), n); + ptr = res; +} + +aff_list::aff_list(isl::aff el) +{ + auto res = isl_aff_list_from_aff(el.release()); + ptr = res; +} + +aff_list::aff_list(isl::ctx ctx, const std::string &str) +{ + auto res = isl_aff_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +aff_list &aff_list::operator=(aff_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +aff_list::~aff_list() { + if (ptr) + isl_aff_list_free(ptr); +} + +__isl_give isl_aff_list *aff_list::copy() const & { + return isl_aff_list_copy(ptr); +} + +__isl_keep isl_aff_list *aff_list::get() const { + return ptr; +} + +__isl_give isl_aff_list *aff_list::release() { + isl_aff_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool aff_list::is_null() const { + return ptr == nullptr; +} + +isl::ctx aff_list::ctx() const { + return isl::ctx(isl_aff_list_get_ctx(ptr)); +} + +isl::aff_list aff_list::add(isl::aff el) const +{ + auto res = isl_aff_list_add(copy(), el.release()); + return manage(res); +} + +isl::aff aff_list::at(int index) const +{ + auto res = isl_aff_list_get_at(get(), index); + return manage(res); +} + +isl::aff aff_list::get_at(int index) const +{ + return at(index); +} + +isl::aff_list aff_list::clear() const +{ + auto res = isl_aff_list_clear(copy()); + return manage(res); +} + +isl::aff_list aff_list::concat(isl::aff_list list2) const +{ + auto res = isl_aff_list_concat(copy(), list2.release()); + return manage(res); +} + +isl::aff_list aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl_aff_list_drop(copy(), first, n); + return manage(res); +} + +void aff_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(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); + return; +} + +isl::aff_list aff_list::insert(unsigned int pos, isl::aff el) const +{ + auto res = isl_aff_list_insert(copy(), pos, el.release()); + return manage(res); +} + +isl_size aff_list::size() const +{ + auto res = isl_aff_list_size(get()); + return res; +} + +inline std::ostream &operator<<(std::ostream &os, const aff_list &obj) +{ + char *str = isl_aff_list_to_str(obj.get()); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_build +ast_build manage(__isl_take isl_ast_build *ptr) { + return ast_build(ptr); +} +ast_build manage_copy(__isl_keep isl_ast_build *ptr) { + ptr = isl_ast_build_copy(ptr); + return ast_build(ptr); +} + +ast_build::ast_build() + : ptr(nullptr) {} + +ast_build::ast_build(const ast_build &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); + copy_callbacks(obj); +} + +ast_build::ast_build(__isl_take isl_ast_build *ptr) + : ptr(ptr) {} + +ast_build::ast_build(isl::ctx ctx) +{ + auto res = isl_ast_build_alloc(ctx.release()); + ptr = 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) +{ + at_each_domain_data = obj.at_each_domain_data; + return *this; +} + +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(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; + } +} + +void ast_build::set_at_each_domain_data(const std::function &fn) +{ + at_each_domain_data = std::make_shared(); + at_each_domain_data->func = fn; + ptr = isl_ast_build_set_at_each_domain(ptr, &at_each_domain, at_each_domain_data.get()); +} + +isl::ast_build ast_build::set_at_each_domain(const std::function &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 +{ + auto res = isl_ast_build_access_from_multi_pw_aff(get(), mpa.release()); + return manage(res); +} + +isl::ast_expr ast_build::access_from(isl::pw_multi_aff pma) const +{ + auto res = isl_ast_build_access_from_pw_multi_aff(get(), pma.release()); + return manage(res); +} + +isl::ast_expr ast_build::call_from(isl::multi_pw_aff mpa) const +{ + auto res = isl_ast_build_call_from_multi_pw_aff(get(), mpa.release()); + return manage(res); +} + +isl::ast_expr ast_build::call_from(isl::pw_multi_aff pma) const +{ + auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release()); + return manage(res); +} + +isl::ast_expr ast_build::expr_from(isl::pw_aff pa) const +{ + auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release()); + return manage(res); +} -public: - inline /* implicit */ union_set_list(); - inline /* implicit */ union_set_list(const union_set_list &obj); - inline union_set_list &operator=(union_set_list obj); - inline ~union_set_list(); - inline __isl_give isl_union_set_list *copy() const &; - inline __isl_give isl_union_set_list *copy() && = delete; - inline __isl_keep isl_union_set_list *get() const; - inline __isl_give isl_union_set_list *release(); - inline bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; +isl::ast_expr ast_build::expr_from(isl::set set) const +{ + auto res = isl_ast_build_expr_from_set(get(), set.release()); + return manage(res); +} - inline isl::union_set_list add(isl::union_set el) const; - static inline isl::union_set_list alloc(isl::ctx ctx, int n); - 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 stat foreach(const std::function &fn) const; - static inline isl::union_set_list from_union_set(isl::union_set el); - inline isl::union_set get_at(int index) const; - inline isl::union_set get_union_set(int index) const; - inline isl::union_set_list insert(unsigned int pos, isl::union_set el) const; - inline isl_size n_union_set() const; - inline isl::union_set_list reverse() const; - inline isl::union_set_list set_union_set(int index, isl::union_set el) const; - inline isl_size size() const; - inline isl::union_set_list swap(unsigned int pos1, unsigned int pos2) const; - inline isl::union_set unite() const; -}; +isl::ast_build ast_build::from_context(isl::set set) +{ + auto res = isl_ast_build_from_context(set.release()); + return manage(res); +} -// declarations for isl::val -inline val manage(__isl_take isl_val *ptr); -inline val manage_copy(__isl_keep isl_val *ptr); +isl::ast_node ast_build::node_from(isl::schedule schedule) const +{ + auto res = isl_ast_build_node_from_schedule(get(), schedule.release()); + return manage(res); +} -class val { - friend inline val manage(__isl_take isl_val *ptr); - friend inline val manage_copy(__isl_keep isl_val *ptr); +isl::ast_node ast_build::node_from_schedule_map(isl::union_map schedule) const +{ + auto res = isl_ast_build_node_from_schedule_map(get(), schedule.release()); + return manage(res); +} - isl_val *ptr = nullptr; +isl::ast_build ast_build::restrict(isl::set set) const +{ + auto res = isl_ast_build_restrict(copy(), set.release()); + return manage(res).copy_callbacks(*this); +} - inline explicit val(__isl_take isl_val *ptr); +isl::union_map ast_build::schedule() const +{ + auto res = isl_ast_build_get_schedule(get()); + return manage(res); +} -public: - inline /* implicit */ val(); - inline /* implicit */ val(const val &obj); - inline explicit val(isl::ctx ctx, long i); - inline explicit val(isl::ctx ctx, const std::string &str); - inline val &operator=(val obj); - inline ~val(); - inline __isl_give isl_val *copy() const &; - inline __isl_give isl_val *copy() && = delete; - inline __isl_keep isl_val *get() const; - inline __isl_give isl_val *release(); - inline bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; +isl::union_map ast_build::get_schedule() const +{ + return schedule(); +} - inline isl::val abs() const; - inline boolean abs_eq(const isl::val &v2) const; - inline isl::val add(isl::val v2) const; - inline isl::val add_ui(unsigned long v2) const; - inline isl::val ceil() const; - inline int cmp_si(long i) const; - inline isl::val div(isl::val v2) const; - inline isl::val div_ui(unsigned long v2) const; - inline boolean eq(const isl::val &v2) const; - inline boolean eq_si(long i) const; - inline isl::val floor() const; - inline isl::val gcd(isl::val v2) const; - inline boolean ge(const isl::val &v2) const; - inline uint32_t get_hash() const; - inline long get_num_si() const; - inline boolean gt(const isl::val &v2) const; - inline boolean gt_si(long i) const; - static inline isl::val infty(isl::ctx ctx); - static inline isl::val int_from_ui(isl::ctx ctx, unsigned long u); - inline isl::val inv() const; - inline boolean is_divisible_by(const isl::val &v2) const; - inline boolean is_infty() const; - inline boolean is_int() const; - inline boolean is_nan() const; - inline boolean is_neg() const; - inline boolean is_neginfty() const; - inline boolean is_negone() const; - inline boolean is_nonneg() const; - inline boolean is_nonpos() const; - inline boolean is_one() const; - inline boolean is_pos() const; - inline boolean is_rat() const; - inline boolean is_zero() const; - inline boolean le(const isl::val &v2) const; - inline boolean lt(const isl::val &v2) const; - inline isl::val max(isl::val v2) const; - inline isl::val min(isl::val v2) const; - inline isl::val mod(isl::val v2) const; - inline isl::val mul(isl::val v2) const; - inline isl::val mul_ui(unsigned long v2) const; - inline isl_size n_abs_num_chunks(size_t size) const; - static inline isl::val nan(isl::ctx ctx); - inline boolean ne(const isl::val &v2) const; - inline isl::val neg() const; - static inline isl::val neginfty(isl::ctx ctx); - static inline isl::val negone(isl::ctx ctx); - static inline isl::val one(isl::ctx ctx); - inline isl::val pow2() const; - inline isl::val set_si(long i) const; - inline int sgn() const; - inline isl::val sub(isl::val v2) const; - inline isl::val sub_ui(unsigned long v2) const; - inline isl::val trunc() const; - static inline isl::val zero(isl::ctx ctx); -}; +// implementations for isl::ast_expr +ast_expr manage(__isl_take isl_ast_expr *ptr) { + return ast_expr(ptr); +} +ast_expr manage_copy(__isl_keep isl_ast_expr *ptr) { + ptr = isl_ast_expr_copy(ptr); + return ast_expr(ptr); +} -// declarations for isl::val_list -inline val_list manage(__isl_take isl_val_list *ptr); -inline val_list manage_copy(__isl_keep isl_val_list *ptr); +ast_expr::ast_expr() + : ptr(nullptr) {} -class val_list { - friend inline val_list manage(__isl_take isl_val_list *ptr); - friend inline val_list manage_copy(__isl_keep isl_val_list *ptr); +ast_expr::ast_expr(const ast_expr &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} - isl_val_list *ptr = nullptr; +ast_expr::ast_expr(__isl_take isl_ast_expr *ptr) + : ptr(ptr) {} - inline explicit val_list(__isl_take isl_val_list *ptr); +ast_expr &ast_expr::operator=(ast_expr obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} -public: - inline /* implicit */ val_list(); - inline /* implicit */ val_list(const val_list &obj); - inline val_list &operator=(val_list obj); - inline ~val_list(); - inline __isl_give isl_val_list *copy() const &; - inline __isl_give isl_val_list *copy() && = delete; - inline __isl_keep isl_val_list *get() const; - inline __isl_give isl_val_list *release(); - inline bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; +ast_expr::~ast_expr() { + if (ptr) + isl_ast_expr_free(ptr); +} - inline isl::val_list add(isl::val el) const; - static inline isl::val_list alloc(isl::ctx ctx, int n); - 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 stat foreach(const std::function &fn) const; - static inline isl::val_list from_val(isl::val el); - inline isl::val get_at(int index) const; - inline isl::val get_val(int index) const; - inline isl::val_list insert(unsigned int pos, isl::val el) const; - inline isl_size n_val() const; - inline isl::val_list reverse() const; - inline isl::val_list set_val(int index, isl::val el) const; - inline isl_size size() const; - inline isl::val_list swap(unsigned int pos1, unsigned int pos2) const; -}; +__isl_give isl_ast_expr *ast_expr::copy() const & { + return isl_ast_expr_copy(ptr); +} -// declarations for isl::vec -inline vec manage(__isl_take isl_vec *ptr); -inline vec manage_copy(__isl_keep isl_vec *ptr); +__isl_keep isl_ast_expr *ast_expr::get() const { + return ptr; +} -class vec { - friend inline vec manage(__isl_take isl_vec *ptr); - friend inline vec manage_copy(__isl_keep isl_vec *ptr); +__isl_give isl_ast_expr *ast_expr::release() { + isl_ast_expr *tmp = ptr; + ptr = nullptr; + return tmp; +} - isl_vec *ptr = nullptr; +bool ast_expr::is_null() const { + return ptr == nullptr; +} - inline explicit vec(__isl_take isl_vec *ptr); +template +bool ast_expr::isa_type(T subtype) const +{ + return isl_ast_expr_get_type(get()) == subtype; +} +template +bool ast_expr::isa() const +{ + return isa_type(T::type); +} +template +T ast_expr::as() const +{ + if (!isa()) + exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__); + return T(copy()); +} -public: - inline /* implicit */ vec(); - inline /* implicit */ vec(const vec &obj); - inline vec &operator=(vec obj); - inline ~vec(); - inline __isl_give isl_vec *copy() const &; - inline __isl_give isl_vec *copy() && = delete; - inline __isl_keep isl_vec *get() const; - inline __isl_give isl_vec *release(); - inline bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; - - inline isl::vec add(isl::vec vec2) const; - inline isl::vec add_els(unsigned int n) const; - static inline isl::vec alloc(isl::ctx ctx, unsigned int size); - inline isl::vec ceil() const; - inline isl::vec clr() const; - inline int cmp_element(const isl::vec &vec2, int pos) const; - inline isl::vec concat(isl::vec vec2) const; - inline isl::vec drop_els(unsigned int pos, unsigned int n) const; - inline isl::vec extend(unsigned int size) const; - inline isl::val get_element_val(int pos) const; - inline isl::vec insert_els(unsigned int pos, unsigned int n) const; - inline isl::vec insert_zero_els(unsigned int pos, unsigned int n) const; - inline boolean is_equal(const isl::vec &vec2) const; - inline isl::vec mat_product(isl::mat mat) const; - inline isl::vec move_els(unsigned int dst_col, unsigned int src_col, unsigned int n) const; - inline isl::vec neg() const; - inline isl::vec set_element_si(int pos, int v) const; - inline isl::vec set_element_val(int pos, isl::val v) const; - inline isl::vec set_si(int v) const; - inline isl::vec set_val(isl::val v) const; - inline isl_size size() const; - inline isl::vec sort() const; - static inline isl::vec zero(isl::ctx ctx, unsigned int size); - inline isl::vec zero_extend(unsigned int size) const; -}; +isl::ctx ast_expr::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} -// implementations for isl::aff -aff manage(__isl_take isl_aff *ptr) { - return aff(ptr); +isl::ast_expr ast_expr::add(isl::ast_expr expr2) const +{ + auto res = isl_ast_expr_add(copy(), expr2.release()); + return manage(res); } -aff manage_copy(__isl_keep isl_aff *ptr) { - ptr = isl_aff_copy(ptr); - return aff(ptr); + +isl::ast_expr ast_expr::address_of() const +{ + auto res = isl_ast_expr_address_of(copy()); + return manage(res); } -aff::aff() - : ptr(nullptr) {} +isl::ast_expr ast_expr::eq(isl::ast_expr expr2) const +{ + auto res = isl_ast_expr_eq(copy(), expr2.release()); + return manage(res); +} -aff::aff(const aff &obj) - : ptr(nullptr) +isl::ast_expr ast_expr::from_val(isl::val v) { - ptr = obj.copy(); + auto res = isl_ast_expr_from_val(v.release()); + return manage(res); } +isl::id ast_expr::id() const +{ + auto res = isl_ast_expr_get_id(get()); + return manage(res); +} -aff::aff(__isl_take isl_aff *ptr) - : ptr(ptr) {} +isl::id ast_expr::get_id() const +{ + return id(); +} -aff::aff(isl::ctx ctx, const std::string &str) +isl::ast_expr ast_expr::le(isl::ast_expr expr2) const { - auto res = isl_aff_read_from_str(ctx.release(), str.c_str()); - ptr = res; + auto res = isl_ast_expr_le(copy(), expr2.release()); + return manage(res); } -aff::aff(isl::local_space ls, isl::val val) + +isl::ast_expr ast_expr::mul(isl::ast_expr expr2) const { - auto res = isl_aff_val_on_domain(ls.release(), val.release()); - ptr = res; + auto res = isl_ast_expr_mul(copy(), expr2.release()); + return manage(res); } -aff::aff(isl::local_space ls) + +isl::ast_expr ast_expr::op_arg(int pos) const { - auto res = isl_aff_zero_on_domain(ls.release()); - ptr = res; + auto res = isl_ast_expr_get_op_arg(get(), pos); + return manage(res); } -aff &aff::operator=(aff obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::ast_expr ast_expr::get_op_arg(int pos) const +{ + return op_arg(pos); } -aff::~aff() { - if (ptr) - isl_aff_free(ptr); +std::string ast_expr::to_C_str() const +{ + auto res = isl_ast_expr_to_C_str(get()); + std::string tmp(res); + free(res); + return tmp; } -__isl_give isl_aff *aff::copy() const & { - return isl_aff_copy(ptr); +isl::val ast_expr::val() const +{ + auto res = isl_ast_expr_get_val(get()); + return manage(res); } -__isl_keep isl_aff *aff::get() const { - return ptr; +isl::val ast_expr::get_val() const +{ + return val(); } -__isl_give isl_aff *aff::release() { - isl_aff *tmp = ptr; - ptr = nullptr; - return tmp; +inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -bool aff::is_null() const { - return ptr == nullptr; +// 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) {} -isl::ctx aff::ctx() const { - return isl::ctx(isl_aff_get_ctx(ptr)); +ast_expr_id &ast_expr_id::operator=(ast_expr_id obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -void aff::dump() const { - isl_aff_dump(get()); +isl::ctx ast_expr_id::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } - -isl::aff aff::add(isl::aff aff2) const +isl::id ast_expr_id::id() const { - auto res = isl_aff_add(copy(), aff2.release()); + auto res = isl_ast_expr_id_get_id(get()); return manage(res); } -isl::aff aff::add_coefficient_si(isl::dim type, int pos, int v) const +isl::id ast_expr_id::get_id() const { - auto res = isl_aff_add_coefficient_si(copy(), static_cast(type), pos, v); - return manage(res); + return id(); } -isl::aff aff::add_coefficient_val(isl::dim type, int pos, isl::val v) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj) { - auto res = isl_aff_add_coefficient_val(copy(), static_cast(type), pos, v.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff::add_constant(isl::val v) const +// 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) { - auto res = isl_aff_add_constant_val(copy(), v.release()); - return manage(res); } -isl::aff aff::add_constant_num_si(int v) const -{ - auto res = isl_aff_add_constant_num_si(copy(), v); - return manage(res); +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::aff aff::add_constant_si(int v) const -{ - auto res = isl_aff_add_constant_si(copy(), v); - return manage(res); +isl::ctx ast_expr_int::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::add_dims(isl::dim type, unsigned int n) const +isl::val ast_expr_int::val() const { - auto res = isl_aff_add_dims(copy(), static_cast(type), n); + auto res = isl_ast_expr_int_get_val(get()); return manage(res); } -isl::aff aff::align_params(isl::space model) const +isl::val ast_expr_int::get_val() const { - auto res = isl_aff_align_params(copy(), model.release()); - return manage(res); + return val(); } -isl::basic_set aff::bind(isl::id id) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj) { - auto res = isl_aff_bind_id(copy(), id.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff::ceil() const +// 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) { - auto res = isl_aff_ceil(copy()); - return manage(res); } -int aff::coefficient_sgn(isl::dim type, int pos) const -{ - auto res = isl_aff_coefficient_sgn(get(), static_cast(type), pos); - return res; +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; } -isl_size aff::dim(isl::dim type) const +template +bool ast_expr_op::isa_type(T subtype) const { - auto res = isl_aff_dim(get(), static_cast(type)); - return res; + return isl_ast_expr_op_get_type(get()) == subtype; } - -isl::aff aff::div(isl::aff aff2) const +template +bool ast_expr_op::isa() const { - auto res = isl_aff_div(copy(), aff2.release()); - return manage(res); + return isa_type(T::type); } - -isl::aff aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +template +T ast_expr_op::as() const { - auto res = isl_aff_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + if (!isa()) + exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__); + return T(copy()); } -isl::basic_set aff::eq_basic_set(isl::aff aff2) const -{ - auto res = isl_aff_eq_basic_set(copy(), aff2.release()); - return manage(res); +isl::ctx ast_expr_op::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::set aff::eq_set(isl::aff aff2) const +isl::ast_expr ast_expr_op::arg(int pos) const { - auto res = isl_aff_eq_set(copy(), aff2.release()); + auto res = isl_ast_expr_op_get_arg(get(), pos); return manage(res); } -isl::val aff::eval(isl::point pnt) const +isl::ast_expr ast_expr_op::get_arg(int pos) const { - auto res = isl_aff_eval(copy(), pnt.release()); - return manage(res); + return arg(pos); } -int aff::find_dim_by_name(isl::dim type, const std::string &name) const +isl_size ast_expr_op::n_arg() const { - auto res = isl_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); + auto res = isl_ast_expr_op_get_n_arg(get()); return res; } -isl::aff aff::floor() const +isl_size ast_expr_op::get_n_arg() const { - auto res = isl_aff_floor(copy()); - return manage(res); + return n_arg(); } -isl::aff aff::from_range() const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj) { - auto res = isl_aff_from_range(copy()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::basic_set aff::ge_basic_set(isl::aff aff2) const -{ - auto res = isl_aff_ge_basic_set(copy(), aff2.release()); - return manage(res); -} +// implementations for isl::ast_expr_op_access +ast_expr_op_access::ast_expr_op_access() + : ast_expr_op() {} -isl::set aff::ge_set(isl::aff aff2) const +ast_expr_op_access::ast_expr_op_access(const ast_expr_op_access &obj) + : ast_expr_op(obj) { - auto res = isl_aff_ge_set(copy(), aff2.release()); - return manage(res); } -isl::val aff::get_coefficient_val(isl::dim type, int pos) const -{ - auto res = isl_aff_get_coefficient_val(get(), static_cast(type), pos); - return manage(res); +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::val aff::get_constant_val() const -{ - auto res = isl_aff_get_constant_val(get()); - return manage(res); +isl::ctx ast_expr_op_access::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::val aff::get_denominator_val() const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj) { - auto res = isl_aff_get_denominator_val(get()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -std::string aff::get_dim_name(isl::dim type, unsigned int pos) const +// 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) { - auto res = isl_aff_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; } -isl::aff aff::get_div(int pos) const -{ - auto res = isl_aff_get_div(get(), pos); - return manage(res); +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::local_space aff::get_domain_local_space() const -{ - auto res = isl_aff_get_domain_local_space(get()); - return manage(res); +isl::ctx ast_expr_op_add::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::space aff::get_domain_space() const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj) { - auto res = isl_aff_get_domain_space(get()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -uint32_t aff::get_hash() const +// 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) { - auto res = isl_aff_get_hash(get()); - return res; } -isl::local_space aff::get_local_space() const -{ - auto res = isl_aff_get_local_space(get()); - return manage(res); +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::space aff::get_space() const -{ - auto res = isl_aff_get_space(get()); - return manage(res); +isl::ctx ast_expr_op_address_of::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::gist(isl::set context) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj) { - auto res = isl_aff_gist(copy(), context.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff::gist_params(isl::set context) const +// 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) { - auto res = isl_aff_gist_params(copy(), context.release()); - return manage(res); } -isl::basic_set aff::gt_basic_set(isl::aff aff2) const -{ - auto res = isl_aff_gt_basic_set(copy(), aff2.release()); - return manage(res); +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::set aff::gt_set(isl::aff aff2) const -{ - auto res = isl_aff_gt_set(copy(), aff2.release()); - return manage(res); +isl::ctx ast_expr_op_and::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::insert_dims(isl::dim type, unsigned int first, unsigned int n) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj) { - auto res = isl_aff_insert_dims(copy(), static_cast(type), first, n); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -boolean aff::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +// 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) { - auto res = isl_aff_involves_dims(get(), static_cast(type), first, n); - return manage(res); } -boolean aff::involves_locals() const -{ - auto res = isl_aff_involves_locals(get()); - return manage(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; } -boolean aff::is_cst() const -{ - auto res = isl_aff_is_cst(get()); - return manage(res); +isl::ctx ast_expr_op_and_then::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -boolean aff::is_nan() const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj) { - auto res = isl_aff_is_nan(get()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::basic_set aff::le_basic_set(isl::aff aff2) const +// 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) { - auto res = isl_aff_le_basic_set(copy(), aff2.release()); - return manage(res); } -isl::set aff::le_set(isl::aff aff2) const -{ - auto res = isl_aff_le_set(copy(), aff2.release()); - return manage(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) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl::basic_set aff::lt_basic_set(isl::aff aff2) const -{ - auto res = isl_aff_lt_basic_set(copy(), aff2.release()); - return manage(res); +isl::ctx ast_expr_op_call::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::set aff::lt_set(isl::aff aff2) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj) { - auto res = isl_aff_lt_set(copy(), aff2.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff::mod(isl::val mod) const +// 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) { - auto res = isl_aff_mod_val(copy(), mod.release()); - return manage(res); } -isl::aff aff::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const -{ - auto res = isl_aff_move_dims(copy(), static_cast(dst_type), dst_pos, static_cast(src_type), src_pos, n); - return manage(res); +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::aff aff::mul(isl::aff aff2) const -{ - auto res = isl_aff_mul(copy(), aff2.release()); - return manage(res); +isl::ctx ast_expr_op_cond::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::nan_on_domain(isl::local_space ls) +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj) { - auto res = isl_aff_nan_on_domain(ls.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff::nan_on_domain_space(isl::space space) +// 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) { - auto res = isl_aff_nan_on_domain_space(space.release()); - return manage(res); } -isl::set aff::ne_set(isl::aff aff2) const -{ - auto res = isl_aff_ne_set(copy(), aff2.release()); - 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::neg() const -{ - auto res = isl_aff_neg(copy()); - return manage(res); +isl::ctx ast_expr_op_div::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::basic_set aff::neg_basic_set() const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj) { - auto res = isl_aff_neg_basic_set(copy()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff::param_on_domain_space_id(isl::space space, isl::id id) +// 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) { - auto res = isl_aff_param_on_domain_space_id(space.release(), id.release()); - return manage(res); } -boolean aff::plain_is_equal(const isl::aff &aff2) const -{ - auto res = isl_aff_plain_is_equal(get(), aff2.get()); - return manage(res); +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; } -boolean aff::plain_is_zero() const -{ - auto res = isl_aff_plain_is_zero(get()); - return manage(res); +isl::ctx ast_expr_op_eq::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::project_domain_on_params() const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj) { - auto res = isl_aff_project_domain_on_params(copy()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff::pullback(isl::multi_aff ma) const +// 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) { - auto res = isl_aff_pullback_multi_aff(copy(), ma.release()); - return manage(res); } -isl::aff aff::pullback_aff(isl::aff aff2) const -{ - auto res = isl_aff_pullback_aff(copy(), aff2.release()); - return manage(res); +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::aff aff::scale(isl::val v) const -{ - auto res = isl_aff_scale_val(copy(), v.release()); - return manage(res); +isl::ctx ast_expr_op_fdiv_q::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::scale_down(isl::val v) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj) { - auto res = isl_aff_scale_down_val(copy(), v.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff::scale_down_ui(unsigned int f) const +// 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) { - auto res = isl_aff_scale_down_ui(copy(), f); - return manage(res); } -isl::aff aff::set_coefficient_si(isl::dim type, int pos, int v) const -{ - auto res = isl_aff_set_coefficient_si(copy(), static_cast(type), pos, v); - return manage(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) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl::aff aff::set_coefficient_val(isl::dim type, int pos, isl::val v) const -{ - auto res = isl_aff_set_coefficient_val(copy(), static_cast(type), pos, v.release()); - return manage(res); +isl::ctx ast_expr_op_ge::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::set_constant_si(int v) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj) { - auto res = isl_aff_set_constant_si(copy(), v); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff::set_constant_val(isl::val v) const +// 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) { - auto res = isl_aff_set_constant_val(copy(), v.release()); - return manage(res); } -isl::aff aff::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const -{ - auto res = isl_aff_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); +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::aff aff::set_tuple_id(isl::dim type, isl::id id) const -{ - auto res = isl_aff_set_tuple_id(copy(), static_cast(type), id.release()); - return manage(res); +isl::ctx ast_expr_op_gt::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::sub(isl::aff aff2) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj) { - auto res = isl_aff_sub(copy(), aff2.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff::unbind_params_insert_domain(isl::multi_id domain) const +// 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) { - auto res = isl_aff_unbind_params_insert_domain(copy(), domain.release()); - return manage(res); } -isl::aff aff::val_on_domain_space(isl::space space, isl::val val) -{ - auto res = isl_aff_val_on_domain_space(space.release(), val.release()); - return manage(res); +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::aff aff::var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos) -{ - auto res = isl_aff_var_on_domain(ls.release(), static_cast(type), pos); - return manage(res); +isl::ctx ast_expr_op_le::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::basic_set aff::zero_basic_set() const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj) { - auto res = isl_aff_zero_basic_set(copy()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff::zero_on_domain(isl::space space) +// 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) { - auto res = isl_aff_zero_on_domain_space(space.release()); - return manage(res); } -// implementations for isl::aff_list -aff_list manage(__isl_take isl_aff_list *ptr) { - return aff_list(ptr); -} -aff_list manage_copy(__isl_keep isl_aff_list *ptr) { - ptr = isl_aff_list_copy(ptr); - return aff_list(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; } -aff_list::aff_list() - : ptr(nullptr) {} +isl::ctx ast_expr_op_lt::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} -aff_list::aff_list(const aff_list &obj) - : ptr(nullptr) +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj) { - ptr = obj.copy(); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } +// implementations for isl::ast_expr_op_max +ast_expr_op_max::ast_expr_op_max() + : ast_expr_op() {} -aff_list::aff_list(__isl_take isl_aff_list *ptr) - : ptr(ptr) {} +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) {} -aff_list &aff_list::operator=(aff_list obj) { +ast_expr_op_max &ast_expr_op_max::operator=(ast_expr_op_max obj) { std::swap(this->ptr, obj.ptr); return *this; } -aff_list::~aff_list() { - if (ptr) - isl_aff_list_free(ptr); +isl::ctx ast_expr_op_max::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -__isl_give isl_aff_list *aff_list::copy() const & { - return isl_aff_list_copy(ptr); +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -__isl_keep isl_aff_list *aff_list::get() const { - return ptr; -} +// implementations for isl::ast_expr_op_member +ast_expr_op_member::ast_expr_op_member() + : ast_expr_op() {} -__isl_give isl_aff_list *aff_list::release() { - isl_aff_list *tmp = ptr; - ptr = nullptr; - return tmp; +ast_expr_op_member::ast_expr_op_member(const ast_expr_op_member &obj) + : ast_expr_op(obj) +{ } -bool aff_list::is_null() const { - return ptr == nullptr; -} +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 aff_list::ctx() const { - return isl::ctx(isl_aff_list_get_ctx(ptr)); +isl::ctx ast_expr_op_member::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -void aff_list::dump() const { - isl_aff_list_dump(get()); +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } +// implementations for isl::ast_expr_op_min +ast_expr_op_min::ast_expr_op_min() + : ast_expr_op() {} -isl::aff_list aff_list::add(isl::aff el) const +ast_expr_op_min::ast_expr_op_min(const ast_expr_op_min &obj) + : ast_expr_op(obj) { - auto res = isl_aff_list_add(copy(), el.release()); - return manage(res); } -isl::aff_list aff_list::alloc(isl::ctx ctx, int n) -{ - auto res = isl_aff_list_alloc(ctx.release(), n); - 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::aff_list aff_list::clear() const -{ - auto res = isl_aff_list_clear(copy()); - return manage(res); +isl::ctx ast_expr_op_min::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff_list aff_list::concat(isl::aff_list list2) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj) { - auto res = isl_aff_list_concat(copy(), list2.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff_list aff_list::drop(unsigned int first, unsigned int n) const +// 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) { - auto res = isl_aff_list_drop(copy(), first, n); - return manage(res); } -stat aff_list::foreach(const std::function &fn) const -{ - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data); - 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::aff_list aff_list::from_aff(isl::aff el) -{ - auto res = isl_aff_list_from_aff(el.release()); - return manage(res); +isl::ctx ast_expr_op_minus::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff_list::get_aff(int index) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj) { - auto res = isl_aff_list_get_aff(get(), index); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff aff_list::get_at(int index) const +// 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) { - auto res = isl_aff_list_get_at(get(), index); - return manage(res); } -isl::aff_list aff_list::insert(unsigned int pos, isl::aff el) const -{ - auto res = isl_aff_list_insert(copy(), pos, el.release()); - return manage(res); +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_size aff_list::n_aff() const -{ - auto res = isl_aff_list_n_aff(get()); - return res; +isl::ctx ast_expr_op_mul::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff_list aff_list::reverse() const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj) { - auto res = isl_aff_list_reverse(copy()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::aff_list aff_list::set_aff(int index, isl::aff el) const +// 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) { - auto res = isl_aff_list_set_aff(copy(), index, el.release()); - return manage(res); } -isl_size aff_list::size() const -{ - auto res = isl_aff_list_size(get()); - return 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)); } -isl::aff_list aff_list::swap(unsigned int pos1, unsigned int pos2) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj) { - auto res = isl_aff_list_swap(copy(), pos1, pos2); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -// implementations for isl::ast_build -ast_build manage(__isl_take isl_ast_build *ptr) { - return ast_build(ptr); +// 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_build manage_copy(__isl_keep isl_ast_build *ptr) { - ptr = isl_ast_build_copy(ptr); - return ast_build(ptr); + +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; } -ast_build::ast_build() - : ptr(nullptr) {} +isl::ctx ast_expr_op_or_else::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} -ast_build::ast_build(const ast_build &obj) - : ptr(nullptr) +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj) { - ptr = obj.copy(); + char *str = isl_ast_expr_to_str(obj.get()); + 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_build::ast_build(__isl_take isl_ast_build *ptr) - : ptr(ptr) {} - -ast_build::ast_build(isl::ctx ctx) +ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj) + : ast_expr_op(obj) { - auto res = isl_ast_build_alloc(ctx.release()); - ptr = res; } -ast_build &ast_build::operator=(ast_build 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; } -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::ctx ast_expr_op_pdiv_q::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -__isl_keep isl_ast_build *ast_build::get() const { - return ptr; +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -__isl_give isl_ast_build *ast_build::release() { - isl_ast_build *tmp = ptr; - ptr = nullptr; - return tmp; -} +// implementations for isl::ast_expr_op_pdiv_r +ast_expr_op_pdiv_r::ast_expr_op_pdiv_r() + : ast_expr_op() {} -bool ast_build::is_null() const { - return ptr == nullptr; +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) {} -isl::ctx ast_build::ctx() const { - return isl::ctx(isl_ast_build_get_ctx(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)); +} -isl::ast_expr ast_build::access_from(isl::multi_pw_aff mpa) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj) { - auto res = isl_ast_build_access_from_multi_pw_aff(get(), mpa.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::ast_expr ast_build::access_from(isl::pw_multi_aff pma) const +// 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) { - auto res = isl_ast_build_access_from_pw_multi_aff(get(), pma.release()); - return manage(res); } -isl::ast_node ast_build::ast_from_schedule(isl::union_map schedule) const -{ - auto res = isl_ast_build_ast_from_schedule(get(), schedule.release()); - return manage(res); +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::ast_expr ast_build::call_from(isl::multi_pw_aff mpa) const -{ - auto res = isl_ast_build_call_from_multi_pw_aff(get(), mpa.release()); - return manage(res); +isl::ctx ast_expr_op_select::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::ast_expr ast_build::call_from(isl::pw_multi_aff pma) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj) { - auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::ast_expr ast_build::expr_from(isl::pw_aff pa) const +// 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) { - auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release()); - return manage(res); } -isl::ast_expr ast_build::expr_from(isl::set set) const -{ - auto res = isl_ast_build_expr_from_set(get(), set.release()); - 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::ast_build ast_build::from_context(isl::set set) -{ - auto res = isl_ast_build_from_context(set.release()); - return manage(res); +isl::ctx ast_expr_op_sub::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::union_map ast_build::get_schedule() const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj) { - auto res = isl_ast_build_get_schedule(get()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::space ast_build::get_schedule_space() const +// 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) { - auto res = isl_ast_build_get_schedule_space(get()); - return manage(res); } -isl::ast_node ast_build::node_from(isl::schedule schedule) const -{ - auto res = isl_ast_build_node_from_schedule(get(), schedule.release()); - return manage(res); +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::ast_node ast_build::node_from_schedule_map(isl::union_map schedule) const -{ - auto res = isl_ast_build_node_from_schedule_map(get(), schedule.release()); - return manage(res); +isl::ctx ast_expr_op_zdiv_r::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::ast_build ast_build::restrict(isl::set set) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj) { - auto res = isl_ast_build_restrict(copy(), set.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + os << str; + free(str); + return os; } -// implementations for isl::ast_expr -ast_expr manage(__isl_take isl_ast_expr *ptr) { - return ast_expr(ptr); +// implementations for isl::ast_node +ast_node manage(__isl_take isl_ast_node *ptr) { + return ast_node(ptr); } -ast_expr manage_copy(__isl_keep isl_ast_expr *ptr) { - ptr = isl_ast_expr_copy(ptr); - return ast_expr(ptr); +ast_node manage_copy(__isl_keep isl_ast_node *ptr) { + ptr = isl_ast_node_copy(ptr); + return ast_node(ptr); } -ast_expr::ast_expr() +ast_node::ast_node() : ptr(nullptr) {} -ast_expr::ast_expr(const ast_expr &obj) +ast_node::ast_node(const ast_node &obj) : ptr(nullptr) { ptr = obj.copy(); } - -ast_expr::ast_expr(__isl_take isl_ast_expr *ptr) +ast_node::ast_node(__isl_take isl_ast_node *ptr) : ptr(ptr) {} - -ast_expr &ast_expr::operator=(ast_expr obj) { +ast_node &ast_node::operator=(ast_node obj) { std::swap(this->ptr, obj.ptr); return *this; } -ast_expr::~ast_expr() { +ast_node::~ast_node() { if (ptr) - isl_ast_expr_free(ptr); + isl_ast_node_free(ptr); } -__isl_give isl_ast_expr *ast_expr::copy() const & { - return isl_ast_expr_copy(ptr); +__isl_give isl_ast_node *ast_node::copy() const & { + return isl_ast_node_copy(ptr); } -__isl_keep isl_ast_expr *ast_expr::get() const { +__isl_keep isl_ast_node *ast_node::get() const { return ptr; } -__isl_give isl_ast_expr *ast_expr::release() { - isl_ast_expr *tmp = ptr; +__isl_give isl_ast_node *ast_node::release() { + isl_ast_node *tmp = ptr; ptr = nullptr; return tmp; } -bool ast_expr::is_null() const { +bool ast_node::is_null() const { return ptr == nullptr; } +template +bool ast_node::isa_type(T subtype) const +{ + return isl_ast_node_get_type(get()) == subtype; +} +template +bool ast_node::isa() const +{ + return isa_type(T::type); +} +template +T ast_node::as() const +{ + if (!isa()) + 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)); +isl::ctx ast_node::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); } -void ast_expr::dump() const { - isl_ast_expr_dump(get()); +isl::id ast_node::annotation() const +{ + auto res = isl_ast_node_get_annotation(get()); + return manage(res); } +isl::id ast_node::get_annotation() const +{ + return annotation(); +} -isl::ast_expr ast_expr::access(isl::ast_expr_list indices) const +std::string ast_node::to_C_str() const { - auto res = isl_ast_expr_access(copy(), indices.release()); - return manage(res); + auto res = isl_ast_node_to_C_str(get()); + std::string tmp(res); + free(res); + return tmp; } -isl::ast_expr ast_expr::add(isl::ast_expr expr2) const +isl::ast_node_list ast_node::to_list() const { - auto res = isl_ast_expr_add(copy(), expr2.release()); + auto res = isl_ast_node_to_list(copy()); return manage(res); } -isl::ast_expr ast_expr::address_of() const +inline std::ostream &operator<<(std::ostream &os, const ast_node &obj) { - auto res = isl_ast_expr_address_of(copy()); - return manage(res); + char *str = isl_ast_node_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::ast_expr ast_expr::call(isl::ast_expr_list arguments) const +// 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) { - auto res = isl_ast_expr_call(copy(), arguments.release()); - return manage(res); } -isl::ast_expr ast_expr::div(isl::ast_expr expr2) const +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 { - auto res = isl_ast_expr_div(copy(), expr2.release()); + auto res = isl_ast_node_block_get_children(get()); return manage(res); } -isl::ast_expr ast_expr::eq(isl::ast_expr expr2) const +isl::ast_node_list ast_node_block::get_children() const { - auto res = isl_ast_expr_eq(copy(), expr2.release()); - return manage(res); + return children(); } -isl::ast_expr ast_expr::from_id(isl::id id) +inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj) { - auto res = isl_ast_expr_from_id(id.release()); - return manage(res); + char *str = isl_ast_node_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::ast_expr ast_expr::from_val(isl::val v) +// 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) { - auto res = isl_ast_expr_from_val(v.release()); - return manage(res); } -isl::ast_expr ast_expr::ge(isl::ast_expr expr2) const +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 { - auto res = isl_ast_expr_ge(copy(), expr2.release()); + auto res = isl_ast_node_for_get_body(get()); return manage(res); } -isl::id ast_expr::get_id() const +isl::ast_node ast_node_for::get_body() const { - auto res = isl_ast_expr_get_id(get()); - return manage(res); + return body(); } -isl::ast_expr ast_expr::get_op_arg(int pos) const +isl::ast_expr ast_node_for::cond() const { - auto res = isl_ast_expr_get_op_arg(get(), pos); + auto res = isl_ast_node_for_get_cond(get()); return manage(res); } -isl_size ast_expr::get_op_n_arg() const +isl::ast_expr ast_node_for::get_cond() const { - auto res = isl_ast_expr_get_op_n_arg(get()); - return res; + return cond(); } -isl::val ast_expr::get_val() const +isl::ast_expr ast_node_for::inc() const { - auto res = isl_ast_expr_get_val(get()); + auto res = isl_ast_node_for_get_inc(get()); return manage(res); } -isl::ast_expr ast_expr::gt(isl::ast_expr expr2) const +isl::ast_expr ast_node_for::get_inc() const { - auto res = isl_ast_expr_gt(copy(), expr2.release()); - return manage(res); + return inc(); } -isl::id ast_expr::id_get_id() const +isl::ast_expr ast_node_for::init() const { - auto res = isl_ast_expr_id_get_id(get()); + auto res = isl_ast_node_for_get_init(get()); return manage(res); } -isl::val ast_expr::int_get_val() const +isl::ast_expr ast_node_for::get_init() const { - auto res = isl_ast_expr_int_get_val(get()); - return manage(res); + return init(); } -boolean ast_expr::is_equal(const isl::ast_expr &expr2) const +bool ast_node_for::is_degenerate() const { - auto res = isl_ast_expr_is_equal(get(), expr2.get()); - return manage(res); + auto res = isl_ast_node_for_is_degenerate(get()); + return res; } -isl::ast_expr ast_expr::le(isl::ast_expr expr2) const +isl::ast_expr ast_node_for::iterator() const { - auto res = isl_ast_expr_le(copy(), expr2.release()); + auto res = isl_ast_node_for_get_iterator(get()); return manage(res); } -isl::ast_expr ast_expr::lt(isl::ast_expr expr2) const +isl::ast_expr ast_node_for::get_iterator() const { - auto res = isl_ast_expr_lt(copy(), expr2.release()); - return manage(res); + return iterator(); } -isl::ast_expr ast_expr::mul(isl::ast_expr expr2) const +inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj) { - auto res = isl_ast_expr_mul(copy(), expr2.release()); - return manage(res); + char *str = isl_ast_node_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::ast_expr ast_expr::neg() const +// 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) { - auto res = isl_ast_expr_neg(copy()); - return manage(res); } -isl::ast_expr ast_expr::op_get_arg(int pos) const +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 { - auto res = isl_ast_expr_op_get_arg(get(), pos); + auto res = isl_ast_node_if_get_cond(get()); return manage(res); } -isl_size ast_expr::op_get_n_arg() const +isl::ast_expr ast_node_if::get_cond() const { - auto res = isl_ast_expr_op_get_n_arg(get()); - return res; + return cond(); } -isl::ast_expr ast_expr::pdiv_q(isl::ast_expr expr2) const +isl::ast_node ast_node_if::else_node() const { - auto res = isl_ast_expr_pdiv_q(copy(), expr2.release()); + auto res = isl_ast_node_if_get_else_node(get()); return manage(res); } -isl::ast_expr ast_expr::pdiv_r(isl::ast_expr expr2) const +isl::ast_node ast_node_if::get_else_node() const { - auto res = isl_ast_expr_pdiv_r(copy(), expr2.release()); - return manage(res); + return else_node(); } -isl::ast_expr ast_expr::set_op_arg(int pos, isl::ast_expr arg) const +bool ast_node_if::has_else_node() const { - auto res = isl_ast_expr_set_op_arg(copy(), pos, arg.release()); - return manage(res); + auto res = isl_ast_node_if_has_else_node(get()); + return res; } -isl::ast_expr ast_expr::sub(isl::ast_expr expr2) const +isl::ast_node ast_node_if::then_node() const { - auto res = isl_ast_expr_sub(copy(), expr2.release()); + auto res = isl_ast_node_if_get_then_node(get()); return manage(res); } -isl::ast_expr ast_expr::substitute_ids(isl::id_to_ast_expr id2expr) const +isl::ast_node ast_node_if::get_then_node() const { - auto res = isl_ast_expr_substitute_ids(copy(), id2expr.release()); - return manage(res); + return then_node(); } -std::string ast_expr::to_C_str() const +inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj) { - auto res = isl_ast_expr_to_C_str(get()); - std::string tmp(res); - free(res); - return tmp; + char *str = isl_ast_node_to_str(obj.get()); + os << str; + free(str); + return os; } -// implementations for isl::ast_expr_list -ast_expr_list manage(__isl_take isl_ast_expr_list *ptr) { - return ast_expr_list(ptr); +// implementations for isl::ast_node_list +ast_node_list manage(__isl_take isl_ast_node_list *ptr) { + return ast_node_list(ptr); } -ast_expr_list manage_copy(__isl_keep isl_ast_expr_list *ptr) { - ptr = isl_ast_expr_list_copy(ptr); - return ast_expr_list(ptr); +ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) { + ptr = isl_ast_node_list_copy(ptr); + return ast_node_list(ptr); } -ast_expr_list::ast_expr_list() +ast_node_list::ast_node_list() : ptr(nullptr) {} -ast_expr_list::ast_expr_list(const ast_expr_list &obj) +ast_node_list::ast_node_list(const ast_node_list &obj) : ptr(nullptr) { ptr = obj.copy(); } - -ast_expr_list::ast_expr_list(__isl_take isl_ast_expr_list *ptr) +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 res = isl_ast_node_list_alloc(ctx.release(), n); + ptr = res; +} + +ast_node_list::ast_node_list(isl::ast_node el) +{ + auto res = isl_ast_node_list_from_ast_node(el.release()); + ptr = res; +} -ast_expr_list &ast_expr_list::operator=(ast_expr_list obj) { +ast_node_list &ast_node_list::operator=(ast_node_list obj) { std::swap(this->ptr, obj.ptr); return *this; } -ast_expr_list::~ast_expr_list() { +ast_node_list::~ast_node_list() { if (ptr) - isl_ast_expr_list_free(ptr); + isl_ast_node_list_free(ptr); } -__isl_give isl_ast_expr_list *ast_expr_list::copy() const & { - return isl_ast_expr_list_copy(ptr); +__isl_give isl_ast_node_list *ast_node_list::copy() const & { + return isl_ast_node_list_copy(ptr); } -__isl_keep isl_ast_expr_list *ast_expr_list::get() const { +__isl_keep isl_ast_node_list *ast_node_list::get() const { return ptr; } -__isl_give isl_ast_expr_list *ast_expr_list::release() { - isl_ast_expr_list *tmp = ptr; +__isl_give isl_ast_node_list *ast_node_list::release() { + isl_ast_node_list *tmp = ptr; ptr = nullptr; return tmp; } -bool ast_expr_list::is_null() const { +bool ast_node_list::is_null() const { return ptr == nullptr; } - -isl::ctx ast_expr_list::ctx() const { - return isl::ctx(isl_ast_expr_list_get_ctx(ptr)); +isl::ctx ast_node_list::ctx() const { + return isl::ctx(isl_ast_node_list_get_ctx(ptr)); } -void ast_expr_list::dump() const { - isl_ast_expr_list_dump(get()); +isl::ast_node_list ast_node_list::add(isl::ast_node el) const +{ + auto res = isl_ast_node_list_add(copy(), el.release()); + return manage(res); } - -isl::ast_expr_list ast_expr_list::add(isl::ast_expr el) const +isl::ast_node ast_node_list::at(int index) const { - auto res = isl_ast_expr_list_add(copy(), el.release()); + auto res = isl_ast_node_list_get_at(get(), index); return manage(res); } -isl::ast_expr_list ast_expr_list::alloc(isl::ctx ctx, int n) +isl::ast_node ast_node_list::get_at(int index) const { - auto res = isl_ast_expr_list_alloc(ctx.release(), n); - return manage(res); + return at(index); } -isl::ast_expr_list ast_expr_list::clear() const +isl::ast_node_list ast_node_list::clear() const { - auto res = isl_ast_expr_list_clear(copy()); + auto res = isl_ast_node_list_clear(copy()); return manage(res); } -isl::ast_expr_list ast_expr_list::concat(isl::ast_expr_list list2) const +isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const { - auto res = isl_ast_expr_list_concat(copy(), list2.release()); + auto res = isl_ast_node_list_concat(copy(), list2.release()); return manage(res); } -isl::ast_expr_list ast_expr_list::drop(unsigned int first, unsigned int n) const +isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const { - auto res = isl_ast_expr_list_drop(copy(), first, n); + auto res = isl_ast_node_list_drop(copy(), first, n); return manage(res); } -stat ast_expr_list::foreach(const std::function &fn) const +void ast_node_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_ast_expr *arg_0, void *arg_1) -> isl_stat { + std::function 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(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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_expr_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); + auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data); + return; } -isl::ast_expr_list ast_expr_list::from_ast_expr(isl::ast_expr el) +isl::ast_node_list ast_node_list::insert(unsigned int pos, isl::ast_node el) const { - auto res = isl_ast_expr_list_from_ast_expr(el.release()); + auto res = isl_ast_node_list_insert(copy(), pos, el.release()); return manage(res); } -isl::ast_expr ast_expr_list::get_ast_expr(int index) const +isl_size ast_node_list::size() const { - auto res = isl_ast_expr_list_get_ast_expr(get(), index); - return manage(res); + auto res = isl_ast_node_list_size(get()); + return res; } -isl::ast_expr ast_expr_list::get_at(int index) const +inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj) { - auto res = isl_ast_expr_list_get_at(get(), index); - return manage(res); + char *str = isl_ast_node_list_to_str(obj.get()); + 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::ast_expr_list ast_expr_list::insert(unsigned int pos, isl::ast_expr el) const +isl::id ast_node_mark::id() const { - auto res = isl_ast_expr_list_insert(copy(), pos, el.release()); + auto res = isl_ast_node_mark_get_id(get()); return manage(res); } -isl_size ast_expr_list::n_ast_expr() const +isl::id ast_node_mark::get_id() const { - auto res = isl_ast_expr_list_n_ast_expr(get()); - return res; + return id(); } -isl::ast_expr_list ast_expr_list::reverse() const +isl::ast_node ast_node_mark::node() const { - auto res = isl_ast_expr_list_reverse(copy()); + auto res = isl_ast_node_mark_get_node(get()); return manage(res); } -isl::ast_expr_list ast_expr_list::set_ast_expr(int index, isl::ast_expr el) const +isl::ast_node ast_node_mark::get_node() const { - auto res = isl_ast_expr_list_set_ast_expr(copy(), index, el.release()); - return manage(res); + return node(); } -isl_size ast_expr_list::size() const +inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj) { - auto res = isl_ast_expr_list_size(get()); - return res; + char *str = isl_ast_node_to_str(obj.get()); + 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_list ast_expr_list::swap(unsigned int pos1, unsigned int pos2) const +isl::ast_expr ast_node_user::expr() const { - auto res = isl_ast_expr_list_swap(copy(), pos1, pos2); + auto res = isl_ast_node_user_get_expr(get()); return manage(res); } -// implementations for isl::ast_node -ast_node manage(__isl_take isl_ast_node *ptr) { - return ast_node(ptr); +isl::ast_expr ast_node_user::get_expr() const +{ + return expr(); } -ast_node manage_copy(__isl_keep isl_ast_node *ptr) { - ptr = isl_ast_node_copy(ptr); - return ast_node(ptr); + +inline std::ostream &operator<<(std::ostream &os, const ast_node_user &obj) +{ + char *str = isl_ast_node_to_str(obj.get()); + os << str; + free(str); + return os; } -ast_node::ast_node() +// implementations for isl::basic_map +basic_map manage(__isl_take isl_basic_map *ptr) { + return basic_map(ptr); +} +basic_map manage_copy(__isl_keep isl_basic_map *ptr) { + ptr = isl_basic_map_copy(ptr); + return basic_map(ptr); +} + +basic_map::basic_map() : ptr(nullptr) {} -ast_node::ast_node(const ast_node &obj) +basic_map::basic_map(const basic_map &obj) : ptr(nullptr) { ptr = obj.copy(); } - -ast_node::ast_node(__isl_take isl_ast_node *ptr) +basic_map::basic_map(__isl_take isl_basic_map *ptr) : ptr(ptr) {} +basic_map::basic_map(isl::ctx ctx, const std::string &str) +{ + auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} -ast_node &ast_node::operator=(ast_node obj) { +basic_map &basic_map::operator=(basic_map obj) { std::swap(this->ptr, obj.ptr); return *this; } -ast_node::~ast_node() { +basic_map::~basic_map() { if (ptr) - isl_ast_node_free(ptr); + isl_basic_map_free(ptr); } -__isl_give isl_ast_node *ast_node::copy() const & { - return isl_ast_node_copy(ptr); +__isl_give isl_basic_map *basic_map::copy() const & { + return isl_basic_map_copy(ptr); } -__isl_keep isl_ast_node *ast_node::get() const { +__isl_keep isl_basic_map *basic_map::get() const { return ptr; } -__isl_give isl_ast_node *ast_node::release() { - isl_ast_node *tmp = ptr; +__isl_give isl_basic_map *basic_map::release() { + isl_basic_map *tmp = ptr; ptr = nullptr; return tmp; } -bool ast_node::is_null() const { - return ptr == nullptr; +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::map basic_map::add_constraint(const isl::constraint &constraint) const +{ + return isl::map(*this).add_constraint(constraint); +} + +isl::map basic_map::add_dims(isl::dim type, unsigned int n) const +{ + return isl::map(*this).add_dims(type, n); } +isl::basic_map basic_map::affine_hull() const +{ + auto res = isl_basic_map_affine_hull(copy()); + return manage(res); +} -isl::ctx ast_node::ctx() const { - return isl::ctx(isl_ast_node_get_ctx(ptr)); +isl::map basic_map::align_params(const isl::space &model) const +{ + return isl::map(*this).align_params(model); } -void ast_node::dump() const { - isl_ast_node_dump(get()); +isl::basic_map basic_map::apply_domain(isl::basic_map bmap2) const +{ + auto res = isl_basic_map_apply_domain(copy(), bmap2.release()); + return manage(res); } +isl::map basic_map::apply_domain(const isl::map &map2) const +{ + return isl::map(*this).apply_domain(map2); +} -isl::ast_node ast_node::alloc_user(isl::ast_expr expr) +isl::union_map basic_map::apply_domain(const isl::union_map &umap2) const { - auto res = isl_ast_node_alloc_user(expr.release()); - return manage(res); + return isl::map(*this).apply_domain(umap2); } -isl::ast_node_list ast_node::block_get_children() const +isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const { - auto res = isl_ast_node_block_get_children(get()); + auto res = isl_basic_map_apply_range(copy(), bmap2.release()); return manage(res); } -isl::ast_node ast_node::for_get_body() const +isl::map basic_map::apply_range(const isl::map &map2) const { - auto res = isl_ast_node_for_get_body(get()); - return manage(res); + return isl::map(*this).apply_range(map2); } -isl::ast_expr ast_node::for_get_cond() const +isl::union_map basic_map::apply_range(const isl::union_map &umap2) const { - auto res = isl_ast_node_for_get_cond(get()); - return manage(res); + return isl::map(*this).apply_range(umap2); } -isl::ast_expr ast_node::for_get_inc() const +isl::map basic_map::as_map() const { - auto res = isl_ast_node_for_get_inc(get()); - return manage(res); + return isl::map(*this).as_map(); } -isl::ast_expr ast_node::for_get_init() const +isl::multi_union_pw_aff basic_map::as_multi_union_pw_aff() const { - auto res = isl_ast_node_for_get_init(get()); - return manage(res); + return isl::map(*this).as_multi_union_pw_aff(); } -isl::ast_expr ast_node::for_get_iterator() const +isl::pw_multi_aff basic_map::as_pw_multi_aff() const { - auto res = isl_ast_node_for_get_iterator(get()); - return manage(res); + return isl::map(*this).as_pw_multi_aff(); } -boolean ast_node::for_is_degenerate() const +isl::union_pw_multi_aff basic_map::as_union_pw_multi_aff() const { - auto res = isl_ast_node_for_is_degenerate(get()); - return manage(res); + return isl::map(*this).as_union_pw_multi_aff(); } -isl::id ast_node::get_annotation() const +isl::basic_map_list basic_map::basic_map_list() const { - auto res = isl_ast_node_get_annotation(get()); - return manage(res); + return isl::map(*this).basic_map_list(); } -isl::ast_expr ast_node::if_get_cond() const +isl::set basic_map::bind_domain(const isl::multi_id &tuple) const { - auto res = isl_ast_node_if_get_cond(get()); - return manage(res); + return isl::map(*this).bind_domain(tuple); } -isl::ast_node ast_node::if_get_else() const +isl::set basic_map::bind_range(const isl::multi_id &tuple) const { - auto res = isl_ast_node_if_get_else(get()); - return manage(res); + return isl::map(*this).bind_range(tuple); } -isl::ast_node ast_node::if_get_else_node() const +bool basic_map::can_curry() const { - auto res = isl_ast_node_if_get_else_node(get()); - return manage(res); + return isl::map(*this).can_curry(); } -isl::ast_node ast_node::if_get_then() const +isl::map basic_map::coalesce() const { - auto res = isl_ast_node_if_get_then(get()); - return manage(res); + return isl::map(*this).coalesce(); } -isl::ast_node ast_node::if_get_then_node() const +isl::map basic_map::complement() const { - auto res = isl_ast_node_if_get_then_node(get()); - return manage(res); + return isl::map(*this).complement(); } -boolean ast_node::if_has_else() const +isl::union_map basic_map::compute_divs() const { - auto res = isl_ast_node_if_has_else(get()); - return manage(res); + return isl::map(*this).compute_divs(); } -boolean ast_node::if_has_else_node() const +isl::map basic_map::curry() const { - auto res = isl_ast_node_if_has_else_node(get()); - return manage(res); + return isl::map(*this).curry(); } -isl::id ast_node::mark_get_id() const +isl::basic_set basic_map::deltas() const { - auto res = isl_ast_node_mark_get_id(get()); + auto res = isl_basic_map_deltas(copy()); return manage(res); } -isl::ast_node ast_node::mark_get_node() const +isl::basic_map basic_map::detect_equalities() const { - auto res = isl_ast_node_mark_get_node(get()); + auto res = isl_basic_map_detect_equalities(copy()); return manage(res); } -isl::ast_node ast_node::set_annotation(isl::id annotation) const +isl_size basic_map::dim(isl::dim type) const { - auto res = isl_ast_node_set_annotation(copy(), annotation.release()); - return manage(res); + return isl::map(*this).dim(type); } -std::string ast_node::to_C_str() const +isl::pw_aff basic_map::dim_max(int pos) const { - auto res = isl_ast_node_to_C_str(get()); - std::string tmp(res); - free(res); - return tmp; + return isl::map(*this).dim_max(pos); } -isl::ast_expr ast_node::user_get_expr() const +isl::pw_aff basic_map::dim_min(int pos) const { - auto res = isl_ast_node_user_get_expr(get()); - return manage(res); + return isl::map(*this).dim_min(pos); } -// implementations for isl::ast_node_list -ast_node_list manage(__isl_take isl_ast_node_list *ptr) { - return ast_node_list(ptr); +isl::basic_set basic_map::domain() const +{ + auto res = isl_basic_map_domain(copy()); + return manage(res); } -ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) { - ptr = isl_ast_node_list_copy(ptr); - return ast_node_list(ptr); + +isl::map basic_map::domain_factor_domain() const +{ + return isl::map(*this).domain_factor_domain(); } -ast_node_list::ast_node_list() - : ptr(nullptr) {} +isl::map basic_map::domain_factor_range() const +{ + return isl::map(*this).domain_factor_range(); +} -ast_node_list::ast_node_list(const ast_node_list &obj) - : ptr(nullptr) +isl::map basic_map::domain_map() const { - ptr = obj.copy(); + return isl::map(*this).domain_map(); } +isl::union_pw_multi_aff basic_map::domain_map_union_pw_multi_aff() const +{ + return isl::map(*this).domain_map_union_pw_multi_aff(); +} -ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr) - : ptr(ptr) {} +isl::map basic_map::domain_product(const isl::map &map2) const +{ + return isl::map(*this).domain_product(map2); +} +isl::union_map basic_map::domain_product(const isl::union_map &umap2) const +{ + return isl::map(*this).domain_product(umap2); +} -ast_node_list &ast_node_list::operator=(ast_node_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl_size basic_map::domain_tuple_dim() const +{ + return isl::map(*this).domain_tuple_dim(); } -ast_node_list::~ast_node_list() { - if (ptr) - isl_ast_node_list_free(ptr); +isl::id basic_map::domain_tuple_id() const +{ + return isl::map(*this).domain_tuple_id(); } -__isl_give isl_ast_node_list *ast_node_list::copy() const & { - return isl_ast_node_list_copy(ptr); +isl::map basic_map::eq_at(const isl::multi_pw_aff &mpa) const +{ + return isl::map(*this).eq_at(mpa); } -__isl_keep isl_ast_node_list *ast_node_list::get() const { - return ptr; +isl::union_map basic_map::eq_at(const isl::multi_union_pw_aff &mupa) const +{ + return isl::map(*this).eq_at(mupa); } -__isl_give isl_ast_node_list *ast_node_list::release() { - isl_ast_node_list *tmp = ptr; - ptr = nullptr; - return tmp; +isl::basic_map basic_map::equal(isl::space space, unsigned int n_equal) +{ + auto res = isl_basic_map_equal(space.release(), n_equal); + return manage(res); } -bool ast_node_list::is_null() const { - return ptr == nullptr; +isl::basic_map basic_map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const +{ + auto res = isl_basic_map_equate(copy(), static_cast(type1), pos1, static_cast(type2), pos2); + return manage(res); } +bool basic_map::every_map(const std::function &test) const +{ + return isl::map(*this).every_map(test); +} -isl::ctx ast_node_list::ctx() const { - return isl::ctx(isl_ast_node_list_get_ctx(ptr)); +isl::map basic_map::extract_map(const isl::space &space) const +{ + return isl::map(*this).extract_map(space); } -void ast_node_list::dump() const { - isl_ast_node_list_dump(get()); +isl::map basic_map::factor_domain() const +{ + return isl::map(*this).factor_domain(); } +isl::map basic_map::factor_range() const +{ + return isl::map(*this).factor_range(); +} -isl::ast_node_list ast_node_list::add(isl::ast_node el) const +isl::basic_map basic_map::fix_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_ast_node_list_add(copy(), el.release()); + auto res = isl_basic_map_fix_si(copy(), static_cast(type), pos, value); return manage(res); } -isl::ast_node_list ast_node_list::alloc(isl::ctx ctx, int n) +isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, isl::val v) const { - auto res = isl_ast_node_list_alloc(ctx.release(), n); + auto res = isl_basic_map_fix_val(copy(), static_cast(type), pos, v.release()); return manage(res); } -isl::ast_node_list ast_node_list::clear() const +isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, long v) const { - auto res = isl_ast_node_list_clear(copy()); - return manage(res); + return this->fix_val(type, pos, isl::val(ctx(), v)); } -isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const +isl::union_map basic_map::fixed_power(const isl::val &exp) const { - auto res = isl_ast_node_list_concat(copy(), list2.release()); - return manage(res); + return isl::map(*this).fixed_power(exp); } -isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const +isl::union_map basic_map::fixed_power(long exp) const { - auto res = isl_ast_node_list_drop(copy(), first, n); - return manage(res); + return this->fixed_power(isl::val(ctx(), exp)); } -stat ast_node_list::foreach(const std::function &fn) const +isl::map basic_map::flat_range_product(const isl::map &map2) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); + return isl::map(*this).flat_range_product(map2); } -isl::ast_node_list ast_node_list::from_ast_node(isl::ast_node el) +isl::union_map basic_map::flat_range_product(const isl::union_map &umap2) const { - auto res = isl_ast_node_list_from_ast_node(el.release()); - return manage(res); + return isl::map(*this).flat_range_product(umap2); } -isl::ast_node ast_node_list::get_ast_node(int index) const +isl::basic_map basic_map::flatten() const { - auto res = isl_ast_node_list_get_ast_node(get(), index); + auto res = isl_basic_map_flatten(copy()); return manage(res); } -isl::ast_node ast_node_list::get_at(int index) const +isl::basic_map basic_map::flatten_domain() const { - auto res = isl_ast_node_list_get_at(get(), index); + auto res = isl_basic_map_flatten_domain(copy()); return manage(res); } -isl::ast_node_list ast_node_list::insert(unsigned int pos, isl::ast_node el) const +isl::basic_map basic_map::flatten_range() const { - auto res = isl_ast_node_list_insert(copy(), pos, el.release()); + auto res = isl_basic_map_flatten_range(copy()); return manage(res); } -isl_size ast_node_list::n_ast_node() const +isl::map basic_map::floordiv_val(const isl::val &d) const { - auto res = isl_ast_node_list_n_ast_node(get()); - return res; + return isl::map(*this).floordiv_val(d); } -isl::ast_node_list ast_node_list::reverse() const +isl::map basic_map::floordiv_val(long d) const { - auto res = isl_ast_node_list_reverse(copy()); - return manage(res); + return this->floordiv_val(isl::val(ctx(), d)); } -isl::ast_node_list ast_node_list::set_ast_node(int index, isl::ast_node el) const +void basic_map::foreach_basic_map(const std::function &fn) const { - auto res = isl_ast_node_list_set_ast_node(copy(), index, el.release()); - return manage(res); + return isl::map(*this).foreach_basic_map(fn); } -isl_size ast_node_list::size() const +void basic_map::foreach_map(const std::function &fn) const { - auto res = isl_ast_node_list_size(get()); - return res; + return isl::map(*this).foreach_map(fn); } -isl::ast_node_list ast_node_list::swap(unsigned int pos1, unsigned int pos2) const +isl::basic_map basic_map::from_aff(isl::aff aff) { - auto res = isl_ast_node_list_swap(copy(), pos1, pos2); + auto res = isl_basic_map_from_aff(aff.release()); return manage(res); } -// implementations for isl::basic_map -basic_map manage(__isl_take isl_basic_map *ptr) { - return basic_map(ptr); -} -basic_map manage_copy(__isl_keep isl_basic_map *ptr) { - ptr = isl_basic_map_copy(ptr); - return basic_map(ptr); +isl::basic_map basic_map::from_domain_and_range(isl::basic_set domain, isl::basic_set range) +{ + auto res = isl_basic_map_from_domain_and_range(domain.release(), range.release()); + return manage(res); } -basic_map::basic_map() - : ptr(nullptr) {} - -basic_map::basic_map(const basic_map &obj) - : ptr(nullptr) +isl::basic_map basic_map::gist(isl::basic_map context) const { - ptr = obj.copy(); + auto res = isl_basic_map_gist(copy(), context.release()); + return manage(res); } - -basic_map::basic_map(__isl_take isl_basic_map *ptr) - : ptr(ptr) {} - -basic_map::basic_map(isl::ctx ctx, const std::string &str) +isl::map basic_map::gist(const isl::map &context) const { - auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str()); - ptr = res; + return isl::map(*this).gist(context); } -basic_map &basic_map::operator=(basic_map obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::union_map basic_map::gist(const isl::union_map &context) const +{ + return isl::map(*this).gist(context); } -basic_map::~basic_map() { - if (ptr) - isl_basic_map_free(ptr); +isl::map basic_map::gist_domain(const isl::set &context) const +{ + return isl::map(*this).gist_domain(context); } -__isl_give isl_basic_map *basic_map::copy() const & { - return isl_basic_map_copy(ptr); +isl::union_map basic_map::gist_domain(const isl::union_set &uset) const +{ + return isl::map(*this).gist_domain(uset); } -__isl_keep isl_basic_map *basic_map::get() const { - return ptr; +isl::map basic_map::gist_params(const isl::set &context) const +{ + return isl::map(*this).gist_params(context); } -__isl_give isl_basic_map *basic_map::release() { - isl_basic_map *tmp = ptr; - ptr = nullptr; - return tmp; +isl::union_map basic_map::gist_range(const isl::union_set &uset) const +{ + return isl::map(*this).gist_range(uset); } -bool basic_map::is_null() const { - return ptr == nullptr; +bool basic_map::has_domain_tuple_id() const +{ + return isl::map(*this).has_domain_tuple_id(); } +bool basic_map::has_equal_space(const isl::map &map2) const +{ + return isl::map(*this).has_equal_space(map2); +} -isl::ctx basic_map::ctx() const { - return isl::ctx(isl_basic_map_get_ctx(ptr)); +bool basic_map::has_range_tuple_id() const +{ + return isl::map(*this).has_range_tuple_id(); } -void basic_map::dump() const { - isl_basic_map_dump(get()); +bool basic_map::has_tuple_id(isl::dim type) const +{ + return isl::map(*this).has_tuple_id(type); } +bool basic_map::has_tuple_name(isl::dim type) const +{ + return isl::map(*this).has_tuple_name(type); +} -isl::basic_map basic_map::add_constraint(isl::constraint constraint) const +isl::basic_map basic_map::intersect(isl::basic_map bmap2) const { - auto res = isl_basic_map_add_constraint(copy(), constraint.release()); + auto res = isl_basic_map_intersect(copy(), bmap2.release()); return manage(res); } -isl::basic_map basic_map::add_dims(isl::dim type, unsigned int n) const +isl::map basic_map::intersect(const isl::map &map2) const { - auto res = isl_basic_map_add_dims(copy(), static_cast(type), n); - return manage(res); + return isl::map(*this).intersect(map2); } -isl::basic_map basic_map::affine_hull() const +isl::union_map basic_map::intersect(const isl::union_map &umap2) const { - auto res = isl_basic_map_affine_hull(copy()); - return manage(res); + return isl::map(*this).intersect(umap2); } -isl::basic_map basic_map::align_params(isl::space model) const +isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const { - auto res = isl_basic_map_align_params(copy(), model.release()); + auto res = isl_basic_map_intersect_domain(copy(), bset.release()); return manage(res); } -isl::basic_map basic_map::apply_domain(isl::basic_map bmap2) const +isl::map basic_map::intersect_domain(const isl::set &set) const { - auto res = isl_basic_map_apply_domain(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).intersect_domain(set); } -isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const +isl::union_map basic_map::intersect_domain(const isl::space &space) const { - auto res = isl_basic_map_apply_range(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).intersect_domain(space); } -boolean basic_map::can_curry() const +isl::union_map basic_map::intersect_domain(const isl::union_set &uset) const { - auto res = isl_basic_map_can_curry(get()); - return manage(res); + return isl::map(*this).intersect_domain(uset); } -boolean basic_map::can_uncurry() const +isl::basic_map basic_map::intersect_domain(const isl::point &bset) const { - auto res = isl_basic_map_can_uncurry(get()); - return manage(res); + return this->intersect_domain(isl::basic_set(bset)); } -boolean basic_map::can_zip() const +isl::map basic_map::intersect_domain_factor_domain(const isl::map &factor) const { - auto res = isl_basic_map_can_zip(get()); - return manage(res); + return isl::map(*this).intersect_domain_factor_domain(factor); } -isl::basic_map basic_map::curry() const +isl::union_map basic_map::intersect_domain_factor_domain(const isl::union_map &factor) const { - auto res = isl_basic_map_curry(copy()); - return manage(res); + return isl::map(*this).intersect_domain_factor_domain(factor); } -isl::basic_set basic_map::deltas() const +isl::map basic_map::intersect_domain_factor_range(const isl::map &factor) const { - auto res = isl_basic_map_deltas(copy()); - return manage(res); + return isl::map(*this).intersect_domain_factor_range(factor); } -isl::basic_map basic_map::deltas_map() const +isl::union_map basic_map::intersect_domain_factor_range(const isl::union_map &factor) const { - auto res = isl_basic_map_deltas_map(copy()); - return manage(res); + return isl::map(*this).intersect_domain_factor_range(factor); } -isl::basic_map basic_map::detect_equalities() const +isl::map basic_map::intersect_params(const isl::set ¶ms) const { - auto res = isl_basic_map_detect_equalities(copy()); + return isl::map(*this).intersect_params(params); +} + +isl::basic_map basic_map::intersect_range(isl::basic_set bset) const +{ + auto res = isl_basic_map_intersect_range(copy(), bset.release()); return manage(res); } -isl_size basic_map::dim(isl::dim type) const +isl::map basic_map::intersect_range(const isl::set &set) const +{ + return isl::map(*this).intersect_range(set); +} + +isl::union_map basic_map::intersect_range(const isl::space &space) const { - auto res = isl_basic_map_dim(get(), static_cast(type)); - return res; + return isl::map(*this).intersect_range(space); } -isl::basic_set basic_map::domain() const +isl::union_map basic_map::intersect_range(const isl::union_set &uset) const { - auto res = isl_basic_map_domain(copy()); - return manage(res); + return isl::map(*this).intersect_range(uset); } -isl::basic_map basic_map::domain_map() const +isl::basic_map basic_map::intersect_range(const isl::point &bset) const { - auto res = isl_basic_map_domain_map(copy()); - return manage(res); + return this->intersect_range(isl::basic_set(bset)); } -isl::basic_map basic_map::domain_product(isl::basic_map bmap2) const +isl::map basic_map::intersect_range_factor_domain(const isl::map &factor) const { - auto res = isl_basic_map_domain_product(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).intersect_range_factor_domain(factor); } -isl::basic_map basic_map::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_map basic_map::intersect_range_factor_domain(const isl::union_map &factor) const { - auto res = isl_basic_map_drop_constraints_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::map(*this).intersect_range_factor_domain(factor); } -isl::basic_map basic_map::drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::map basic_map::intersect_range_factor_range(const isl::map &factor) const { - auto res = isl_basic_map_drop_constraints_not_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::map(*this).intersect_range_factor_range(factor); } -isl::basic_map basic_map::drop_unused_params() const +isl::union_map basic_map::intersect_range_factor_range(const isl::union_map &factor) const { - auto res = isl_basic_map_drop_unused_params(copy()); - return manage(res); + return isl::map(*this).intersect_range_factor_range(factor); } -isl::basic_map basic_map::eliminate(isl::dim type, unsigned int first, unsigned int n) const +bool basic_map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_map_eliminate(copy(), static_cast(type), first, n); - return manage(res); + return isl::map(*this).involves_dims(type, first, n); } -isl::basic_map basic_map::empty(isl::space space) +bool basic_map::is_bijective() const { - auto res = isl_basic_map_empty(space.release()); - return manage(res); + return isl::map(*this).is_bijective(); } -isl::basic_map basic_map::equal(isl::space space, unsigned int n_equal) +bool basic_map::is_disjoint(const isl::map &map2) const { - auto res = isl_basic_map_equal(space.release(), n_equal); - return manage(res); + return isl::map(*this).is_disjoint(map2); } -isl::mat basic_map::equalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4, isl::dim c5) const +bool basic_map::is_disjoint(const isl::union_map &umap2) const { - auto res = isl_basic_map_equalities_matrix(get(), static_cast(c1), static_cast(c2), static_cast(c3), static_cast(c4), static_cast(c5)); - return manage(res); + return isl::map(*this).is_disjoint(umap2); } -isl::basic_map basic_map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const +bool basic_map::is_empty() const { - auto res = isl_basic_map_equate(copy(), static_cast(type1), pos1, static_cast(type2), pos2); - return manage(res); + auto res = isl_basic_map_is_empty(get()); + return res; } -int basic_map::find_dim_by_name(isl::dim type, const std::string &name) const +bool basic_map::is_equal(const isl::basic_map &bmap2) const { - auto res = isl_basic_map_find_dim_by_name(get(), static_cast(type), name.c_str()); + auto res = isl_basic_map_is_equal(get(), bmap2.get()); return res; } -isl::basic_map basic_map::fix_si(isl::dim type, unsigned int pos, int value) const +bool basic_map::is_equal(const isl::map &map2) const { - auto res = isl_basic_map_fix_si(copy(), static_cast(type), pos, value); - return manage(res); + return isl::map(*this).is_equal(map2); } -isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, isl::val v) const +bool basic_map::is_equal(const isl::union_map &umap2) const { - auto res = isl_basic_map_fix_val(copy(), static_cast(type), pos, v.release()); - return manage(res); + return isl::map(*this).is_equal(umap2); } -isl::basic_map basic_map::flat_product(isl::basic_map bmap2) const +bool basic_map::is_injective() const { - auto res = isl_basic_map_flat_product(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).is_injective(); } -isl::basic_map basic_map::flat_range_product(isl::basic_map bmap2) const +bool basic_map::is_single_valued() const { - auto res = isl_basic_map_flat_range_product(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).is_single_valued(); } -isl::basic_map basic_map::flatten() const +bool basic_map::is_strict_subset(const isl::map &map2) const { - auto res = isl_basic_map_flatten(copy()); - return manage(res); + return isl::map(*this).is_strict_subset(map2); } -isl::basic_map basic_map::flatten_domain() const +bool basic_map::is_strict_subset(const isl::union_map &umap2) const { - auto res = isl_basic_map_flatten_domain(copy()); - return manage(res); + return isl::map(*this).is_strict_subset(umap2); } -isl::basic_map basic_map::flatten_range() const +bool basic_map::is_subset(const isl::basic_map &bmap2) const { - auto res = isl_basic_map_flatten_range(copy()); - return manage(res); + auto res = isl_basic_map_is_subset(get(), bmap2.get()); + return res; } -stat basic_map::foreach_constraint(const std::function &fn) const +bool basic_map::is_subset(const isl::map &map2) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_constraint *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_basic_map_foreach_constraint(get(), fn_lambda, &fn_data); - return manage(res); + return isl::map(*this).is_subset(map2); } -isl::basic_map basic_map::from_aff(isl::aff aff) +bool basic_map::is_subset(const isl::union_map &umap2) const { - auto res = isl_basic_map_from_aff(aff.release()); - return manage(res); + return isl::map(*this).is_subset(umap2); } -isl::basic_map basic_map::from_aff_list(isl::space domain_space, isl::aff_list list) +bool basic_map::isa_map() const { - auto res = isl_basic_map_from_aff_list(domain_space.release(), list.release()); - return manage(res); + return isl::map(*this).isa_map(); } -isl::basic_map basic_map::from_constraint(isl::constraint constraint) +isl::map basic_map::lex_ge_at(const isl::multi_pw_aff &mpa) const { - auto res = isl_basic_map_from_constraint(constraint.release()); - return manage(res); + return isl::map(*this).lex_ge_at(mpa); } -isl::basic_map basic_map::from_domain(isl::basic_set bset) +isl::map basic_map::lex_gt_at(const isl::multi_pw_aff &mpa) const { - auto res = isl_basic_map_from_domain(bset.release()); - return manage(res); + return isl::map(*this).lex_gt_at(mpa); } -isl::basic_map basic_map::from_domain_and_range(isl::basic_set domain, isl::basic_set range) +isl::map basic_map::lex_le_at(const isl::multi_pw_aff &mpa) const { - auto res = isl_basic_map_from_domain_and_range(domain.release(), range.release()); - return manage(res); + return isl::map(*this).lex_le_at(mpa); } -isl::basic_map basic_map::from_multi_aff(isl::multi_aff maff) +isl::map basic_map::lex_lt_at(const isl::multi_pw_aff &mpa) const { - auto res = isl_basic_map_from_multi_aff(maff.release()); - return manage(res); + return isl::map(*this).lex_lt_at(mpa); } -isl::basic_map basic_map::from_qpolynomial(isl::qpolynomial qp) +isl::map basic_map::lexmax() const { - auto res = isl_basic_map_from_qpolynomial(qp.release()); + auto res = isl_basic_map_lexmax(copy()); return manage(res); } -isl::basic_map basic_map::from_range(isl::basic_set bset) +isl::pw_multi_aff basic_map::lexmax_pw_multi_aff() const { - auto res = isl_basic_map_from_range(bset.release()); - return manage(res); + return isl::map(*this).lexmax_pw_multi_aff(); } -isl::constraint_list basic_map::get_constraint_list() const +isl::map basic_map::lexmin() const { - auto res = isl_basic_map_get_constraint_list(get()); + auto res = isl_basic_map_lexmin(copy()); return manage(res); } -std::string basic_map::get_dim_name(isl::dim type, unsigned int pos) const +isl::pw_multi_aff basic_map::lexmin_pw_multi_aff() const { - auto res = isl_basic_map_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + return isl::map(*this).lexmin_pw_multi_aff(); } -isl::aff basic_map::get_div(int pos) const +isl::map basic_map::lower_bound(const isl::multi_pw_aff &lower) const { - auto res = isl_basic_map_get_div(get(), pos); - return manage(res); + return isl::map(*this).lower_bound(lower); } -isl::local_space basic_map::get_local_space() const +isl::map basic_map::lower_bound_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_basic_map_get_local_space(get()); - return manage(res); + return isl::map(*this).lower_bound_si(type, pos, value); } -isl::space basic_map::get_space() const +isl::map_list basic_map::map_list() const { - auto res = isl_basic_map_get_space(get()); - return manage(res); + return isl::map(*this).map_list(); } -std::string basic_map::get_tuple_name(isl::dim type) const +isl::multi_pw_aff basic_map::max_multi_pw_aff() const { - auto res = isl_basic_map_get_tuple_name(get(), static_cast(type)); - std::string tmp(res); - return tmp; + return isl::map(*this).max_multi_pw_aff(); } -isl::basic_map basic_map::gist(isl::basic_map context) const +isl::multi_pw_aff basic_map::min_multi_pw_aff() const { - auto res = isl_basic_map_gist(copy(), context.release()); - return manage(res); + return isl::map(*this).min_multi_pw_aff(); } -isl::basic_map basic_map::gist_domain(isl::basic_set context) const +isl::map basic_map::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const { - auto res = isl_basic_map_gist_domain(copy(), context.release()); - return manage(res); + return isl::map(*this).move_dims(dst_type, dst_pos, src_type, src_pos, n); } -boolean basic_map::has_dim_id(isl::dim type, unsigned int pos) const +isl_size basic_map::n_basic_map() const { - auto res = isl_basic_map_has_dim_id(get(), static_cast(type), pos); - return manage(res); + return isl::map(*this).n_basic_map(); } -isl::basic_map basic_map::identity(isl::space space) +isl::map basic_map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const { - auto res = isl_basic_map_identity(space.release()); - return manage(res); + return isl::map(*this).order_lt(type1, pos1, type2, pos2); } -boolean basic_map::image_is_bounded() const +isl::set basic_map::params() const { - auto res = isl_basic_map_image_is_bounded(get()); - return manage(res); + return isl::map(*this).params(); } -isl::mat basic_map::inequalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4, isl::dim c5) const +isl::val basic_map::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const { - auto res = isl_basic_map_inequalities_matrix(get(), static_cast(c1), static_cast(c2), static_cast(c3), static_cast(c4), static_cast(c5)); + auto res = isl_basic_map_plain_get_val_if_fixed(get(), static_cast(type), pos); return manage(res); } -isl::basic_map basic_map::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const +isl::basic_map basic_map::polyhedral_hull() const { - auto res = isl_basic_map_insert_dims(copy(), static_cast(type), pos, n); - return manage(res); + return isl::map(*this).polyhedral_hull(); } -isl::basic_map basic_map::intersect(isl::basic_map bmap2) const +isl::map basic_map::preimage_domain(const isl::multi_aff &ma) const { - auto res = isl_basic_map_intersect(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).preimage_domain(ma); } -isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const +isl::map basic_map::preimage_domain(const isl::multi_pw_aff &mpa) const { - auto res = isl_basic_map_intersect_domain(copy(), bset.release()); - return manage(res); + return isl::map(*this).preimage_domain(mpa); } -isl::basic_map basic_map::intersect_range(isl::basic_set bset) const +isl::map basic_map::preimage_domain(const isl::pw_multi_aff &pma) const { - auto res = isl_basic_map_intersect_range(copy(), bset.release()); - return manage(res); + return isl::map(*this).preimage_domain(pma); } -boolean basic_map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_map basic_map::preimage_domain(const isl::union_pw_multi_aff &upma) const { - auto res = isl_basic_map_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return isl::map(*this).preimage_domain(upma); } -boolean basic_map::is_disjoint(const isl::basic_map &bmap2) const +isl::map basic_map::preimage_range(const isl::multi_aff &ma) const { - auto res = isl_basic_map_is_disjoint(get(), bmap2.get()); - return manage(res); + return isl::map(*this).preimage_range(ma); } -boolean basic_map::is_empty() const +isl::map basic_map::preimage_range(const isl::pw_multi_aff &pma) const { - auto res = isl_basic_map_is_empty(get()); - return manage(res); + return isl::map(*this).preimage_range(pma); } -boolean basic_map::is_equal(const isl::basic_map &bmap2) const +isl::union_map basic_map::preimage_range(const isl::union_pw_multi_aff &upma) const { - auto res = isl_basic_map_is_equal(get(), bmap2.get()); - return manage(res); + return isl::map(*this).preimage_range(upma); } -boolean basic_map::is_rational() const +isl::map basic_map::product(const isl::map &map2) const { - auto res = isl_basic_map_is_rational(get()); - return manage(res); + return isl::map(*this).product(map2); } -boolean basic_map::is_single_valued() const +isl::union_map basic_map::product(const isl::union_map &umap2) const { - auto res = isl_basic_map_is_single_valued(get()); - return manage(res); + return isl::map(*this).product(umap2); } -boolean basic_map::is_strict_subset(const isl::basic_map &bmap2) const +isl::map basic_map::project_out(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_map_is_strict_subset(get(), bmap2.get()); - return manage(res); + return isl::map(*this).project_out(type, first, n); } -boolean basic_map::is_subset(const isl::basic_map &bmap2) const +isl::map basic_map::project_out_all_params() const { - auto res = isl_basic_map_is_subset(get(), bmap2.get()); - return manage(res); + return isl::map(*this).project_out_all_params(); } -boolean basic_map::is_universe() const +isl::set basic_map::range() const { - auto res = isl_basic_map_is_universe(get()); - return manage(res); + return isl::map(*this).range(); } -isl::basic_map basic_map::less_at(isl::space space, unsigned int pos) +isl::map basic_map::range_factor_domain() const { - auto res = isl_basic_map_less_at(space.release(), pos); - return manage(res); + return isl::map(*this).range_factor_domain(); } -isl::map basic_map::lexmax() const +isl::map basic_map::range_factor_range() const { - auto res = isl_basic_map_lexmax(copy()); - return manage(res); + return isl::map(*this).range_factor_range(); } -isl::map basic_map::lexmin() const +isl::fixed_box basic_map::range_lattice_tile() const { - auto res = isl_basic_map_lexmin(copy()); - return manage(res); + return isl::map(*this).range_lattice_tile(); } -isl::pw_multi_aff basic_map::lexmin_pw_multi_aff() const +isl::map basic_map::range_map() const { - auto res = isl_basic_map_lexmin_pw_multi_aff(copy()); - return manage(res); + return isl::map(*this).range_map(); } -isl::basic_map basic_map::lower_bound_si(isl::dim type, unsigned int pos, int value) const +isl::map basic_map::range_product(const isl::map &map2) const { - auto res = isl_basic_map_lower_bound_si(copy(), static_cast(type), pos, value); - return manage(res); + return isl::map(*this).range_product(map2); } -isl::basic_map basic_map::more_at(isl::space space, unsigned int pos) +isl::union_map basic_map::range_product(const isl::union_map &umap2) const { - auto res = isl_basic_map_more_at(space.release(), pos); - return manage(res); + return isl::map(*this).range_product(umap2); } -isl::basic_map basic_map::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const +isl::map basic_map::range_reverse() const { - auto res = isl_basic_map_move_dims(copy(), static_cast(dst_type), dst_pos, static_cast(src_type), src_pos, n); - return manage(res); + return isl::map(*this).range_reverse(); } -isl_size basic_map::n_constraint() const +isl::fixed_box basic_map::range_simple_fixed_box_hull() const { - auto res = isl_basic_map_n_constraint(get()); - return res; + return isl::map(*this).range_simple_fixed_box_hull(); } -isl::basic_map basic_map::nat_universe(isl::space space) +isl_size basic_map::range_tuple_dim() const { - auto res = isl_basic_map_nat_universe(space.release()); - return manage(res); + return isl::map(*this).range_tuple_dim(); } -isl::basic_map basic_map::neg() const +isl::id basic_map::range_tuple_id() const { - auto res = isl_basic_map_neg(copy()); - return manage(res); + return isl::map(*this).range_tuple_id(); } -isl::basic_map basic_map::order_ge(isl::dim type1, int pos1, isl::dim type2, int pos2) const +isl::basic_map basic_map::reverse() const { - auto res = isl_basic_map_order_ge(copy(), static_cast(type1), pos1, static_cast(type2), pos2); + auto res = isl_basic_map_reverse(copy()); return manage(res); } -isl::basic_map basic_map::order_gt(isl::dim type1, int pos1, isl::dim type2, int pos2) const +isl::basic_map basic_map::sample() const { - auto res = isl_basic_map_order_gt(copy(), static_cast(type1), pos1, static_cast(type2), pos2); + auto res = isl_basic_map_sample(copy()); return manage(res); } -isl::val basic_map::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const +isl::map basic_map::set_domain_tuple(const isl::id &id) const { - auto res = isl_basic_map_plain_get_val_if_fixed(get(), static_cast(type), pos); - return manage(res); + return isl::map(*this).set_domain_tuple(id); } -boolean basic_map::plain_is_empty() const +isl::map basic_map::set_domain_tuple(const std::string &id) const { - auto res = isl_basic_map_plain_is_empty(get()); - return manage(res); + return this->set_domain_tuple(isl::id(ctx(), id)); } -boolean basic_map::plain_is_universe() const +isl::map basic_map::set_range_tuple(const isl::id &id) const { - auto res = isl_basic_map_plain_is_universe(get()); - return manage(res); + return isl::map(*this).set_range_tuple(id); } -isl::basic_map basic_map::preimage_domain_multi_aff(isl::multi_aff ma) const +isl::map basic_map::set_range_tuple(const std::string &id) const { - auto res = isl_basic_map_preimage_domain_multi_aff(copy(), ma.release()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } -isl::basic_map basic_map::preimage_range_multi_aff(isl::multi_aff ma) const +isl::map basic_map::set_tuple_id(isl::dim type, const isl::id &id) const { - auto res = isl_basic_map_preimage_range_multi_aff(copy(), ma.release()); - return manage(res); + return isl::map(*this).set_tuple_id(type, id); } -isl::basic_map basic_map::product(isl::basic_map bmap2) const +isl::map basic_map::set_tuple_id(isl::dim type, const std::string &id) const { - auto res = isl_basic_map_product(copy(), bmap2.release()); - return manage(res); + return this->set_tuple_id(type, isl::id(ctx(), id)); } -isl::basic_map basic_map::project_out(isl::dim type, unsigned int first, unsigned int n) const +isl::space basic_map::space() const { - auto res = isl_basic_map_project_out(copy(), static_cast(type), first, n); - return manage(res); + return isl::map(*this).space(); } -isl::basic_set basic_map::range() const +isl::map basic_map::subtract(const isl::map &map2) const { - auto res = isl_basic_map_range(copy()); - return manage(res); + return isl::map(*this).subtract(map2); } -isl::basic_map basic_map::range_map() const +isl::union_map basic_map::subtract(const isl::union_map &umap2) const { - auto res = isl_basic_map_range_map(copy()); - return manage(res); + return isl::map(*this).subtract(umap2); } -isl::basic_map basic_map::range_product(isl::basic_map bmap2) const +isl::union_map basic_map::subtract_domain(const isl::union_set &dom) const { - auto res = isl_basic_map_range_product(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).subtract_domain(dom); } -isl::basic_map basic_map::remove_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_map basic_map::subtract_range(const isl::union_set &dom) const { - auto res = isl_basic_map_remove_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::map(*this).subtract_range(dom); } -isl::basic_map basic_map::remove_divs() const +isl::map basic_map::sum(const isl::map &map2) const { - auto res = isl_basic_map_remove_divs(copy()); - return manage(res); + return isl::map(*this).sum(map2); } -isl::basic_map basic_map::remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::basic_map_list basic_map::to_list() const { - auto res = isl_basic_map_remove_divs_involving_dims(copy(), static_cast(type), first, n); + auto res = isl_basic_map_to_list(copy()); return manage(res); } -isl::basic_map basic_map::remove_redundancies() const +isl::union_map basic_map::to_union_map() const { - auto res = isl_basic_map_remove_redundancies(copy()); - return manage(res); + return isl::map(*this).to_union_map(); } -isl::basic_map basic_map::reverse() const +isl::id basic_map::tuple_id(isl::dim type) const { - auto res = isl_basic_map_reverse(copy()); - return manage(res); + return isl::map(*this).tuple_id(type); } -isl::basic_map basic_map::sample() const +isl::map basic_map::uncurry() const { - auto res = isl_basic_map_sample(copy()); - return manage(res); + return isl::map(*this).uncurry(); } -isl::basic_map basic_map::set_tuple_id(isl::dim type, isl::id id) const +isl::map basic_map::unite(isl::basic_map bmap2) const { - auto res = isl_basic_map_set_tuple_id(copy(), static_cast(type), id.release()); + auto res = isl_basic_map_union(copy(), bmap2.release()); return manage(res); } -isl::basic_map basic_map::set_tuple_name(isl::dim type, const std::string &s) const +isl::map basic_map::unite(const isl::map &map2) const { - auto res = isl_basic_map_set_tuple_name(copy(), static_cast(type), s.c_str()); - return manage(res); + return isl::map(*this).unite(map2); } -isl::basic_map basic_map::sum(isl::basic_map bmap2) const +isl::union_map basic_map::unite(const isl::union_map &umap2) const { - auto res = isl_basic_map_sum(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).unite(umap2); } -isl::basic_map basic_map::uncurry() const +isl::basic_map basic_map::universe(isl::space space) { - auto res = isl_basic_map_uncurry(copy()); + auto res = isl_basic_map_universe(space.release()); return manage(res); } -isl::map basic_map::unite(isl::basic_map bmap2) const +isl::basic_map basic_map::unshifted_simple_hull() const { - auto res = isl_basic_map_union(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).unshifted_simple_hull(); } -isl::basic_map basic_map::universe(isl::space space) +isl::map basic_map::upper_bound(const isl::multi_pw_aff &upper) const { - auto res = isl_basic_map_universe(space.release()); - return manage(res); + return isl::map(*this).upper_bound(upper); } -isl::basic_map basic_map::upper_bound_si(isl::dim type, unsigned int pos, int value) const +isl::map basic_map::upper_bound_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_basic_map_upper_bound_si(copy(), static_cast(type), pos, value); - return manage(res); + return isl::map(*this).upper_bound_si(type, pos, value); } -isl::basic_set basic_map::wrap() const +isl::set basic_map::wrap() const { - auto res = isl_basic_map_wrap(copy()); - return manage(res); + return isl::map(*this).wrap(); } -isl::basic_map basic_map::zip() const +isl::map basic_map::zip() const { - auto res = isl_basic_map_zip(copy()); - return manage(res); + return isl::map(*this).zip(); +} + +inline std::ostream &operator<<(std::ostream &os, const basic_map &obj) +{ + char *str = isl_basic_map_to_str(obj.get()); + os << str; + free(str); + return os; } // implementations for isl::basic_map_list @@ -6258,10 +8815,20 @@ ptr = obj.copy(); } - basic_map_list::basic_map_list(__isl_take isl_basic_map_list *ptr) : ptr(ptr) {} +basic_map_list::basic_map_list(isl::ctx ctx, int n) +{ + auto res = isl_basic_map_list_alloc(ctx.release(), n); + ptr = res; +} + +basic_map_list::basic_map_list(isl::basic_map el) +{ + auto res = isl_basic_map_list_from_basic_map(el.release()); + ptr = res; +} basic_map_list &basic_map_list::operator=(basic_map_list obj) { std::swap(this->ptr, obj.ptr); @@ -6291,28 +8858,27 @@ return ptr == nullptr; } - isl::ctx basic_map_list::ctx() const { return isl::ctx(isl_basic_map_list_get_ctx(ptr)); } -void basic_map_list::dump() const { - isl_basic_map_list_dump(get()); -} - - isl::basic_map_list basic_map_list::add(isl::basic_map el) const { auto res = isl_basic_map_list_add(copy(), el.release()); return manage(res); } -isl::basic_map_list basic_map_list::alloc(isl::ctx ctx, int n) +isl::basic_map basic_map_list::at(int index) const { - auto res = isl_basic_map_list_alloc(ctx.release(), n); + auto res = isl_basic_map_list_get_at(get(), index); return manage(res); } +isl::basic_map basic_map_list::get_at(int index) const +{ + return at(index); +} + isl::basic_map_list basic_map_list::clear() const { auto res = isl_basic_map_list_clear(copy()); @@ -6331,36 +8897,24 @@ return manage(res); } -stat basic_map_list::foreach(const std::function &fn) const +void basic_map_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function 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(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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_basic_map_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); -} - -isl::basic_map_list basic_map_list::from_basic_map(isl::basic_map el) -{ - auto res = isl_basic_map_list_from_basic_map(el.release()); - return manage(res); -} - -isl::basic_map basic_map_list::get_at(int index) const -{ - auto res = isl_basic_map_list_get_at(get(), index); - return manage(res); -} - -isl::basic_map basic_map_list::get_basic_map(int index) const -{ - auto res = isl_basic_map_list_get_basic_map(get(), index); - return manage(res); + return; } isl::basic_map_list basic_map_list::insert(unsigned int pos, isl::basic_map el) const @@ -6369,34 +8923,18 @@ return manage(res); } -isl_size basic_map_list::n_basic_map() const -{ - auto res = isl_basic_map_list_n_basic_map(get()); - return res; -} - -isl::basic_map_list basic_map_list::reverse() const -{ - auto res = isl_basic_map_list_reverse(copy()); - return manage(res); -} - -isl::basic_map_list basic_map_list::set_basic_map(int index, isl::basic_map el) const -{ - auto res = isl_basic_map_list_set_basic_map(copy(), index, el.release()); - return manage(res); -} - isl_size basic_map_list::size() const { auto res = isl_basic_map_list_size(get()); return res; } -isl::basic_map_list basic_map_list::swap(unsigned int pos1, unsigned int pos2) const +inline std::ostream &operator<<(std::ostream &os, const basic_map_list &obj) { - auto res = isl_basic_map_list_swap(copy(), pos1, pos2); - return manage(res); + char *str = isl_basic_map_list_to_str(obj.get()); + os << str; + free(str); + return os; } // implementations for isl::basic_set @@ -6417,7 +8955,6 @@ ptr = obj.copy(); } - basic_set::basic_set(__isl_take isl_basic_set *ptr) : ptr(ptr) {} @@ -6426,6 +8963,7 @@ auto res = isl_basic_set_from_point(pnt.release()); ptr = res; } + basic_set::basic_set(isl::ctx ctx, const std::string &str) { auto res = isl_basic_set_read_from_str(ctx.release(), str.c_str()); @@ -6460,15 +8998,19 @@ return ptr == nullptr; } - isl::ctx basic_set::ctx() const { return isl::ctx(isl_basic_set_get_ctx(ptr)); } -void basic_set::dump() const { - isl_basic_set_dump(get()); +isl::set basic_set::add_constraint(const isl::constraint &constraint) const +{ + return isl::set(*this).add_constraint(constraint); } +isl::set basic_set::add_dims(isl::dim type, unsigned int n) const +{ + return isl::set(*this).add_dims(type, n); +} isl::basic_set basic_set::affine_hull() const { @@ -6476,10 +9018,9 @@ return manage(res); } -isl::basic_set basic_set::align_params(isl::space model) const +isl::set basic_set::align_params(const isl::space &model) const { - auto res = isl_basic_set_align_params(copy(), model.release()); - return manage(res); + return isl::set(*this).align_params(model); } isl::basic_set basic_set::apply(isl::basic_map bmap) const @@ -6488,16 +9029,59 @@ return manage(res); } -isl::basic_set basic_set::box_from_points(isl::point pnt1, isl::point pnt2) +isl::set basic_set::apply(const isl::map &map) const { - auto res = isl_basic_set_box_from_points(pnt1.release(), pnt2.release()); - return manage(res); + return isl::set(*this).apply(map); } -isl::basic_set basic_set::coefficients() const +isl::union_set basic_set::apply(const isl::union_map &umap) const { - auto res = isl_basic_set_coefficients(copy()); - return manage(res); + return isl::set(*this).apply(umap); +} + +isl::pw_multi_aff basic_set::as_pw_multi_aff() const +{ + return isl::set(*this).as_pw_multi_aff(); +} + +isl::set basic_set::as_set() const +{ + return isl::set(*this).as_set(); +} + +isl::basic_set_list basic_set::basic_set_list() const +{ + return isl::set(*this).basic_set_list(); +} + +isl::set basic_set::bind(const isl::multi_id &tuple) const +{ + return isl::set(*this).bind(tuple); +} + +isl::set basic_set::coalesce() const +{ + return isl::set(*this).coalesce(); +} + +isl::set basic_set::complement() const +{ + return isl::set(*this).complement(); +} + +isl::union_set basic_set::compute_divs() const +{ + return isl::set(*this).compute_divs(); +} + +bool basic_set::contains(const isl::space &space) const +{ + return isl::set(*this).contains(space); +} + +isl::basic_set basic_set::convex_hull() const +{ + return isl::set(*this).convex_hull(); } isl::basic_set basic_set::detect_equalities() const @@ -6506,10 +9090,25 @@ return manage(res); } -isl_size basic_set::dim(isl::dim type) const +isl_size basic_set::dim(isl::dim type) const +{ + auto res = isl_basic_set_dim(get(), static_cast(type)); + return res; +} + +bool basic_set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const +{ + return isl::set(*this).dim_has_any_lower_bound(type, pos); +} + +isl::id basic_set::dim_id(isl::dim type, unsigned int pos) const +{ + return isl::set(*this).dim_id(type, pos); +} + +isl::pw_aff basic_set::dim_max(int pos) const { - auto res = isl_basic_set_dim(get(), static_cast(type)); - return res; + return isl::set(*this).dim_max(pos); } isl::val basic_set::dim_max_val(int pos) const @@ -6518,932 +9117,880 @@ return manage(res); } -isl::basic_set basic_set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::pw_aff basic_set::dim_min(int pos) const { - auto res = isl_basic_set_drop_constraints_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::set(*this).dim_min(pos); } -isl::basic_set basic_set::drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::val basic_set::dim_min_val(int pos) const { - auto res = isl_basic_set_drop_constraints_not_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::set(*this).dim_min_val(pos); } -isl::basic_set basic_set::drop_unused_params() const +std::string basic_set::dim_name(isl::dim type, unsigned int pos) const { - auto res = isl_basic_set_drop_unused_params(copy()); - return manage(res); + return isl::set(*this).dim_name(type, pos); } -isl::basic_set basic_set::eliminate(isl::dim type, unsigned int first, unsigned int n) const +isl::aff basic_set::div(int pos) const { - auto res = isl_basic_set_eliminate(copy(), static_cast(type), first, n); + auto res = isl_basic_set_get_div(get(), pos); return manage(res); } -isl::basic_set basic_set::empty(isl::space space) +isl::aff basic_set::get_div(int pos) const { - auto res = isl_basic_set_empty(space.release()); - return manage(res); + return div(pos); } -isl::mat basic_set::equalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4) const +isl::set basic_set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_set_equalities_matrix(get(), static_cast(c1), static_cast(c2), static_cast(c3), static_cast(c4)); - return manage(res); + return isl::set(*this).drop_constraints_involving_dims(type, first, n); } -isl::basic_set basic_set::fix_si(isl::dim type, unsigned int pos, int value) const +isl::set basic_set::eliminate(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_set_fix_si(copy(), static_cast(type), pos, value); - return manage(res); + return isl::set(*this).eliminate(type, first, n); } -isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, isl::val v) const +bool basic_set::every_set(const std::function &test) const { - auto res = isl_basic_set_fix_val(copy(), static_cast(type), pos, v.release()); - return manage(res); + return isl::set(*this).every_set(test); } -isl::basic_set basic_set::flat_product(isl::basic_set bset2) const +isl::set basic_set::extract_set(const isl::space &space) const { - auto res = isl_basic_set_flat_product(copy(), bset2.release()); - return manage(res); + return isl::set(*this).extract_set(space); } -isl::basic_set basic_set::flatten() const +int basic_set::find_dim_by_id(isl::dim type, const isl::id &id) const { - auto res = isl_basic_set_flatten(copy()); - return manage(res); + return isl::set(*this).find_dim_by_id(type, id); } -stat basic_set::foreach_bound_pair(isl::dim type, unsigned int pos, const std::function &fn) const +int basic_set::find_dim_by_id(isl::dim type, const std::string &id) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_constraint *arg_0, isl_constraint *arg_1, isl_basic_set *arg_2, void *arg_3) -> isl_stat { - auto *data = static_cast(arg_3); - stat ret = (*data->func)(manage(arg_0), manage(arg_1), manage(arg_2)); - return ret.release(); - }; - auto res = isl_basic_set_foreach_bound_pair(get(), static_cast(type), pos, fn_lambda, &fn_data); - return manage(res); + return this->find_dim_by_id(type, isl::id(ctx(), id)); } -stat basic_set::foreach_constraint(const std::function &fn) const +isl::basic_set basic_set::fix_si(isl::dim type, unsigned int pos, int value) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_constraint *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_basic_set_foreach_constraint(get(), fn_lambda, &fn_data); + auto res = isl_basic_set_fix_si(copy(), static_cast(type), pos, value); return manage(res); } -isl::basic_set basic_set::from_constraint(isl::constraint constraint) +isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, isl::val v) const { - auto res = isl_basic_set_from_constraint(constraint.release()); + auto res = isl_basic_set_fix_val(copy(), static_cast(type), pos, v.release()); return manage(res); } -isl::basic_set basic_set::from_multi_aff(isl::multi_aff ma) +isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, long v) const { - auto res = isl_basic_set_from_multi_aff(ma.release()); - return manage(res); + return this->fix_val(type, pos, isl::val(ctx(), v)); } -isl::basic_set basic_set::from_params() const +isl::basic_set basic_set::flatten() const { - auto res = isl_basic_set_from_params(copy()); + auto res = isl_basic_set_flatten(copy()); return manage(res); } -isl::constraint_list basic_set::get_constraint_list() const +void basic_set::foreach_basic_set(const std::function &fn) const { - auto res = isl_basic_set_get_constraint_list(get()); - return manage(res); + return isl::set(*this).foreach_basic_set(fn); } -isl::id basic_set::get_dim_id(isl::dim type, unsigned int pos) const +void basic_set::foreach_point(const std::function &fn) const { - auto res = isl_basic_set_get_dim_id(get(), static_cast(type), pos); - return manage(res); + return isl::set(*this).foreach_point(fn); } -std::string basic_set::get_dim_name(isl::dim type, unsigned int pos) const +void basic_set::foreach_set(const std::function &fn) const { - auto res = isl_basic_set_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + return isl::set(*this).foreach_set(fn); } -isl::aff basic_set::get_div(int pos) const +isl::basic_set basic_set::gist(isl::basic_set context) const { - auto res = isl_basic_set_get_div(get(), pos); + auto res = isl_basic_set_gist(copy(), context.release()); return manage(res); } -isl::local_space basic_set::get_local_space() const +isl::set basic_set::gist(const isl::set &context) const { - auto res = isl_basic_set_get_local_space(get()); - return manage(res); + return isl::set(*this).gist(context); } -isl::space basic_set::get_space() const +isl::union_set basic_set::gist(const isl::union_set &context) const { - auto res = isl_basic_set_get_space(get()); - return manage(res); + return isl::set(*this).gist(context); } -std::string basic_set::get_tuple_name() const +isl::basic_set basic_set::gist(const isl::point &context) const { - auto res = isl_basic_set_get_tuple_name(get()); - std::string tmp(res); - return tmp; + return this->gist(isl::basic_set(context)); } -isl::basic_set basic_set::gist(isl::basic_set context) const +isl::set basic_set::gist_params(const isl::set &context) const { - auto res = isl_basic_set_gist(copy(), context.release()); - return manage(res); + return isl::set(*this).gist_params(context); } -isl::mat basic_set::inequalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4) const +bool basic_set::has_equal_space(const isl::set &set2) const { - auto res = isl_basic_set_inequalities_matrix(get(), static_cast(c1), static_cast(c2), static_cast(c3), static_cast(c4)); - return manage(res); + return isl::set(*this).has_equal_space(set2); } -isl::basic_set basic_set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const +isl::map basic_set::identity() const { - auto res = isl_basic_set_insert_dims(copy(), static_cast(type), pos, n); - return manage(res); + return isl::set(*this).identity(); } -isl::basic_set basic_set::intersect(isl::basic_set bset2) const +isl::union_pw_multi_aff basic_set::identity_union_pw_multi_aff() const { - auto res = isl_basic_set_intersect(copy(), bset2.release()); - return manage(res); + return isl::set(*this).identity_union_pw_multi_aff(); } -isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const +isl::pw_aff basic_set::indicator_function() const { - auto res = isl_basic_set_intersect_params(copy(), bset2.release()); - return manage(res); + return isl::set(*this).indicator_function(); } -boolean basic_set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::set basic_set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const { - auto res = isl_basic_set_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return isl::set(*this).insert_dims(type, pos, n); } -boolean basic_set::is_bounded() const +isl::map basic_set::insert_domain(const isl::space &domain) const { - auto res = isl_basic_set_is_bounded(get()); - return manage(res); + return isl::set(*this).insert_domain(domain); } -boolean basic_set::is_disjoint(const isl::basic_set &bset2) const +isl::basic_set basic_set::intersect(isl::basic_set bset2) const { - auto res = isl_basic_set_is_disjoint(get(), bset2.get()); + auto res = isl_basic_set_intersect(copy(), bset2.release()); return manage(res); } -boolean basic_set::is_empty() const +isl::set basic_set::intersect(const isl::set &set2) const { - auto res = isl_basic_set_is_empty(get()); - return manage(res); + return isl::set(*this).intersect(set2); } -boolean basic_set::is_equal(const isl::basic_set &bset2) const +isl::union_set basic_set::intersect(const isl::union_set &uset2) const { - auto res = isl_basic_set_is_equal(get(), bset2.get()); - return manage(res); + return isl::set(*this).intersect(uset2); } -int basic_set::is_rational() const +isl::basic_set basic_set::intersect(const isl::point &bset2) const { - auto res = isl_basic_set_is_rational(get()); - return res; + return this->intersect(isl::basic_set(bset2)); } -boolean basic_set::is_subset(const isl::basic_set &bset2) const +isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const { - auto res = isl_basic_set_is_subset(get(), bset2.get()); + auto res = isl_basic_set_intersect_params(copy(), bset2.release()); return manage(res); } -boolean basic_set::is_universe() const +isl::set basic_set::intersect_params(const isl::set ¶ms) const { - auto res = isl_basic_set_is_universe(get()); - return manage(res); + return isl::set(*this).intersect_params(params); } -boolean basic_set::is_wrapping() const +isl::basic_set basic_set::intersect_params(const isl::point &bset2) const { - auto res = isl_basic_set_is_wrapping(get()); - return manage(res); + return this->intersect_params(isl::basic_set(bset2)); } -isl::set basic_set::lexmax() const +bool basic_set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_set_lexmax(copy()); - return manage(res); + return isl::set(*this).involves_dims(type, first, n); } -isl::set basic_set::lexmin() const +bool basic_set::involves_locals() const { - auto res = isl_basic_set_lexmin(copy()); - return manage(res); + return isl::set(*this).involves_locals(); } -isl::basic_set basic_set::lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const +bool basic_set::is_bounded() const { - auto res = isl_basic_set_lower_bound_val(copy(), static_cast(type), pos, value.release()); - return manage(res); + auto res = isl_basic_set_is_bounded(get()); + return res; } -isl::val basic_set::max_val(const isl::aff &obj) const +bool basic_set::is_disjoint(const isl::set &set2) const { - auto res = isl_basic_set_max_val(get(), obj.get()); - return manage(res); + return isl::set(*this).is_disjoint(set2); } -isl::basic_set basic_set::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const +bool basic_set::is_disjoint(const isl::union_set &uset2) const { - auto res = isl_basic_set_move_dims(copy(), static_cast(dst_type), dst_pos, static_cast(src_type), src_pos, n); - return manage(res); + return isl::set(*this).is_disjoint(uset2); } -isl_size basic_set::n_constraint() const +bool basic_set::is_empty() const { - auto res = isl_basic_set_n_constraint(get()); + auto res = isl_basic_set_is_empty(get()); return res; } -isl_size basic_set::n_dim() const +bool basic_set::is_equal(const isl::basic_set &bset2) const { - auto res = isl_basic_set_n_dim(get()); + auto res = isl_basic_set_is_equal(get(), bset2.get()); return res; } -isl::basic_set basic_set::nat_universe(isl::space space) +bool basic_set::is_equal(const isl::set &set2) const { - auto res = isl_basic_set_nat_universe(space.release()); - return manage(res); + return isl::set(*this).is_equal(set2); } -isl::basic_set basic_set::neg() const +bool basic_set::is_equal(const isl::union_set &uset2) const { - auto res = isl_basic_set_neg(copy()); - return manage(res); + return isl::set(*this).is_equal(uset2); } -isl::basic_set basic_set::params() const +bool basic_set::is_equal(const isl::point &bset2) const { - auto res = isl_basic_set_params(copy()); - return manage(res); + return this->is_equal(isl::basic_set(bset2)); } -boolean basic_set::plain_is_empty() const +bool basic_set::is_params() const { - auto res = isl_basic_set_plain_is_empty(get()); - return manage(res); + return isl::set(*this).is_params(); } -boolean basic_set::plain_is_equal(const isl::basic_set &bset2) const +bool basic_set::is_singleton() const { - auto res = isl_basic_set_plain_is_equal(get(), bset2.get()); - return manage(res); + return isl::set(*this).is_singleton(); } -boolean basic_set::plain_is_universe() const +bool basic_set::is_strict_subset(const isl::set &set2) const { - auto res = isl_basic_set_plain_is_universe(get()); - return manage(res); + return isl::set(*this).is_strict_subset(set2); } -isl::basic_set basic_set::positive_orthant(isl::space space) +bool basic_set::is_strict_subset(const isl::union_set &uset2) const { - auto res = isl_basic_set_positive_orthant(space.release()); - return manage(res); + return isl::set(*this).is_strict_subset(uset2); } -isl::basic_set basic_set::preimage_multi_aff(isl::multi_aff ma) const +bool basic_set::is_subset(const isl::basic_set &bset2) const { - auto res = isl_basic_set_preimage_multi_aff(copy(), ma.release()); - return manage(res); + auto res = isl_basic_set_is_subset(get(), bset2.get()); + return res; } -isl::basic_set basic_set::project_out(isl::dim type, unsigned int first, unsigned int n) const +bool basic_set::is_subset(const isl::set &set2) const { - auto res = isl_basic_set_project_out(copy(), static_cast(type), first, n); - return manage(res); + return isl::set(*this).is_subset(set2); } -isl::mat basic_set::reduced_basis() const +bool basic_set::is_subset(const isl::union_set &uset2) const { - auto res = isl_basic_set_reduced_basis(get()); - return manage(res); + return isl::set(*this).is_subset(uset2); } -isl::basic_set basic_set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const +bool basic_set::is_subset(const isl::point &bset2) const { - auto res = isl_basic_set_remove_dims(copy(), static_cast(type), first, n); - return manage(res); + return this->is_subset(isl::basic_set(bset2)); } -isl::basic_set basic_set::remove_divs() const +bool basic_set::is_wrapping() const { - auto res = isl_basic_set_remove_divs(copy()); - return manage(res); + auto res = isl_basic_set_is_wrapping(get()); + return res; } -isl::basic_set basic_set::remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +bool basic_set::isa_set() const { - auto res = isl_basic_set_remove_divs_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::set(*this).isa_set(); } -isl::basic_set basic_set::remove_redundancies() const +isl::set basic_set::lexmax() const { - auto res = isl_basic_set_remove_redundancies(copy()); + auto res = isl_basic_set_lexmax(copy()); return manage(res); } -isl::basic_set basic_set::remove_unknown_divs() const +isl::pw_multi_aff basic_set::lexmax_pw_multi_aff() const { - auto res = isl_basic_set_remove_unknown_divs(copy()); - return manage(res); + return isl::set(*this).lexmax_pw_multi_aff(); } -isl::basic_set basic_set::sample() const +isl::set basic_set::lexmin() const { - auto res = isl_basic_set_sample(copy()); + auto res = isl_basic_set_lexmin(copy()); return manage(res); } -isl::point basic_set::sample_point() const +isl::pw_multi_aff basic_set::lexmin_pw_multi_aff() const { - auto res = isl_basic_set_sample_point(copy()); - return manage(res); + return isl::set(*this).lexmin_pw_multi_aff(); } -isl::basic_set basic_set::set_tuple_id(isl::id id) const +isl::set basic_set::lower_bound(const isl::multi_pw_aff &lower) const { - auto res = isl_basic_set_set_tuple_id(copy(), id.release()); - return manage(res); + return isl::set(*this).lower_bound(lower); } -isl::basic_set basic_set::set_tuple_name(const std::string &s) const +isl::set basic_set::lower_bound(const isl::multi_val &lower) const { - auto res = isl_basic_set_set_tuple_name(copy(), s.c_str()); - return manage(res); + return isl::set(*this).lower_bound(lower); } -isl::basic_set basic_set::solutions() const +isl::set basic_set::lower_bound_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_basic_set_solutions(copy()); - return manage(res); + return isl::set(*this).lower_bound_si(type, pos, value); } -isl::set basic_set::unite(isl::basic_set bset2) const +isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const { - auto res = isl_basic_set_union(copy(), bset2.release()); - return manage(res); + return isl::set(*this).lower_bound_val(type, pos, value); } -isl::basic_set basic_set::universe(isl::space space) +isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, long value) const { - auto res = isl_basic_set_universe(space.release()); - return manage(res); + return this->lower_bound_val(type, pos, isl::val(ctx(), value)); } -isl::basic_map basic_set::unwrap() const +isl::multi_pw_aff basic_set::max_multi_pw_aff() const { - auto res = isl_basic_set_unwrap(copy()); - return manage(res); + return isl::set(*this).max_multi_pw_aff(); } -isl::basic_set basic_set::upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const +isl::val basic_set::max_val(const isl::aff &obj) const { - auto res = isl_basic_set_upper_bound_val(copy(), static_cast(type), pos, value.release()); - return manage(res); + return isl::set(*this).max_val(obj); } -// implementations for isl::basic_set_list -basic_set_list manage(__isl_take isl_basic_set_list *ptr) { - return basic_set_list(ptr); -} -basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr) { - ptr = isl_basic_set_list_copy(ptr); - return basic_set_list(ptr); +isl::multi_pw_aff basic_set::min_multi_pw_aff() const +{ + return isl::set(*this).min_multi_pw_aff(); } -basic_set_list::basic_set_list() - : ptr(nullptr) {} - -basic_set_list::basic_set_list(const basic_set_list &obj) - : ptr(nullptr) +isl::val basic_set::min_val(const isl::aff &obj) const { - ptr = obj.copy(); + return isl::set(*this).min_val(obj); } - -basic_set_list::basic_set_list(__isl_take isl_basic_set_list *ptr) - : ptr(ptr) {} - - -basic_set_list &basic_set_list::operator=(basic_set_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl_size basic_set::n_basic_set() const +{ + return isl::set(*this).n_basic_set(); } -basic_set_list::~basic_set_list() { - if (ptr) - isl_basic_set_list_free(ptr); +isl::basic_set basic_set::params() const +{ + auto res = isl_basic_set_params(copy()); + return manage(res); } -__isl_give isl_basic_set_list *basic_set_list::copy() const & { - return isl_basic_set_list_copy(ptr); +isl::val basic_set::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const +{ + return isl::set(*this).plain_get_val_if_fixed(type, pos); } -__isl_keep isl_basic_set_list *basic_set_list::get() const { - return ptr; +isl::multi_val basic_set::plain_multi_val_if_fixed() const +{ + return isl::set(*this).plain_multi_val_if_fixed(); } -__isl_give isl_basic_set_list *basic_set_list::release() { - isl_basic_set_list *tmp = ptr; - ptr = nullptr; - return tmp; +isl::basic_set basic_set::polyhedral_hull() const +{ + return isl::set(*this).polyhedral_hull(); } -bool basic_set_list::is_null() const { - return ptr == nullptr; +isl::set basic_set::preimage(const isl::multi_aff &ma) const +{ + return isl::set(*this).preimage(ma); } - -isl::ctx basic_set_list::ctx() const { - return isl::ctx(isl_basic_set_list_get_ctx(ptr)); +isl::set basic_set::preimage(const isl::multi_pw_aff &mpa) const +{ + return isl::set(*this).preimage(mpa); } -void basic_set_list::dump() const { - isl_basic_set_list_dump(get()); +isl::set basic_set::preimage(const isl::pw_multi_aff &pma) const +{ + return isl::set(*this).preimage(pma); } - -isl::basic_set_list basic_set_list::add(isl::basic_set el) const +isl::union_set basic_set::preimage(const isl::union_pw_multi_aff &upma) const { - auto res = isl_basic_set_list_add(copy(), el.release()); - return manage(res); + return isl::set(*this).preimage(upma); } -isl::basic_set_list basic_set_list::alloc(isl::ctx ctx, int n) +isl::set basic_set::product(const isl::set &set2) const { - auto res = isl_basic_set_list_alloc(ctx.release(), n); - return manage(res); + return isl::set(*this).product(set2); } -isl::basic_set_list basic_set_list::clear() const +isl::basic_set basic_set::project_out(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_set_list_clear(copy()); + auto res = isl_basic_set_project_out(copy(), static_cast(type), first, n); return manage(res); } -isl::basic_set_list basic_set_list::coefficients() const +isl::set basic_set::project_out_all_params() const { - auto res = isl_basic_set_list_coefficients(copy()); - return manage(res); + return isl::set(*this).project_out_all_params(); } -isl::basic_set_list basic_set_list::concat(isl::basic_set_list list2) const +isl::set basic_set::project_out_param(const isl::id &id) const { - auto res = isl_basic_set_list_concat(copy(), list2.release()); - return manage(res); + return isl::set(*this).project_out_param(id); } -isl::basic_set_list basic_set_list::drop(unsigned int first, unsigned int n) const +isl::set basic_set::project_out_param(const std::string &id) const { - auto res = isl_basic_set_list_drop(copy(), first, n); - return manage(res); + return this->project_out_param(isl::id(ctx(), id)); } -stat basic_set_list::foreach(const std::function &fn) const +isl::set basic_set::project_out_param(const isl::id_list &list) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_basic_set_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); + return isl::set(*this).project_out_param(list); } -isl::basic_set_list basic_set_list::from_basic_set(isl::basic_set el) +isl::pw_multi_aff basic_set::pw_multi_aff_on_domain(const isl::multi_val &mv) const { - auto res = isl_basic_set_list_from_basic_set(el.release()); - return manage(res); + return isl::set(*this).pw_multi_aff_on_domain(mv); } -isl::basic_set basic_set_list::get_at(int index) const +isl::set basic_set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_set_list_get_at(get(), index); - return manage(res); + return isl::set(*this).remove_dims(type, first, n); } -isl::basic_set basic_set_list::get_basic_set(int index) const +isl::set basic_set::remove_divs() const { - auto res = isl_basic_set_list_get_basic_set(get(), index); - return manage(res); + return isl::set(*this).remove_divs(); } -isl::basic_set_list basic_set_list::insert(unsigned int pos, isl::basic_set el) const +isl::set basic_set::remove_redundancies() const { - auto res = isl_basic_set_list_insert(copy(), pos, el.release()); - return manage(res); + return isl::set(*this).remove_redundancies(); } -isl_size basic_set_list::n_basic_set() const +isl::set basic_set::reset_tuple_id() const { - auto res = isl_basic_set_list_n_basic_set(get()); - return res; + return isl::set(*this).reset_tuple_id(); } -isl::basic_set_list basic_set_list::reverse() const +isl::basic_set basic_set::sample() const { - auto res = isl_basic_set_list_reverse(copy()); + auto res = isl_basic_set_sample(copy()); return manage(res); } -isl::basic_set_list basic_set_list::set_basic_set(int index, isl::basic_set el) const +isl::point basic_set::sample_point() const { - auto res = isl_basic_set_list_set_basic_set(copy(), index, el.release()); + auto res = isl_basic_set_sample_point(copy()); return manage(res); } -isl_size basic_set_list::size() const +isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const { - auto res = isl_basic_set_list_size(get()); - return res; + return isl::set(*this).set_dim_id(type, pos, id); } -isl::basic_set_list basic_set_list::swap(unsigned int pos1, unsigned int pos2) const +isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const { - auto res = isl_basic_set_list_swap(copy(), pos1, pos2); - return manage(res); -} - -// implementations for isl::constraint -constraint manage(__isl_take isl_constraint *ptr) { - return constraint(ptr); -} -constraint manage_copy(__isl_keep isl_constraint *ptr) { - ptr = isl_constraint_copy(ptr); - return constraint(ptr); + return this->set_dim_id(type, pos, isl::id(ctx(), id)); } -constraint::constraint() - : ptr(nullptr) {} - -constraint::constraint(const constraint &obj) - : ptr(nullptr) +isl::set_list basic_set::set_list() const { - ptr = obj.copy(); + return isl::set(*this).set_list(); } - -constraint::constraint(__isl_take isl_constraint *ptr) - : ptr(ptr) {} - - -constraint &constraint::operator=(constraint obj) { - std::swap(this->ptr, obj.ptr); - return *this; -} - -constraint::~constraint() { - if (ptr) - isl_constraint_free(ptr); +isl::set basic_set::set_tuple_id(const isl::id &id) const +{ + return isl::set(*this).set_tuple_id(id); } -__isl_give isl_constraint *constraint::copy() const & { - return isl_constraint_copy(ptr); +isl::set basic_set::set_tuple_id(const std::string &id) const +{ + return this->set_tuple_id(isl::id(ctx(), id)); } -__isl_keep isl_constraint *constraint::get() const { - return ptr; +isl::fixed_box basic_set::simple_fixed_box_hull() const +{ + return isl::set(*this).simple_fixed_box_hull(); } -__isl_give isl_constraint *constraint::release() { - isl_constraint *tmp = ptr; - ptr = nullptr; - return tmp; +isl::basic_set basic_set::simple_hull() const +{ + return isl::set(*this).simple_hull(); } -bool constraint::is_null() const { - return ptr == nullptr; +isl::space basic_set::space() const +{ + auto res = isl_basic_set_get_space(get()); + return manage(res); } +isl::space basic_set::get_space() const +{ + return space(); +} -isl::ctx constraint::ctx() const { - return isl::ctx(isl_constraint_get_ctx(ptr)); +isl::val basic_set::stride(int pos) const +{ + return isl::set(*this).stride(pos); } -void constraint::dump() const { - isl_constraint_dump(get()); +isl::set basic_set::subtract(const isl::set &set2) const +{ + return isl::set(*this).subtract(set2); } +isl::union_set basic_set::subtract(const isl::union_set &uset2) const +{ + return isl::set(*this).subtract(uset2); +} -isl::constraint constraint::alloc_equality(isl::local_space ls) +isl::basic_set_list basic_set::to_list() const { - auto res = isl_constraint_alloc_equality(ls.release()); + auto res = isl_basic_set_to_list(copy()); return manage(res); } -isl::constraint constraint::alloc_inequality(isl::local_space ls) +isl::set basic_set::to_set() const { - auto res = isl_constraint_alloc_inequality(ls.release()); + auto res = isl_basic_set_to_set(copy()); return manage(res); } -int constraint::cmp_last_non_zero(const isl::constraint &c2) const +isl::union_set basic_set::to_union_set() const { - auto res = isl_constraint_cmp_last_non_zero(get(), c2.get()); - return res; + return isl::set(*this).to_union_set(); } -isl::aff constraint::get_aff() const +isl::map basic_set::translation() const { - auto res = isl_constraint_get_aff(get()); - return manage(res); + return isl::set(*this).translation(); } -isl::aff constraint::get_bound(isl::dim type, int pos) const +isl_size basic_set::tuple_dim() const { - auto res = isl_constraint_get_bound(get(), static_cast(type), pos); - return manage(res); + return isl::set(*this).tuple_dim(); } -isl::val constraint::get_coefficient_val(isl::dim type, int pos) const +isl::id basic_set::tuple_id() const { - auto res = isl_constraint_get_coefficient_val(get(), static_cast(type), pos); - return manage(res); + return isl::set(*this).tuple_id(); } -isl::val constraint::get_constant_val() const +std::string basic_set::tuple_name() const { - auto res = isl_constraint_get_constant_val(get()); - return manage(res); + return isl::set(*this).tuple_name(); } -std::string constraint::get_dim_name(isl::dim type, unsigned int pos) const +isl::set basic_set::unbind_params(const isl::multi_id &tuple) const { - auto res = isl_constraint_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + return isl::set(*this).unbind_params(tuple); } -isl::aff constraint::get_div(int pos) const +isl::map basic_set::unbind_params_insert_domain(const isl::multi_id &domain) const { - auto res = isl_constraint_get_div(get(), pos); - return manage(res); + return isl::set(*this).unbind_params_insert_domain(domain); } -isl::local_space constraint::get_local_space() const +isl::set basic_set::unite(isl::basic_set bset2) const { - auto res = isl_constraint_get_local_space(get()); + auto res = isl_basic_set_union(copy(), bset2.release()); return manage(res); } -isl::space constraint::get_space() const +isl::set basic_set::unite(const isl::set &set2) const { - auto res = isl_constraint_get_space(get()); - return manage(res); + return isl::set(*this).unite(set2); } -boolean constraint::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_set basic_set::unite(const isl::union_set &uset2) const { - auto res = isl_constraint_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return isl::set(*this).unite(uset2); } -boolean constraint::is_div_constraint() const +isl::set basic_set::unite(const isl::point &bset2) const { - auto res = isl_constraint_is_div_constraint(get()); - return manage(res); + return this->unite(isl::basic_set(bset2)); } -boolean constraint::is_lower_bound(isl::dim type, unsigned int pos) const +isl::basic_set basic_set::universe(isl::space space) { - auto res = isl_constraint_is_lower_bound(get(), static_cast(type), pos); + auto res = isl_basic_set_universe(space.release()); return manage(res); } -boolean constraint::is_upper_bound(isl::dim type, unsigned int pos) const +isl::basic_set basic_set::unshifted_simple_hull() const { - auto res = isl_constraint_is_upper_bound(get(), static_cast(type), pos); - return manage(res); + return isl::set(*this).unshifted_simple_hull(); } -int constraint::plain_cmp(const isl::constraint &c2) const +isl::map basic_set::unwrap() const { - auto res = isl_constraint_plain_cmp(get(), c2.get()); - return res; + return isl::set(*this).unwrap(); } -isl::constraint constraint::set_coefficient_si(isl::dim type, int pos, int v) const +isl::set basic_set::upper_bound(const isl::multi_pw_aff &upper) const { - auto res = isl_constraint_set_coefficient_si(copy(), static_cast(type), pos, v); - return manage(res); + return isl::set(*this).upper_bound(upper); } -isl::constraint constraint::set_coefficient_val(isl::dim type, int pos, isl::val v) const +isl::set basic_set::upper_bound(const isl::multi_val &upper) const { - auto res = isl_constraint_set_coefficient_val(copy(), static_cast(type), pos, v.release()); - return manage(res); + return isl::set(*this).upper_bound(upper); } -isl::constraint constraint::set_constant_si(int v) const +isl::set basic_set::upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const { - auto res = isl_constraint_set_constant_si(copy(), v); - return manage(res); + return isl::set(*this).upper_bound_val(type, pos, value); } -isl::constraint constraint::set_constant_val(isl::val v) const +isl::set basic_set::upper_bound_val(isl::dim type, unsigned int pos, long value) const { - auto res = isl_constraint_set_constant_val(copy(), v.release()); - return manage(res); + return this->upper_bound_val(type, pos, isl::val(ctx(), value)); +} + +inline std::ostream &operator<<(std::ostream &os, const basic_set &obj) +{ + char *str = isl_basic_set_to_str(obj.get()); + os << str; + free(str); + return os; } -// implementations for isl::constraint_list -constraint_list manage(__isl_take isl_constraint_list *ptr) { - return constraint_list(ptr); +// implementations for isl::basic_set_list +basic_set_list manage(__isl_take isl_basic_set_list *ptr) { + return basic_set_list(ptr); } -constraint_list manage_copy(__isl_keep isl_constraint_list *ptr) { - ptr = isl_constraint_list_copy(ptr); - return constraint_list(ptr); +basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr) { + ptr = isl_basic_set_list_copy(ptr); + return basic_set_list(ptr); } -constraint_list::constraint_list() +basic_set_list::basic_set_list() : ptr(nullptr) {} -constraint_list::constraint_list(const constraint_list &obj) +basic_set_list::basic_set_list(const basic_set_list &obj) : ptr(nullptr) { ptr = obj.copy(); } - -constraint_list::constraint_list(__isl_take isl_constraint_list *ptr) +basic_set_list::basic_set_list(__isl_take isl_basic_set_list *ptr) : ptr(ptr) {} +basic_set_list::basic_set_list(isl::ctx ctx, int n) +{ + auto res = isl_basic_set_list_alloc(ctx.release(), n); + ptr = res; +} + +basic_set_list::basic_set_list(isl::basic_set el) +{ + auto res = isl_basic_set_list_from_basic_set(el.release()); + ptr = res; +} -constraint_list &constraint_list::operator=(constraint_list obj) { +basic_set_list &basic_set_list::operator=(basic_set_list obj) { std::swap(this->ptr, obj.ptr); return *this; } -constraint_list::~constraint_list() { +basic_set_list::~basic_set_list() { if (ptr) - isl_constraint_list_free(ptr); + isl_basic_set_list_free(ptr); } -__isl_give isl_constraint_list *constraint_list::copy() const & { - return isl_constraint_list_copy(ptr); +__isl_give isl_basic_set_list *basic_set_list::copy() const & { + return isl_basic_set_list_copy(ptr); } -__isl_keep isl_constraint_list *constraint_list::get() const { +__isl_keep isl_basic_set_list *basic_set_list::get() const { return ptr; } -__isl_give isl_constraint_list *constraint_list::release() { - isl_constraint_list *tmp = ptr; +__isl_give isl_basic_set_list *basic_set_list::release() { + isl_basic_set_list *tmp = ptr; ptr = nullptr; return tmp; } -bool constraint_list::is_null() const { +bool basic_set_list::is_null() const { return ptr == nullptr; } - -isl::ctx constraint_list::ctx() const { - return isl::ctx(isl_constraint_list_get_ctx(ptr)); +isl::ctx basic_set_list::ctx() const { + return isl::ctx(isl_basic_set_list_get_ctx(ptr)); } -void constraint_list::dump() const { - isl_constraint_list_dump(get()); +isl::basic_set_list basic_set_list::add(isl::basic_set el) const +{ + auto res = isl_basic_set_list_add(copy(), el.release()); + return manage(res); } - -isl::constraint_list constraint_list::add(isl::constraint el) const +isl::basic_set basic_set_list::at(int index) const { - auto res = isl_constraint_list_add(copy(), el.release()); + auto res = isl_basic_set_list_get_at(get(), index); return manage(res); } -isl::constraint_list constraint_list::alloc(isl::ctx ctx, int n) +isl::basic_set basic_set_list::get_at(int index) const { - auto res = isl_constraint_list_alloc(ctx.release(), n); - return manage(res); + return at(index); } -isl::constraint_list constraint_list::clear() const +isl::basic_set_list basic_set_list::clear() const { - auto res = isl_constraint_list_clear(copy()); + auto res = isl_basic_set_list_clear(copy()); return manage(res); } -isl::constraint_list constraint_list::concat(isl::constraint_list list2) const +isl::basic_set_list basic_set_list::concat(isl::basic_set_list list2) const { - auto res = isl_constraint_list_concat(copy(), list2.release()); + auto res = isl_basic_set_list_concat(copy(), list2.release()); return manage(res); } -isl::constraint_list constraint_list::drop(unsigned int first, unsigned int n) const +isl::basic_set_list basic_set_list::drop(unsigned int first, unsigned int n) const { - auto res = isl_constraint_list_drop(copy(), first, n); + auto res = isl_basic_set_list_drop(copy(), first, n); return manage(res); } -stat constraint_list::foreach(const std::function &fn) const +void basic_set_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_constraint *arg_0, void *arg_1) -> isl_stat { + std::function 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(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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_constraint_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); + auto res = isl_basic_set_list_foreach(get(), fn_lambda, &fn_data); + return; } -isl::constraint_list constraint_list::from_constraint(isl::constraint el) +isl::basic_set_list basic_set_list::insert(unsigned int pos, isl::basic_set el) const { - auto res = isl_constraint_list_from_constraint(el.release()); + auto res = isl_basic_set_list_insert(copy(), pos, el.release()); return manage(res); } -isl::constraint constraint_list::get_at(int index) const +isl_size basic_set_list::size() const { - auto res = isl_constraint_list_get_at(get(), index); - return manage(res); + auto res = isl_basic_set_list_size(get()); + return res; } -isl::constraint constraint_list::get_constraint(int index) const +inline std::ostream &operator<<(std::ostream &os, const basic_set_list &obj) { - auto res = isl_constraint_list_get_constraint(get(), index); - return manage(res); + char *str = isl_basic_set_list_to_str(obj.get()); + os << str; + free(str); + return os; +} + +// implementations for isl::constraint +constraint manage(__isl_take isl_constraint *ptr) { + return constraint(ptr); +} +constraint manage_copy(__isl_keep isl_constraint *ptr) { + ptr = isl_constraint_copy(ptr); + return constraint(ptr); } -isl::constraint_list constraint_list::insert(unsigned int pos, isl::constraint el) const +constraint::constraint() + : ptr(nullptr) {} + +constraint::constraint(const constraint &obj) + : ptr(nullptr) { - auto res = isl_constraint_list_insert(copy(), pos, el.release()); - return manage(res); + ptr = obj.copy(); +} + +constraint::constraint(__isl_take isl_constraint *ptr) + : ptr(ptr) {} + +constraint &constraint::operator=(constraint obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +constraint::~constraint() { + if (ptr) + isl_constraint_free(ptr); +} + +__isl_give isl_constraint *constraint::copy() const & { + return isl_constraint_copy(ptr); +} + +__isl_keep isl_constraint *constraint::get() const { + return ptr; +} + +__isl_give isl_constraint *constraint::release() { + isl_constraint *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool constraint::is_null() const { + return ptr == nullptr; } -isl_size constraint_list::n_constraint() const +isl::ctx constraint::ctx() const { + return isl::ctx(isl_constraint_get_ctx(ptr)); +} + +isl::constraint constraint::alloc_equality(isl::local_space ls) { - auto res = isl_constraint_list_n_constraint(get()); - return res; + auto res = isl_constraint_alloc_equality(ls.release()); + return manage(res); } -isl::constraint_list constraint_list::reverse() const +isl::constraint constraint::alloc_inequality(isl::local_space ls) { - auto res = isl_constraint_list_reverse(copy()); + auto res = isl_constraint_alloc_inequality(ls.release()); return manage(res); } -isl::constraint_list constraint_list::set_constraint(int index, isl::constraint el) const +isl::constraint constraint::set_coefficient_si(isl::dim type, int pos, int v) const { - auto res = isl_constraint_list_set_constraint(copy(), index, el.release()); + auto res = isl_constraint_set_coefficient_si(copy(), static_cast(type), pos, v); return manage(res); } -isl_size constraint_list::size() const +isl::constraint constraint::set_constant_si(int v) const { - auto res = isl_constraint_list_size(get()); - return res; + auto res = isl_constraint_set_constant_si(copy(), v); + return manage(res); } -isl::constraint_list constraint_list::swap(unsigned int pos1, unsigned int pos2) const +isl::constraint constraint::set_constant_val(isl::val v) const { - auto res = isl_constraint_list_swap(copy(), pos1, pos2); + auto res = isl_constraint_set_constant_val(copy(), v.release()); return manage(res); } +isl::constraint constraint::set_constant_val(long v) const +{ + return this->set_constant_val(isl::val(ctx(), v)); +} + // implementations for isl::fixed_box fixed_box manage(__isl_take isl_fixed_box *ptr) { return fixed_box(ptr); @@ -7462,11 +10009,9 @@ ptr = obj.copy(); } - 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; @@ -7495,38 +10040,55 @@ return ptr == nullptr; } - isl::ctx fixed_box::ctx() const { return isl::ctx(isl_fixed_box_get_ctx(ptr)); } -void fixed_box::dump() const { - isl_fixed_box_dump(get()); +bool fixed_box::is_valid() const +{ + auto res = isl_fixed_box_is_valid(get()); + return res; } - -isl::multi_aff fixed_box::get_offset() const +isl::multi_aff fixed_box::offset() const { auto res = isl_fixed_box_get_offset(get()); return manage(res); } -isl::multi_val fixed_box::get_size() const +isl::multi_aff fixed_box::get_offset() const +{ + return offset(); +} + +isl::multi_val fixed_box::size() const { auto res = isl_fixed_box_get_size(get()); return manage(res); } -isl::space fixed_box::get_space() const +isl::multi_val fixed_box::get_size() const +{ + return size(); +} + +isl::space fixed_box::space() const { auto res = isl_fixed_box_get_space(get()); return manage(res); } -boolean fixed_box::is_valid() const +isl::space fixed_box::get_space() const +{ + return space(); +} + +inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj) { - auto res = isl_fixed_box_is_valid(get()); - return manage(res); + char *str = isl_fixed_box_to_str(obj.get()); + os << str; + free(str); + return os; } // implementations for isl::id @@ -7547,7 +10109,6 @@ ptr = obj.copy(); } - id::id(__isl_take isl_id *ptr) : ptr(ptr) {} @@ -7585,41 +10146,53 @@ return ptr == nullptr; } - isl::ctx id::ctx() const { return isl::ctx(isl_id_get_ctx(ptr)); } -void id::dump() const { - isl_id_dump(get()); -} - - isl::id id::alloc(isl::ctx ctx, const std::string &name, void * user) { auto res = isl_id_alloc(ctx.release(), name.c_str(), user); return manage(res); } -uint32_t id::get_hash() const +std::string id::name() const { - auto res = isl_id_get_hash(get()); - return res; + auto res = isl_id_get_name(get()); + std::string tmp(res); + return tmp; } std::string id::get_name() const { - auto res = isl_id_get_name(get()); - std::string tmp(res); - return tmp; + return name(); } -void * id::get_user() const +isl::id_list id::to_list() const +{ + auto res = isl_id_to_list(copy()); + return manage(res); +} + +void * id::user() const { auto res = isl_id_get_user(get()); return res; } +void * id::get_user() const +{ + return user(); +} + +inline std::ostream &operator<<(std::ostream &os, const id &obj) +{ + char *str = isl_id_to_str(obj.get()); + os << str; + free(str); + return os; +} + // implementations for isl::id_list id_list manage(__isl_take isl_id_list *ptr) { return id_list(ptr); @@ -7638,10 +10211,26 @@ ptr = obj.copy(); } - id_list::id_list(__isl_take isl_id_list *ptr) : ptr(ptr) {} +id_list::id_list(isl::ctx ctx, int n) +{ + auto res = isl_id_list_alloc(ctx.release(), n); + ptr = res; +} + +id_list::id_list(isl::id el) +{ + auto res = isl_id_list_from_id(el.release()); + ptr = res; +} + +id_list::id_list(isl::ctx ctx, const std::string &str) +{ + auto res = isl_id_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} id_list &id_list::operator=(id_list obj) { std::swap(this->ptr, obj.ptr); @@ -7671,28 +10260,32 @@ return ptr == nullptr; } - isl::ctx id_list::ctx() const { return isl::ctx(isl_id_list_get_ctx(ptr)); } -void id_list::dump() const { - isl_id_list_dump(get()); -} - - isl::id_list id_list::add(isl::id el) const { auto res = isl_id_list_add(copy(), el.release()); return manage(res); } -isl::id_list id_list::alloc(isl::ctx ctx, int n) +isl::id_list id_list::add(const std::string &el) const { - auto res = isl_id_list_alloc(ctx.release(), n); + return this->add(isl::id(ctx(), el)); +} + +isl::id id_list::at(int index) const +{ + auto res = isl_id_list_get_at(get(), index); return manage(res); } +isl::id id_list::get_at(int index) const +{ + return at(index); +} + isl::id_list id_list::clear() const { auto res = isl_id_list_clear(copy()); @@ -7711,36 +10304,24 @@ return manage(res); } -stat id_list::foreach(const std::function &fn) const +void id_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; auto fn_lambda = [](isl_id *arg_0, void *arg_1) -> isl_stat { auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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); - return manage(res); -} - -isl::id_list id_list::from_id(isl::id el) -{ - auto res = isl_id_list_from_id(el.release()); - return manage(res); -} - -isl::id id_list::get_at(int index) const -{ - auto res = isl_id_list_get_at(get(), index); - return manage(res); -} - -isl::id id_list::get_id(int index) const -{ - auto res = isl_id_list_get_id(get(), index); - return manage(res); + return; } isl::id_list id_list::insert(unsigned int pos, isl::id el) const @@ -7749,22 +10330,9 @@ return manage(res); } -isl_size id_list::n_id() const -{ - auto res = isl_id_list_n_id(get()); - return res; -} - -isl::id_list id_list::reverse() const -{ - auto res = isl_id_list_reverse(copy()); - return manage(res); -} - -isl::id_list id_list::set_id(int index, isl::id el) const +isl::id_list id_list::insert(unsigned int pos, const std::string &el) const { - auto res = isl_id_list_set_id(copy(), index, el.release()); - return manage(res); + return this->insert(pos, isl::id(ctx(), el)); } isl_size id_list::size() const @@ -7773,10 +10341,12 @@ return res; } -isl::id_list id_list::swap(unsigned int pos1, unsigned int pos2) const +inline std::ostream &operator<<(std::ostream &os, const id_list &obj) { - auto res = isl_id_list_swap(copy(), pos1, pos2); - return manage(res); + char *str = isl_id_list_to_str(obj.get()); + os << str; + free(str); + return os; } // implementations for isl::id_to_ast_expr @@ -7797,11 +10367,9 @@ ptr = obj.copy(); } - id_to_ast_expr::id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr) : ptr(ptr) {} - id_to_ast_expr &id_to_ast_expr::operator=(id_to_ast_expr obj) { std::swap(this->ptr, obj.ptr); return *this; @@ -7830,58 +10398,25 @@ return ptr == nullptr; } - isl::ctx id_to_ast_expr::ctx() const { return isl::ctx(isl_id_to_ast_expr_get_ctx(ptr)); } -void id_to_ast_expr::dump() const { - isl_id_to_ast_expr_dump(get()); -} - - isl::id_to_ast_expr id_to_ast_expr::alloc(isl::ctx ctx, int min_size) { auto res = isl_id_to_ast_expr_alloc(ctx.release(), min_size); return manage(res); } -isl::id_to_ast_expr id_to_ast_expr::drop(isl::id key) const -{ - auto res = isl_id_to_ast_expr_drop(copy(), key.release()); - return manage(res); -} - -stat id_to_ast_expr::foreach(const std::function &fn) const -{ - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_id *arg_0, isl_ast_expr *arg_1, void *arg_2) -> isl_stat { - auto *data = static_cast(arg_2); - stat ret = (*data->func)(manage(arg_0), manage(arg_1)); - return ret.release(); - }; - auto res = isl_id_to_ast_expr_foreach(get(), fn_lambda, &fn_data); - return manage(res); -} - -isl::ast_expr id_to_ast_expr::get(isl::id key) const -{ - auto res = isl_id_to_ast_expr_get(get(), key.release()); - return manage(res); -} - -boolean id_to_ast_expr::has(const isl::id &key) const +isl::id_to_ast_expr id_to_ast_expr::set(isl::id key, isl::ast_expr val) const { - auto res = isl_id_to_ast_expr_has(get(), key.get()); + auto res = isl_id_to_ast_expr_set(copy(), key.release(), val.release()); return manage(res); } -isl::id_to_ast_expr id_to_ast_expr::set(isl::id key, isl::ast_expr val) const +isl::id_to_ast_expr id_to_ast_expr::set(const std::string &key, const isl::ast_expr &val) const { - auto res = isl_id_to_ast_expr_set(copy(), key.release(), val.release()); - return manage(res); + return this->set(isl::id(ctx(), key), val); } // implementations for isl::local_space @@ -7902,7 +10437,6 @@ ptr = obj.copy(); } - local_space::local_space(__isl_take isl_local_space *ptr) : ptr(ptr) {} @@ -7940,161 +10474,10 @@ return ptr == nullptr; } - isl::ctx local_space::ctx() const { return isl::ctx(isl_local_space_get_ctx(ptr)); } -void local_space::dump() const { - isl_local_space_dump(get()); -} - - -isl::local_space local_space::add_dims(isl::dim type, unsigned int n) const -{ - auto res = isl_local_space_add_dims(copy(), static_cast(type), n); - return manage(res); -} - -isl_size local_space::dim(isl::dim type) const -{ - auto res = isl_local_space_dim(get(), static_cast(type)); - return res; -} - -isl::local_space local_space::domain() const -{ - auto res = isl_local_space_domain(copy()); - return manage(res); -} - -isl::local_space local_space::drop_dims(isl::dim type, unsigned int first, unsigned int n) const -{ - auto res = isl_local_space_drop_dims(copy(), static_cast(type), first, n); - return manage(res); -} - -int local_space::find_dim_by_name(isl::dim type, const std::string &name) const -{ - auto res = isl_local_space_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; -} - -isl::local_space local_space::flatten_domain() const -{ - auto res = isl_local_space_flatten_domain(copy()); - return manage(res); -} - -isl::local_space local_space::flatten_range() const -{ - auto res = isl_local_space_flatten_range(copy()); - return manage(res); -} - -isl::local_space local_space::from_domain() const -{ - auto res = isl_local_space_from_domain(copy()); - return manage(res); -} - -isl::id local_space::get_dim_id(isl::dim type, unsigned int pos) const -{ - auto res = isl_local_space_get_dim_id(get(), static_cast(type), pos); - return manage(res); -} - -std::string local_space::get_dim_name(isl::dim type, unsigned int pos) const -{ - auto res = isl_local_space_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; -} - -isl::aff local_space::get_div(int pos) const -{ - auto res = isl_local_space_get_div(get(), pos); - return manage(res); -} - -isl::space local_space::get_space() const -{ - auto res = isl_local_space_get_space(get()); - return manage(res); -} - -boolean local_space::has_dim_id(isl::dim type, unsigned int pos) const -{ - auto res = isl_local_space_has_dim_id(get(), static_cast(type), pos); - return manage(res); -} - -boolean local_space::has_dim_name(isl::dim type, unsigned int pos) const -{ - auto res = isl_local_space_has_dim_name(get(), static_cast(type), pos); - return manage(res); -} - -isl::local_space local_space::insert_dims(isl::dim type, unsigned int first, unsigned int n) const -{ - auto res = isl_local_space_insert_dims(copy(), static_cast(type), first, n); - return manage(res); -} - -isl::local_space local_space::intersect(isl::local_space ls2) const -{ - auto res = isl_local_space_intersect(copy(), ls2.release()); - return manage(res); -} - -boolean local_space::is_equal(const isl::local_space &ls2) const -{ - auto res = isl_local_space_is_equal(get(), ls2.get()); - return manage(res); -} - -boolean local_space::is_params() const -{ - auto res = isl_local_space_is_params(get()); - return manage(res); -} - -boolean local_space::is_set() const -{ - auto res = isl_local_space_is_set(get()); - return manage(res); -} - -isl::local_space local_space::range() const -{ - auto res = isl_local_space_range(copy()); - return manage(res); -} - -isl::local_space local_space::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const -{ - auto res = isl_local_space_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); -} - -isl::local_space local_space::set_from_params() const -{ - auto res = isl_local_space_set_from_params(copy()); - return manage(res); -} - -isl::local_space local_space::set_tuple_id(isl::dim type, isl::id id) const -{ - auto res = isl_local_space_set_tuple_id(copy(), static_cast(type), id.release()); - return manage(res); -} - -isl::local_space local_space::wrap() const -{ - auto res = isl_local_space_wrap(copy()); - return manage(res); -} - // implementations for isl::map map manage(__isl_take isl_map *ptr) { return map(ptr); @@ -8113,7 +10496,6 @@ ptr = obj.copy(); } - map::map(__isl_take isl_map *ptr) : ptr(ptr) {} @@ -8122,6 +10504,7 @@ auto res = isl_map_from_basic_map(bmap.release()); ptr = res; } + map::map(isl::ctx ctx, const std::string &str) { auto res = isl_map_read_from_str(ctx.release(), str.c_str()); @@ -8156,16 +10539,10 @@ return ptr == nullptr; } - isl::ctx map::ctx() const { return isl::ctx(isl_map_get_ctx(ptr)); } -void map::dump() const { - isl_map_dump(get()); -} - - isl::map map::add_constraint(isl::constraint constraint) const { auto res = isl_map_add_constraint(copy(), constraint.release()); @@ -8196,48 +10573,82 @@ return manage(res); } +isl::union_map map::apply_domain(const isl::union_map &umap2) const +{ + return isl::union_map(*this).apply_domain(umap2); +} + +isl::map map::apply_domain(const isl::basic_map &map2) const +{ + return this->apply_domain(isl::map(map2)); +} + isl::map map::apply_range(isl::map map2) const { auto res = isl_map_apply_range(copy(), map2.release()); return manage(res); } -isl::set map::bind_domain(isl::multi_id tuple) const +isl::union_map map::apply_range(const isl::union_map &umap2) const { - auto res = isl_map_bind_domain(copy(), tuple.release()); - return manage(res); + return isl::union_map(*this).apply_range(umap2); } -isl::set map::bind_range(isl::multi_id tuple) const +isl::map map::apply_range(const isl::basic_map &map2) const { - auto res = isl_map_bind_range(copy(), tuple.release()); - return manage(res); + return this->apply_range(isl::map(map2)); } -boolean map::can_curry() const +isl::map map::as_map() const { - auto res = isl_map_can_curry(get()); + return isl::union_map(*this).as_map(); +} + +isl::multi_union_pw_aff map::as_multi_union_pw_aff() const +{ + return isl::union_map(*this).as_multi_union_pw_aff(); +} + +isl::pw_multi_aff map::as_pw_multi_aff() const +{ + auto res = isl_map_as_pw_multi_aff(copy()); return manage(res); } -boolean map::can_range_curry() const +isl::union_pw_multi_aff map::as_union_pw_multi_aff() const +{ + return isl::union_map(*this).as_union_pw_multi_aff(); +} + +isl::basic_map_list map::basic_map_list() const { - auto res = isl_map_can_range_curry(get()); + auto res = isl_map_get_basic_map_list(get()); return manage(res); } -boolean map::can_uncurry() const +isl::basic_map_list map::get_basic_map_list() const +{ + return basic_map_list(); +} + +isl::set map::bind_domain(isl::multi_id tuple) const { - auto res = isl_map_can_uncurry(get()); + auto res = isl_map_bind_domain(copy(), tuple.release()); return manage(res); } -boolean map::can_zip() const +isl::set map::bind_range(isl::multi_id tuple) const { - auto res = isl_map_can_zip(get()); + auto res = isl_map_bind_range(copy(), tuple.release()); return manage(res); } +bool map::can_curry() const +{ + auto res = isl_map_can_curry(get()); + return res; +} + isl::map map::coalesce() const { auto res = isl_map_coalesce(copy()); @@ -8250,10 +10661,9 @@ return manage(res); } -isl::basic_map map::convex_hull() const +isl::union_map map::compute_divs() const { - auto res = isl_map_convex_hull(copy()); - return manage(res); + return isl::union_map(*this).compute_divs(); } isl::map map::curry() const @@ -8268,12 +10678,6 @@ return manage(res); } -isl::map map::deltas_map() const -{ - auto res = isl_map_deltas_map(copy()); - return manage(res); -} - isl::map map::detect_equalities() const { auto res = isl_map_detect_equalities(copy()); @@ -8316,16 +10720,15 @@ return manage(res); } -boolean map::domain_is_wrapping() const +isl::map map::domain_map() const { - auto res = isl_map_domain_is_wrapping(get()); + auto res = isl_map_domain_map(copy()); return manage(res); } -isl::map map::domain_map() const +isl::union_pw_multi_aff map::domain_map_union_pw_multi_aff() const { - auto res = isl_map_domain_map(copy()); - return manage(res); + return isl::union_map(*this).domain_map_union_pw_multi_aff(); } isl::map map::domain_product(isl::map map2) const @@ -8334,34 +10737,31 @@ return manage(res); } -isl_size map::domain_tuple_dim() const +isl::union_map map::domain_product(const isl::union_map &umap2) const { - auto res = isl_map_domain_tuple_dim(get()); - return res; + return isl::union_map(*this).domain_product(umap2); } -isl::map map::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::map map::domain_product(const isl::basic_map &map2) const { - auto res = isl_map_drop_constraints_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return this->domain_product(isl::map(map2)); } -isl::map map::drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl_size map::domain_tuple_dim() const { - auto res = isl_map_drop_constraints_not_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + auto res = isl_map_domain_tuple_dim(get()); + return res; } -isl::map map::drop_unused_params() const +isl::id map::domain_tuple_id() const { - auto res = isl_map_drop_unused_params(copy()); + auto res = isl_map_get_domain_tuple_id(get()); return manage(res); } -isl::map map::eliminate(isl::dim type, unsigned int first, unsigned int n) const +isl::id map::get_domain_tuple_id() const { - auto res = isl_map_eliminate(copy(), static_cast(type), first, n); - return manage(res); + return domain_tuple_id(); } isl::map map::empty(isl::space space) @@ -8376,72 +10776,91 @@ return manage(res); } -isl::map map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const +isl::union_map map::eq_at(const isl::multi_union_pw_aff &mupa) const { - auto res = isl_map_equate(copy(), static_cast(type1), pos1, static_cast(type2), pos2); - return manage(res); + return isl::union_map(*this).eq_at(mupa); } -isl::map map::factor_domain() const +isl::map map::eq_at(const isl::aff &mpa) const { - auto res = isl_map_factor_domain(copy()); - return manage(res); + return this->eq_at(isl::multi_pw_aff(mpa)); } -isl::map map::factor_range() const +isl::map map::eq_at(const isl::multi_aff &mpa) const { - auto res = isl_map_factor_range(copy()); - return manage(res); + return this->eq_at(isl::multi_pw_aff(mpa)); } -int map::find_dim_by_id(isl::dim type, const isl::id &id) const +isl::map map::eq_at(const isl::pw_aff &mpa) const { - auto res = isl_map_find_dim_by_id(get(), static_cast(type), id.get()); - return res; + return this->eq_at(isl::multi_pw_aff(mpa)); } -int map::find_dim_by_name(isl::dim type, const std::string &name) const +isl::map map::eq_at(const isl::pw_multi_aff &mpa) const { - auto res = isl_map_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + return this->eq_at(isl::multi_pw_aff(mpa)); } -isl::map map::fix_si(isl::dim type, unsigned int pos, int value) const +isl::map map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const { - auto res = isl_map_fix_si(copy(), static_cast(type), pos, value); + auto res = isl_map_equate(copy(), static_cast(type1), pos1, static_cast(type2), pos2); return manage(res); } -isl::map map::fix_val(isl::dim type, unsigned int pos, isl::val v) const +bool map::every_map(const std::function &test) const { - auto res = isl_map_fix_val(copy(), static_cast(type), pos, v.release()); - return manage(res); + return isl::union_map(*this).every_map(test); +} + +isl::map map::extract_map(const isl::space &space) const +{ + return isl::union_map(*this).extract_map(space); } -isl::map map::fixed_power_val(isl::val exp) const +isl::map map::factor_domain() const { - auto res = isl_map_fixed_power_val(copy(), exp.release()); + auto res = isl_map_factor_domain(copy()); return manage(res); } -isl::map map::flat_domain_product(isl::map map2) const +isl::map map::factor_range() const { - auto res = isl_map_flat_domain_product(copy(), map2.release()); + auto res = isl_map_factor_range(copy()); return manage(res); } -isl::map map::flat_product(isl::map map2) const +isl::map map::fix_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_map_flat_product(copy(), map2.release()); + auto res = isl_map_fix_si(copy(), static_cast(type), pos, value); return manage(res); } +isl::union_map map::fixed_power(const isl::val &exp) const +{ + return isl::union_map(*this).fixed_power(exp); +} + +isl::union_map map::fixed_power(long exp) const +{ + return this->fixed_power(isl::val(ctx(), exp)); +} + isl::map map::flat_range_product(isl::map map2) const { auto res = isl_map_flat_range_product(copy(), map2.release()); return manage(res); } +isl::union_map map::flat_range_product(const isl::union_map &umap2) const +{ + return isl::union_map(*this).flat_range_product(umap2); +} + +isl::map map::flat_range_product(const isl::basic_map &map2) const +{ + return this->flat_range_product(isl::map(map2)); +} + isl::map map::flatten() const { auto res = isl_map_flatten(copy()); @@ -8466,18 +10885,34 @@ return manage(res); } -stat map::foreach_basic_map(const std::function &fn) const +isl::map map::floordiv_val(long d) const +{ + return this->floordiv_val(isl::val(ctx(), d)); +} + +void map::foreach_basic_map(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function 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(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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); - return manage(res); + return; +} + +void map::foreach_map(const std::function &fn) const +{ + return isl::union_map(*this).foreach_map(fn); } isl::map map::from_aff(isl::aff aff) @@ -8504,24 +10939,12 @@ return manage(res); } -isl::map map::from_multi_pw_aff(isl::multi_pw_aff mpa) -{ - auto res = isl_map_from_multi_pw_aff(mpa.release()); - return manage(res); -} - isl::map map::from_pw_aff(isl::pw_aff pwaff) { auto res = isl_map_from_pw_aff(pwaff.release()); return manage(res); } -isl::map map::from_pw_multi_aff(isl::pw_multi_aff pma) -{ - auto res = isl_map_from_pw_multi_aff(pma.release()); - return manage(res); -} - isl::map map::from_range(isl::set set) { auto res = isl_map_from_range(set.release()); @@ -8534,138 +10957,130 @@ return manage(res); } -isl::basic_map_list map::get_basic_map_list() const +isl::map map::gist(isl::map context) const { - auto res = isl_map_get_basic_map_list(get()); + auto res = isl_map_gist(copy(), context.release()); return manage(res); } -isl::id map::get_dim_id(isl::dim type, unsigned int pos) const +isl::union_map map::gist(const isl::union_map &context) const { - auto res = isl_map_get_dim_id(get(), static_cast(type), pos); - return manage(res); + return isl::union_map(*this).gist(context); } -std::string map::get_dim_name(isl::dim type, unsigned int pos) const +isl::map map::gist(const isl::basic_map &context) const { - auto res = isl_map_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + return this->gist(isl::map(context)); } -uint32_t map::get_hash() const +isl::map map::gist_domain(isl::set context) const { - auto res = isl_map_get_hash(get()); - return res; + auto res = isl_map_gist_domain(copy(), context.release()); + return manage(res); } -isl::fixed_box map::get_range_simple_fixed_box_hull() const +isl::union_map map::gist_domain(const isl::union_set &uset) const { - auto res = isl_map_get_range_simple_fixed_box_hull(get()); - return manage(res); + return isl::union_map(*this).gist_domain(uset); } -isl::space map::get_space() const +isl::map map::gist_domain(const isl::basic_set &context) const { - auto res = isl_map_get_space(get()); - return manage(res); + return this->gist_domain(isl::set(context)); } -isl::id map::get_tuple_id(isl::dim type) const +isl::map map::gist_domain(const isl::point &context) const { - auto res = isl_map_get_tuple_id(get(), static_cast(type)); + return this->gist_domain(isl::set(context)); +} + +isl::map map::gist_params(isl::set context) const +{ + auto res = isl_map_gist_params(copy(), context.release()); return manage(res); } -std::string map::get_tuple_name(isl::dim type) const +isl::union_map map::gist_range(const isl::union_set &uset) const { - auto res = isl_map_get_tuple_name(get(), static_cast(type)); - std::string tmp(res); - return tmp; + return isl::union_map(*this).gist_range(uset); } -isl::map map::gist(isl::map context) const +bool map::has_domain_tuple_id() const { - auto res = isl_map_gist(copy(), context.release()); - return manage(res); + auto res = isl_map_has_domain_tuple_id(get()); + return res; } -isl::map map::gist_basic_map(isl::basic_map context) const +bool map::has_equal_space(const isl::map &map2) const { - auto res = isl_map_gist_basic_map(copy(), context.release()); - return manage(res); + auto res = isl_map_has_equal_space(get(), map2.get()); + return res; } -isl::map map::gist_domain(isl::set context) const +bool map::has_range_tuple_id() const { - auto res = isl_map_gist_domain(copy(), context.release()); - return manage(res); + auto res = isl_map_has_range_tuple_id(get()); + return res; } -isl::map map::gist_params(isl::set context) const +bool map::has_tuple_id(isl::dim type) const { - auto res = isl_map_gist_params(copy(), context.release()); - return manage(res); + auto res = isl_map_has_tuple_id(get(), static_cast(type)); + return res; } -isl::map map::gist_range(isl::set context) const +bool map::has_tuple_name(isl::dim type) const { - auto res = isl_map_gist_range(copy(), context.release()); - return manage(res); + auto res = isl_map_has_tuple_name(get(), static_cast(type)); + return res; } -boolean map::has_dim_id(isl::dim type, unsigned int pos) const +isl::map map::identity(isl::space space) { - auto res = isl_map_has_dim_id(get(), static_cast(type), pos); + auto res = isl_map_identity(space.release()); return manage(res); } -boolean map::has_dim_name(isl::dim type, unsigned int pos) const +isl::map map::intersect(isl::map map2) const { - auto res = isl_map_has_dim_name(get(), static_cast(type), pos); + auto res = isl_map_intersect(copy(), map2.release()); return manage(res); } -boolean map::has_equal_space(const isl::map &map2) const +isl::union_map map::intersect(const isl::union_map &umap2) const { - auto res = isl_map_has_equal_space(get(), map2.get()); - return manage(res); + return isl::union_map(*this).intersect(umap2); } -boolean map::has_tuple_id(isl::dim type) const +isl::map map::intersect(const isl::basic_map &map2) const { - auto res = isl_map_has_tuple_id(get(), static_cast(type)); - return manage(res); + return this->intersect(isl::map(map2)); } -boolean map::has_tuple_name(isl::dim type) const +isl::map map::intersect_domain(isl::set set) const { - auto res = isl_map_has_tuple_name(get(), static_cast(type)); + auto res = isl_map_intersect_domain(copy(), set.release()); return manage(res); } -isl::map map::identity(isl::space space) +isl::union_map map::intersect_domain(const isl::space &space) const { - auto res = isl_map_identity(space.release()); - return manage(res); + return isl::union_map(*this).intersect_domain(space); } -isl::map map::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const +isl::union_map map::intersect_domain(const isl::union_set &uset) const { - auto res = isl_map_insert_dims(copy(), static_cast(type), pos, n); - return manage(res); + return isl::union_map(*this).intersect_domain(uset); } -isl::map map::intersect(isl::map map2) const +isl::map map::intersect_domain(const isl::basic_set &set) const { - auto res = isl_map_intersect(copy(), map2.release()); - return manage(res); + return this->intersect_domain(isl::set(set)); } -isl::map map::intersect_domain(isl::set set) const +isl::map map::intersect_domain(const isl::point &set) const { - auto res = isl_map_intersect_domain(copy(), set.release()); - return manage(res); + return this->intersect_domain(isl::set(set)); } isl::map map::intersect_domain_factor_domain(isl::map factor) const @@ -8674,12 +11089,32 @@ return manage(res); } +isl::union_map map::intersect_domain_factor_domain(const isl::union_map &factor) const +{ + return isl::union_map(*this).intersect_domain_factor_domain(factor); +} + +isl::map map::intersect_domain_factor_domain(const isl::basic_map &factor) const +{ + return this->intersect_domain_factor_domain(isl::map(factor)); +} + isl::map map::intersect_domain_factor_range(isl::map factor) const { auto res = isl_map_intersect_domain_factor_range(copy(), factor.release()); return manage(res); } +isl::union_map map::intersect_domain_factor_range(const isl::union_map &factor) const +{ + return isl::union_map(*this).intersect_domain_factor_range(factor); +} + +isl::map map::intersect_domain_factor_range(const isl::basic_map &factor) const +{ + return this->intersect_domain_factor_range(isl::map(factor)); +} + isl::map map::intersect_params(isl::set params) const { auto res = isl_map_intersect_params(copy(), params.release()); @@ -8692,135 +11127,178 @@ return manage(res); } +isl::union_map map::intersect_range(const isl::space &space) const +{ + return isl::union_map(*this).intersect_range(space); +} + +isl::union_map map::intersect_range(const isl::union_set &uset) const +{ + return isl::union_map(*this).intersect_range(uset); +} + +isl::map map::intersect_range(const isl::basic_set &set) const +{ + return this->intersect_range(isl::set(set)); +} + +isl::map map::intersect_range(const isl::point &set) const +{ + return this->intersect_range(isl::set(set)); +} + isl::map map::intersect_range_factor_domain(isl::map factor) const { auto res = isl_map_intersect_range_factor_domain(copy(), factor.release()); return manage(res); } +isl::union_map map::intersect_range_factor_domain(const isl::union_map &factor) const +{ + return isl::union_map(*this).intersect_range_factor_domain(factor); +} + +isl::map map::intersect_range_factor_domain(const isl::basic_map &factor) const +{ + return this->intersect_range_factor_domain(isl::map(factor)); +} + isl::map map::intersect_range_factor_range(isl::map factor) const { auto res = isl_map_intersect_range_factor_range(copy(), factor.release()); return manage(res); } -boolean map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_map map::intersect_range_factor_range(const isl::union_map &factor) const +{ + return isl::union_map(*this).intersect_range_factor_range(factor); +} + +isl::map map::intersect_range_factor_range(const isl::basic_map &factor) const +{ + return this->intersect_range_factor_range(isl::map(factor)); +} + +bool map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const { auto res = isl_map_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return res; } -boolean map::is_bijective() const +bool map::is_bijective() const { auto res = isl_map_is_bijective(get()); - return manage(res); + return res; } -boolean map::is_disjoint(const isl::map &map2) const +bool map::is_disjoint(const isl::map &map2) const { auto res = isl_map_is_disjoint(get(), map2.get()); - return manage(res); + return res; +} + +bool map::is_disjoint(const isl::union_map &umap2) const +{ + return isl::union_map(*this).is_disjoint(umap2); +} + +bool map::is_disjoint(const isl::basic_map &map2) const +{ + return this->is_disjoint(isl::map(map2)); } -boolean map::is_empty() const +bool map::is_empty() const { auto res = isl_map_is_empty(get()); - return manage(res); + return res; } -boolean map::is_equal(const isl::map &map2) const +bool map::is_equal(const isl::map &map2) const { auto res = isl_map_is_equal(get(), map2.get()); - return manage(res); + return res; } -boolean map::is_identity() const +bool map::is_equal(const isl::union_map &umap2) const { - auto res = isl_map_is_identity(get()); - return manage(res); + return isl::union_map(*this).is_equal(umap2); } -boolean map::is_injective() const +bool map::is_equal(const isl::basic_map &map2) const { - auto res = isl_map_is_injective(get()); - return manage(res); + return this->is_equal(isl::map(map2)); } -boolean map::is_product() const +bool map::is_injective() const { - auto res = isl_map_is_product(get()); - return manage(res); + auto res = isl_map_is_injective(get()); + return res; } -boolean map::is_single_valued() const +bool map::is_single_valued() const { auto res = isl_map_is_single_valued(get()); - return manage(res); + return res; } -boolean map::is_strict_subset(const isl::map &map2) const +bool map::is_strict_subset(const isl::map &map2) const { auto res = isl_map_is_strict_subset(get(), map2.get()); - return manage(res); + return res; } -boolean map::is_subset(const isl::map &map2) const +bool map::is_strict_subset(const isl::union_map &umap2) const { - auto res = isl_map_is_subset(get(), map2.get()); - return manage(res); + return isl::union_map(*this).is_strict_subset(umap2); } -int map::is_translation() const +bool map::is_strict_subset(const isl::basic_map &map2) const { - auto res = isl_map_is_translation(get()); - return res; + return this->is_strict_subset(isl::map(map2)); } -isl::map map::lex_ge(isl::space set_space) +bool map::is_subset(const isl::map &map2) const { - auto res = isl_map_lex_ge(set_space.release()); - return manage(res); + auto res = isl_map_is_subset(get(), map2.get()); + return res; } -isl::map map::lex_ge_at(isl::multi_pw_aff mpa) const +bool map::is_subset(const isl::union_map &umap2) const { - auto res = isl_map_lex_ge_at_multi_pw_aff(copy(), mpa.release()); - return manage(res); + return isl::union_map(*this).is_subset(umap2); } -isl::map map::lex_ge_first(isl::space space, unsigned int n) +bool map::is_subset(const isl::basic_map &map2) const { - auto res = isl_map_lex_ge_first(space.release(), n); - return manage(res); + return this->is_subset(isl::map(map2)); } -isl::map map::lex_ge_map(isl::map map2) const +bool map::isa_map() const { - auto res = isl_map_lex_ge_map(copy(), map2.release()); - return manage(res); + return isl::union_map(*this).isa_map(); } -isl::map map::lex_gt(isl::space set_space) +isl::map map::lex_ge(isl::space set_space) { - auto res = isl_map_lex_gt(set_space.release()); + auto res = isl_map_lex_ge(set_space.release()); return manage(res); } -isl::map map::lex_gt_at(isl::multi_pw_aff mpa) const +isl::map map::lex_ge_at(isl::multi_pw_aff mpa) const { - auto res = isl_map_lex_gt_at_multi_pw_aff(copy(), mpa.release()); + auto res = isl_map_lex_ge_at_multi_pw_aff(copy(), mpa.release()); return manage(res); } -isl::map map::lex_gt_first(isl::space space, unsigned int n) +isl::map map::lex_gt(isl::space set_space) { - auto res = isl_map_lex_gt_first(space.release(), n); + auto res = isl_map_lex_gt(set_space.release()); return manage(res); } -isl::map map::lex_gt_map(isl::map map2) const +isl::map map::lex_gt_at(isl::multi_pw_aff mpa) const { - auto res = isl_map_lex_gt_map(copy(), map2.release()); + auto res = isl_map_lex_gt_at_multi_pw_aff(copy(), mpa.release()); return manage(res); } @@ -8836,18 +11314,6 @@ return manage(res); } -isl::map map::lex_le_first(isl::space space, unsigned int n) -{ - auto res = isl_map_lex_le_first(space.release(), n); - return manage(res); -} - -isl::map map::lex_le_map(isl::map map2) const -{ - auto res = isl_map_lex_le_map(copy(), map2.release()); - return manage(res); -} - isl::map map::lex_lt(isl::space set_space) { auto res = isl_map_lex_lt(set_space.release()); @@ -8860,18 +11326,6 @@ return manage(res); } -isl::map map::lex_lt_first(isl::space space, unsigned int n) -{ - auto res = isl_map_lex_lt_first(space.release(), n); - return manage(res); -} - -isl::map map::lex_lt_map(isl::map map2) const -{ - auto res = isl_map_lex_lt_map(copy(), map2.release()); - return manage(res); -} - isl::map map::lexmax() const { auto res = isl_map_lexmax(copy()); @@ -8908,10 +11362,9 @@ return manage(res); } -isl::map map::lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const +isl::map_list map::map_list() const { - auto res = isl_map_lower_bound_val(copy(), static_cast(type), pos, value.release()); - return manage(res); + return isl::union_map(*this).map_list(); } isl::multi_pw_aff map::max_multi_pw_aff() const @@ -8938,42 +11391,6 @@ return res; } -isl::map map::nat_universe(isl::space space) -{ - auto res = isl_map_nat_universe(space.release()); - return manage(res); -} - -isl::map map::neg() const -{ - auto res = isl_map_neg(copy()); - return manage(res); -} - -isl::map map::oppose(isl::dim type1, int pos1, isl::dim type2, int pos2) const -{ - auto res = isl_map_oppose(copy(), static_cast(type1), pos1, static_cast(type2), pos2); - return manage(res); -} - -isl::map map::order_ge(isl::dim type1, int pos1, isl::dim type2, int pos2) const -{ - auto res = isl_map_order_ge(copy(), static_cast(type1), pos1, static_cast(type2), pos2); - return manage(res); -} - -isl::map map::order_gt(isl::dim type1, int pos1, isl::dim type2, int pos2) const -{ - auto res = isl_map_order_gt(copy(), static_cast(type1), pos1, static_cast(type2), pos2); - return manage(res); -} - -isl::map map::order_le(isl::dim type1, int pos1, isl::dim type2, int pos2) const -{ - auto res = isl_map_order_le(copy(), static_cast(type1), pos1, static_cast(type2), pos2); - return manage(res); -} - isl::map map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const { auto res = isl_map_order_lt(copy(), static_cast(type1), pos1, static_cast(type2), pos2); @@ -8982,50 +11399,7 @@ isl::set map::params() const { - auto res = isl_map_params(copy()); - return manage(res); -} - -isl::val map::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const -{ - auto res = isl_map_plain_get_val_if_fixed(get(), static_cast(type), pos); - return manage(res); -} - -boolean map::plain_is_empty() const -{ - auto res = isl_map_plain_is_empty(get()); - return manage(res); -} - -boolean map::plain_is_equal(const isl::map &map2) const -{ - auto res = isl_map_plain_is_equal(get(), map2.get()); - return manage(res); -} - -boolean map::plain_is_injective() const -{ - auto res = isl_map_plain_is_injective(get()); - return manage(res); -} - -boolean map::plain_is_single_valued() const -{ - auto res = isl_map_plain_is_single_valued(get()); - return manage(res); -} - -boolean map::plain_is_universe() const -{ - auto res = isl_map_plain_is_universe(get()); - return manage(res); -} - -isl::basic_map map::plain_unshifted_simple_hull() const -{ - auto res = isl_map_plain_unshifted_simple_hull(copy()); - return manage(res); + return isl::union_map(*this).params(); } isl::basic_map map::polyhedral_hull() const @@ -9052,6 +11426,11 @@ return manage(res); } +isl::union_map map::preimage_domain(const isl::union_pw_multi_aff &upma) const +{ + return isl::union_map(*this).preimage_domain(upma); +} + isl::map map::preimage_range(isl::multi_aff ma) const { auto res = isl_map_preimage_range_multi_aff(copy(), ma.release()); @@ -9064,33 +11443,42 @@ return manage(res); } +isl::union_map map::preimage_range(const isl::union_pw_multi_aff &upma) const +{ + return isl::union_map(*this).preimage_range(upma); +} + isl::map map::product(isl::map map2) const { auto res = isl_map_product(copy(), map2.release()); return manage(res); } -isl::map map::project_out(isl::dim type, unsigned int first, unsigned int n) const +isl::union_map map::product(const isl::union_map &umap2) const { - auto res = isl_map_project_out(copy(), static_cast(type), first, n); - return manage(res); + return isl::union_map(*this).product(umap2); } -isl::map map::project_out_all_params() const +isl::map map::product(const isl::basic_map &map2) const { - auto res = isl_map_project_out_all_params(copy()); + return this->product(isl::map(map2)); +} + +isl::map map::project_out(isl::dim type, unsigned int first, unsigned int n) const +{ + auto res = isl_map_project_out(copy(), static_cast(type), first, n); return manage(res); } -isl::set map::range() const +isl::map map::project_out_all_params() const { - auto res = isl_map_range(copy()); + auto res = isl_map_project_out_all_params(copy()); return manage(res); } -isl::map map::range_curry() const +isl::set map::range() const { - auto res = isl_map_range_curry(copy()); + auto res = isl_map_range(copy()); return manage(res); } @@ -9106,12 +11494,17 @@ return manage(res); } -boolean map::range_is_wrapping() const +isl::fixed_box map::range_lattice_tile() const { - auto res = isl_map_range_is_wrapping(get()); + auto res = isl_map_get_range_lattice_tile(get()); return manage(res); } +isl::fixed_box map::get_range_lattice_tile() const +{ + return range_lattice_tile(); +} + isl::map map::range_map() const { auto res = isl_map_range_map(copy()); @@ -9124,76 +11517,82 @@ return manage(res); } +isl::union_map map::range_product(const isl::union_map &umap2) const +{ + return isl::union_map(*this).range_product(umap2); +} + +isl::map map::range_product(const isl::basic_map &map2) const +{ + return this->range_product(isl::map(map2)); +} + isl::map map::range_reverse() const { auto res = isl_map_range_reverse(copy()); return manage(res); } -isl_size map::range_tuple_dim() const +isl::fixed_box map::range_simple_fixed_box_hull() const { - auto res = isl_map_range_tuple_dim(get()); - return res; + auto res = isl_map_get_range_simple_fixed_box_hull(get()); + return manage(res); } -isl::map map::remove_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::fixed_box map::get_range_simple_fixed_box_hull() const { - auto res = isl_map_remove_dims(copy(), static_cast(type), first, n); - return manage(res); + return range_simple_fixed_box_hull(); } -isl::map map::remove_divs() const +isl_size map::range_tuple_dim() const { - auto res = isl_map_remove_divs(copy()); - return manage(res); + auto res = isl_map_range_tuple_dim(get()); + return res; } -isl::map map::remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::id map::range_tuple_id() const { - auto res = isl_map_remove_divs_involving_dims(copy(), static_cast(type), first, n); + auto res = isl_map_get_range_tuple_id(get()); return manage(res); } -isl::map map::remove_redundancies() const +isl::id map::get_range_tuple_id() const { - auto res = isl_map_remove_redundancies(copy()); - return manage(res); + return range_tuple_id(); } -isl::map map::remove_unknown_divs() const +isl::map map::reverse() const { - auto res = isl_map_remove_unknown_divs(copy()); + auto res = isl_map_reverse(copy()); return manage(res); } -isl::map map::reset_tuple_id(isl::dim type) const +isl::basic_map map::sample() const { - auto res = isl_map_reset_tuple_id(copy(), static_cast(type)); + auto res = isl_map_sample(copy()); return manage(res); } -isl::map map::reset_user() const +isl::map map::set_domain_tuple(isl::id id) const { - auto res = isl_map_reset_user(copy()); + auto res = isl_map_set_domain_tuple_id(copy(), id.release()); return manage(res); } -isl::map map::reverse() const +isl::map map::set_domain_tuple(const std::string &id) const { - auto res = isl_map_reverse(copy()); - return manage(res); + return this->set_domain_tuple(isl::id(ctx(), id)); } -isl::basic_map map::sample() const +isl::map map::set_range_tuple(isl::id id) const { - auto res = isl_map_sample(copy()); + auto res = isl_map_set_range_tuple_id(copy(), id.release()); return manage(res); } -isl::map map::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::map map::set_range_tuple(const std::string &id) const { - auto res = isl_map_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } isl::map map::set_tuple_id(isl::dim type, isl::id id) const @@ -9202,34 +11601,46 @@ return manage(res); } -isl::map map::set_tuple_name(isl::dim type, const std::string &s) const +isl::map map::set_tuple_id(isl::dim type, const std::string &id) const { - auto res = isl_map_set_tuple_name(copy(), static_cast(type), s.c_str()); - return manage(res); + return this->set_tuple_id(type, isl::id(ctx(), id)); } -isl::basic_map map::simple_hull() const +isl::space map::space() const { - auto res = isl_map_simple_hull(copy()); + auto res = isl_map_get_space(get()); return manage(res); } +isl::space map::get_space() const +{ + return space(); +} + isl::map map::subtract(isl::map map2) const { auto res = isl_map_subtract(copy(), map2.release()); return manage(res); } -isl::map map::subtract_domain(isl::set dom) const +isl::union_map map::subtract(const isl::union_map &umap2) const { - auto res = isl_map_subtract_domain(copy(), dom.release()); - return manage(res); + return isl::union_map(*this).subtract(umap2); } -isl::map map::subtract_range(isl::set dom) const +isl::map map::subtract(const isl::basic_map &map2) const { - auto res = isl_map_subtract_range(copy(), dom.release()); - return manage(res); + return this->subtract(isl::map(map2)); +} + +isl::union_map map::subtract_domain(const isl::union_set &dom) const +{ + return isl::union_map(*this).subtract_domain(dom); +} + +isl::union_map map::subtract_range(const isl::union_set &dom) const +{ + return isl::union_map(*this).subtract_range(dom); } isl::map map::sum(isl::map map2) const @@ -9238,6 +11649,29 @@ return manage(res); } +isl::map_list map::to_list() const +{ + auto res = isl_map_to_list(copy()); + return manage(res); +} + +isl::union_map map::to_union_map() const +{ + auto res = isl_map_to_union_map(copy()); + return manage(res); +} + +isl::id map::tuple_id(isl::dim type) const +{ + auto res = isl_map_get_tuple_id(get(), static_cast(type)); + return manage(res); +} + +isl::id map::get_tuple_id(isl::dim type) const +{ + return tuple_id(type); +} + isl::map map::uncurry() const { auto res = isl_map_uncurry(copy()); @@ -9250,6 +11684,16 @@ return manage(res); } +isl::union_map map::unite(const isl::union_map &umap2) const +{ + return isl::union_map(*this).unite(umap2); +} + +isl::map map::unite(const isl::basic_map &map2) const +{ + return this->unite(isl::map(map2)); +} + isl::map map::universe(isl::space space) { auto res = isl_map_universe(space.release()); @@ -9262,12 +11706,6 @@ return manage(res); } -isl::basic_map map::unshifted_simple_hull_from_map_list(isl::map_list list) const -{ - auto res = isl_map_unshifted_simple_hull_from_map_list(copy(), list.release()); - return manage(res); -} - isl::map map::upper_bound(isl::multi_pw_aff upper) const { auto res = isl_map_upper_bound_multi_pw_aff(copy(), upper.release()); @@ -9280,12 +11718,6 @@ return manage(res); } -isl::map map::upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const -{ - auto res = isl_map_upper_bound_val(copy(), static_cast(type), pos, value.release()); - return manage(res); -} - isl::set map::wrap() const { auto res = isl_map_wrap(copy()); @@ -9298,6 +11730,14 @@ return manage(res); } +inline std::ostream &operator<<(std::ostream &os, const map &obj) +{ + char *str = isl_map_to_str(obj.get()); + os << str; + free(str); + return os; +} + // implementations for isl::map_list map_list manage(__isl_take isl_map_list *ptr) { return map_list(ptr); @@ -9316,10 +11756,26 @@ ptr = obj.copy(); } - map_list::map_list(__isl_take isl_map_list *ptr) : ptr(ptr) {} +map_list::map_list(isl::ctx ctx, int n) +{ + auto res = isl_map_list_alloc(ctx.release(), n); + ptr = res; +} + +map_list::map_list(isl::map el) +{ + auto res = isl_map_list_from_map(el.release()); + ptr = res; +} + +map_list::map_list(isl::ctx ctx, const std::string &str) +{ + auto res = isl_map_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} map_list &map_list::operator=(map_list obj) { std::swap(this->ptr, obj.ptr); @@ -9349,28 +11805,27 @@ return ptr == nullptr; } - isl::ctx map_list::ctx() const { return isl::ctx(isl_map_list_get_ctx(ptr)); } -void map_list::dump() const { - isl_map_list_dump(get()); -} - - isl::map_list map_list::add(isl::map el) const { auto res = isl_map_list_add(copy(), el.release()); return manage(res); } -isl::map_list map_list::alloc(isl::ctx ctx, int n) +isl::map map_list::at(int index) const { - auto res = isl_map_list_alloc(ctx.release(), n); + auto res = isl_map_list_get_at(get(), index); return manage(res); } +isl::map map_list::get_at(int index) const +{ + return at(index); +} + isl::map_list map_list::clear() const { auto res = isl_map_list_clear(copy()); @@ -9389,36 +11844,24 @@ return manage(res); } -stat map_list::foreach(const std::function &fn) const +void map_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat { auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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); - return manage(res); -} - -isl::map_list map_list::from_map(isl::map el) -{ - auto res = isl_map_list_from_map(el.release()); - return manage(res); -} - -isl::map map_list::get_at(int index) const -{ - auto res = isl_map_list_get_at(get(), index); - return manage(res); -} - -isl::map map_list::get_map(int index) const -{ - auto res = isl_map_list_get_map(get(), index); - return manage(res); + return; } isl::map_list map_list::insert(unsigned int pos, isl::map el) const @@ -9427,856 +11870,821 @@ return manage(res); } -isl_size map_list::n_map() const -{ - auto res = isl_map_list_n_map(get()); - return res; -} - -isl::map_list map_list::reverse() const -{ - auto res = isl_map_list_reverse(copy()); - return manage(res); -} - -isl::map_list map_list::set_map(int index, isl::map el) const -{ - auto res = isl_map_list_set_map(copy(), index, el.release()); - return manage(res); -} - isl_size map_list::size() const { auto res = isl_map_list_size(get()); return res; } -isl::map_list map_list::swap(unsigned int pos1, unsigned int pos2) const +inline std::ostream &operator<<(std::ostream &os, const map_list &obj) { - auto res = isl_map_list_swap(copy(), pos1, pos2); - return manage(res); + char *str = isl_map_list_to_str(obj.get()); + os << str; + free(str); + return os; } -// implementations for isl::mat -mat manage(__isl_take isl_mat *ptr) { - return mat(ptr); +// implementations for isl::multi_aff +multi_aff manage(__isl_take isl_multi_aff *ptr) { + return multi_aff(ptr); } -mat manage_copy(__isl_keep isl_mat *ptr) { - ptr = isl_mat_copy(ptr); - return mat(ptr); +multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) { + ptr = isl_multi_aff_copy(ptr); + return multi_aff(ptr); } -mat::mat() +multi_aff::multi_aff() : ptr(nullptr) {} -mat::mat(const mat &obj) +multi_aff::multi_aff(const multi_aff &obj) : ptr(nullptr) { ptr = obj.copy(); } - -mat::mat(__isl_take isl_mat *ptr) +multi_aff::multi_aff(__isl_take isl_multi_aff *ptr) : ptr(ptr) {} +multi_aff::multi_aff(isl::aff aff) +{ + auto res = isl_multi_aff_from_aff(aff.release()); + ptr = res; +} + +multi_aff::multi_aff(isl::space space, isl::aff_list list) +{ + auto res = isl_multi_aff_from_aff_list(space.release(), list.release()); + ptr = res; +} + +multi_aff::multi_aff(isl::ctx ctx, const std::string &str) +{ + auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} -mat &mat::operator=(mat obj) { +multi_aff &multi_aff::operator=(multi_aff obj) { std::swap(this->ptr, obj.ptr); return *this; } -mat::~mat() { +multi_aff::~multi_aff() { if (ptr) - isl_mat_free(ptr); + isl_multi_aff_free(ptr); } -__isl_give isl_mat *mat::copy() const & { - return isl_mat_copy(ptr); +__isl_give isl_multi_aff *multi_aff::copy() const & { + return isl_multi_aff_copy(ptr); } -__isl_keep isl_mat *mat::get() const { +__isl_keep isl_multi_aff *multi_aff::get() const { return ptr; } -__isl_give isl_mat *mat::release() { - isl_mat *tmp = ptr; +__isl_give isl_multi_aff *multi_aff::release() { + isl_multi_aff *tmp = ptr; ptr = nullptr; return tmp; } -bool mat::is_null() const { +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::ctx mat::ctx() const { - return isl::ctx(isl_mat_get_ctx(ptr)); +isl::multi_aff multi_aff::add(isl::multi_aff multi2) const +{ + auto res = isl_multi_aff_add(copy(), multi2.release()); + return manage(res); } -void mat::dump() const { - isl_mat_dump(get()); +isl::multi_pw_aff multi_aff::add(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_multi_aff(*this).add(multi2); } +isl::multi_union_pw_aff multi_aff::add(const isl::multi_union_pw_aff &multi2) const +{ + return isl::pw_multi_aff(*this).add(multi2); +} -isl::mat mat::add_rows(unsigned int n) const +isl::pw_multi_aff multi_aff::add(const isl::pw_multi_aff &pma2) const { - auto res = isl_mat_add_rows(copy(), n); - return manage(res); + return isl::pw_multi_aff(*this).add(pma2); } -isl::mat mat::add_zero_cols(unsigned int n) const +isl::union_pw_multi_aff multi_aff::add(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_mat_add_zero_cols(copy(), n); - return manage(res); + return isl::pw_multi_aff(*this).add(upma2); } -isl::mat mat::add_zero_rows(unsigned int n) const +isl::multi_aff multi_aff::add(const isl::aff &multi2) const { - auto res = isl_mat_add_zero_rows(copy(), n); - return manage(res); + return this->add(isl::multi_aff(multi2)); } -isl::mat mat::aff_direct_sum(isl::mat right) const +isl::multi_aff multi_aff::add_constant(isl::multi_val mv) const { - auto res = isl_mat_aff_direct_sum(copy(), right.release()); + auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release()); return manage(res); } -isl::mat mat::alloc(isl::ctx ctx, unsigned int n_row, unsigned int n_col) +isl::multi_aff multi_aff::add_constant(isl::val v) const { - auto res = isl_mat_alloc(ctx.release(), n_row, n_col); + auto res = isl_multi_aff_add_constant_val(copy(), v.release()); return manage(res); } -isl_size mat::cols() const +isl::multi_aff multi_aff::add_constant(long v) const { - auto res = isl_mat_cols(get()); - return res; + return this->add_constant(isl::val(ctx(), v)); } -isl::mat mat::concat(isl::mat bot) const +isl::union_pw_multi_aff multi_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const { - auto res = isl_mat_concat(copy(), bot.release()); - return manage(res); + return isl::pw_multi_aff(*this).add_pw_multi_aff(pma); } -isl::mat mat::diagonal(isl::mat mat2) const +isl::union_pw_multi_aff multi_aff::apply(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_mat_diagonal(copy(), mat2.release()); - return manage(res); + return isl::pw_multi_aff(*this).apply(upma2); } -isl::mat mat::drop_cols(unsigned int col, unsigned int n) const +isl::map multi_aff::as_map() const { - auto res = isl_mat_drop_cols(copy(), col, n); + auto res = isl_multi_aff_as_map(copy()); return manage(res); } -isl::mat mat::drop_rows(unsigned int row, unsigned int n) const +isl::multi_aff multi_aff::as_multi_aff() const { - auto res = isl_mat_drop_rows(copy(), row, n); - return manage(res); + return isl::pw_multi_aff(*this).as_multi_aff(); } -isl::mat mat::from_row_vec(isl::vec vec) +isl::multi_union_pw_aff multi_aff::as_multi_union_pw_aff() const { - auto res = isl_mat_from_row_vec(vec.release()); - return manage(res); + return isl::pw_multi_aff(*this).as_multi_union_pw_aff(); } -isl::val mat::get_element_val(int row, int col) const +isl::pw_multi_aff multi_aff::as_pw_multi_aff() const { - auto res = isl_mat_get_element_val(get(), row, col); - return manage(res); + return isl::pw_multi_aff(*this).as_pw_multi_aff(); } -boolean mat::has_linearly_independent_rows(const isl::mat &mat2) const +isl::set multi_aff::as_set() const { - auto res = isl_mat_has_linearly_independent_rows(get(), mat2.get()); + auto res = isl_multi_aff_as_set(copy()); return manage(res); } -int mat::initial_non_zero_cols() const +isl::union_map multi_aff::as_union_map() const { - auto res = isl_mat_initial_non_zero_cols(get()); - return res; + return isl::pw_multi_aff(*this).as_union_map(); } -isl::mat mat::insert_cols(unsigned int col, unsigned int n) const +isl::aff multi_aff::at(int pos) const { - auto res = isl_mat_insert_cols(copy(), col, n); + auto res = isl_multi_aff_get_at(get(), pos); return manage(res); } -isl::mat mat::insert_rows(unsigned int row, unsigned int n) const +isl::aff multi_aff::get_at(int pos) const { - auto res = isl_mat_insert_rows(copy(), row, n); - return manage(res); + return at(pos); } -isl::mat mat::insert_zero_cols(unsigned int first, unsigned int n) const +isl::basic_set multi_aff::bind(isl::multi_id tuple) const { - auto res = isl_mat_insert_zero_cols(copy(), first, n); + auto res = isl_multi_aff_bind(copy(), tuple.release()); return manage(res); } -isl::mat mat::insert_zero_rows(unsigned int row, unsigned int n) const +isl::multi_aff multi_aff::bind_domain(isl::multi_id tuple) const { - auto res = isl_mat_insert_zero_rows(copy(), row, n); + auto res = isl_multi_aff_bind_domain(copy(), tuple.release()); return manage(res); } -isl::mat mat::inverse_product(isl::mat right) const +isl::multi_aff multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const { - auto res = isl_mat_inverse_product(copy(), right.release()); + auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release()); return manage(res); } -boolean mat::is_equal(const isl::mat &mat2) const +isl::pw_multi_aff multi_aff::coalesce() const { - auto res = isl_mat_is_equal(get(), mat2.get()); - return manage(res); + return isl::pw_multi_aff(*this).coalesce(); } -isl::mat mat::lin_to_aff() const +isl::multi_val multi_aff::constant_multi_val() const { - auto res = isl_mat_lin_to_aff(copy()); + auto res = isl_multi_aff_get_constant_multi_val(get()); return manage(res); } -isl::mat mat::move_cols(unsigned int dst_col, unsigned int src_col, unsigned int n) const +isl::multi_val multi_aff::get_constant_multi_val() const { - auto res = isl_mat_move_cols(copy(), dst_col, src_col, n); - return manage(res); + return constant_multi_val(); } -isl::mat mat::normalize() const +isl_size multi_aff::dim(isl::dim type) const { - auto res = isl_mat_normalize(copy()); - return manage(res); + auto res = isl_multi_aff_dim(get(), static_cast(type)); + return res; } -isl::mat mat::normalize_row(int row) const +isl::set multi_aff::domain() const { - auto res = isl_mat_normalize_row(copy(), row); - return manage(res); + return isl::pw_multi_aff(*this).domain(); } -isl::mat mat::product(isl::mat right) const +isl::multi_aff multi_aff::domain_map(isl::space space) { - auto res = isl_mat_product(copy(), right.release()); + auto res = isl_multi_aff_domain_map(space.release()); return manage(res); } -isl_size mat::rank() const +isl::pw_multi_aff multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_mat_rank(get()); - return res; + return isl::pw_multi_aff(*this).drop_dims(type, first, n); } -isl::mat mat::right_inverse() const +isl::pw_multi_aff multi_aff::extract_pw_multi_aff(const isl::space &space) const { - auto res = isl_mat_right_inverse(copy()); - return manage(res); + return isl::pw_multi_aff(*this).extract_pw_multi_aff(space); } -isl::mat mat::right_kernel() const +isl::multi_aff multi_aff::flat_range_product(isl::multi_aff multi2) const { - auto res = isl_mat_right_kernel(copy()); + auto res = isl_multi_aff_flat_range_product(copy(), multi2.release()); return manage(res); } -isl::mat mat::row_basis() const +isl::multi_pw_aff multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const { - auto res = isl_mat_row_basis(copy()); - return manage(res); + return isl::pw_multi_aff(*this).flat_range_product(multi2); } -isl::mat mat::row_basis_extension(isl::mat mat2) const +isl::multi_union_pw_aff multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_mat_row_basis_extension(copy(), mat2.release()); - return manage(res); + return isl::pw_multi_aff(*this).flat_range_product(multi2); } -isl_size mat::rows() const +isl::pw_multi_aff multi_aff::flat_range_product(const isl::pw_multi_aff &pma2) const { - auto res = isl_mat_rows(get()); - return res; + return isl::pw_multi_aff(*this).flat_range_product(pma2); } -isl::mat mat::set_element_si(int row, int col, int v) const +isl::union_pw_multi_aff multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_mat_set_element_si(copy(), row, col, v); - return manage(res); + return isl::pw_multi_aff(*this).flat_range_product(upma2); } -isl::mat mat::set_element_val(int row, int col, isl::val v) const +isl::multi_aff multi_aff::flat_range_product(const isl::aff &multi2) const { - auto res = isl_mat_set_element_val(copy(), row, col, v.release()); - return manage(res); + return this->flat_range_product(isl::multi_aff(multi2)); } -isl::mat mat::swap_cols(unsigned int i, unsigned int j) const +isl::multi_aff multi_aff::floor() const { - auto res = isl_mat_swap_cols(copy(), i, j); + auto res = isl_multi_aff_floor(copy()); return manage(res); } -isl::mat mat::swap_rows(unsigned int i, unsigned int j) const +void multi_aff::foreach_piece(const std::function &fn) const +{ + return isl::pw_multi_aff(*this).foreach_piece(fn); +} + +isl::multi_aff multi_aff::gist(isl::set context) const { - auto res = isl_mat_swap_rows(copy(), i, j); + auto res = isl_multi_aff_gist(copy(), context.release()); return manage(res); } -isl::mat mat::transpose() const +isl::union_pw_multi_aff multi_aff::gist(const isl::union_set &context) const +{ + return isl::pw_multi_aff(*this).gist(context); +} + +isl::multi_aff multi_aff::gist(const isl::basic_set &context) const +{ + return this->gist(isl::set(context)); +} + +isl::multi_aff multi_aff::gist(const isl::point &context) const +{ + return this->gist(isl::set(context)); +} + +bool multi_aff::has_range_tuple_id() const +{ + auto res = isl_multi_aff_has_range_tuple_id(get()); + return res; +} + +isl::multi_aff multi_aff::identity(isl::space space) { - auto res = isl_mat_transpose(copy()); + auto res = isl_multi_aff_identity(space.release()); return manage(res); } -isl::mat mat::unimodular_complete(int row) const +isl::multi_aff multi_aff::identity() const { - auto res = isl_mat_unimodular_complete(copy(), row); + auto res = isl_multi_aff_identity_multi_aff(copy()); return manage(res); } -isl::mat mat::vec_concat(isl::vec bot) const +isl::multi_aff multi_aff::identity_on_domain(isl::space space) { - auto res = isl_mat_vec_concat(copy(), bot.release()); + auto res = isl_multi_aff_identity_on_domain_space(space.release()); return manage(res); } -isl::vec mat::vec_inverse_product(isl::vec vec) const +isl::multi_aff multi_aff::insert_domain(isl::space domain) const { - auto res = isl_mat_vec_inverse_product(copy(), vec.release()); + auto res = isl_multi_aff_insert_domain(copy(), domain.release()); return manage(res); } -isl::vec mat::vec_product(isl::vec vec) const +isl::pw_multi_aff multi_aff::intersect_domain(const isl::set &set) const +{ + return isl::pw_multi_aff(*this).intersect_domain(set); +} + +isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::space &space) const { - auto res = isl_mat_vec_product(copy(), vec.release()); - return manage(res); + return isl::pw_multi_aff(*this).intersect_domain(space); } -// implementations for isl::multi_aff -multi_aff manage(__isl_take isl_multi_aff *ptr) { - return multi_aff(ptr); -} -multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) { - ptr = isl_multi_aff_copy(ptr); - return multi_aff(ptr); +isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::union_set &uset) const +{ + return isl::pw_multi_aff(*this).intersect_domain(uset); } -multi_aff::multi_aff() - : ptr(nullptr) {} - -multi_aff::multi_aff(const multi_aff &obj) - : ptr(nullptr) +isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const { - ptr = obj.copy(); + return isl::pw_multi_aff(*this).intersect_domain_wrapped_domain(uset); } - -multi_aff::multi_aff(__isl_take isl_multi_aff *ptr) - : ptr(ptr) {} - -multi_aff::multi_aff(isl::aff aff) +isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const { - auto res = isl_multi_aff_from_aff(aff.release()); - ptr = res; + return isl::pw_multi_aff(*this).intersect_domain_wrapped_range(uset); } -multi_aff::multi_aff(isl::space space, isl::aff_list list) + +isl::pw_multi_aff multi_aff::intersect_params(const isl::set &set) const { - auto res = isl_multi_aff_from_aff_list(space.release(), list.release()); - ptr = res; + return isl::pw_multi_aff(*this).intersect_params(set); } -multi_aff::multi_aff(isl::ctx ctx, const std::string &str) + +bool multi_aff::involves_locals() const { - auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str()); - ptr = res; + auto res = isl_multi_aff_involves_locals(get()); + return res; } -multi_aff &multi_aff::operator=(multi_aff obj) { - std::swap(this->ptr, obj.ptr); - return *this; +bool multi_aff::involves_nan() const +{ + auto res = isl_multi_aff_involves_nan(get()); + return res; } -multi_aff::~multi_aff() { - if (ptr) - isl_multi_aff_free(ptr); +bool multi_aff::involves_param(const isl::id &id) const +{ + return isl::pw_multi_aff(*this).involves_param(id); } -__isl_give isl_multi_aff *multi_aff::copy() const & { - return isl_multi_aff_copy(ptr); +bool multi_aff::involves_param(const std::string &id) const +{ + return this->involves_param(isl::id(ctx(), id)); } -__isl_keep isl_multi_aff *multi_aff::get() const { - return ptr; +bool multi_aff::involves_param(const isl::id_list &list) const +{ + return isl::pw_multi_aff(*this).involves_param(list); } -__isl_give isl_multi_aff *multi_aff::release() { - isl_multi_aff *tmp = ptr; - ptr = nullptr; - return tmp; +bool multi_aff::isa_multi_aff() const +{ + return isl::pw_multi_aff(*this).isa_multi_aff(); } -bool multi_aff::is_null() const { - return ptr == nullptr; +bool multi_aff::isa_pw_multi_aff() const +{ + return isl::pw_multi_aff(*this).isa_pw_multi_aff(); } - -isl::ctx multi_aff::ctx() const { - return isl::ctx(isl_multi_aff_get_ctx(ptr)); +isl::aff_list multi_aff::list() const +{ + auto res = isl_multi_aff_get_list(get()); + return manage(res); } -void multi_aff::dump() const { - isl_multi_aff_dump(get()); +isl::aff_list multi_aff::get_list() const +{ + return list(); } - -isl::multi_aff multi_aff::add(isl::multi_aff multi2) const +isl::multi_pw_aff multi_aff::max(const isl::multi_pw_aff &multi2) const { - auto res = isl_multi_aff_add(copy(), multi2.release()); - return manage(res); + return isl::pw_multi_aff(*this).max(multi2); } -isl::multi_aff multi_aff::add_constant(isl::multi_val mv) const +isl::multi_val multi_aff::max_multi_val() const { - auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release()); - return manage(res); + return isl::pw_multi_aff(*this).max_multi_val(); } -isl::multi_aff multi_aff::add_constant(isl::val v) const +isl::multi_pw_aff multi_aff::min(const isl::multi_pw_aff &multi2) const { - auto res = isl_multi_aff_add_constant_val(copy(), v.release()); - return manage(res); + return isl::pw_multi_aff(*this).min(multi2); } -isl::multi_aff multi_aff::add_dims(isl::dim type, unsigned int n) const +isl::multi_val multi_aff::min_multi_val() const { - auto res = isl_multi_aff_add_dims(copy(), static_cast(type), n); - return manage(res); + return isl::pw_multi_aff(*this).min_multi_val(); } -isl::multi_aff multi_aff::align_params(isl::space model) const +isl::multi_aff multi_aff::multi_val_on_domain(isl::space space, isl::multi_val mv) { - auto res = isl_multi_aff_align_params(copy(), model.release()); + auto res = isl_multi_aff_multi_val_on_domain_space(space.release(), mv.release()); return manage(res); } -isl::basic_set multi_aff::bind(isl::multi_id tuple) const +isl_size multi_aff::n_piece() const { - auto res = isl_multi_aff_bind(copy(), tuple.release()); - return manage(res); + return isl::pw_multi_aff(*this).n_piece(); } -isl::multi_aff multi_aff::bind_domain(isl::multi_id tuple) const +isl::multi_aff multi_aff::neg() const { - auto res = isl_multi_aff_bind_domain(copy(), tuple.release()); + auto res = isl_multi_aff_neg(copy()); return manage(res); } -isl::multi_aff multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const +bool multi_aff::plain_is_empty() const { - auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release()); - return manage(res); + return isl::pw_multi_aff(*this).plain_is_empty(); } -isl_size multi_aff::dim(isl::dim type) const +bool multi_aff::plain_is_equal(const isl::multi_aff &multi2) const { - auto res = isl_multi_aff_dim(get(), static_cast(type)); + auto res = isl_multi_aff_plain_is_equal(get(), multi2.get()); return res; } -isl::multi_aff multi_aff::domain_map(isl::space space) +bool multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const { - auto res = isl_multi_aff_domain_map(space.release()); - return manage(res); + return isl::pw_multi_aff(*this).plain_is_equal(multi2); } -isl::multi_aff multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +bool multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_multi_aff_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::pw_multi_aff(*this).plain_is_equal(multi2); } -isl::multi_aff multi_aff::factor_range() const +bool multi_aff::plain_is_equal(const isl::aff &multi2) const { - auto res = isl_multi_aff_factor_range(copy()); - return manage(res); + return this->plain_is_equal(isl::multi_aff(multi2)); } -int multi_aff::find_dim_by_id(isl::dim type, const isl::id &id) const +isl::pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const { - auto res = isl_multi_aff_find_dim_by_id(get(), static_cast(type), id.get()); - return res; + return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2); } -int multi_aff::find_dim_by_name(isl::dim type, const std::string &name) const +isl::union_pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_multi_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2); } -isl::multi_aff multi_aff::flat_range_product(isl::multi_aff multi2) const +isl::multi_aff multi_aff::product(isl::multi_aff multi2) const { - auto res = isl_multi_aff_flat_range_product(copy(), multi2.release()); + auto res = isl_multi_aff_product(copy(), multi2.release()); return manage(res); } -isl::multi_aff multi_aff::flatten_domain() const +isl::multi_pw_aff multi_aff::product(const isl::multi_pw_aff &multi2) const { - auto res = isl_multi_aff_flatten_domain(copy()); - return manage(res); + return isl::pw_multi_aff(*this).product(multi2); } -isl::multi_aff multi_aff::flatten_range() const +isl::pw_multi_aff multi_aff::product(const isl::pw_multi_aff &pma2) const { - auto res = isl_multi_aff_flatten_range(copy()); - return manage(res); + return isl::pw_multi_aff(*this).product(pma2); } -isl::multi_aff multi_aff::floor() const +isl::multi_aff multi_aff::product(const isl::aff &multi2) const { - auto res = isl_multi_aff_floor(copy()); - return manage(res); + return this->product(isl::multi_aff(multi2)); } -isl::multi_aff multi_aff::from_range() const +isl::multi_aff multi_aff::pullback(isl::multi_aff ma2) const { - auto res = isl_multi_aff_from_range(copy()); + auto res = isl_multi_aff_pullback_multi_aff(copy(), ma2.release()); return manage(res); } -isl::aff multi_aff::get_aff(int pos) const +isl::multi_pw_aff multi_aff::pullback(const isl::multi_pw_aff &mpa2) const { - auto res = isl_multi_aff_get_aff(get(), pos); - return manage(res); + return isl::pw_multi_aff(*this).pullback(mpa2); } -isl::aff multi_aff::get_at(int pos) const +isl::pw_multi_aff multi_aff::pullback(const isl::pw_multi_aff &pma2) const { - auto res = isl_multi_aff_get_at(get(), pos); - return manage(res); + return isl::pw_multi_aff(*this).pullback(pma2); } -isl::multi_val multi_aff::get_constant_multi_val() const +isl::union_pw_multi_aff multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_multi_aff_get_constant_multi_val(get()); - return manage(res); + return isl::pw_multi_aff(*this).pullback(upma2); } -isl::id multi_aff::get_dim_id(isl::dim type, unsigned int pos) const +isl::multi_aff multi_aff::pullback(const isl::aff &ma2) const { - auto res = isl_multi_aff_get_dim_id(get(), static_cast(type), pos); - return manage(res); + return this->pullback(isl::multi_aff(ma2)); } -isl::space multi_aff::get_domain_space() const +isl::pw_multi_aff_list multi_aff::pw_multi_aff_list() const { - auto res = isl_multi_aff_get_domain_space(get()); - return manage(res); + return isl::pw_multi_aff(*this).pw_multi_aff_list(); } -isl::aff_list multi_aff::get_list() const +isl::pw_multi_aff multi_aff::range_factor_domain() const { - auto res = isl_multi_aff_get_list(get()); - return manage(res); + return isl::pw_multi_aff(*this).range_factor_domain(); } -isl::space multi_aff::get_space() const +isl::pw_multi_aff multi_aff::range_factor_range() const { - auto res = isl_multi_aff_get_space(get()); + return isl::pw_multi_aff(*this).range_factor_range(); +} + +isl::multi_aff multi_aff::range_map(isl::space space) +{ + auto res = isl_multi_aff_range_map(space.release()); return manage(res); } -isl::id multi_aff::get_tuple_id(isl::dim type) const +isl::multi_aff multi_aff::range_product(isl::multi_aff multi2) const { - auto res = isl_multi_aff_get_tuple_id(get(), static_cast(type)); + auto res = isl_multi_aff_range_product(copy(), multi2.release()); return manage(res); } -std::string multi_aff::get_tuple_name(isl::dim type) const +isl::multi_pw_aff multi_aff::range_product(const isl::multi_pw_aff &multi2) const { - auto res = isl_multi_aff_get_tuple_name(get(), static_cast(type)); - std::string tmp(res); - return tmp; + return isl::pw_multi_aff(*this).range_product(multi2); } -isl::multi_aff multi_aff::gist(isl::set context) const +isl::multi_union_pw_aff multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_multi_aff_gist(copy(), context.release()); - return manage(res); + return isl::pw_multi_aff(*this).range_product(multi2); } -isl::multi_aff multi_aff::gist_params(isl::set context) const +isl::pw_multi_aff multi_aff::range_product(const isl::pw_multi_aff &pma2) const { - auto res = isl_multi_aff_gist_params(copy(), context.release()); - return manage(res); + return isl::pw_multi_aff(*this).range_product(pma2); } -boolean multi_aff::has_tuple_id(isl::dim type) const +isl::union_pw_multi_aff multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_multi_aff_has_tuple_id(get(), static_cast(type)); - return manage(res); + return isl::pw_multi_aff(*this).range_product(upma2); } -isl::multi_aff multi_aff::identity(isl::space space) +isl::multi_aff multi_aff::range_product(const isl::aff &multi2) const { - auto res = isl_multi_aff_identity(space.release()); - return manage(res); + return this->range_product(isl::multi_aff(multi2)); } -isl::multi_aff multi_aff::identity() const +isl::id multi_aff::range_tuple_id() const { - auto res = isl_multi_aff_identity_multi_aff(copy()); + auto res = isl_multi_aff_get_range_tuple_id(get()); return manage(res); } -isl::multi_aff multi_aff::identity_on_domain(isl::space space) +isl::id multi_aff::get_range_tuple_id() const { - auto res = isl_multi_aff_identity_on_domain_space(space.release()); - return manage(res); + return range_tuple_id(); } -isl::multi_aff multi_aff::insert_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::multi_aff multi_aff::reset_range_tuple_id() const { - auto res = isl_multi_aff_insert_dims(copy(), static_cast(type), first, n); + auto res = isl_multi_aff_reset_range_tuple_id(copy()); return manage(res); } -isl::multi_aff multi_aff::insert_domain(isl::space domain) const +isl::multi_aff multi_aff::reset_tuple_id(isl::dim type) const { - auto res = isl_multi_aff_insert_domain(copy(), domain.release()); + auto res = isl_multi_aff_reset_tuple_id(copy(), static_cast(type)); return manage(res); } -boolean multi_aff::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::multi_aff multi_aff::scale(isl::multi_val mv) const { - auto res = isl_multi_aff_involves_dims(get(), static_cast(type), first, n); + auto res = isl_multi_aff_scale_multi_val(copy(), mv.release()); return manage(res); } -boolean multi_aff::involves_locals() const +isl::multi_aff multi_aff::scale(isl::val v) const { - auto res = isl_multi_aff_involves_locals(get()); + auto res = isl_multi_aff_scale_val(copy(), v.release()); return manage(res); } -boolean multi_aff::involves_nan() const +isl::multi_aff multi_aff::scale(long v) const { - auto res = isl_multi_aff_involves_nan(get()); - return manage(res); + return this->scale(isl::val(ctx(), v)); } -isl::set multi_aff::lex_ge_set(isl::multi_aff ma2) const +isl::multi_aff multi_aff::scale_down(isl::multi_val mv) const { - auto res = isl_multi_aff_lex_ge_set(copy(), ma2.release()); + auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release()); return manage(res); } -isl::set multi_aff::lex_gt_set(isl::multi_aff ma2) const +isl::multi_aff multi_aff::scale_down(isl::val v) const { - auto res = isl_multi_aff_lex_gt_set(copy(), ma2.release()); + auto res = isl_multi_aff_scale_down_val(copy(), v.release()); return manage(res); } -isl::set multi_aff::lex_le_set(isl::multi_aff ma2) const +isl::multi_aff multi_aff::scale_down(long v) const { - auto res = isl_multi_aff_lex_le_set(copy(), ma2.release()); - return manage(res); + return this->scale_down(isl::val(ctx(), v)); } -isl::set multi_aff::lex_lt_set(isl::multi_aff ma2) const +isl::multi_aff multi_aff::set_aff(int pos, isl::aff el) const { - auto res = isl_multi_aff_lex_lt_set(copy(), ma2.release()); + auto res = isl_multi_aff_set_aff(copy(), pos, el.release()); return manage(res); } -isl::multi_aff multi_aff::mod_multi_val(isl::multi_val mv) const +isl::multi_aff multi_aff::set_at(int pos, isl::aff el) const { - auto res = isl_multi_aff_mod_multi_val(copy(), mv.release()); + auto res = isl_multi_aff_set_at(copy(), pos, el.release()); return manage(res); } -isl::multi_aff multi_aff::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const +isl::multi_pw_aff multi_aff::set_at(int pos, const isl::pw_aff &el) const { - auto res = isl_multi_aff_move_dims(copy(), static_cast(dst_type), dst_pos, static_cast(src_type), src_pos, n); - return manage(res); + return isl::pw_multi_aff(*this).set_at(pos, el); } -isl::multi_aff multi_aff::multi_val_on_space(isl::space space, isl::multi_val mv) +isl::multi_union_pw_aff multi_aff::set_at(int pos, const isl::union_pw_aff &el) const { - auto res = isl_multi_aff_multi_val_on_space(space.release(), mv.release()); - return manage(res); + return isl::pw_multi_aff(*this).set_at(pos, el); } -isl::multi_aff multi_aff::neg() const +isl::multi_pw_aff multi_aff::set_pw_aff(int pos, const isl::pw_aff &el) const { - auto res = isl_multi_aff_neg(copy()); - return manage(res); + return isl::pw_multi_aff(*this).set_pw_aff(pos, el); } -int multi_aff::plain_cmp(const isl::multi_aff &multi2) const +isl::pw_multi_aff multi_aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const { - auto res = isl_multi_aff_plain_cmp(get(), multi2.get()); - return res; + return isl::pw_multi_aff(*this).set_pw_aff(pos, pa); } -boolean multi_aff::plain_is_equal(const isl::multi_aff &multi2) const +isl::multi_aff multi_aff::set_range_tuple(isl::id id) const { - auto res = isl_multi_aff_plain_is_equal(get(), multi2.get()); + auto res = isl_multi_aff_set_range_tuple_id(copy(), id.release()); return manage(res); } -isl::multi_aff multi_aff::product(isl::multi_aff multi2) const +isl::multi_aff multi_aff::set_range_tuple(const std::string &id) const { - auto res = isl_multi_aff_product(copy(), multi2.release()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } -isl::multi_aff multi_aff::project_domain_on_params() const +isl::multi_union_pw_aff multi_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const { - auto res = isl_multi_aff_project_domain_on_params(copy()); - return manage(res); + return isl::pw_multi_aff(*this).set_union_pw_aff(pos, el); } -isl::multi_aff multi_aff::project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n) +isl_size multi_aff::size() const { - auto res = isl_multi_aff_project_out_map(space.release(), static_cast(type), first, n); - return manage(res); + auto res = isl_multi_aff_size(get()); + return res; } -isl::multi_aff multi_aff::pullback(isl::multi_aff ma2) const +isl::space multi_aff::space() const { - auto res = isl_multi_aff_pullback_multi_aff(copy(), ma2.release()); + auto res = isl_multi_aff_get_space(get()); return manage(res); } -isl::multi_aff multi_aff::range_factor_domain() const +isl::space multi_aff::get_space() const { - auto res = isl_multi_aff_range_factor_domain(copy()); - return manage(res); + return space(); } -isl::multi_aff multi_aff::range_factor_range() const +isl::multi_aff multi_aff::sub(isl::multi_aff multi2) const { - auto res = isl_multi_aff_range_factor_range(copy()); + auto res = isl_multi_aff_sub(copy(), multi2.release()); return manage(res); } -boolean multi_aff::range_is_wrapping() const +isl::multi_pw_aff multi_aff::sub(const isl::multi_pw_aff &multi2) const { - auto res = isl_multi_aff_range_is_wrapping(get()); - return manage(res); + return isl::pw_multi_aff(*this).sub(multi2); } -isl::multi_aff multi_aff::range_map(isl::space space) +isl::multi_union_pw_aff multi_aff::sub(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_multi_aff_range_map(space.release()); - return manage(res); + return isl::pw_multi_aff(*this).sub(multi2); } -isl::multi_aff multi_aff::range_product(isl::multi_aff multi2) const +isl::pw_multi_aff multi_aff::sub(const isl::pw_multi_aff &pma2) const { - auto res = isl_multi_aff_range_product(copy(), multi2.release()); - return manage(res); + return isl::pw_multi_aff(*this).sub(pma2); } -isl::multi_aff multi_aff::range_splice(unsigned int pos, isl::multi_aff multi2) const +isl::union_pw_multi_aff multi_aff::sub(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_multi_aff_range_splice(copy(), pos, multi2.release()); - return manage(res); + return isl::pw_multi_aff(*this).sub(upma2); } -isl::multi_aff multi_aff::reset_tuple_id(isl::dim type) const +isl::multi_aff multi_aff::sub(const isl::aff &multi2) const { - auto res = isl_multi_aff_reset_tuple_id(copy(), static_cast(type)); - return manage(res); + return this->sub(isl::multi_aff(multi2)); } -isl::multi_aff multi_aff::reset_user() const +isl::pw_multi_aff multi_aff::subtract_domain(const isl::set &set) const { - auto res = isl_multi_aff_reset_user(copy()); - return manage(res); + return isl::pw_multi_aff(*this).subtract_domain(set); } -isl::multi_aff multi_aff::scale(isl::multi_val mv) const +isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::space &space) const { - auto res = isl_multi_aff_scale_multi_val(copy(), mv.release()); - return manage(res); + return isl::pw_multi_aff(*this).subtract_domain(space); } -isl::multi_aff multi_aff::scale(isl::val v) const +isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::union_set &uset) const { - auto res = isl_multi_aff_scale_val(copy(), v.release()); - return manage(res); + return isl::pw_multi_aff(*this).subtract_domain(uset); } -isl::multi_aff multi_aff::scale_down(isl::multi_val mv) const +isl::pw_multi_aff_list multi_aff::to_list() const { - auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release()); - return manage(res); + return isl::pw_multi_aff(*this).to_list(); } -isl::multi_aff multi_aff::scale_down(isl::val v) const +isl::multi_pw_aff multi_aff::to_multi_pw_aff() const { - auto res = isl_multi_aff_scale_down_val(copy(), v.release()); + auto res = isl_multi_aff_to_multi_pw_aff(copy()); return manage(res); } -isl::multi_aff multi_aff::set_aff(int pos, isl::aff el) const +isl::multi_union_pw_aff multi_aff::to_multi_union_pw_aff() const { - auto res = isl_multi_aff_set_aff(copy(), pos, el.release()); + auto res = isl_multi_aff_to_multi_union_pw_aff(copy()); return manage(res); } -isl::multi_aff multi_aff::set_at(int pos, isl::aff el) const +isl::pw_multi_aff multi_aff::to_pw_multi_aff() const { - auto res = isl_multi_aff_set_at(copy(), pos, el.release()); + auto res = isl_multi_aff_to_pw_multi_aff(copy()); return manage(res); } -isl::multi_aff multi_aff::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::union_pw_multi_aff multi_aff::to_union_pw_multi_aff() const { - auto res = isl_multi_aff_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); + return isl::pw_multi_aff(*this).to_union_pw_multi_aff(); } -isl::multi_aff multi_aff::set_tuple_id(isl::dim type, isl::id id) const +isl::id multi_aff::tuple_id(isl::dim type) const { - auto res = isl_multi_aff_set_tuple_id(copy(), static_cast(type), id.release()); - return manage(res); + return isl::pw_multi_aff(*this).tuple_id(type); } -isl::multi_aff multi_aff::set_tuple_name(isl::dim type, const std::string &s) const +isl::multi_aff multi_aff::unbind_params_insert_domain(isl::multi_id domain) const { - auto res = isl_multi_aff_set_tuple_name(copy(), static_cast(type), s.c_str()); + auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release()); return manage(res); } -isl_size multi_aff::size() const +isl::multi_pw_aff multi_aff::union_add(const isl::multi_pw_aff &mpa2) const { - auto res = isl_multi_aff_size(get()); - return res; + return isl::pw_multi_aff(*this).union_add(mpa2); } -isl::multi_aff multi_aff::splice(unsigned int in_pos, unsigned int out_pos, isl::multi_aff multi2) const +isl::multi_union_pw_aff multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const { - auto res = isl_multi_aff_splice(copy(), in_pos, out_pos, multi2.release()); - return manage(res); + return isl::pw_multi_aff(*this).union_add(mupa2); } -isl::multi_aff multi_aff::sub(isl::multi_aff multi2) const +isl::pw_multi_aff multi_aff::union_add(const isl::pw_multi_aff &pma2) const { - auto res = isl_multi_aff_sub(copy(), multi2.release()); - return manage(res); + return isl::pw_multi_aff(*this).union_add(pma2); } -isl::multi_aff multi_aff::unbind_params_insert_domain(isl::multi_id domain) const +isl::union_pw_multi_aff multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release()); - return manage(res); + return isl::pw_multi_aff(*this).union_add(upma2); } isl::multi_aff multi_aff::zero(isl::space space) @@ -10285,6 +12693,14 @@ return manage(res); } +inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj) +{ + char *str = isl_multi_aff_to_str(obj.get()); + os << str; + free(str); + return os; +} + // implementations for isl::multi_id multi_id manage(__isl_take isl_multi_id *ptr) { return multi_id(ptr); @@ -10303,7 +12719,6 @@ ptr = obj.copy(); } - multi_id::multi_id(__isl_take isl_multi_id *ptr) : ptr(ptr) {} @@ -10312,6 +12727,7 @@ auto res = isl_multi_id_from_id_list(space.release(), list.release()); ptr = res; } + multi_id::multi_id(isl::ctx ctx, const std::string &str) { auto res = isl_multi_id_read_from_str(ctx.release(), str.c_str()); @@ -10342,138 +12758,99 @@ 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)); -} - -void multi_id::dump() const { - isl_multi_id_dump(get()); -} - - -isl::multi_id multi_id::align_params(isl::space model) const -{ - auto res = isl_multi_id_align_params(copy(), model.release()); - return manage(res); -} - -isl::multi_id multi_id::factor_range() const -{ - auto res = isl_multi_id_factor_range(copy()); - return manage(res); -} - -isl::multi_id multi_id::flat_range_product(isl::multi_id multi2) const -{ - auto res = isl_multi_id_flat_range_product(copy(), multi2.release()); - return manage(res); -} - -isl::multi_id multi_id::flatten_range() const -{ - auto res = isl_multi_id_flatten_range(copy()); - return manage(res); +bool multi_id::is_null() const { + return ptr == nullptr; } -isl::multi_id multi_id::from_range() const -{ - auto res = isl_multi_id_from_range(copy()); - return manage(res); +isl::ctx multi_id::ctx() const { + return isl::ctx(isl_multi_id_get_ctx(ptr)); } -isl::id multi_id::get_at(int pos) const +isl::id multi_id::at(int pos) const { auto res = isl_multi_id_get_at(get(), pos); return manage(res); } -isl::space multi_id::get_domain_space() const +isl::id multi_id::get_at(int pos) const { - auto res = isl_multi_id_get_domain_space(get()); - return manage(res); + return at(pos); } -isl::id multi_id::get_id(int pos) const +isl::multi_id multi_id::flat_range_product(isl::multi_id multi2) const { - auto res = isl_multi_id_get_id(get(), pos); + auto res = isl_multi_id_flat_range_product(copy(), multi2.release()); return manage(res); } -isl::id_list multi_id::get_list() const +isl::id_list multi_id::list() const { auto res = isl_multi_id_get_list(get()); return manage(res); } -isl::space multi_id::get_space() const +isl::id_list multi_id::get_list() const { - auto res = isl_multi_id_get_space(get()); - return manage(res); + return list(); } -boolean multi_id::plain_is_equal(const isl::multi_id &multi2) const +bool multi_id::plain_is_equal(const isl::multi_id &multi2) const { auto res = isl_multi_id_plain_is_equal(get(), multi2.get()); - return manage(res); + return res; } -isl::multi_id multi_id::range_factor_domain() const +isl::multi_id multi_id::range_product(isl::multi_id multi2) const { - auto res = isl_multi_id_range_factor_domain(copy()); + auto res = isl_multi_id_range_product(copy(), multi2.release()); return manage(res); } -isl::multi_id multi_id::range_factor_range() const +isl::multi_id multi_id::set_at(int pos, isl::id el) const { - auto res = isl_multi_id_range_factor_range(copy()); + auto res = isl_multi_id_set_at(copy(), pos, el.release()); return manage(res); } -boolean multi_id::range_is_wrapping() const +isl::multi_id multi_id::set_at(int pos, const std::string &el) const { - auto res = isl_multi_id_range_is_wrapping(get()); - return manage(res); + return this->set_at(pos, isl::id(ctx(), el)); } -isl::multi_id multi_id::range_product(isl::multi_id multi2) const +isl::multi_id multi_id::set_id(int pos, isl::id el) const { - auto res = isl_multi_id_range_product(copy(), multi2.release()); + auto res = isl_multi_id_set_id(copy(), pos, el.release()); return manage(res); } -isl::multi_id multi_id::range_splice(unsigned int pos, isl::multi_id multi2) const +isl::multi_id multi_id::set_id(int pos, const std::string &el) const { - auto res = isl_multi_id_range_splice(copy(), pos, multi2.release()); - return manage(res); + return this->set_id(pos, isl::id(ctx(), el)); } -isl::multi_id multi_id::reset_user() const +isl_size multi_id::size() const { - auto res = isl_multi_id_reset_user(copy()); - return manage(res); + auto res = isl_multi_id_size(get()); + return res; } -isl::multi_id multi_id::set_at(int pos, isl::id el) const +isl::space multi_id::space() const { - auto res = isl_multi_id_set_at(copy(), pos, el.release()); + auto res = isl_multi_id_get_space(get()); return manage(res); } -isl::multi_id multi_id::set_id(int pos, isl::id el) const +isl::space multi_id::get_space() const { - auto res = isl_multi_id_set_id(copy(), pos, el.release()); - return manage(res); + return space(); } -isl_size multi_id::size() const +inline std::ostream &operator<<(std::ostream &os, const multi_id &obj) { - auto res = isl_multi_id_size(get()); - return res; + char *str = isl_multi_id_to_str(obj.get()); + os << str; + free(str); + return os; } // implementations for isl::multi_pw_aff @@ -10494,7 +12871,6 @@ ptr = obj.copy(); } - multi_pw_aff::multi_pw_aff(__isl_take isl_multi_pw_aff *ptr) : ptr(ptr) {} @@ -10503,26 +12879,31 @@ auto res = isl_multi_pw_aff_from_aff(aff.release()); ptr = res; } + multi_pw_aff::multi_pw_aff(isl::multi_aff ma) { auto res = isl_multi_pw_aff_from_multi_aff(ma.release()); ptr = res; } + multi_pw_aff::multi_pw_aff(isl::pw_aff pa) { auto res = isl_multi_pw_aff_from_pw_aff(pa.release()); ptr = res; } + multi_pw_aff::multi_pw_aff(isl::space space, isl::pw_aff_list list) { auto res = isl_multi_pw_aff_from_pw_aff_list(space.release(), list.release()); ptr = res; } + multi_pw_aff::multi_pw_aff(isl::pw_multi_aff pma) { auto res = isl_multi_pw_aff_from_pw_multi_aff(pma.release()); ptr = res; } + multi_pw_aff::multi_pw_aff(isl::ctx ctx, const std::string &str) { auto res = isl_multi_pw_aff_read_from_str(ctx.release(), str.c_str()); @@ -10557,201 +12938,179 @@ return ptr == nullptr; } - isl::ctx multi_pw_aff::ctx() const { return isl::ctx(isl_multi_pw_aff_get_ctx(ptr)); } -void multi_pw_aff::dump() const { - isl_multi_pw_aff_dump(get()); -} - - isl::multi_pw_aff multi_pw_aff::add(isl::multi_pw_aff multi2) const { auto res = isl_multi_pw_aff_add(copy(), multi2.release()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::add_constant(isl::multi_val mv) const +isl::multi_union_pw_aff multi_pw_aff::add(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).add(multi2); } -isl::multi_pw_aff multi_pw_aff::add_constant(isl::val v) const +isl::multi_pw_aff multi_pw_aff::add(const isl::aff &multi2) const { - auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release()); - return manage(res); + return this->add(isl::multi_pw_aff(multi2)); } -isl::multi_pw_aff multi_pw_aff::add_dims(isl::dim type, unsigned int n) const +isl::multi_pw_aff multi_pw_aff::add(const isl::multi_aff &multi2) const { - auto res = isl_multi_pw_aff_add_dims(copy(), static_cast(type), n); - return manage(res); + return this->add(isl::multi_pw_aff(multi2)); } -isl::multi_pw_aff multi_pw_aff::align_params(isl::space model) const +isl::multi_pw_aff multi_pw_aff::add(const isl::pw_aff &multi2) const { - auto res = isl_multi_pw_aff_align_params(copy(), model.release()); - return manage(res); + return this->add(isl::multi_pw_aff(multi2)); } -isl::set multi_pw_aff::bind(isl::multi_id tuple) const +isl::multi_pw_aff multi_pw_aff::add(const isl::pw_multi_aff &multi2) const { - auto res = isl_multi_pw_aff_bind(copy(), tuple.release()); - return manage(res); + return this->add(isl::multi_pw_aff(multi2)); } -isl::multi_pw_aff multi_pw_aff::bind_domain(isl::multi_id tuple) const +isl::multi_pw_aff multi_pw_aff::add_constant(isl::multi_val mv) const { - auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release()); + auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const +isl::multi_pw_aff multi_pw_aff::add_constant(isl::val v) const { - auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release()); + auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::coalesce() const +isl::multi_pw_aff multi_pw_aff::add_constant(long v) const { - auto res = isl_multi_pw_aff_coalesce(copy()); - return manage(res); + return this->add_constant(isl::val(ctx(), v)); } -isl_size multi_pw_aff::dim(isl::dim type) const +isl::map multi_pw_aff::as_map() const { - auto res = isl_multi_pw_aff_dim(get(), static_cast(type)); - return res; + auto res = isl_multi_pw_aff_as_map(copy()); + return manage(res); } -isl::set multi_pw_aff::domain() const +isl::multi_aff multi_pw_aff::as_multi_aff() const { - auto res = isl_multi_pw_aff_domain(copy()); + auto res = isl_multi_pw_aff_as_multi_aff(copy()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::set multi_pw_aff::as_set() const { - auto res = isl_multi_pw_aff_drop_dims(copy(), static_cast(type), first, n); + auto res = isl_multi_pw_aff_as_set(copy()); return manage(res); } -isl::map multi_pw_aff::eq_map(isl::multi_pw_aff mpa2) const +isl::pw_aff multi_pw_aff::at(int pos) const { - auto res = isl_multi_pw_aff_eq_map(copy(), mpa2.release()); + auto res = isl_multi_pw_aff_get_at(get(), pos); return manage(res); } -isl::multi_pw_aff multi_pw_aff::factor_range() const +isl::pw_aff multi_pw_aff::get_at(int pos) const { - auto res = isl_multi_pw_aff_factor_range(copy()); - return manage(res); + return at(pos); } -int multi_pw_aff::find_dim_by_id(isl::dim type, const isl::id &id) const +isl::set multi_pw_aff::bind(isl::multi_id tuple) const { - auto res = isl_multi_pw_aff_find_dim_by_id(get(), static_cast(type), id.get()); - return res; + auto res = isl_multi_pw_aff_bind(copy(), tuple.release()); + return manage(res); } -int multi_pw_aff::find_dim_by_name(isl::dim type, const std::string &name) const +isl::multi_pw_aff multi_pw_aff::bind_domain(isl::multi_id tuple) const { - auto res = isl_multi_pw_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release()); + return manage(res); } -isl::multi_pw_aff multi_pw_aff::flat_range_product(isl::multi_pw_aff multi2) const +isl::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const { - auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release()); + auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::flatten_range() const +isl::multi_pw_aff multi_pw_aff::coalesce() const { - auto res = isl_multi_pw_aff_flatten_range(copy()); + auto res = isl_multi_pw_aff_coalesce(copy()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::from_range() const +isl_size multi_pw_aff::dim(isl::dim type) const { - auto res = isl_multi_pw_aff_from_range(copy()); - return manage(res); + auto res = isl_multi_pw_aff_dim(get(), static_cast(type)); + return res; } -isl::pw_aff multi_pw_aff::get_at(int pos) const +isl::set multi_pw_aff::domain() const { - auto res = isl_multi_pw_aff_get_at(get(), pos); + auto res = isl_multi_pw_aff_domain(copy()); return manage(res); } -isl::id multi_pw_aff::get_dim_id(isl::dim type, unsigned int pos) const +isl::multi_pw_aff multi_pw_aff::flat_range_product(isl::multi_pw_aff multi2) const { - auto res = isl_multi_pw_aff_get_dim_id(get(), static_cast(type), pos); + auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release()); return manage(res); } -isl::space multi_pw_aff::get_domain_space() const +isl::multi_union_pw_aff multi_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_multi_pw_aff_get_domain_space(get()); - return manage(res); + return isl::multi_union_pw_aff(*this).flat_range_product(multi2); } -uint32_t multi_pw_aff::get_hash() const +isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::aff &multi2) const { - auto res = isl_multi_pw_aff_get_hash(get()); - return res; + return this->flat_range_product(isl::multi_pw_aff(multi2)); } -isl::pw_aff_list multi_pw_aff::get_list() const +isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::multi_aff &multi2) const { - auto res = isl_multi_pw_aff_get_list(get()); - return manage(res); + return this->flat_range_product(isl::multi_pw_aff(multi2)); } -isl::pw_aff multi_pw_aff::get_pw_aff(int pos) const +isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_aff &multi2) const { - auto res = isl_multi_pw_aff_get_pw_aff(get(), pos); - return manage(res); + return this->flat_range_product(isl::multi_pw_aff(multi2)); } -isl::space multi_pw_aff::get_space() const +isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_multi_aff &multi2) const { - auto res = isl_multi_pw_aff_get_space(get()); - return manage(res); + return this->flat_range_product(isl::multi_pw_aff(multi2)); } -isl::id multi_pw_aff::get_tuple_id(isl::dim type) const +isl::multi_pw_aff multi_pw_aff::gist(isl::set set) const { - auto res = isl_multi_pw_aff_get_tuple_id(get(), static_cast(type)); + auto res = isl_multi_pw_aff_gist(copy(), set.release()); return manage(res); } -std::string multi_pw_aff::get_tuple_name(isl::dim type) const +isl::multi_union_pw_aff multi_pw_aff::gist(const isl::union_set &context) const { - auto res = isl_multi_pw_aff_get_tuple_name(get(), static_cast(type)); - std::string tmp(res); - return tmp; + return isl::multi_union_pw_aff(*this).gist(context); } -isl::multi_pw_aff multi_pw_aff::gist(isl::set set) const +isl::multi_pw_aff multi_pw_aff::gist(const isl::basic_set &set) const { - auto res = isl_multi_pw_aff_gist(copy(), set.release()); - return manage(res); + return this->gist(isl::set(set)); } -isl::multi_pw_aff multi_pw_aff::gist_params(isl::set set) const +isl::multi_pw_aff multi_pw_aff::gist(const isl::point &set) const { - auto res = isl_multi_pw_aff_gist_params(copy(), set.release()); - return manage(res); + return this->gist(isl::set(set)); } -boolean multi_pw_aff::has_tuple_id(isl::dim type) const +bool multi_pw_aff::has_range_tuple_id() const { - auto res = isl_multi_pw_aff_has_tuple_id(get(), static_cast(type)); - return manage(res); + auto res = isl_multi_pw_aff_has_range_tuple_id(get()); + return res; } isl::multi_pw_aff multi_pw_aff::identity(isl::space space) @@ -10772,12 +13131,6 @@ return manage(res); } -isl::multi_pw_aff multi_pw_aff::insert_dims(isl::dim type, unsigned int first, unsigned int n) const -{ - auto res = isl_multi_pw_aff_insert_dims(copy(), static_cast(type), first, n); - return manage(res); -} - isl::multi_pw_aff multi_pw_aff::insert_domain(isl::space domain) const { auto res = isl_multi_pw_aff_insert_domain(copy(), domain.release()); @@ -10790,70 +13143,65 @@ return manage(res); } -isl::multi_pw_aff multi_pw_aff::intersect_params(isl::set set) const +isl::multi_union_pw_aff multi_pw_aff::intersect_domain(const isl::union_set &uset) const { - auto res = isl_multi_pw_aff_intersect_params(copy(), set.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).intersect_domain(uset); } -boolean multi_pw_aff::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::basic_set &domain) const { - auto res = isl_multi_pw_aff_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return this->intersect_domain(isl::set(domain)); } -boolean multi_pw_aff::involves_nan() const +isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::point &domain) const { - auto res = isl_multi_pw_aff_involves_nan(get()); - return manage(res); + return this->intersect_domain(isl::set(domain)); } -boolean multi_pw_aff::involves_param(const isl::id &id) const +isl::multi_pw_aff multi_pw_aff::intersect_params(isl::set set) const { - auto res = isl_multi_pw_aff_involves_param_id(get(), id.get()); + auto res = isl_multi_pw_aff_intersect_params(copy(), set.release()); return manage(res); } -boolean multi_pw_aff::involves_param(const isl::id_list &list) const +bool multi_pw_aff::involves_nan() const { - auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get()); - return manage(res); + auto res = isl_multi_pw_aff_involves_nan(get()); + return res; } -boolean multi_pw_aff::is_cst() const +bool multi_pw_aff::involves_param(const isl::id &id) const { - auto res = isl_multi_pw_aff_is_cst(get()); - return manage(res); + auto res = isl_multi_pw_aff_involves_param_id(get(), id.get()); + return res; } -boolean multi_pw_aff::is_equal(const isl::multi_pw_aff &mpa2) const +bool multi_pw_aff::involves_param(const std::string &id) const { - auto res = isl_multi_pw_aff_is_equal(get(), mpa2.get()); - return manage(res); + return this->involves_param(isl::id(ctx(), id)); } -isl::map multi_pw_aff::lex_ge_map(isl::multi_pw_aff mpa2) const +bool multi_pw_aff::involves_param(const isl::id_list &list) const { - auto res = isl_multi_pw_aff_lex_ge_map(copy(), mpa2.release()); - return manage(res); + auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get()); + return res; } -isl::map multi_pw_aff::lex_gt_map(isl::multi_pw_aff mpa2) const +bool multi_pw_aff::isa_multi_aff() const { - auto res = isl_multi_pw_aff_lex_gt_map(copy(), mpa2.release()); - return manage(res); + auto res = isl_multi_pw_aff_isa_multi_aff(get()); + return res; } -isl::map multi_pw_aff::lex_le_map(isl::multi_pw_aff mpa2) const +isl::pw_aff_list multi_pw_aff::list() const { - auto res = isl_multi_pw_aff_lex_le_map(copy(), mpa2.release()); + auto res = isl_multi_pw_aff_get_list(get()); return manage(res); } -isl::map multi_pw_aff::lex_lt_map(isl::multi_pw_aff mpa2) const +isl::pw_aff_list multi_pw_aff::get_list() const { - auto res = isl_multi_pw_aff_lex_lt_map(copy(), mpa2.release()); - return manage(res); + return list(); } isl::multi_pw_aff multi_pw_aff::max(isl::multi_pw_aff multi2) const @@ -10880,39 +13228,46 @@ return manage(res); } -isl::multi_pw_aff multi_pw_aff::mod_multi_val(isl::multi_val mv) const +isl::multi_pw_aff multi_pw_aff::neg() const { - auto res = isl_multi_pw_aff_mod_multi_val(copy(), mv.release()); + auto res = isl_multi_pw_aff_neg(copy()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const +bool multi_pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const { - auto res = isl_multi_pw_aff_move_dims(copy(), static_cast(dst_type), dst_pos, static_cast(src_type), src_pos, n); - return manage(res); + auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get()); + return res; } -isl::multi_pw_aff multi_pw_aff::neg() const +bool multi_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_multi_pw_aff_neg(copy()); - return manage(res); + return isl::multi_union_pw_aff(*this).plain_is_equal(multi2); } -boolean multi_pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const +bool multi_pw_aff::plain_is_equal(const isl::aff &multi2) const { - auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get()); - return manage(res); + return this->plain_is_equal(isl::multi_pw_aff(multi2)); } -isl::multi_pw_aff multi_pw_aff::product(isl::multi_pw_aff multi2) const +bool multi_pw_aff::plain_is_equal(const isl::multi_aff &multi2) const { - auto res = isl_multi_pw_aff_product(copy(), multi2.release()); - return manage(res); + return this->plain_is_equal(isl::multi_pw_aff(multi2)); +} + +bool multi_pw_aff::plain_is_equal(const isl::pw_aff &multi2) const +{ + return this->plain_is_equal(isl::multi_pw_aff(multi2)); +} + +bool multi_pw_aff::plain_is_equal(const isl::pw_multi_aff &multi2) const +{ + return this->plain_is_equal(isl::multi_pw_aff(multi2)); } -isl::multi_pw_aff multi_pw_aff::project_domain_on_params() const +isl::multi_pw_aff multi_pw_aff::product(isl::multi_pw_aff multi2) const { - auto res = isl_multi_pw_aff_project_domain_on_params(copy()); + auto res = isl_multi_pw_aff_product(copy(), multi2.release()); return manage(res); } @@ -10934,45 +13289,62 @@ return manage(res); } -isl::multi_pw_aff multi_pw_aff::range_factor_domain() const +isl::multi_union_pw_aff multi_pw_aff::pullback(const isl::union_pw_multi_aff &upma) const { - auto res = isl_multi_pw_aff_range_factor_domain(copy()); - return manage(res); + return isl::multi_union_pw_aff(*this).pullback(upma); } -isl::multi_pw_aff multi_pw_aff::range_factor_range() const +isl::multi_pw_aff multi_pw_aff::range_product(isl::multi_pw_aff multi2) const { - auto res = isl_multi_pw_aff_range_factor_range(copy()); + auto res = isl_multi_pw_aff_range_product(copy(), multi2.release()); return manage(res); } -boolean multi_pw_aff::range_is_wrapping() const +isl::multi_union_pw_aff multi_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_multi_pw_aff_range_is_wrapping(get()); - return manage(res); + return isl::multi_union_pw_aff(*this).range_product(multi2); } -isl::multi_pw_aff multi_pw_aff::range_product(isl::multi_pw_aff multi2) const +isl::multi_pw_aff multi_pw_aff::range_product(const isl::aff &multi2) const { - auto res = isl_multi_pw_aff_range_product(copy(), multi2.release()); - return manage(res); + return this->range_product(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::range_product(const isl::multi_aff &multi2) const +{ + return this->range_product(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_aff &multi2) const +{ + return this->range_product(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_multi_aff &multi2) const +{ + return this->range_product(isl::multi_pw_aff(multi2)); } -isl::multi_pw_aff multi_pw_aff::range_splice(unsigned int pos, isl::multi_pw_aff multi2) const +isl::id multi_pw_aff::range_tuple_id() const { - auto res = isl_multi_pw_aff_range_splice(copy(), pos, multi2.release()); + auto res = isl_multi_pw_aff_get_range_tuple_id(get()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::reset_tuple_id(isl::dim type) const +isl::id multi_pw_aff::get_range_tuple_id() const { - auto res = isl_multi_pw_aff_reset_tuple_id(copy(), static_cast(type)); + return range_tuple_id(); +} + +isl::multi_pw_aff multi_pw_aff::reset_range_tuple_id() const +{ + auto res = isl_multi_pw_aff_reset_range_tuple_id(copy()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::reset_user() const +isl::multi_pw_aff multi_pw_aff::reset_tuple_id(isl::dim type) const { - auto res = isl_multi_pw_aff_reset_user(copy()); + auto res = isl_multi_pw_aff_reset_tuple_id(copy(), static_cast(type)); return manage(res); } @@ -10988,6 +13360,11 @@ return manage(res); } +isl::multi_pw_aff multi_pw_aff::scale(long v) const +{ + return this->scale(isl::val(ctx(), v)); +} + isl::multi_pw_aff multi_pw_aff::scale_down(isl::multi_val mv) const { auto res = isl_multi_pw_aff_scale_down_multi_val(copy(), mv.release()); @@ -11000,64 +13377,127 @@ return manage(res); } +isl::multi_pw_aff multi_pw_aff::scale_down(long v) const +{ + return this->scale_down(isl::val(ctx(), v)); +} + isl::multi_pw_aff multi_pw_aff::set_at(int pos, isl::pw_aff el) const { auto res = isl_multi_pw_aff_set_at(copy(), pos, el.release()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::multi_union_pw_aff multi_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const { - auto res = isl_multi_pw_aff_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).set_at(pos, el); } isl::multi_pw_aff multi_pw_aff::set_pw_aff(int pos, isl::pw_aff el) const { - auto res = isl_multi_pw_aff_set_pw_aff(copy(), pos, el.release()); - return manage(res); + auto res = isl_multi_pw_aff_set_pw_aff(copy(), pos, el.release()); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::set_range_tuple(isl::id id) const +{ + auto res = isl_multi_pw_aff_set_range_tuple_id(copy(), id.release()); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::id(ctx(), id)); +} + +isl::multi_union_pw_aff multi_pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const +{ + return isl::multi_union_pw_aff(*this).set_union_pw_aff(pos, el); +} + +isl_size multi_pw_aff::size() const +{ + auto res = isl_multi_pw_aff_size(get()); + return res; +} + +isl::space multi_pw_aff::space() const +{ + auto res = isl_multi_pw_aff_get_space(get()); + return manage(res); +} + +isl::space multi_pw_aff::get_space() const +{ + return space(); +} + +isl::multi_pw_aff multi_pw_aff::sub(isl::multi_pw_aff multi2) const +{ + auto res = isl_multi_pw_aff_sub(copy(), multi2.release()); + return manage(res); +} + +isl::multi_union_pw_aff multi_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const +{ + return isl::multi_union_pw_aff(*this).sub(multi2); +} + +isl::multi_pw_aff multi_pw_aff::sub(const isl::aff &multi2) const +{ + return this->sub(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::sub(const isl::multi_aff &multi2) const +{ + return this->sub(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_aff &multi2) const +{ + return this->sub(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_multi_aff &multi2) const +{ + return this->sub(isl::multi_pw_aff(multi2)); } -isl::multi_pw_aff multi_pw_aff::set_tuple_id(isl::dim type, isl::id id) const +isl::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::multi_id domain) const { - auto res = isl_multi_pw_aff_set_tuple_id(copy(), static_cast(type), id.release()); + auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::set_tuple_name(isl::dim type, const std::string &s) const +isl::multi_pw_aff multi_pw_aff::union_add(isl::multi_pw_aff mpa2) const { - auto res = isl_multi_pw_aff_set_tuple_name(copy(), static_cast(type), s.c_str()); + auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release()); return manage(res); } -isl_size multi_pw_aff::size() const +isl::multi_union_pw_aff multi_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const { - auto res = isl_multi_pw_aff_size(get()); - return res; + return isl::multi_union_pw_aff(*this).union_add(mupa2); } -isl::multi_pw_aff multi_pw_aff::splice(unsigned int in_pos, unsigned int out_pos, isl::multi_pw_aff multi2) const +isl::multi_pw_aff multi_pw_aff::union_add(const isl::aff &mpa2) const { - auto res = isl_multi_pw_aff_splice(copy(), in_pos, out_pos, multi2.release()); - return manage(res); + return this->union_add(isl::multi_pw_aff(mpa2)); } -isl::multi_pw_aff multi_pw_aff::sub(isl::multi_pw_aff multi2) const +isl::multi_pw_aff multi_pw_aff::union_add(const isl::multi_aff &mpa2) const { - auto res = isl_multi_pw_aff_sub(copy(), multi2.release()); - return manage(res); + return this->union_add(isl::multi_pw_aff(mpa2)); } -isl::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::multi_id domain) const +isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_aff &mpa2) const { - auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release()); - return manage(res); + return this->union_add(isl::multi_pw_aff(mpa2)); } -isl::multi_pw_aff multi_pw_aff::union_add(isl::multi_pw_aff mpa2) const +isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_multi_aff &mpa2) const { - auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release()); - return manage(res); + return this->union_add(isl::multi_pw_aff(mpa2)); } isl::multi_pw_aff multi_pw_aff::zero(isl::space space) @@ -11066,6 +13506,14 @@ return manage(res); } +inline std::ostream &operator<<(std::ostream &os, const multi_pw_aff &obj) +{ + char *str = isl_multi_pw_aff_to_str(obj.get()); + os << str; + free(str); + return os; +} + // implementations for isl::multi_union_pw_aff multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr) { return multi_union_pw_aff(ptr); @@ -11084,7 +13532,6 @@ ptr = obj.copy(); } - multi_union_pw_aff::multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr) : ptr(ptr) {} @@ -11093,21 +13540,25 @@ auto res = isl_multi_union_pw_aff_from_multi_pw_aff(mpa.release()); ptr = res; } + multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_aff upa) { auto res = isl_multi_union_pw_aff_from_union_pw_aff(upa.release()); ptr = res; } + multi_union_pw_aff::multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list) { auto res = isl_multi_union_pw_aff_from_union_pw_aff_list(space.release(), list.release()); ptr = res; } + multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_multi_aff upma) { auto res = isl_multi_union_pw_aff_from_union_pw_multi_aff(upma.release()); ptr = res; } + multi_union_pw_aff::multi_union_pw_aff(isl::ctx ctx, const std::string &str) { auto res = isl_multi_union_pw_aff_read_from_str(ctx.release(), str.c_str()); @@ -11142,44 +13593,25 @@ return ptr == nullptr; } - isl::ctx multi_union_pw_aff::ctx() const { return isl::ctx(isl_multi_union_pw_aff_get_ctx(ptr)); } -void multi_union_pw_aff::dump() const { - isl_multi_union_pw_aff_dump(get()); -} - - isl::multi_union_pw_aff multi_union_pw_aff::add(isl::multi_union_pw_aff multi2) const { auto res = isl_multi_union_pw_aff_add(copy(), multi2.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::align_params(isl::space model) const -{ - auto res = isl_multi_union_pw_aff_align_params(copy(), model.release()); - return manage(res); -} - -isl::union_pw_aff multi_union_pw_aff::apply_aff(isl::aff aff) const -{ - auto res = isl_multi_union_pw_aff_apply_aff(copy(), aff.release()); - return manage(res); -} - -isl::union_pw_aff multi_union_pw_aff::apply_pw_aff(isl::pw_aff pa) const +isl::union_pw_aff multi_union_pw_aff::at(int pos) const { - auto res = isl_multi_union_pw_aff_apply_pw_aff(copy(), pa.release()); + auto res = isl_multi_union_pw_aff_get_at(get(), pos); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::apply_pw_multi_aff(isl::pw_multi_aff pma) const +isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const { - auto res = isl_multi_union_pw_aff_apply_pw_multi_aff(copy(), pma.release()); - return manage(res); + return at(pos); } isl::union_set multi_union_pw_aff::bind(isl::multi_id tuple) const @@ -11206,137 +13638,28 @@ return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const -{ - auto res = isl_multi_union_pw_aff_drop_dims(copy(), static_cast(type), first, n); - return manage(res); -} - -isl::multi_pw_aff multi_union_pw_aff::extract_multi_pw_aff(isl::space space) const -{ - auto res = isl_multi_union_pw_aff_extract_multi_pw_aff(get(), space.release()); - return manage(res); -} - -isl::multi_union_pw_aff multi_union_pw_aff::factor_range() const -{ - auto res = isl_multi_union_pw_aff_factor_range(copy()); - return manage(res); -} - -int multi_union_pw_aff::find_dim_by_id(isl::dim type, const isl::id &id) const -{ - auto res = isl_multi_union_pw_aff_find_dim_by_id(get(), static_cast(type), id.get()); - return res; -} - -int multi_union_pw_aff::find_dim_by_name(isl::dim type, const std::string &name) const -{ - auto res = isl_multi_union_pw_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; -} - isl::multi_union_pw_aff multi_union_pw_aff::flat_range_product(isl::multi_union_pw_aff multi2) const { auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::flatten_range() const -{ - auto res = isl_multi_union_pw_aff_flatten_range(copy()); - return manage(res); -} - -isl::multi_union_pw_aff multi_union_pw_aff::floor() const -{ - auto res = isl_multi_union_pw_aff_floor(copy()); - return manage(res); -} - -isl::multi_union_pw_aff multi_union_pw_aff::from_multi_aff(isl::multi_aff ma) -{ - auto res = isl_multi_union_pw_aff_from_multi_aff(ma.release()); - return manage(res); -} - -isl::multi_union_pw_aff multi_union_pw_aff::from_range() const -{ - auto res = isl_multi_union_pw_aff_from_range(copy()); - return manage(res); -} - isl::multi_union_pw_aff multi_union_pw_aff::from_union_map(isl::union_map umap) { auto res = isl_multi_union_pw_aff_from_union_map(umap.release()); return manage(res); } -isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const -{ - auto res = isl_multi_union_pw_aff_get_at(get(), pos); - return manage(res); -} - -isl::id multi_union_pw_aff::get_dim_id(isl::dim type, unsigned int pos) const -{ - auto res = isl_multi_union_pw_aff_get_dim_id(get(), static_cast(type), pos); - return manage(res); -} - -isl::space multi_union_pw_aff::get_domain_space() const -{ - auto res = isl_multi_union_pw_aff_get_domain_space(get()); - return manage(res); -} - -isl::union_pw_aff_list multi_union_pw_aff::get_list() const -{ - auto res = isl_multi_union_pw_aff_get_list(get()); - return manage(res); -} - -isl::space multi_union_pw_aff::get_space() const -{ - auto res = isl_multi_union_pw_aff_get_space(get()); - return manage(res); -} - -isl::id multi_union_pw_aff::get_tuple_id(isl::dim type) const -{ - auto res = isl_multi_union_pw_aff_get_tuple_id(get(), static_cast(type)); - return manage(res); -} - -std::string multi_union_pw_aff::get_tuple_name(isl::dim type) const -{ - auto res = isl_multi_union_pw_aff_get_tuple_name(get(), static_cast(type)); - std::string tmp(res); - return tmp; -} - -isl::union_pw_aff multi_union_pw_aff::get_union_pw_aff(int pos) const -{ - auto res = isl_multi_union_pw_aff_get_union_pw_aff(get(), pos); - return manage(res); -} - isl::multi_union_pw_aff multi_union_pw_aff::gist(isl::union_set context) const { auto res = isl_multi_union_pw_aff_gist(copy(), context.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::gist_params(isl::set context) const -{ - auto res = isl_multi_union_pw_aff_gist_params(copy(), context.release()); - return manage(res); -} - -boolean multi_union_pw_aff::has_tuple_id(isl::dim type) const +bool multi_union_pw_aff::has_range_tuple_id() const { - auto res = isl_multi_union_pw_aff_has_tuple_id(get(), static_cast(type)); - return manage(res); + auto res = isl_multi_union_pw_aff_has_range_tuple_id(get()); + return res; } isl::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::union_set uset) const @@ -11351,46 +13674,21 @@ return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::intersect_range(isl::set set) const -{ - auto res = isl_multi_union_pw_aff_intersect_range(copy(), set.release()); - return manage(res); -} - -boolean multi_union_pw_aff::involves_nan() const +bool multi_union_pw_aff::involves_nan() const { auto res = isl_multi_union_pw_aff_involves_nan(get()); - return manage(res); -} - -isl::multi_val multi_union_pw_aff::max_multi_val() const -{ - auto res = isl_multi_union_pw_aff_max_multi_val(copy()); - return manage(res); -} - -isl::multi_val multi_union_pw_aff::min_multi_val() const -{ - auto res = isl_multi_union_pw_aff_min_multi_val(copy()); - return manage(res); -} - -isl::multi_union_pw_aff multi_union_pw_aff::mod_multi_val(isl::multi_val mv) const -{ - auto res = isl_multi_union_pw_aff_mod_multi_val(copy(), mv.release()); - return manage(res); + return res; } -isl::multi_union_pw_aff multi_union_pw_aff::multi_aff_on_domain(isl::union_set domain, isl::multi_aff ma) +isl::union_pw_aff_list multi_union_pw_aff::list() const { - auto res = isl_multi_union_pw_aff_multi_aff_on_domain(domain.release(), ma.release()); + auto res = isl_multi_union_pw_aff_get_list(get()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::multi_val_on_domain(isl::union_set domain, isl::multi_val mv) +isl::union_pw_aff_list multi_union_pw_aff::get_list() const { - auto res = isl_multi_union_pw_aff_multi_val_on_domain(domain.release(), mv.release()); - return manage(res); + return list(); } isl::multi_union_pw_aff multi_union_pw_aff::neg() const @@ -11399,10 +13697,10 @@ return manage(res); } -boolean multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +bool multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const { auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get()); - return manage(res); + return res; } isl::multi_union_pw_aff multi_union_pw_aff::pullback(isl::union_pw_multi_aff upma) const @@ -11411,39 +13709,26 @@ return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::pw_multi_aff_on_domain(isl::union_set domain, isl::pw_multi_aff pma) -{ - auto res = isl_multi_union_pw_aff_pw_multi_aff_on_domain(domain.release(), pma.release()); - return manage(res); -} - -isl::multi_union_pw_aff multi_union_pw_aff::range_factor_domain() const -{ - auto res = isl_multi_union_pw_aff_range_factor_domain(copy()); - return manage(res); -} - -isl::multi_union_pw_aff multi_union_pw_aff::range_factor_range() const +isl::multi_union_pw_aff multi_union_pw_aff::range_product(isl::multi_union_pw_aff multi2) const { - auto res = isl_multi_union_pw_aff_range_factor_range(copy()); + auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release()); return manage(res); } -boolean multi_union_pw_aff::range_is_wrapping() const +isl::id multi_union_pw_aff::range_tuple_id() const { - auto res = isl_multi_union_pw_aff_range_is_wrapping(get()); + auto res = isl_multi_union_pw_aff_get_range_tuple_id(get()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::range_product(isl::multi_union_pw_aff multi2) const +isl::id multi_union_pw_aff::get_range_tuple_id() const { - auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release()); - return manage(res); + return range_tuple_id(); } -isl::multi_union_pw_aff multi_union_pw_aff::range_splice(unsigned int pos, isl::multi_union_pw_aff multi2) const +isl::multi_union_pw_aff multi_union_pw_aff::reset_range_tuple_id() const { - auto res = isl_multi_union_pw_aff_range_splice(copy(), pos, multi2.release()); + auto res = isl_multi_union_pw_aff_reset_range_tuple_id(copy()); return manage(res); } @@ -11453,12 +13738,6 @@ return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::reset_user() const -{ - auto res = isl_multi_union_pw_aff_reset_user(copy()); - return manage(res); -} - isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::multi_val mv) const { auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release()); @@ -11471,6 +13750,11 @@ return manage(res); } +isl::multi_union_pw_aff multi_union_pw_aff::scale(long v) const +{ + return this->scale(isl::val(ctx(), v)); +} + isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::multi_val mv) const { auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release()); @@ -11483,28 +13767,26 @@ return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::union_pw_aff el) const +isl::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const { - auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release()); - return manage(res); + return this->scale_down(isl::val(ctx(), v)); } -isl::multi_union_pw_aff multi_union_pw_aff::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::union_pw_aff el) const { - auto res = isl_multi_union_pw_aff_set_dim_id(copy(), static_cast(type), pos, id.release()); + auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::set_tuple_id(isl::dim type, isl::id id) const +isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(isl::id id) const { - auto res = isl_multi_union_pw_aff_set_tuple_id(copy(), static_cast(type), id.release()); + auto res = isl_multi_union_pw_aff_set_range_tuple_id(copy(), id.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::set_tuple_name(isl::dim type, const std::string &s) const +isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(const std::string &id) const { - auto res = isl_multi_union_pw_aff_set_tuple_name(copy(), static_cast(type), s.c_str()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } isl::multi_union_pw_aff multi_union_pw_aff::set_union_pw_aff(int pos, isl::union_pw_aff el) const @@ -11519,6 +13801,17 @@ return res; } +isl::space multi_union_pw_aff::space() const +{ + auto res = isl_multi_union_pw_aff_get_space(get()); + return manage(res); +} + +isl::space multi_union_pw_aff::get_space() const +{ + return space(); +} + isl::multi_union_pw_aff multi_union_pw_aff::sub(isl::multi_union_pw_aff multi2) const { auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release()); @@ -11537,10 +13830,12 @@ return manage(res); } -isl::union_set multi_union_pw_aff::zero_union_set() const +inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj) { - auto res = isl_multi_union_pw_aff_zero_union_set(copy()); - return manage(res); + char *str = isl_multi_union_pw_aff_to_str(obj.get()); + os << str; + free(str); + return os; } // implementations for isl::multi_val @@ -11561,7 +13856,6 @@ ptr = obj.copy(); } - multi_val::multi_val(__isl_take isl_multi_val *ptr) : ptr(ptr) {} @@ -11570,199 +13864,106 @@ auto res = isl_multi_val_from_val_list(space.release(), list.release()); ptr = res; } + multi_val::multi_val(isl::ctx ctx, const std::string &str) { auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str()); ptr = res; } -multi_val &multi_val::operator=(multi_val obj) { - std::swap(this->ptr, obj.ptr); - return *this; -} - -multi_val::~multi_val() { - if (ptr) - isl_multi_val_free(ptr); -} - -__isl_give isl_multi_val *multi_val::copy() const & { - return isl_multi_val_copy(ptr); -} - -__isl_keep isl_multi_val *multi_val::get() const { - return ptr; -} - -__isl_give isl_multi_val *multi_val::release() { - isl_multi_val *tmp = ptr; - ptr = nullptr; - return tmp; -} - -bool multi_val::is_null() const { - return ptr == nullptr; -} - - -isl::ctx multi_val::ctx() const { - return isl::ctx(isl_multi_val_get_ctx(ptr)); -} - -void multi_val::dump() const { - isl_multi_val_dump(get()); -} - - -isl::multi_val multi_val::add(isl::multi_val multi2) const -{ - auto res = isl_multi_val_add(copy(), multi2.release()); - return manage(res); -} - -isl::multi_val multi_val::add(isl::val v) const -{ - auto res = isl_multi_val_add_val(copy(), v.release()); - return manage(res); -} - -isl::multi_val multi_val::add_dims(isl::dim type, unsigned int n) const -{ - auto res = isl_multi_val_add_dims(copy(), static_cast(type), n); - return manage(res); -} - -isl::multi_val multi_val::align_params(isl::space model) const -{ - auto res = isl_multi_val_align_params(copy(), model.release()); - return manage(res); -} - -isl_size multi_val::dim(isl::dim type) const -{ - auto res = isl_multi_val_dim(get(), static_cast(type)); - return res; -} - -isl::multi_val multi_val::drop_dims(isl::dim type, unsigned int first, unsigned int n) const -{ - auto res = isl_multi_val_drop_dims(copy(), static_cast(type), first, n); - return manage(res); -} - -isl::multi_val multi_val::factor_range() const -{ - auto res = isl_multi_val_factor_range(copy()); - return manage(res); -} - -int multi_val::find_dim_by_id(isl::dim type, const isl::id &id) const -{ - auto res = isl_multi_val_find_dim_by_id(get(), static_cast(type), id.get()); - return res; +multi_val &multi_val::operator=(multi_val obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -int multi_val::find_dim_by_name(isl::dim type, const std::string &name) const -{ - auto res = isl_multi_val_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; +multi_val::~multi_val() { + if (ptr) + isl_multi_val_free(ptr); } -isl::multi_val multi_val::flat_range_product(isl::multi_val multi2) const -{ - auto res = isl_multi_val_flat_range_product(copy(), multi2.release()); - return manage(res); +__isl_give isl_multi_val *multi_val::copy() const & { + return isl_multi_val_copy(ptr); } -isl::multi_val multi_val::flatten_range() const -{ - auto res = isl_multi_val_flatten_range(copy()); - return manage(res); +__isl_keep isl_multi_val *multi_val::get() const { + return ptr; } -isl::multi_val multi_val::from_range() const -{ - auto res = isl_multi_val_from_range(copy()); - return manage(res); +__isl_give isl_multi_val *multi_val::release() { + isl_multi_val *tmp = ptr; + ptr = nullptr; + return tmp; } -isl::val multi_val::get_at(int pos) const -{ - auto res = isl_multi_val_get_at(get(), pos); - return manage(res); +bool multi_val::is_null() const { + return ptr == nullptr; } -isl::id multi_val::get_dim_id(isl::dim type, unsigned int pos) const -{ - auto res = isl_multi_val_get_dim_id(get(), static_cast(type), pos); - return manage(res); +isl::ctx multi_val::ctx() const { + return isl::ctx(isl_multi_val_get_ctx(ptr)); } -isl::space multi_val::get_domain_space() const +isl::multi_val multi_val::add(isl::multi_val multi2) const { - auto res = isl_multi_val_get_domain_space(get()); + auto res = isl_multi_val_add(copy(), multi2.release()); return manage(res); } -isl::val_list multi_val::get_list() const +isl::multi_val multi_val::add(isl::val v) const { - auto res = isl_multi_val_get_list(get()); + auto res = isl_multi_val_add_val(copy(), v.release()); return manage(res); } -isl::space multi_val::get_space() const +isl::multi_val multi_val::add(long v) const { - auto res = isl_multi_val_get_space(get()); - return manage(res); + return this->add(isl::val(ctx(), v)); } -isl::id multi_val::get_tuple_id(isl::dim type) const +isl::val multi_val::at(int pos) const { - auto res = isl_multi_val_get_tuple_id(get(), static_cast(type)); + auto res = isl_multi_val_get_at(get(), pos); return manage(res); } -std::string multi_val::get_tuple_name(isl::dim type) const +isl::val multi_val::get_at(int pos) const { - auto res = isl_multi_val_get_tuple_name(get(), static_cast(type)); - std::string tmp(res); - return tmp; + return at(pos); } -isl::val multi_val::get_val(int pos) const +isl_size multi_val::dim(isl::dim type) const { - auto res = isl_multi_val_get_val(get(), pos); - return manage(res); + auto res = isl_multi_val_dim(get(), static_cast(type)); + return res; } -boolean multi_val::has_tuple_id(isl::dim type) const +isl::multi_val multi_val::flat_range_product(isl::multi_val multi2) const { - auto res = isl_multi_val_has_tuple_id(get(), static_cast(type)); + auto res = isl_multi_val_flat_range_product(copy(), multi2.release()); return manage(res); } -isl::multi_val multi_val::insert_dims(isl::dim type, unsigned int first, unsigned int n) const +bool multi_val::has_range_tuple_id() const { - auto res = isl_multi_val_insert_dims(copy(), static_cast(type), first, n); - return manage(res); + auto res = isl_multi_val_has_range_tuple_id(get()); + return res; } -boolean multi_val::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +bool multi_val::involves_nan() const { - auto res = isl_multi_val_involves_dims(get(), static_cast(type), first, n); - return manage(res); + auto res = isl_multi_val_involves_nan(get()); + return res; } -boolean multi_val::involves_nan() const +isl::val_list multi_val::list() const { - auto res = isl_multi_val_involves_nan(get()); + auto res = isl_multi_val_get_list(get()); return manage(res); } -boolean multi_val::is_zero() const +isl::val_list multi_val::get_list() const { - auto res = isl_multi_val_is_zero(get()); - return manage(res); + return list(); } isl::multi_val multi_val::max(isl::multi_val multi2) const @@ -11777,28 +13978,16 @@ return manage(res); } -isl::multi_val multi_val::mod_multi_val(isl::multi_val mv) const -{ - auto res = isl_multi_val_mod_multi_val(copy(), mv.release()); - return manage(res); -} - -isl::multi_val multi_val::mod_val(isl::val v) const -{ - auto res = isl_multi_val_mod_val(copy(), v.release()); - return manage(res); -} - isl::multi_val multi_val::neg() const { auto res = isl_multi_val_neg(copy()); return manage(res); } -boolean multi_val::plain_is_equal(const isl::multi_val &multi2) const +bool multi_val::plain_is_equal(const isl::multi_val &multi2) const { auto res = isl_multi_val_plain_is_equal(get(), multi2.get()); - return manage(res); + return res; } isl::multi_val multi_val::product(isl::multi_val multi2) const @@ -11807,39 +13996,26 @@ return manage(res); } -isl::multi_val multi_val::project_domain_on_params() const -{ - auto res = isl_multi_val_project_domain_on_params(copy()); - return manage(res); -} - -isl::multi_val multi_val::range_factor_domain() const -{ - auto res = isl_multi_val_range_factor_domain(copy()); - return manage(res); -} - -isl::multi_val multi_val::range_factor_range() const +isl::multi_val multi_val::range_product(isl::multi_val multi2) const { - auto res = isl_multi_val_range_factor_range(copy()); + auto res = isl_multi_val_range_product(copy(), multi2.release()); return manage(res); } -boolean multi_val::range_is_wrapping() const +isl::id multi_val::range_tuple_id() const { - auto res = isl_multi_val_range_is_wrapping(get()); + auto res = isl_multi_val_get_range_tuple_id(get()); return manage(res); } -isl::multi_val multi_val::range_product(isl::multi_val multi2) const +isl::id multi_val::get_range_tuple_id() const { - auto res = isl_multi_val_range_product(copy(), multi2.release()); - return manage(res); + return range_tuple_id(); } -isl::multi_val multi_val::range_splice(unsigned int pos, isl::multi_val multi2) const +isl::multi_val multi_val::reset_range_tuple_id() const { - auto res = isl_multi_val_range_splice(copy(), pos, multi2.release()); + auto res = isl_multi_val_reset_range_tuple_id(copy()); return manage(res); } @@ -11849,12 +14025,6 @@ return manage(res); } -isl::multi_val multi_val::reset_user() const -{ - auto res = isl_multi_val_reset_user(copy()); - return manage(res); -} - isl::multi_val multi_val::scale(isl::multi_val mv) const { auto res = isl_multi_val_scale_multi_val(copy(), mv.release()); @@ -11867,6 +14037,11 @@ return manage(res); } +isl::multi_val multi_val::scale(long v) const +{ + return this->scale(isl::val(ctx(), v)); +} + isl::multi_val multi_val::scale_down(isl::multi_val mv) const { auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release()); @@ -11879,28 +14054,31 @@ return manage(res); } +isl::multi_val multi_val::scale_down(long v) const +{ + return this->scale_down(isl::val(ctx(), v)); +} + isl::multi_val multi_val::set_at(int pos, isl::val el) const { auto res = isl_multi_val_set_at(copy(), pos, el.release()); return manage(res); } -isl::multi_val multi_val::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::multi_val multi_val::set_at(int pos, long el) const { - auto res = isl_multi_val_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); + return this->set_at(pos, isl::val(ctx(), el)); } -isl::multi_val multi_val::set_tuple_id(isl::dim type, isl::id id) const +isl::multi_val multi_val::set_range_tuple(isl::id id) const { - auto res = isl_multi_val_set_tuple_id(copy(), static_cast(type), id.release()); + auto res = isl_multi_val_set_range_tuple_id(copy(), id.release()); return manage(res); } -isl::multi_val multi_val::set_tuple_name(isl::dim type, const std::string &s) const +isl::multi_val multi_val::set_range_tuple(const std::string &id) const { - auto res = isl_multi_val_set_tuple_name(copy(), static_cast(type), s.c_str()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } isl::multi_val multi_val::set_val(int pos, isl::val el) const @@ -11909,18 +14087,28 @@ return manage(res); } +isl::multi_val multi_val::set_val(int pos, long el) const +{ + return this->set_val(pos, isl::val(ctx(), el)); +} + isl_size multi_val::size() const { auto res = isl_multi_val_size(get()); return res; } -isl::multi_val multi_val::splice(unsigned int in_pos, unsigned int out_pos, isl::multi_val multi2) const +isl::space multi_val::space() const { - auto res = isl_multi_val_splice(copy(), in_pos, out_pos, multi2.release()); + auto res = isl_multi_val_get_space(get()); return manage(res); } +isl::space multi_val::get_space() const +{ + return space(); +} + isl::multi_val multi_val::sub(isl::multi_val multi2) const { auto res = isl_multi_val_sub(copy(), multi2.release()); @@ -11933,6 +14121,14 @@ return manage(res); } +inline std::ostream &operator<<(std::ostream &os, const multi_val &obj) +{ + char *str = isl_multi_val_to_str(obj.get()); + os << str; + free(str); + return os; +} + // implementations for isl::point point manage(__isl_take isl_point *ptr) { return point(ptr); @@ -11951,13 +14147,12 @@ ptr = obj.copy(); } - point::point(__isl_take isl_point *ptr) : ptr(ptr) {} -point::point(isl::space dim) +point::point(isl::space space) { - auto res = isl_point_zero(dim.release()); + auto res = isl_point_zero(space.release()); ptr = res; } @@ -11989,2677 +14184,2798 @@ return ptr == nullptr; } - isl::ctx point::ctx() const { return isl::ctx(isl_point_get_ctx(ptr)); } -void point::dump() const { - isl_point_dump(get()); +isl::set point::add_constraint(const isl::constraint &constraint) const +{ + return isl::basic_set(*this).add_constraint(constraint); +} + +isl::set point::add_dims(isl::dim type, unsigned int n) const +{ + return isl::basic_set(*this).add_dims(type, n); +} + +isl::basic_set point::affine_hull() const +{ + return isl::basic_set(*this).affine_hull(); +} + +isl::set point::align_params(const isl::space &model) const +{ + return isl::basic_set(*this).align_params(model); +} + +isl::basic_set point::apply(const isl::basic_map &bmap) const +{ + return isl::basic_set(*this).apply(bmap); +} + +isl::set point::apply(const isl::map &map) const +{ + return isl::basic_set(*this).apply(map); +} + +isl::union_set point::apply(const isl::union_map &umap) const +{ + return isl::basic_set(*this).apply(umap); +} + +isl::pw_multi_aff point::as_pw_multi_aff() const +{ + return isl::basic_set(*this).as_pw_multi_aff(); +} + +isl::set point::as_set() const +{ + return isl::basic_set(*this).as_set(); +} + +isl::basic_set_list point::basic_set_list() const +{ + return isl::basic_set(*this).basic_set_list(); +} + +isl::set point::bind(const isl::multi_id &tuple) const +{ + return isl::basic_set(*this).bind(tuple); +} + +isl::set point::coalesce() const +{ + return isl::basic_set(*this).coalesce(); +} + +isl::set point::complement() const +{ + return isl::basic_set(*this).complement(); +} + +isl::union_set point::compute_divs() const +{ + return isl::basic_set(*this).compute_divs(); +} + +bool point::contains(const isl::space &space) const +{ + return isl::basic_set(*this).contains(space); +} + +isl::basic_set point::convex_hull() const +{ + return isl::basic_set(*this).convex_hull(); +} + +isl::val point::coordinate_val(isl::dim type, int pos) const +{ + auto res = isl_point_get_coordinate_val(get(), static_cast(type), pos); + return manage(res); +} + +isl::val point::get_coordinate_val(isl::dim type, int pos) const +{ + return coordinate_val(type, pos); +} + +isl::basic_set point::detect_equalities() const +{ + return isl::basic_set(*this).detect_equalities(); +} + +isl_size point::dim(isl::dim type) const +{ + return isl::basic_set(*this).dim(type); +} + +bool point::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const +{ + return isl::basic_set(*this).dim_has_any_lower_bound(type, pos); +} + +isl::id point::dim_id(isl::dim type, unsigned int pos) const +{ + return isl::basic_set(*this).dim_id(type, pos); +} + +isl::pw_aff point::dim_max(int pos) const +{ + return isl::basic_set(*this).dim_max(pos); +} + +isl::val point::dim_max_val(int pos) const +{ + return isl::basic_set(*this).dim_max_val(pos); +} + +isl::pw_aff point::dim_min(int pos) const +{ + return isl::basic_set(*this).dim_min(pos); +} + +isl::val point::dim_min_val(int pos) const +{ + return isl::basic_set(*this).dim_min_val(pos); +} + +std::string point::dim_name(isl::dim type, unsigned int pos) const +{ + return isl::basic_set(*this).dim_name(type, pos); +} + +isl::aff point::div(int pos) const +{ + return isl::basic_set(*this).div(pos); +} + +isl::set point::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +{ + return isl::basic_set(*this).drop_constraints_involving_dims(type, first, n); +} + +isl::set point::eliminate(isl::dim type, unsigned int first, unsigned int n) const +{ + return isl::basic_set(*this).eliminate(type, first, n); +} + +bool point::every_set(const std::function &test) const +{ + return isl::basic_set(*this).every_set(test); +} + +isl::set point::extract_set(const isl::space &space) const +{ + return isl::basic_set(*this).extract_set(space); +} + +int point::find_dim_by_id(isl::dim type, const isl::id &id) const +{ + return isl::basic_set(*this).find_dim_by_id(type, id); +} + +int point::find_dim_by_id(isl::dim type, const std::string &id) const +{ + return this->find_dim_by_id(type, isl::id(ctx(), id)); +} + +isl::basic_set point::fix_si(isl::dim type, unsigned int pos, int value) const +{ + return isl::basic_set(*this).fix_si(type, pos, value); +} + +isl::basic_set point::fix_val(isl::dim type, unsigned int pos, const isl::val &v) const +{ + return isl::basic_set(*this).fix_val(type, pos, v); +} + +isl::basic_set point::fix_val(isl::dim type, unsigned int pos, long v) const +{ + return this->fix_val(type, pos, isl::val(ctx(), v)); +} + +isl::basic_set point::flatten() const +{ + return isl::basic_set(*this).flatten(); +} + +void point::foreach_basic_set(const std::function &fn) const +{ + return isl::basic_set(*this).foreach_basic_set(fn); +} + +void point::foreach_point(const std::function &fn) const +{ + return isl::basic_set(*this).foreach_point(fn); +} + +void point::foreach_set(const std::function &fn) const +{ + return isl::basic_set(*this).foreach_set(fn); +} + +isl::basic_set point::gist(const isl::basic_set &context) const +{ + return isl::basic_set(*this).gist(context); +} + +isl::set point::gist(const isl::set &context) const +{ + return isl::basic_set(*this).gist(context); +} + +isl::union_set point::gist(const isl::union_set &context) const +{ + return isl::basic_set(*this).gist(context); +} + +isl::set point::gist_params(const isl::set &context) const +{ + return isl::basic_set(*this).gist_params(context); +} + +bool point::has_equal_space(const isl::set &set2) const +{ + return isl::basic_set(*this).has_equal_space(set2); +} + +isl::map point::identity() const +{ + return isl::basic_set(*this).identity(); +} + +isl::union_pw_multi_aff point::identity_union_pw_multi_aff() const +{ + return isl::basic_set(*this).identity_union_pw_multi_aff(); +} + +isl::pw_aff point::indicator_function() const +{ + return isl::basic_set(*this).indicator_function(); } +isl::set point::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const +{ + return isl::basic_set(*this).insert_dims(type, pos, n); +} -isl::point point::add_ui(isl::dim type, int pos, unsigned int val) const +isl::map point::insert_domain(const isl::space &domain) const { - auto res = isl_point_add_ui(copy(), static_cast(type), pos, val); - return manage(res); + return isl::basic_set(*this).insert_domain(domain); } -isl::val point::get_coordinate_val(isl::dim type, int pos) const +isl::basic_set point::intersect(const isl::basic_set &bset2) const { - auto res = isl_point_get_coordinate_val(get(), static_cast(type), pos); - return manage(res); + return isl::basic_set(*this).intersect(bset2); } -isl::multi_val point::get_multi_val() const +isl::set point::intersect(const isl::set &set2) const { - auto res = isl_point_get_multi_val(get()); - return manage(res); + return isl::basic_set(*this).intersect(set2); } -isl::space point::get_space() const +isl::union_set point::intersect(const isl::union_set &uset2) const { - auto res = isl_point_get_space(get()); - return manage(res); + return isl::basic_set(*this).intersect(uset2); } -isl::point point::set_coordinate_val(isl::dim type, int pos, isl::val v) const +isl::basic_set point::intersect_params(const isl::basic_set &bset2) const { - auto res = isl_point_set_coordinate_val(copy(), static_cast(type), pos, v.release()); - return manage(res); + return isl::basic_set(*this).intersect_params(bset2); } -isl::point point::sub_ui(isl::dim type, int pos, unsigned int val) const +isl::set point::intersect_params(const isl::set ¶ms) const { - auto res = isl_point_sub_ui(copy(), static_cast(type), pos, val); - return manage(res); + return isl::basic_set(*this).intersect_params(params); } -// implementations for isl::pw_aff -pw_aff manage(__isl_take isl_pw_aff *ptr) { - return pw_aff(ptr); +bool point::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +{ + return isl::basic_set(*this).involves_dims(type, first, n); } -pw_aff manage_copy(__isl_keep isl_pw_aff *ptr) { - ptr = isl_pw_aff_copy(ptr); - return pw_aff(ptr); + +bool point::involves_locals() const +{ + return isl::basic_set(*this).involves_locals(); } -pw_aff::pw_aff() - : ptr(nullptr) {} +bool point::is_bounded() const +{ + return isl::basic_set(*this).is_bounded(); +} -pw_aff::pw_aff(const pw_aff &obj) - : ptr(nullptr) +bool point::is_disjoint(const isl::set &set2) const { - ptr = obj.copy(); + return isl::basic_set(*this).is_disjoint(set2); } +bool point::is_disjoint(const isl::union_set &uset2) const +{ + return isl::basic_set(*this).is_disjoint(uset2); +} -pw_aff::pw_aff(__isl_take isl_pw_aff *ptr) - : ptr(ptr) {} +bool point::is_empty() const +{ + return isl::basic_set(*this).is_empty(); +} -pw_aff::pw_aff(isl::aff aff) +bool point::is_equal(const isl::basic_set &bset2) const { - auto res = isl_pw_aff_from_aff(aff.release()); - ptr = res; + return isl::basic_set(*this).is_equal(bset2); } -pw_aff::pw_aff(isl::ctx ctx, const std::string &str) + +bool point::is_equal(const isl::set &set2) const { - auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str()); - ptr = res; + return isl::basic_set(*this).is_equal(set2); } -pw_aff::pw_aff(isl::set domain, isl::val v) + +bool point::is_equal(const isl::union_set &uset2) const { - auto res = isl_pw_aff_val_on_domain(domain.release(), v.release()); - ptr = res; + return isl::basic_set(*this).is_equal(uset2); } -pw_aff::pw_aff(isl::local_space ls) + +bool point::is_params() const { - auto res = isl_pw_aff_zero_on_domain(ls.release()); - ptr = res; + return isl::basic_set(*this).is_params(); } -pw_aff &pw_aff::operator=(pw_aff obj) { - std::swap(this->ptr, obj.ptr); - return *this; +bool point::is_singleton() const +{ + return isl::basic_set(*this).is_singleton(); } -pw_aff::~pw_aff() { - if (ptr) - isl_pw_aff_free(ptr); +bool point::is_strict_subset(const isl::set &set2) const +{ + return isl::basic_set(*this).is_strict_subset(set2); } -__isl_give isl_pw_aff *pw_aff::copy() const & { - return isl_pw_aff_copy(ptr); +bool point::is_strict_subset(const isl::union_set &uset2) const +{ + return isl::basic_set(*this).is_strict_subset(uset2); } -__isl_keep isl_pw_aff *pw_aff::get() const { - return ptr; +bool point::is_subset(const isl::basic_set &bset2) const +{ + return isl::basic_set(*this).is_subset(bset2); } -__isl_give isl_pw_aff *pw_aff::release() { - isl_pw_aff *tmp = ptr; - ptr = nullptr; - return tmp; +bool point::is_subset(const isl::set &set2) const +{ + return isl::basic_set(*this).is_subset(set2); } -bool pw_aff::is_null() const { - return ptr == nullptr; +bool point::is_subset(const isl::union_set &uset2) const +{ + return isl::basic_set(*this).is_subset(uset2); } +bool point::is_wrapping() const +{ + return isl::basic_set(*this).is_wrapping(); +} -isl::ctx pw_aff::ctx() const { - return isl::ctx(isl_pw_aff_get_ctx(ptr)); +bool point::isa_set() const +{ + return isl::basic_set(*this).isa_set(); } -void pw_aff::dump() const { - isl_pw_aff_dump(get()); +isl::set point::lexmax() const +{ + return isl::basic_set(*this).lexmax(); } +isl::pw_multi_aff point::lexmax_pw_multi_aff() const +{ + return isl::basic_set(*this).lexmax_pw_multi_aff(); +} -isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const +isl::set point::lexmin() const { - auto res = isl_pw_aff_add(copy(), pwaff2.release()); - return manage(res); + return isl::basic_set(*this).lexmin(); } -isl::pw_aff pw_aff::add_constant(isl::val v) const +isl::pw_multi_aff point::lexmin_pw_multi_aff() const { - auto res = isl_pw_aff_add_constant_val(copy(), v.release()); - return manage(res); + return isl::basic_set(*this).lexmin_pw_multi_aff(); } -isl::pw_aff pw_aff::add_dims(isl::dim type, unsigned int n) const +isl::set point::lower_bound(const isl::multi_pw_aff &lower) const { - auto res = isl_pw_aff_add_dims(copy(), static_cast(type), n); - return manage(res); + return isl::basic_set(*this).lower_bound(lower); } -isl::pw_aff pw_aff::align_params(isl::space model) const +isl::set point::lower_bound(const isl::multi_val &lower) const { - auto res = isl_pw_aff_align_params(copy(), model.release()); - return manage(res); + return isl::basic_set(*this).lower_bound(lower); } -isl::pw_aff pw_aff::alloc(isl::set set, isl::aff aff) +isl::set point::lower_bound_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_pw_aff_alloc(set.release(), aff.release()); - return manage(res); + return isl::basic_set(*this).lower_bound_si(type, pos, value); } -isl::aff pw_aff::as_aff() const +isl::set point::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const { - auto res = isl_pw_aff_as_aff(copy()); - return manage(res); + return isl::basic_set(*this).lower_bound_val(type, pos, value); } -isl::set pw_aff::bind(isl::id id) const +isl::set point::lower_bound_val(isl::dim type, unsigned int pos, long value) const { - auto res = isl_pw_aff_bind_id(copy(), id.release()); - return manage(res); + return this->lower_bound_val(type, pos, isl::val(ctx(), value)); } -isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const +isl::multi_pw_aff point::max_multi_pw_aff() const { - auto res = isl_pw_aff_bind_domain(copy(), tuple.release()); - return manage(res); + return isl::basic_set(*this).max_multi_pw_aff(); } -isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const +isl::val point::max_val(const isl::aff &obj) const { - auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release()); - return manage(res); + return isl::basic_set(*this).max_val(obj); } -isl::pw_aff pw_aff::ceil() const +isl::multi_pw_aff point::min_multi_pw_aff() const { - auto res = isl_pw_aff_ceil(copy()); - return manage(res); + return isl::basic_set(*this).min_multi_pw_aff(); } -isl::pw_aff pw_aff::coalesce() const +isl::val point::min_val(const isl::aff &obj) const { - auto res = isl_pw_aff_coalesce(copy()); - return manage(res); + return isl::basic_set(*this).min_val(obj); } -isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const +isl::multi_val point::multi_val() const { - auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release()); + auto res = isl_point_get_multi_val(get()); return manage(res); } -isl_size pw_aff::dim(isl::dim type) const +isl::multi_val point::get_multi_val() const { - auto res = isl_pw_aff_dim(get(), static_cast(type)); - return res; + return multi_val(); } -isl::pw_aff pw_aff::div(isl::pw_aff pa2) const +isl_size point::n_basic_set() const { - auto res = isl_pw_aff_div(copy(), pa2.release()); - return manage(res); + return isl::basic_set(*this).n_basic_set(); } -isl::set pw_aff::domain() const +isl::basic_set point::params() const { - auto res = isl_pw_aff_domain(copy()); - return manage(res); + return isl::basic_set(*this).params(); } -isl::pw_aff pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::val point::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const { - auto res = isl_pw_aff_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::basic_set(*this).plain_get_val_if_fixed(type, pos); } -isl::pw_aff pw_aff::drop_unused_params() const +isl::multi_val point::plain_multi_val_if_fixed() const { - auto res = isl_pw_aff_drop_unused_params(copy()); - return manage(res); + return isl::basic_set(*this).plain_multi_val_if_fixed(); } -isl::pw_aff pw_aff::empty(isl::space space) +isl::basic_set point::polyhedral_hull() const { - auto res = isl_pw_aff_empty(space.release()); - return manage(res); + return isl::basic_set(*this).polyhedral_hull(); } -isl::map pw_aff::eq_map(isl::pw_aff pa2) const +isl::set point::preimage(const isl::multi_aff &ma) const { - auto res = isl_pw_aff_eq_map(copy(), pa2.release()); - return manage(res); + return isl::basic_set(*this).preimage(ma); } -isl::set pw_aff::eq_set(isl::pw_aff pwaff2) const +isl::set point::preimage(const isl::multi_pw_aff &mpa) const { - auto res = isl_pw_aff_eq_set(copy(), pwaff2.release()); - return manage(res); + return isl::basic_set(*this).preimage(mpa); } -isl::val pw_aff::eval(isl::point pnt) const +isl::set point::preimage(const isl::pw_multi_aff &pma) const { - auto res = isl_pw_aff_eval(copy(), pnt.release()); - return manage(res); + return isl::basic_set(*this).preimage(pma); } -int pw_aff::find_dim_by_name(isl::dim type, const std::string &name) const +isl::union_set point::preimage(const isl::union_pw_multi_aff &upma) const { - auto res = isl_pw_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + return isl::basic_set(*this).preimage(upma); } -isl::pw_aff pw_aff::floor() const +isl::set point::product(const isl::set &set2) const { - auto res = isl_pw_aff_floor(copy()); - return manage(res); + return isl::basic_set(*this).product(set2); } -stat pw_aff::foreach_piece(const std::function &fn) const +isl::basic_set point::project_out(isl::dim type, unsigned int first, unsigned int n) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_set *arg_0, isl_aff *arg_1, void *arg_2) -> isl_stat { - auto *data = static_cast(arg_2); - stat ret = (*data->func)(manage(arg_0), manage(arg_1)); - return ret.release(); - }; - auto res = isl_pw_aff_foreach_piece(get(), fn_lambda, &fn_data); - return manage(res); + return isl::basic_set(*this).project_out(type, first, n); } -isl::pw_aff pw_aff::from_range() const +isl::set point::project_out_all_params() const { - auto res = isl_pw_aff_from_range(copy()); - return manage(res); + return isl::basic_set(*this).project_out_all_params(); } -isl::map pw_aff::ge_map(isl::pw_aff pa2) const +isl::set point::project_out_param(const isl::id &id) const { - auto res = isl_pw_aff_ge_map(copy(), pa2.release()); - return manage(res); + return isl::basic_set(*this).project_out_param(id); } -isl::set pw_aff::ge_set(isl::pw_aff pwaff2) const +isl::set point::project_out_param(const std::string &id) const { - auto res = isl_pw_aff_ge_set(copy(), pwaff2.release()); - return manage(res); + return this->project_out_param(isl::id(ctx(), id)); } -isl::id pw_aff::get_dim_id(isl::dim type, unsigned int pos) const +isl::set point::project_out_param(const isl::id_list &list) const { - auto res = isl_pw_aff_get_dim_id(get(), static_cast(type), pos); - return manage(res); + return isl::basic_set(*this).project_out_param(list); } -std::string pw_aff::get_dim_name(isl::dim type, unsigned int pos) const +isl::pw_multi_aff point::pw_multi_aff_on_domain(const isl::multi_val &mv) const { - auto res = isl_pw_aff_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + return isl::basic_set(*this).pw_multi_aff_on_domain(mv); } -isl::space pw_aff::get_domain_space() const +isl::set point::remove_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_pw_aff_get_domain_space(get()); - return manage(res); + return isl::basic_set(*this).remove_dims(type, first, n); } -uint32_t pw_aff::get_hash() const +isl::set point::remove_divs() const { - auto res = isl_pw_aff_get_hash(get()); - return res; + return isl::basic_set(*this).remove_divs(); } -isl::space pw_aff::get_space() const +isl::set point::remove_redundancies() const { - auto res = isl_pw_aff_get_space(get()); - return manage(res); + return isl::basic_set(*this).remove_redundancies(); } -isl::id pw_aff::get_tuple_id(isl::dim type) const +isl::set point::reset_tuple_id() const { - auto res = isl_pw_aff_get_tuple_id(get(), static_cast(type)); - return manage(res); + return isl::basic_set(*this).reset_tuple_id(); } -isl::pw_aff pw_aff::gist(isl::set context) const +isl::basic_set point::sample() const { - auto res = isl_pw_aff_gist(copy(), context.release()); - return manage(res); + return isl::basic_set(*this).sample(); } -isl::pw_aff pw_aff::gist_params(isl::set context) const +isl::point point::sample_point() const { - auto res = isl_pw_aff_gist_params(copy(), context.release()); - return manage(res); + return isl::basic_set(*this).sample_point(); } -isl::map pw_aff::gt_map(isl::pw_aff pa2) const +isl::set point::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const { - auto res = isl_pw_aff_gt_map(copy(), pa2.release()); - return manage(res); + return isl::basic_set(*this).set_dim_id(type, pos, id); } -isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const +isl::set point::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const { - auto res = isl_pw_aff_gt_set(copy(), pwaff2.release()); - return manage(res); + return this->set_dim_id(type, pos, isl::id(ctx(), id)); } -boolean pw_aff::has_dim_id(isl::dim type, unsigned int pos) const +isl::set_list point::set_list() const { - auto res = isl_pw_aff_has_dim_id(get(), static_cast(type), pos); - return manage(res); + return isl::basic_set(*this).set_list(); } -boolean pw_aff::has_tuple_id(isl::dim type) const +isl::set point::set_tuple_id(const isl::id &id) const { - auto res = isl_pw_aff_has_tuple_id(get(), static_cast(type)); - return manage(res); + return isl::basic_set(*this).set_tuple_id(id); } -isl::pw_aff pw_aff::insert_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::set point::set_tuple_id(const std::string &id) const { - auto res = isl_pw_aff_insert_dims(copy(), static_cast(type), first, n); - return manage(res); + return this->set_tuple_id(isl::id(ctx(), id)); } -isl::pw_aff pw_aff::insert_domain(isl::space domain) const +isl::fixed_box point::simple_fixed_box_hull() const { - auto res = isl_pw_aff_insert_domain(copy(), domain.release()); - return manage(res); + return isl::basic_set(*this).simple_fixed_box_hull(); } -isl::pw_aff pw_aff::intersect_domain(isl::set set) const +isl::basic_set point::simple_hull() const { - auto res = isl_pw_aff_intersect_domain(copy(), set.release()); - return manage(res); + return isl::basic_set(*this).simple_hull(); } -isl::pw_aff pw_aff::intersect_domain_wrapped_domain(isl::set set) const +isl::space point::space() const { - auto res = isl_pw_aff_intersect_domain_wrapped_domain(copy(), set.release()); - return manage(res); + return isl::basic_set(*this).space(); } -isl::pw_aff pw_aff::intersect_domain_wrapped_range(isl::set set) const +isl::val point::stride(int pos) const { - auto res = isl_pw_aff_intersect_domain_wrapped_range(copy(), set.release()); - return manage(res); + return isl::basic_set(*this).stride(pos); } -isl::pw_aff pw_aff::intersect_params(isl::set set) const +isl::set point::subtract(const isl::set &set2) const { - auto res = isl_pw_aff_intersect_params(copy(), set.release()); - return manage(res); + return isl::basic_set(*this).subtract(set2); } -boolean pw_aff::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_set point::subtract(const isl::union_set &uset2) const { - auto res = isl_pw_aff_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return isl::basic_set(*this).subtract(uset2); } -boolean pw_aff::involves_nan() const +isl::basic_set_list point::to_list() const { - auto res = isl_pw_aff_involves_nan(get()); - return manage(res); + return isl::basic_set(*this).to_list(); } -boolean pw_aff::involves_param_id(const isl::id &id) const +isl::set point::to_set() const { - auto res = isl_pw_aff_involves_param_id(get(), id.get()); + auto res = isl_point_to_set(copy()); return manage(res); } -boolean pw_aff::is_cst() const +isl::union_set point::to_union_set() const { - auto res = isl_pw_aff_is_cst(get()); - return manage(res); + return isl::basic_set(*this).to_union_set(); } -boolean pw_aff::is_empty() const +isl::map point::translation() const { - auto res = isl_pw_aff_is_empty(get()); - return manage(res); + return isl::basic_set(*this).translation(); } -boolean pw_aff::is_equal(const isl::pw_aff &pa2) const +isl_size point::tuple_dim() const { - auto res = isl_pw_aff_is_equal(get(), pa2.get()); - return manage(res); + return isl::basic_set(*this).tuple_dim(); } -boolean pw_aff::isa_aff() const +isl::id point::tuple_id() const { - auto res = isl_pw_aff_isa_aff(get()); - return manage(res); + return isl::basic_set(*this).tuple_id(); } -isl::map pw_aff::le_map(isl::pw_aff pa2) const +std::string point::tuple_name() const { - auto res = isl_pw_aff_le_map(copy(), pa2.release()); - return manage(res); + return isl::basic_set(*this).tuple_name(); } -isl::set pw_aff::le_set(isl::pw_aff pwaff2) const +isl::set point::unbind_params(const isl::multi_id &tuple) const { - auto res = isl_pw_aff_le_set(copy(), pwaff2.release()); - return manage(res); + return isl::basic_set(*this).unbind_params(tuple); } -isl::map pw_aff::lt_map(isl::pw_aff pa2) const +isl::map point::unbind_params_insert_domain(const isl::multi_id &domain) const { - auto res = isl_pw_aff_lt_map(copy(), pa2.release()); - return manage(res); + return isl::basic_set(*this).unbind_params_insert_domain(domain); } -isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const +isl::set point::unite(const isl::basic_set &bset2) const { - auto res = isl_pw_aff_lt_set(copy(), pwaff2.release()); - return manage(res); + return isl::basic_set(*this).unite(bset2); } -isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const +isl::set point::unite(const isl::set &set2) const { - auto res = isl_pw_aff_max(copy(), pwaff2.release()); - return manage(res); + return isl::basic_set(*this).unite(set2); } -isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const +isl::union_set point::unite(const isl::union_set &uset2) const { - auto res = isl_pw_aff_min(copy(), pwaff2.release()); - return manage(res); + return isl::basic_set(*this).unite(uset2); } -isl::pw_aff pw_aff::mod(isl::val mod) const +isl::basic_set point::unshifted_simple_hull() const { - auto res = isl_pw_aff_mod_val(copy(), mod.release()); - return manage(res); + return isl::basic_set(*this).unshifted_simple_hull(); } -isl::pw_aff pw_aff::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const +isl::map point::unwrap() const { - auto res = isl_pw_aff_move_dims(copy(), static_cast(dst_type), dst_pos, static_cast(src_type), src_pos, n); - return manage(res); + return isl::basic_set(*this).unwrap(); } -isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const +isl::set point::upper_bound(const isl::multi_pw_aff &upper) const { - auto res = isl_pw_aff_mul(copy(), pwaff2.release()); - return manage(res); + return isl::basic_set(*this).upper_bound(upper); } -isl_size pw_aff::n_piece() const +isl::set point::upper_bound(const isl::multi_val &upper) const { - auto res = isl_pw_aff_n_piece(get()); - return res; + return isl::basic_set(*this).upper_bound(upper); } -isl::pw_aff pw_aff::nan_on_domain(isl::local_space ls) +isl::set point::upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const { - auto res = isl_pw_aff_nan_on_domain(ls.release()); - return manage(res); + return isl::basic_set(*this).upper_bound_val(type, pos, value); } -isl::pw_aff pw_aff::nan_on_domain_space(isl::space space) +isl::set point::upper_bound_val(isl::dim type, unsigned int pos, long value) const { - auto res = isl_pw_aff_nan_on_domain_space(space.release()); - return manage(res); + return this->upper_bound_val(type, pos, isl::val(ctx(), value)); } -isl::set pw_aff::ne_set(isl::pw_aff pwaff2) const +inline std::ostream &operator<<(std::ostream &os, const point &obj) { - auto res = isl_pw_aff_ne_set(copy(), pwaff2.release()); - return manage(res); + char *str = isl_point_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::pw_aff pw_aff::neg() const -{ - auto res = isl_pw_aff_neg(copy()); - return manage(res); +// implementations for isl::pw_aff +pw_aff manage(__isl_take isl_pw_aff *ptr) { + return pw_aff(ptr); +} +pw_aff manage_copy(__isl_keep isl_pw_aff *ptr) { + ptr = isl_pw_aff_copy(ptr); + return pw_aff(ptr); } -isl::set pw_aff::non_zero_set() const +pw_aff::pw_aff() + : ptr(nullptr) {} + +pw_aff::pw_aff(const pw_aff &obj) + : ptr(nullptr) { - auto res = isl_pw_aff_non_zero_set(copy()); - return manage(res); + ptr = obj.copy(); } -isl::set pw_aff::nonneg_set() const +pw_aff::pw_aff(__isl_take isl_pw_aff *ptr) + : ptr(ptr) {} + +pw_aff::pw_aff(isl::aff aff) { - auto res = isl_pw_aff_nonneg_set(copy()); - return manage(res); + auto res = isl_pw_aff_from_aff(aff.release()); + ptr = res; } -isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id) +pw_aff::pw_aff(isl::ctx ctx, const std::string &str) { - auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release()); - return manage(res); + auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +pw_aff::pw_aff(isl::set domain, isl::val v) +{ + auto res = isl_pw_aff_val_on_domain(domain.release(), v.release()); + ptr = res; } -isl::set pw_aff::params() const +pw_aff::pw_aff(isl::local_space ls) { - auto res = isl_pw_aff_params(copy()); - return manage(res); + auto res = isl_pw_aff_zero_on_domain(ls.release()); + ptr = res; } -int pw_aff::plain_cmp(const isl::pw_aff &pa2) const -{ - auto res = isl_pw_aff_plain_cmp(get(), pa2.get()); - return res; +pw_aff &pw_aff::operator=(pw_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -boolean pw_aff::plain_is_equal(const isl::pw_aff &pwaff2) const -{ - auto res = isl_pw_aff_plain_is_equal(get(), pwaff2.get()); - return manage(res); +pw_aff::~pw_aff() { + if (ptr) + isl_pw_aff_free(ptr); } -isl::set pw_aff::pos_set() const -{ - auto res = isl_pw_aff_pos_set(copy()); - return manage(res); +__isl_give isl_pw_aff *pw_aff::copy() const & { + return isl_pw_aff_copy(ptr); } -isl::pw_aff pw_aff::project_domain_on_params() const -{ - auto res = isl_pw_aff_project_domain_on_params(copy()); - return manage(res); +__isl_keep isl_pw_aff *pw_aff::get() const { + return ptr; } -isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const -{ - auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release()); - return manage(res); +__isl_give isl_pw_aff *pw_aff::release() { + isl_pw_aff *tmp = ptr; + ptr = nullptr; + return tmp; } -isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const -{ - auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release()); - return manage(res); +bool pw_aff::is_null() const { + return ptr == nullptr; } -isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const -{ - auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release()); - return manage(res); +isl::ctx pw_aff::ctx() const { + return isl::ctx(isl_pw_aff_get_ctx(ptr)); } -isl::pw_aff pw_aff::reset_tuple_id(isl::dim type) const +isl::multi_pw_aff pw_aff::add(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_aff_reset_tuple_id(copy(), static_cast(type)); - return manage(res); + return isl::pw_multi_aff(*this).add(multi2); } -isl::pw_aff pw_aff::reset_user() const +isl::multi_union_pw_aff pw_aff::add(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_pw_aff_reset_user(copy()); - return manage(res); + return isl::union_pw_aff(*this).add(multi2); } -isl::pw_aff pw_aff::scale(isl::val v) const +isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const { - auto res = isl_pw_aff_scale_val(copy(), v.release()); + auto res = isl_pw_aff_add(copy(), pwaff2.release()); return manage(res); } -isl::pw_aff pw_aff::scale_down(isl::val f) const +isl::pw_multi_aff pw_aff::add(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_aff_scale_down_val(copy(), f.release()); - return manage(res); + return isl::pw_multi_aff(*this).add(pma2); } -isl::pw_aff pw_aff::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::union_pw_aff pw_aff::add(const isl::union_pw_aff &upa2) const { - auto res = isl_pw_aff_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); + return isl::union_pw_aff(*this).add(upa2); } -isl::pw_aff pw_aff::set_tuple_id(isl::dim type, isl::id id) const +isl::union_pw_multi_aff pw_aff::add(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_aff_set_tuple_id(copy(), static_cast(type), id.release()); - return manage(res); + return isl::union_pw_aff(*this).add(upma2); } -isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const +isl::pw_aff pw_aff::add(const isl::aff &pwaff2) const { - auto res = isl_pw_aff_sub(copy(), pwaff2.release()); - return manage(res); + return this->add(isl::pw_aff(pwaff2)); } -isl::pw_aff pw_aff::subtract_domain(isl::set set) const +isl::pw_aff pw_aff::add_constant(isl::val v) const { - auto res = isl_pw_aff_subtract_domain(copy(), set.release()); + auto res = isl_pw_aff_add_constant_val(copy(), v.release()); return manage(res); } -isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const +isl::pw_aff pw_aff::add_constant(long v) const { - auto res = isl_pw_aff_tdiv_q(copy(), pa2.release()); - return manage(res); + return this->add_constant(isl::val(ctx(), v)); } -isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const +isl::pw_multi_aff pw_aff::add_constant(const isl::multi_val &mv) const { - auto res = isl_pw_aff_tdiv_r(copy(), pa2.release()); - return manage(res); + return isl::pw_multi_aff(*this).add_constant(mv); } -isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const +isl::pw_aff pw_aff::add_dims(isl::dim type, unsigned int n) const { - auto res = isl_pw_aff_union_add(copy(), pwaff2.release()); + auto res = isl_pw_aff_add_dims(copy(), static_cast(type), n); return manage(res); } -isl::pw_aff pw_aff::union_max(isl::pw_aff pwaff2) const +isl::union_pw_multi_aff pw_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const { - auto res = isl_pw_aff_union_max(copy(), pwaff2.release()); - return manage(res); + return isl::union_pw_aff(*this).add_pw_multi_aff(pma); } -isl::pw_aff pw_aff::union_min(isl::pw_aff pwaff2) const +isl::union_pw_multi_aff pw_aff::apply(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_aff_union_min(copy(), pwaff2.release()); - return manage(res); + return isl::union_pw_aff(*this).apply(upma2); } -isl::pw_aff pw_aff::var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos) +isl::aff pw_aff::as_aff() const { - auto res = isl_pw_aff_var_on_domain(ls.release(), static_cast(type), pos); + auto res = isl_pw_aff_as_aff(copy()); return manage(res); } -isl::set pw_aff::zero_set() const +isl::map pw_aff::as_map() const { - auto res = isl_pw_aff_zero_set(copy()); + auto res = isl_pw_aff_as_map(copy()); return manage(res); } -// implementations for isl::pw_aff_list -pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) { - return pw_aff_list(ptr); -} -pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) { - ptr = isl_pw_aff_list_copy(ptr); - return pw_aff_list(ptr); -} - -pw_aff_list::pw_aff_list() - : ptr(nullptr) {} - -pw_aff_list::pw_aff_list(const pw_aff_list &obj) - : ptr(nullptr) +isl::multi_aff pw_aff::as_multi_aff() const { - ptr = obj.copy(); + return isl::pw_multi_aff(*this).as_multi_aff(); } - -pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr) - : ptr(ptr) {} - - -pw_aff_list &pw_aff_list::operator=(pw_aff_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; -} - -pw_aff_list::~pw_aff_list() { - if (ptr) - isl_pw_aff_list_free(ptr); -} - -__isl_give isl_pw_aff_list *pw_aff_list::copy() const & { - return isl_pw_aff_list_copy(ptr); +isl::multi_union_pw_aff pw_aff::as_multi_union_pw_aff() const +{ + return isl::union_pw_aff(*this).as_multi_union_pw_aff(); } -__isl_keep isl_pw_aff_list *pw_aff_list::get() const { - return ptr; +isl::pw_multi_aff pw_aff::as_pw_multi_aff() const +{ + return isl::union_pw_aff(*this).as_pw_multi_aff(); } -__isl_give isl_pw_aff_list *pw_aff_list::release() { - isl_pw_aff_list *tmp = ptr; - ptr = nullptr; - return tmp; +isl::set pw_aff::as_set() const +{ + return isl::pw_multi_aff(*this).as_set(); } -bool pw_aff_list::is_null() const { - return ptr == nullptr; +isl::union_map pw_aff::as_union_map() const +{ + return isl::union_pw_aff(*this).as_union_map(); } - -isl::ctx pw_aff_list::ctx() const { - return isl::ctx(isl_pw_aff_list_get_ctx(ptr)); +isl::pw_aff pw_aff::at(int pos) const +{ + return isl::pw_multi_aff(*this).at(pos); } -void pw_aff_list::dump() const { - isl_pw_aff_list_dump(get()); +isl::set pw_aff::bind(const isl::multi_id &tuple) const +{ + return isl::multi_pw_aff(*this).bind(tuple); } - -isl::pw_aff_list pw_aff_list::add(isl::pw_aff el) const +isl::set pw_aff::bind(isl::id id) const { - auto res = isl_pw_aff_list_add(copy(), el.release()); + auto res = isl_pw_aff_bind_id(copy(), id.release()); return manage(res); } -isl::pw_aff_list pw_aff_list::alloc(isl::ctx ctx, int n) +isl::set pw_aff::bind(const std::string &id) const { - auto res = isl_pw_aff_list_alloc(ctx.release(), n); - return manage(res); + return this->bind(isl::id(ctx(), id)); } -isl::pw_aff_list pw_aff_list::clear() const +isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const { - auto res = isl_pw_aff_list_clear(copy()); + auto res = isl_pw_aff_bind_domain(copy(), tuple.release()); return manage(res); } -isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const +isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const { - auto res = isl_pw_aff_list_concat(copy(), list2.release()); + auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release()); return manage(res); } -isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const +isl::pw_aff pw_aff::ceil() const { - auto res = isl_pw_aff_list_drop(copy(), first, n); + auto res = isl_pw_aff_ceil(copy()); return manage(res); } -isl::set pw_aff_list::eq_set(isl::pw_aff_list list2) const +isl::pw_aff pw_aff::coalesce() const { - auto res = isl_pw_aff_list_eq_set(copy(), list2.release()); + auto res = isl_pw_aff_coalesce(copy()); return manage(res); } -stat pw_aff_list::foreach(const std::function &fn) const +isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data); + auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release()); return manage(res); } -isl::pw_aff_list pw_aff_list::from_pw_aff(isl::pw_aff el) +isl_size pw_aff::dim(isl::dim type) const { - auto res = isl_pw_aff_list_from_pw_aff(el.release()); - return manage(res); + return isl::pw_multi_aff(*this).dim(type); } -isl::set pw_aff_list::ge_set(isl::pw_aff_list list2) const +isl::id pw_aff::dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_pw_aff_list_ge_set(copy(), list2.release()); + auto res = isl_pw_aff_get_dim_id(get(), static_cast(type), pos); return manage(res); } -isl::pw_aff pw_aff_list::get_at(int index) const +isl::id pw_aff::get_dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_pw_aff_list_get_at(get(), index); - return manage(res); + return dim_id(type, pos); } -isl::pw_aff pw_aff_list::get_pw_aff(int index) const +isl::pw_aff pw_aff::div(isl::pw_aff pa2) const { - auto res = isl_pw_aff_list_get_pw_aff(get(), index); + auto res = isl_pw_aff_div(copy(), pa2.release()); return manage(res); } -isl::set pw_aff_list::gt_set(isl::pw_aff_list list2) const +isl::set pw_aff::domain() const { - auto res = isl_pw_aff_list_gt_set(copy(), list2.release()); + auto res = isl_pw_aff_domain(copy()); return manage(res); } -isl::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::pw_aff el) const +isl::space pw_aff::domain_space() const { - auto res = isl_pw_aff_list_insert(copy(), pos, el.release()); + auto res = isl_pw_aff_get_domain_space(get()); return manage(res); } -isl::set pw_aff_list::le_set(isl::pw_aff_list list2) const +isl::space pw_aff::get_domain_space() const { - auto res = isl_pw_aff_list_le_set(copy(), list2.release()); - return manage(res); + return domain_space(); } -isl::set pw_aff_list::lt_set(isl::pw_aff_list list2) const +isl::pw_multi_aff pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_pw_aff_list_lt_set(copy(), list2.release()); - return manage(res); + return isl::pw_multi_aff(*this).drop_dims(type, first, n); } -isl::pw_aff pw_aff_list::max() const +isl::set pw_aff::eq_set(isl::pw_aff pwaff2) const { - auto res = isl_pw_aff_list_max(copy()); + auto res = isl_pw_aff_eq_set(copy(), pwaff2.release()); return manage(res); } -isl::pw_aff pw_aff_list::min() const +isl::val pw_aff::eval(isl::point pnt) const { - auto res = isl_pw_aff_list_min(copy()); + auto res = isl_pw_aff_eval(copy(), pnt.release()); return manage(res); } -isl_size pw_aff_list::n_pw_aff() const +isl::pw_multi_aff pw_aff::extract_pw_multi_aff(const isl::space &space) const { - auto res = isl_pw_aff_list_n_pw_aff(get()); - return res; + return isl::union_pw_aff(*this).extract_pw_multi_aff(space); } -isl::set pw_aff_list::ne_set(isl::pw_aff_list list2) const +isl::multi_pw_aff pw_aff::flat_range_product(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_aff_list_ne_set(copy(), list2.release()); - return manage(res); + return isl::pw_multi_aff(*this).flat_range_product(multi2); } -isl::pw_aff_list pw_aff_list::reverse() const +isl::multi_union_pw_aff pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_pw_aff_list_reverse(copy()); - return manage(res); + return isl::union_pw_aff(*this).flat_range_product(multi2); } -isl::pw_aff_list pw_aff_list::set_pw_aff(int index, isl::pw_aff el) const +isl::pw_multi_aff pw_aff::flat_range_product(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_aff_list_set_pw_aff(copy(), index, el.release()); - return manage(res); + return isl::pw_multi_aff(*this).flat_range_product(pma2); } -isl_size pw_aff_list::size() const +isl::union_pw_multi_aff pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_aff_list_size(get()); - return res; + return isl::union_pw_aff(*this).flat_range_product(upma2); } -isl::pw_aff_list pw_aff_list::swap(unsigned int pos1, unsigned int pos2) const +isl::pw_aff pw_aff::floor() const { - auto res = isl_pw_aff_list_swap(copy(), pos1, pos2); + auto res = isl_pw_aff_floor(copy()); return manage(res); } -// implementations for isl::pw_multi_aff -pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr) { - return pw_multi_aff(ptr); -} -pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr) { - ptr = isl_pw_multi_aff_copy(ptr); - return pw_multi_aff(ptr); -} - -pw_multi_aff::pw_multi_aff() - : ptr(nullptr) {} - -pw_multi_aff::pw_multi_aff(const pw_multi_aff &obj) - : ptr(nullptr) +void pw_aff::foreach_piece(const std::function &fn) const { - ptr = obj.copy(); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_set *arg_0, isl_aff *arg_1, void *arg_2) -> isl_stat { + auto *data = static_cast(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_aff_foreach_piece(get(), fn_lambda, &fn_data); + return; } - -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) -{ - auto res = isl_pw_multi_aff_from_multi_aff(ma.release()); - ptr = res; -} -pw_multi_aff::pw_multi_aff(isl::pw_aff pa) -{ - auto res = isl_pw_multi_aff_from_pw_aff(pa.release()); - ptr = res; -} -pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str) +void pw_aff::foreach_piece(const std::function &fn) const { - auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str()); - ptr = res; + return isl::pw_multi_aff(*this).foreach_piece(fn); } -pw_multi_aff &pw_multi_aff::operator=(pw_multi_aff obj) { - std::swap(this->ptr, obj.ptr); - return *this; +void pw_aff::foreach_pw_aff(const std::function &fn) const +{ + return isl::union_pw_aff(*this).foreach_pw_aff(fn); } -pw_multi_aff::~pw_multi_aff() { - if (ptr) - isl_pw_multi_aff_free(ptr); +isl::set pw_aff::ge_set(isl::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_ge_set(copy(), pwaff2.release()); + return manage(res); } -__isl_give isl_pw_multi_aff *pw_multi_aff::copy() const & { - return isl_pw_multi_aff_copy(ptr); +isl::pw_aff pw_aff::gist(isl::set context) const +{ + auto res = isl_pw_aff_gist(copy(), context.release()); + return manage(res); } -__isl_keep isl_pw_multi_aff *pw_multi_aff::get() const { - return ptr; +isl::union_pw_aff pw_aff::gist(const isl::union_set &context) const +{ + return isl::union_pw_aff(*this).gist(context); } -__isl_give isl_pw_multi_aff *pw_multi_aff::release() { - isl_pw_multi_aff *tmp = ptr; - ptr = nullptr; - return tmp; +isl::pw_aff pw_aff::gist(const isl::basic_set &context) const +{ + return this->gist(isl::set(context)); } -bool pw_multi_aff::is_null() const { - return ptr == nullptr; +isl::pw_aff pw_aff::gist(const isl::point &context) const +{ + return this->gist(isl::set(context)); } - -isl::ctx pw_multi_aff::ctx() const { - return isl::ctx(isl_pw_multi_aff_get_ctx(ptr)); +isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_gt_set(copy(), pwaff2.release()); + return manage(res); } -void pw_multi_aff::dump() const { - isl_pw_multi_aff_dump(get()); +bool pw_aff::has_range_tuple_id() const +{ + return isl::pw_multi_aff(*this).has_range_tuple_id(); } +isl::multi_pw_aff pw_aff::identity() const +{ + return isl::pw_multi_aff(*this).identity(); +} -isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const +isl::pw_aff pw_aff::insert_domain(isl::space domain) const { - auto res = isl_pw_multi_aff_add(copy(), pma2.release()); + auto res = isl_pw_aff_insert_domain(copy(), domain.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const +isl::pw_aff pw_aff::intersect_domain(isl::set set) const { - auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release()); + auto res = isl_pw_aff_intersect_domain(copy(), set.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const +isl::union_pw_aff pw_aff::intersect_domain(const isl::space &space) const { - auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release()); - return manage(res); + return isl::union_pw_aff(*this).intersect_domain(space); } -isl::pw_multi_aff pw_multi_aff::align_params(isl::space model) const +isl::union_pw_aff pw_aff::intersect_domain(const isl::union_set &uset) const { - auto res = isl_pw_multi_aff_align_params(copy(), model.release()); - return manage(res); + return isl::union_pw_aff(*this).intersect_domain(uset); } -isl::pw_multi_aff pw_multi_aff::alloc(isl::set set, isl::multi_aff maff) +isl::pw_aff pw_aff::intersect_domain(const isl::basic_set &set) const { - auto res = isl_pw_multi_aff_alloc(set.release(), maff.release()); - return manage(res); + return this->intersect_domain(isl::set(set)); } -isl::multi_aff pw_multi_aff::as_multi_aff() const +isl::pw_aff pw_aff::intersect_domain(const isl::point &set) const { - auto res = isl_pw_multi_aff_as_multi_aff(copy()); - return manage(res); + return this->intersect_domain(isl::set(set)); } -isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const +isl::union_pw_aff pw_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const { - auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release()); - return manage(res); + return isl::union_pw_aff(*this).intersect_domain_wrapped_domain(uset); } -isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const +isl::union_pw_aff pw_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const { - auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release()); - return manage(res); + return isl::union_pw_aff(*this).intersect_domain_wrapped_range(uset); } -isl::pw_multi_aff pw_multi_aff::coalesce() const +isl::pw_aff pw_aff::intersect_params(isl::set set) const { - auto res = isl_pw_multi_aff_coalesce(copy()); + auto res = isl_pw_aff_intersect_params(copy(), set.release()); return manage(res); } -isl_size pw_multi_aff::dim(isl::dim type) const +bool pw_aff::involves_locals() const { - auto res = isl_pw_multi_aff_dim(get(), static_cast(type)); - return res; + return isl::pw_multi_aff(*this).involves_locals(); } -isl::set pw_multi_aff::domain() const +bool pw_aff::involves_nan() const { - auto res = isl_pw_multi_aff_domain(copy()); - return manage(res); + return isl::multi_pw_aff(*this).involves_nan(); } -isl::pw_multi_aff pw_multi_aff::domain_map(isl::space space) +bool pw_aff::involves_param(const isl::id &id) const { - auto res = isl_pw_multi_aff_domain_map(space.release()); - return manage(res); + return isl::pw_multi_aff(*this).involves_param(id); } -isl::pw_multi_aff pw_multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +bool pw_aff::involves_param(const std::string &id) const { - auto res = isl_pw_multi_aff_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + return this->involves_param(isl::id(ctx(), id)); } -isl::pw_multi_aff pw_multi_aff::drop_unused_params() const +bool pw_aff::involves_param(const isl::id_list &list) const { - auto res = isl_pw_multi_aff_drop_unused_params(copy()); - return manage(res); + return isl::pw_multi_aff(*this).involves_param(list); } -isl::pw_multi_aff pw_multi_aff::empty(isl::space space) +bool pw_aff::is_cst() const { - auto res = isl_pw_multi_aff_empty(space.release()); - return manage(res); + auto res = isl_pw_aff_is_cst(get()); + return res; } -int pw_multi_aff::find_dim_by_name(isl::dim type, const std::string &name) const +bool pw_aff::is_equal(const isl::pw_aff &pa2) const { - auto res = isl_pw_multi_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); + auto res = isl_pw_aff_is_equal(get(), pa2.get()); return res; } -isl::pw_multi_aff pw_multi_aff::fix_si(isl::dim type, unsigned int pos, int value) const +bool pw_aff::isa_aff() const { - auto res = isl_pw_multi_aff_fix_si(copy(), static_cast(type), pos, value); - return manage(res); + auto res = isl_pw_aff_isa_aff(get()); + return res; } -isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const +bool pw_aff::isa_multi_aff() const { - auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release()); - return manage(res); + return isl::pw_multi_aff(*this).isa_multi_aff(); } -stat pw_multi_aff::foreach_piece(const std::function &fn) const +bool pw_aff::isa_pw_multi_aff() const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_set *arg_0, isl_multi_aff *arg_1, void *arg_2) -> isl_stat { - auto *data = static_cast(arg_2); - stat ret = (*data->func)(manage(arg_0), manage(arg_1)); - return ret.release(); - }; - auto res = isl_pw_multi_aff_foreach_piece(get(), fn_lambda, &fn_data); - return manage(res); + return isl::union_pw_aff(*this).isa_pw_multi_aff(); } -isl::pw_multi_aff pw_multi_aff::from_domain(isl::set set) +isl::set pw_aff::le_set(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_from_domain(set.release()); + auto res = isl_pw_aff_le_set(copy(), pwaff2.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::from_map(isl::map map) +isl::pw_aff_list pw_aff::list() const { - auto res = isl_pw_multi_aff_from_map(map.release()); - return manage(res); + return isl::multi_pw_aff(*this).list(); } -isl::pw_multi_aff pw_multi_aff::from_multi_pw_aff(isl::multi_pw_aff mpa) +isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_from_multi_pw_aff(mpa.release()); + auto res = isl_pw_aff_lt_set(copy(), pwaff2.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::from_set(isl::set set) +isl::multi_pw_aff pw_aff::max(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_from_set(set.release()); - return manage(res); + return isl::pw_multi_aff(*this).max(multi2); } -isl::id pw_multi_aff::get_dim_id(isl::dim type, unsigned int pos) const +isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_get_dim_id(get(), static_cast(type), pos); + auto res = isl_pw_aff_max(copy(), pwaff2.release()); return manage(res); } -std::string pw_multi_aff::get_dim_name(isl::dim type, unsigned int pos) const +isl::pw_aff pw_aff::max(const isl::aff &pwaff2) const { - auto res = isl_pw_multi_aff_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + return this->max(isl::pw_aff(pwaff2)); } -isl::space pw_multi_aff::get_domain_space() const +isl::multi_val pw_aff::max_multi_val() const { - auto res = isl_pw_multi_aff_get_domain_space(get()); - return manage(res); + return isl::pw_multi_aff(*this).max_multi_val(); } -isl::pw_aff pw_multi_aff::get_pw_aff(int pos) const +isl::multi_pw_aff pw_aff::min(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_get_pw_aff(get(), pos); - return manage(res); + return isl::pw_multi_aff(*this).min(multi2); } -isl::space pw_multi_aff::get_space() const +isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_get_space(get()); + auto res = isl_pw_aff_min(copy(), pwaff2.release()); return manage(res); } -isl::id pw_multi_aff::get_tuple_id(isl::dim type) const +isl::pw_aff pw_aff::min(const isl::aff &pwaff2) const { - auto res = isl_pw_multi_aff_get_tuple_id(get(), static_cast(type)); - return manage(res); + return this->min(isl::pw_aff(pwaff2)); } -std::string pw_multi_aff::get_tuple_name(isl::dim type) const +isl::multi_val pw_aff::min_multi_val() const { - auto res = isl_pw_multi_aff_get_tuple_name(get(), static_cast(type)); - std::string tmp(res); - return tmp; + return isl::pw_multi_aff(*this).min_multi_val(); } -isl::pw_multi_aff pw_multi_aff::gist(isl::set set) const +isl::pw_aff pw_aff::mod(isl::val mod) const { - auto res = isl_pw_multi_aff_gist(copy(), set.release()); + auto res = isl_pw_aff_mod_val(copy(), mod.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::gist_params(isl::set set) const +isl::pw_aff pw_aff::mod(long mod) const { - auto res = isl_pw_multi_aff_gist_params(copy(), set.release()); - return manage(res); + return this->mod(isl::val(ctx(), mod)); } -boolean pw_multi_aff::has_tuple_id(isl::dim type) const +isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_has_tuple_id(get(), static_cast(type)); + auto res = isl_pw_aff_mul(copy(), pwaff2.release()); return manage(res); } -boolean pw_multi_aff::has_tuple_name(isl::dim type) const +isl_size pw_aff::n_piece() const { - auto res = isl_pw_multi_aff_has_tuple_name(get(), static_cast(type)); - return manage(res); + return isl::pw_multi_aff(*this).n_piece(); } -isl::pw_multi_aff pw_multi_aff::identity(isl::space space) +isl::set pw_aff::ne_set(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_identity(space.release()); + auto res = isl_pw_aff_ne_set(copy(), pwaff2.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space) +isl::pw_aff pw_aff::neg() const { - auto res = isl_pw_multi_aff_identity_on_domain_space(space.release()); + auto res = isl_pw_aff_neg(copy()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) const +isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id) { - auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release()); + auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const +bool pw_aff::plain_is_empty() const { - auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release()); - return manage(res); + return isl::union_pw_aff(*this).plain_is_empty(); } -isl::pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(isl::set set) const +bool pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_intersect_domain_wrapped_domain(copy(), set.release()); - return manage(res); + return isl::pw_multi_aff(*this).plain_is_equal(multi2); } -isl::pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(isl::set set) const +bool pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_intersect_domain_wrapped_range(copy(), set.release()); - return manage(res); + return isl::union_pw_aff(*this).plain_is_equal(multi2); } -isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const +isl::pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_multi_aff_intersect_params(copy(), set.release()); - return manage(res); + return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2); } -boolean pw_multi_aff::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_multi_aff_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return isl::union_pw_aff(*this).preimage_domain_wrapped_domain(upma2); } -boolean pw_multi_aff::involves_locals() const +isl::multi_pw_aff pw_aff::product(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_involves_locals(get()); - return manage(res); + return isl::pw_multi_aff(*this).product(multi2); } -boolean pw_multi_aff::involves_nan() const +isl::pw_multi_aff pw_aff::product(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_multi_aff_involves_nan(get()); - return manage(res); + return isl::pw_multi_aff(*this).product(pma2); } -boolean pw_multi_aff::involves_param_id(const isl::id &id) const +isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const { - auto res = isl_pw_multi_aff_involves_param_id(get(), id.get()); + auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release()); return manage(res); } -boolean pw_multi_aff::is_equal(const isl::pw_multi_aff &pma2) const +isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const { - auto res = isl_pw_multi_aff_is_equal(get(), pma2.get()); + auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release()); return manage(res); } -boolean pw_multi_aff::isa_multi_aff() const +isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const { - auto res = isl_pw_multi_aff_isa_multi_aff(get()); + auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release()); return manage(res); } -isl::multi_val pw_multi_aff::max_multi_val() const +isl::union_pw_aff pw_aff::pullback(const isl::union_pw_multi_aff &upma) const { - auto res = isl_pw_multi_aff_max_multi_val(copy()); - return manage(res); + return isl::union_pw_aff(*this).pullback(upma); } -isl::multi_val pw_multi_aff::min_multi_val() const +isl::pw_multi_aff_list pw_aff::pw_multi_aff_list() const { - auto res = isl_pw_multi_aff_min_multi_val(copy()); - return manage(res); + return isl::union_pw_aff(*this).pw_multi_aff_list(); } -isl::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::set domain, isl::multi_val mv) +isl::pw_multi_aff pw_aff::range_factor_domain() const { - auto res = isl_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release()); - return manage(res); + return isl::pw_multi_aff(*this).range_factor_domain(); } -isl_size pw_multi_aff::n_piece() const +isl::pw_multi_aff pw_aff::range_factor_range() const { - auto res = isl_pw_multi_aff_n_piece(get()); - return res; + return isl::pw_multi_aff(*this).range_factor_range(); } -isl::pw_multi_aff pw_multi_aff::neg() const +isl::multi_pw_aff pw_aff::range_product(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_neg(copy()); - return manage(res); + return isl::pw_multi_aff(*this).range_product(multi2); } -boolean pw_multi_aff::plain_is_equal(const isl::pw_multi_aff &pma2) const +isl::multi_union_pw_aff pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_plain_is_equal(get(), pma2.get()); - return manage(res); + return isl::union_pw_aff(*this).range_product(multi2); } -isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const +isl::pw_multi_aff pw_aff::range_product(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(copy(), pma2.release()); - return manage(res); + return isl::pw_multi_aff(*this).range_product(pma2); } -isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const +isl::union_pw_multi_aff pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_multi_aff_product(copy(), pma2.release()); - return manage(res); + return isl::union_pw_aff(*this).range_product(upma2); } -isl::pw_multi_aff pw_multi_aff::project_domain_on_params() const +isl::id pw_aff::range_tuple_id() const { - auto res = isl_pw_multi_aff_project_domain_on_params(copy()); - return manage(res); + return isl::pw_multi_aff(*this).range_tuple_id(); } -isl::pw_multi_aff pw_multi_aff::project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n) +isl::multi_pw_aff pw_aff::reset_range_tuple_id() const { - auto res = isl_pw_multi_aff_project_out_map(space.release(), static_cast(type), first, n); - return manage(res); + return isl::multi_pw_aff(*this).reset_range_tuple_id(); } -isl::pw_multi_aff pw_multi_aff::pullback(isl::multi_aff ma) const +isl::multi_pw_aff pw_aff::reset_tuple_id(isl::dim type) const { - auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release()); - return manage(res); + return isl::multi_pw_aff(*this).reset_tuple_id(type); } -isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const +isl::multi_pw_aff pw_aff::scale(const isl::multi_val &mv) const { - auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release()); - return manage(res); + return isl::multi_pw_aff(*this).scale(mv); } -isl::pw_multi_aff pw_multi_aff::range_factor_domain() const +isl::pw_aff pw_aff::scale(isl::val v) const { - auto res = isl_pw_multi_aff_range_factor_domain(copy()); + auto res = isl_pw_aff_scale_val(copy(), v.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::range_factor_range() const +isl::pw_aff pw_aff::scale(long v) const { - auto res = isl_pw_multi_aff_range_factor_range(copy()); - return manage(res); + return this->scale(isl::val(ctx(), v)); } -isl::pw_multi_aff pw_multi_aff::range_map(isl::space space) +isl::multi_pw_aff pw_aff::scale_down(const isl::multi_val &mv) const { - auto res = isl_pw_multi_aff_range_map(space.release()); - return manage(res); + return isl::multi_pw_aff(*this).scale_down(mv); } -isl::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const +isl::pw_aff pw_aff::scale_down(isl::val f) const { - auto res = isl_pw_multi_aff_range_product(copy(), pma2.release()); + auto res = isl_pw_aff_scale_down_val(copy(), f.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::reset_tuple_id(isl::dim type) const +isl::pw_aff pw_aff::scale_down(long f) const { - auto res = isl_pw_multi_aff_reset_tuple_id(copy(), static_cast(type)); - return manage(res); + return this->scale_down(isl::val(ctx(), f)); } -isl::pw_multi_aff pw_multi_aff::reset_user() const +isl::multi_pw_aff pw_aff::set_at(int pos, const isl::pw_aff &el) const { - auto res = isl_pw_multi_aff_reset_user(copy()); - return manage(res); + return isl::pw_multi_aff(*this).set_at(pos, el); } -isl::pw_multi_aff pw_multi_aff::scale(isl::val v) const +isl::multi_union_pw_aff pw_aff::set_at(int pos, const isl::union_pw_aff &el) const { - auto res = isl_pw_multi_aff_scale_val(copy(), v.release()); - return manage(res); + return isl::union_pw_aff(*this).set_at(pos, el); } -isl::pw_multi_aff pw_multi_aff::scale_down(isl::val v) const +isl::multi_pw_aff pw_aff::set_pw_aff(int pos, const isl::pw_aff &el) const { - auto res = isl_pw_multi_aff_scale_down_val(copy(), v.release()); - return manage(res); + return isl::pw_multi_aff(*this).set_pw_aff(pos, el); } -isl::pw_multi_aff pw_multi_aff::scale_multi_val(isl::multi_val mv) const +isl::pw_multi_aff pw_aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const { - auto res = isl_pw_multi_aff_scale_multi_val(copy(), mv.release()); - return manage(res); + return isl::pw_multi_aff(*this).set_pw_aff(pos, pa); } -isl::pw_multi_aff pw_multi_aff::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::pw_multi_aff pw_aff::set_range_tuple(const isl::id &id) const { - auto res = isl_pw_multi_aff_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); + return isl::pw_multi_aff(*this).set_range_tuple(id); } -isl::pw_multi_aff pw_multi_aff::set_pw_aff(unsigned int pos, isl::pw_aff pa) const +isl::pw_multi_aff pw_aff::set_range_tuple(const std::string &id) const { - auto res = isl_pw_multi_aff_set_pw_aff(copy(), pos, pa.release()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } -isl::pw_multi_aff pw_multi_aff::set_tuple_id(isl::dim type, isl::id id) const +isl::pw_aff pw_aff::set_tuple_id(isl::dim type, isl::id id) const { - auto res = isl_pw_multi_aff_set_tuple_id(copy(), static_cast(type), id.release()); + auto res = isl_pw_aff_set_tuple_id(copy(), static_cast(type), id.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::sub(isl::pw_multi_aff pma2) const +isl::pw_aff pw_aff::set_tuple_id(isl::dim type, const std::string &id) const { - auto res = isl_pw_multi_aff_sub(copy(), pma2.release()); - return manage(res); + return this->set_tuple_id(type, isl::id(ctx(), id)); } -isl::pw_multi_aff pw_multi_aff::subtract_domain(isl::set set) const +isl::multi_union_pw_aff pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const { - auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release()); - return manage(res); + return isl::union_pw_aff(*this).set_union_pw_aff(pos, el); } -isl::pw_multi_aff pw_multi_aff::union_add(isl::pw_multi_aff pma2) const +isl_size pw_aff::size() const { - auto res = isl_pw_multi_aff_union_add(copy(), pma2.release()); - return manage(res); + return isl::multi_pw_aff(*this).size(); } -isl::pw_multi_aff pw_multi_aff::union_lexmax(isl::pw_multi_aff pma2) const +isl::space pw_aff::space() const { - auto res = isl_pw_multi_aff_union_lexmax(copy(), pma2.release()); + auto res = isl_pw_aff_get_space(get()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::union_lexmin(isl::pw_multi_aff pma2) const +isl::space pw_aff::get_space() const { - auto res = isl_pw_multi_aff_union_lexmin(copy(), pma2.release()); - return manage(res); + return space(); } -isl::pw_multi_aff pw_multi_aff::zero(isl::space space) +isl::multi_pw_aff pw_aff::sub(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_zero(space.release()); - return manage(res); + return isl::pw_multi_aff(*this).sub(multi2); } -// implementations for isl::pw_multi_aff_list -pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) { - return pw_multi_aff_list(ptr); -} -pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) { - ptr = isl_pw_multi_aff_list_copy(ptr); - return pw_multi_aff_list(ptr); +isl::multi_union_pw_aff pw_aff::sub(const isl::multi_union_pw_aff &multi2) const +{ + return isl::union_pw_aff(*this).sub(multi2); } -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) +isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const { - ptr = obj.copy(); + auto res = isl_pw_aff_sub(copy(), pwaff2.release()); + return manage(res); } +isl::pw_multi_aff pw_aff::sub(const isl::pw_multi_aff &pma2) const +{ + return isl::pw_multi_aff(*this).sub(pma2); +} -pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr) - : ptr(ptr) {} - +isl::union_pw_aff pw_aff::sub(const isl::union_pw_aff &upa2) const +{ + return isl::union_pw_aff(*this).sub(upa2); +} -pw_multi_aff_list &pw_multi_aff_list::operator=(pw_multi_aff_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::union_pw_multi_aff pw_aff::sub(const isl::union_pw_multi_aff &upma2) const +{ + return isl::union_pw_aff(*this).sub(upma2); } -pw_multi_aff_list::~pw_multi_aff_list() { - if (ptr) - isl_pw_multi_aff_list_free(ptr); +isl::pw_aff pw_aff::sub(const isl::aff &pwaff2) const +{ + return this->sub(isl::pw_aff(pwaff2)); } -__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & { - return isl_pw_multi_aff_list_copy(ptr); +isl::pw_aff pw_aff::subtract_domain(isl::set set) const +{ + auto res = isl_pw_aff_subtract_domain(copy(), set.release()); + return manage(res); } -__isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const { - return ptr; +isl::union_pw_aff pw_aff::subtract_domain(const isl::space &space) const +{ + return isl::union_pw_aff(*this).subtract_domain(space); } -__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() { - isl_pw_multi_aff_list *tmp = ptr; - ptr = nullptr; - return tmp; +isl::union_pw_aff pw_aff::subtract_domain(const isl::union_set &uset) const +{ + return isl::union_pw_aff(*this).subtract_domain(uset); } -bool pw_multi_aff_list::is_null() const { - return ptr == nullptr; +isl::pw_aff pw_aff::subtract_domain(const isl::basic_set &set) const +{ + return this->subtract_domain(isl::set(set)); } +isl::pw_aff pw_aff::subtract_domain(const isl::point &set) const +{ + return this->subtract_domain(isl::set(set)); +} -isl::ctx pw_multi_aff_list::ctx() const { - return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr)); +isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const +{ + auto res = isl_pw_aff_tdiv_q(copy(), pa2.release()); + return manage(res); } -void pw_multi_aff_list::dump() const { - isl_pw_multi_aff_list_dump(get()); +isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const +{ + auto res = isl_pw_aff_tdiv_r(copy(), pa2.release()); + return manage(res); } - -isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const +isl::pw_aff_list pw_aff::to_list() const { - auto res = isl_pw_multi_aff_list_add(copy(), el.release()); + auto res = isl_pw_aff_to_list(copy()); return manage(res); } -isl::pw_multi_aff_list pw_multi_aff_list::alloc(isl::ctx ctx, int n) +isl::multi_pw_aff pw_aff::to_multi_pw_aff() const { - auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n); - return manage(res); + return isl::pw_multi_aff(*this).to_multi_pw_aff(); } -isl::pw_multi_aff_list pw_multi_aff_list::clear() const +isl::union_pw_aff pw_aff::to_union_pw_aff() const { - auto res = isl_pw_multi_aff_list_clear(copy()); + auto res = isl_pw_aff_to_union_pw_aff(copy()); return manage(res); } -isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const +isl::union_pw_multi_aff pw_aff::to_union_pw_multi_aff() const { - auto res = isl_pw_multi_aff_list_concat(copy(), list2.release()); - return manage(res); + return isl::pw_multi_aff(*this).to_union_pw_multi_aff(); } -isl::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const +isl::id pw_aff::tuple_id(isl::dim type) const { - auto res = isl_pw_multi_aff_list_drop(copy(), first, n); + auto res = isl_pw_aff_get_tuple_id(get(), static_cast(type)); return manage(res); } -stat pw_multi_aff_list::foreach(const std::function &fn) const +isl::id pw_aff::get_tuple_id(isl::dim type) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); + return tuple_id(type); } -isl::pw_multi_aff_list pw_multi_aff_list::from_pw_multi_aff(isl::pw_multi_aff el) +isl::multi_pw_aff pw_aff::unbind_params_insert_domain(const isl::multi_id &domain) const { - auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release()); - return manage(res); + return isl::pw_multi_aff(*this).unbind_params_insert_domain(domain); } -isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const +isl::multi_pw_aff pw_aff::union_add(const isl::multi_pw_aff &mpa2) const { - auto res = isl_pw_multi_aff_list_get_at(get(), index); - return manage(res); + return isl::pw_multi_aff(*this).union_add(mpa2); } -isl::pw_multi_aff pw_multi_aff_list::get_pw_multi_aff(int index) const +isl::multi_union_pw_aff pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const { - auto res = isl_pw_multi_aff_list_get_pw_multi_aff(get(), index); - return manage(res); + return isl::union_pw_aff(*this).union_add(mupa2); } -isl::pw_multi_aff_list pw_multi_aff_list::insert(unsigned int pos, isl::pw_multi_aff el) const +isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release()); + auto res = isl_pw_aff_union_add(copy(), pwaff2.release()); return manage(res); } -isl_size pw_multi_aff_list::n_pw_multi_aff() const +isl::pw_multi_aff pw_aff::union_add(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_multi_aff_list_n_pw_multi_aff(get()); - return res; + return isl::pw_multi_aff(*this).union_add(pma2); } -isl::pw_multi_aff_list pw_multi_aff_list::reverse() const +isl::union_pw_aff pw_aff::union_add(const isl::union_pw_aff &upa2) const { - auto res = isl_pw_multi_aff_list_reverse(copy()); - return manage(res); + return isl::union_pw_aff(*this).union_add(upa2); } -isl::pw_multi_aff_list pw_multi_aff_list::set_pw_multi_aff(int index, isl::pw_multi_aff el) const +isl::union_pw_multi_aff pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_multi_aff_list_set_pw_multi_aff(copy(), index, el.release()); - return manage(res); + return isl::union_pw_aff(*this).union_add(upma2); } -isl_size pw_multi_aff_list::size() const +isl::pw_aff pw_aff::union_add(const isl::aff &pwaff2) const { - auto res = isl_pw_multi_aff_list_size(get()); - return res; + return this->union_add(isl::pw_aff(pwaff2)); } -isl::pw_multi_aff_list pw_multi_aff_list::swap(unsigned int pos1, unsigned int pos2) const +isl::pw_aff pw_aff::var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos) { - auto res = isl_pw_multi_aff_list_swap(copy(), pos1, pos2); + auto res = isl_pw_aff_var_on_domain(ls.release(), static_cast(type), pos); return manage(res); } -// implementations for isl::pw_qpolynomial -pw_qpolynomial manage(__isl_take isl_pw_qpolynomial *ptr) { - return pw_qpolynomial(ptr); +inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj) +{ + char *str = isl_pw_aff_to_str(obj.get()); + os << str; + free(str); + return os; +} + +// implementations for isl::pw_aff_list +pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) { + return pw_aff_list(ptr); } -pw_qpolynomial manage_copy(__isl_keep isl_pw_qpolynomial *ptr) { - ptr = isl_pw_qpolynomial_copy(ptr); - return pw_qpolynomial(ptr); +pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) { + ptr = isl_pw_aff_list_copy(ptr); + return pw_aff_list(ptr); } -pw_qpolynomial::pw_qpolynomial() +pw_aff_list::pw_aff_list() : ptr(nullptr) {} -pw_qpolynomial::pw_qpolynomial(const pw_qpolynomial &obj) +pw_aff_list::pw_aff_list(const pw_aff_list &obj) : ptr(nullptr) { ptr = obj.copy(); } - -pw_qpolynomial::pw_qpolynomial(__isl_take isl_pw_qpolynomial *ptr) +pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr) : ptr(ptr) {} -pw_qpolynomial::pw_qpolynomial(isl::ctx ctx, const std::string &str) +pw_aff_list::pw_aff_list(isl::ctx ctx, int n) +{ + auto res = isl_pw_aff_list_alloc(ctx.release(), n); + ptr = res; +} + +pw_aff_list::pw_aff_list(isl::pw_aff el) +{ + auto res = isl_pw_aff_list_from_pw_aff(el.release()); + ptr = res; +} + +pw_aff_list::pw_aff_list(isl::ctx ctx, const std::string &str) { - auto res = isl_pw_qpolynomial_read_from_str(ctx.release(), str.c_str()); + auto res = isl_pw_aff_list_read_from_str(ctx.release(), str.c_str()); ptr = res; } -pw_qpolynomial &pw_qpolynomial::operator=(pw_qpolynomial obj) { +pw_aff_list &pw_aff_list::operator=(pw_aff_list obj) { std::swap(this->ptr, obj.ptr); return *this; } -pw_qpolynomial::~pw_qpolynomial() { +pw_aff_list::~pw_aff_list() { if (ptr) - isl_pw_qpolynomial_free(ptr); + isl_pw_aff_list_free(ptr); } -__isl_give isl_pw_qpolynomial *pw_qpolynomial::copy() const & { - return isl_pw_qpolynomial_copy(ptr); +__isl_give isl_pw_aff_list *pw_aff_list::copy() const & { + return isl_pw_aff_list_copy(ptr); } -__isl_keep isl_pw_qpolynomial *pw_qpolynomial::get() const { +__isl_keep isl_pw_aff_list *pw_aff_list::get() const { return ptr; } -__isl_give isl_pw_qpolynomial *pw_qpolynomial::release() { - isl_pw_qpolynomial *tmp = ptr; +__isl_give isl_pw_aff_list *pw_aff_list::release() { + isl_pw_aff_list *tmp = ptr; ptr = nullptr; return tmp; } -bool pw_qpolynomial::is_null() const { +bool pw_aff_list::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 pw_qpolynomial::ctx() const { - return isl::ctx(isl_pw_qpolynomial_get_ctx(ptr)); +isl::pw_aff_list pw_aff_list::add(isl::pw_aff el) const +{ + auto res = isl_pw_aff_list_add(copy(), el.release()); + return manage(res); } -void pw_qpolynomial::dump() const { - isl_pw_qpolynomial_dump(get()); +isl::pw_aff pw_aff_list::at(int index) const +{ + auto res = isl_pw_aff_list_get_at(get(), index); + return manage(res); } +isl::pw_aff pw_aff_list::get_at(int index) const +{ + return at(index); +} -isl::pw_qpolynomial pw_qpolynomial::add(isl::pw_qpolynomial pwqp2) const +isl::pw_aff_list pw_aff_list::clear() const { - auto res = isl_pw_qpolynomial_add(copy(), pwqp2.release()); + auto res = isl_pw_aff_list_clear(copy()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::add_dims(isl::dim type, unsigned int n) const +isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const { - auto res = isl_pw_qpolynomial_add_dims(copy(), static_cast(type), n); + auto res = isl_pw_aff_list_concat(copy(), list2.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::alloc(isl::set set, isl::qpolynomial qp) +isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const { - auto res = isl_pw_qpolynomial_alloc(set.release(), qp.release()); + auto res = isl_pw_aff_list_drop(copy(), first, n); return manage(res); } -isl::qpolynomial pw_qpolynomial::as_qpolynomial() const +void pw_aff_list::foreach(const std::function &fn) const { - auto res = isl_pw_qpolynomial_as_qpolynomial(copy()); - return manage(res); + struct fn_data { + std::function 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(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); + return; } -isl::pw_qpolynomial pw_qpolynomial::coalesce() const +isl::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::pw_aff el) const { - auto res = isl_pw_qpolynomial_coalesce(copy()); + auto res = isl_pw_aff_list_insert(copy(), pos, el.release()); return manage(res); } -isl_size pw_qpolynomial::dim(isl::dim type) const +isl_size pw_aff_list::size() const { - auto res = isl_pw_qpolynomial_dim(get(), static_cast(type)); + auto res = isl_pw_aff_list_size(get()); return res; } -isl::set pw_qpolynomial::domain() const +inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj) { - auto res = isl_pw_qpolynomial_domain(copy()); - return manage(res); + char *str = isl_pw_aff_list_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::pw_qpolynomial pw_qpolynomial::drop_dims(isl::dim type, unsigned int first, unsigned int n) const -{ - auto res = isl_pw_qpolynomial_drop_dims(copy(), static_cast(type), first, n); - return manage(res); +// implementations for isl::pw_multi_aff +pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr) { + return pw_multi_aff(ptr); +} +pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr) { + ptr = isl_pw_multi_aff_copy(ptr); + return pw_multi_aff(ptr); } -isl::pw_qpolynomial pw_qpolynomial::drop_unused_params() const +pw_multi_aff::pw_multi_aff() + : ptr(nullptr) {} + +pw_multi_aff::pw_multi_aff(const pw_multi_aff &obj) + : ptr(nullptr) { - auto res = isl_pw_qpolynomial_drop_unused_params(copy()); - return manage(res); + ptr = obj.copy(); } -isl::val pw_qpolynomial::eval(isl::point pnt) 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) { - auto res = isl_pw_qpolynomial_eval(copy(), pnt.release()); - return manage(res); + auto res = isl_pw_multi_aff_from_multi_aff(ma.release()); + ptr = res; } -int pw_qpolynomial::find_dim_by_name(isl::dim type, const std::string &name) const +pw_multi_aff::pw_multi_aff(isl::pw_aff pa) { - auto res = isl_pw_qpolynomial_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + auto res = isl_pw_multi_aff_from_pw_aff(pa.release()); + ptr = res; } -isl::pw_qpolynomial pw_qpolynomial::fix_val(isl::dim type, unsigned int n, isl::val v) const +pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str) { - auto res = isl_pw_qpolynomial_fix_val(copy(), static_cast(type), n, v.release()); - return manage(res); + auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +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)); } -stat pw_qpolynomial::foreach_piece(const std::function &fn) const +isl::multi_pw_aff pw_multi_aff::add(const isl::multi_pw_aff &multi2) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_set *arg_0, isl_qpolynomial *arg_1, void *arg_2) -> isl_stat { - auto *data = static_cast(arg_2); - stat ret = (*data->func)(manage(arg_0), manage(arg_1)); - return ret.release(); - }; - auto res = isl_pw_qpolynomial_foreach_piece(get(), fn_lambda, &fn_data); - return manage(res); + return isl::multi_pw_aff(*this).add(multi2); } -isl::pw_qpolynomial pw_qpolynomial::from_pw_aff(isl::pw_aff pwaff) +isl::multi_union_pw_aff pw_multi_aff::add(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_pw_qpolynomial_from_pw_aff(pwaff.release()); - return manage(res); + return isl::multi_pw_aff(*this).add(multi2); } -isl::pw_qpolynomial pw_qpolynomial::from_qpolynomial(isl::qpolynomial qp) +isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const { - auto res = isl_pw_qpolynomial_from_qpolynomial(qp.release()); + auto res = isl_pw_multi_aff_add(copy(), pma2.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::from_range() const +isl::union_pw_multi_aff pw_multi_aff::add(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_qpolynomial_from_range(copy()); - return manage(res); + return isl::union_pw_multi_aff(*this).add(upma2); } -isl::space pw_qpolynomial::get_domain_space() const +isl::pw_multi_aff pw_multi_aff::add(const isl::multi_aff &pma2) const { - auto res = isl_pw_qpolynomial_get_domain_space(get()); - return manage(res); + return this->add(isl::pw_multi_aff(pma2)); } -isl::space pw_qpolynomial::get_space() const +isl::pw_multi_aff pw_multi_aff::add(const isl::pw_aff &pma2) const { - auto res = isl_pw_qpolynomial_get_space(get()); - return manage(res); + return this->add(isl::pw_multi_aff(pma2)); } -isl::pw_qpolynomial pw_qpolynomial::gist(isl::set context) const +isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const { - auto res = isl_pw_qpolynomial_gist(copy(), context.release()); + auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::gist_params(isl::set context) const +isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const { - auto res = isl_pw_qpolynomial_gist_params(copy(), context.release()); + auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release()); return manage(res); } -boolean pw_qpolynomial::has_equal_space(const isl::pw_qpolynomial &pwqp2) const +isl::pw_multi_aff pw_multi_aff::add_constant(long v) const { - auto res = isl_pw_qpolynomial_has_equal_space(get(), pwqp2.get()); - return manage(res); + return this->add_constant(isl::val(ctx(), v)); } -isl::pw_qpolynomial pw_qpolynomial::insert_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_pw_multi_aff pw_multi_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const { - auto res = isl_pw_qpolynomial_insert_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::union_pw_multi_aff(*this).add_pw_multi_aff(pma); } -isl::pw_qpolynomial pw_qpolynomial::intersect_domain(isl::set set) const +isl::union_pw_multi_aff pw_multi_aff::apply(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_qpolynomial_intersect_domain(copy(), set.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).apply(upma2); } -isl::pw_qpolynomial pw_qpolynomial::intersect_domain_wrapped_domain(isl::set set) const +isl::map pw_multi_aff::as_map() const { - auto res = isl_pw_qpolynomial_intersect_domain_wrapped_domain(copy(), set.release()); + auto res = isl_pw_multi_aff_as_map(copy()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::intersect_domain_wrapped_range(isl::set set) const +isl::multi_aff pw_multi_aff::as_multi_aff() const { - auto res = isl_pw_qpolynomial_intersect_domain_wrapped_range(copy(), set.release()); + auto res = isl_pw_multi_aff_as_multi_aff(copy()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::intersect_params(isl::set set) const +isl::multi_union_pw_aff pw_multi_aff::as_multi_union_pw_aff() const { - auto res = isl_pw_qpolynomial_intersect_params(copy(), set.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff(); } -boolean pw_qpolynomial::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::pw_multi_aff pw_multi_aff::as_pw_multi_aff() const { - auto res = isl_pw_qpolynomial_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return isl::union_pw_multi_aff(*this).as_pw_multi_aff(); } -boolean pw_qpolynomial::involves_nan() const +isl::set pw_multi_aff::as_set() const { - auto res = isl_pw_qpolynomial_involves_nan(get()); + auto res = isl_pw_multi_aff_as_set(copy()); return manage(res); } -boolean pw_qpolynomial::involves_param_id(const isl::id &id) const +isl::union_map pw_multi_aff::as_union_map() const { - auto res = isl_pw_qpolynomial_involves_param_id(get(), id.get()); - return manage(res); + return isl::union_pw_multi_aff(*this).as_union_map(); } -boolean pw_qpolynomial::is_zero() const +isl::pw_aff pw_multi_aff::at(int pos) const { - auto res = isl_pw_qpolynomial_is_zero(get()); + auto res = isl_pw_multi_aff_get_at(get(), pos); return manage(res); } -boolean pw_qpolynomial::isa_qpolynomial() const +isl::pw_aff pw_multi_aff::get_at(int pos) const { - auto res = isl_pw_qpolynomial_isa_qpolynomial(get()); - return manage(res); + return at(pos); } -isl::val pw_qpolynomial::max() const +isl::set pw_multi_aff::bind(const isl::multi_id &tuple) const { - auto res = isl_pw_qpolynomial_max(copy()); - return manage(res); + return isl::multi_pw_aff(*this).bind(tuple); } -isl::val pw_qpolynomial::min() const +isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const { - auto res = isl_pw_qpolynomial_min(copy()); + auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const +isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const { - auto res = isl_pw_qpolynomial_move_dims(copy(), static_cast(dst_type), dst_pos, static_cast(src_type), src_pos, n); + auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::mul(isl::pw_qpolynomial pwqp2) const +isl::pw_multi_aff pw_multi_aff::coalesce() const { - auto res = isl_pw_qpolynomial_mul(copy(), pwqp2.release()); + auto res = isl_pw_multi_aff_coalesce(copy()); return manage(res); } -isl_size pw_qpolynomial::n_piece() const +isl_size pw_multi_aff::dim(isl::dim type) const { - auto res = isl_pw_qpolynomial_n_piece(get()); + auto res = isl_pw_multi_aff_dim(get(), static_cast(type)); return res; } -isl::pw_qpolynomial pw_qpolynomial::neg() const +isl::set pw_multi_aff::domain() const { - auto res = isl_pw_qpolynomial_neg(copy()); + auto res = isl_pw_multi_aff_domain(copy()); return manage(res); } -boolean pw_qpolynomial::plain_is_equal(const isl::pw_qpolynomial &pwqp2) const +isl::pw_multi_aff pw_multi_aff::domain_map(isl::space space) { - auto res = isl_pw_qpolynomial_plain_is_equal(get(), pwqp2.get()); + auto res = isl_pw_multi_aff_domain_map(space.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::pow(unsigned int exponent) const +isl::pw_multi_aff pw_multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_pw_qpolynomial_pow(copy(), exponent); + auto res = isl_pw_multi_aff_drop_dims(copy(), static_cast(type), first, n); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::project_domain_on_params() const +isl::pw_multi_aff pw_multi_aff::extract_pw_multi_aff(const isl::space &space) const { - auto res = isl_pw_qpolynomial_project_domain_on_params(copy()); - return manage(res); + return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space); } -isl::pw_qpolynomial pw_qpolynomial::reset_domain_space(isl::space space) const +isl::multi_pw_aff pw_multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_qpolynomial_reset_domain_space(copy(), space.release()); - return manage(res); + return isl::multi_pw_aff(*this).flat_range_product(multi2); } -isl::pw_qpolynomial pw_qpolynomial::reset_user() const +isl::multi_union_pw_aff pw_multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_pw_qpolynomial_reset_user(copy()); - return manage(res); + return isl::multi_pw_aff(*this).flat_range_product(multi2); } -isl::pw_qpolynomial pw_qpolynomial::scale_down_val(isl::val v) const +isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const { - auto res = isl_pw_qpolynomial_scale_down_val(copy(), v.release()); + auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::scale_val(isl::val v) const +isl::union_pw_multi_aff pw_multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_qpolynomial_scale_val(copy(), v.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).flat_range_product(upma2); } -isl::pw_qpolynomial pw_qpolynomial::split_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::multi_aff &pma2) const { - auto res = isl_pw_qpolynomial_split_dims(copy(), static_cast(type), first, n); - return manage(res); + return this->flat_range_product(isl::pw_multi_aff(pma2)); } -isl::pw_qpolynomial pw_qpolynomial::split_periods(int max_periods) const +isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::pw_aff &pma2) const { - auto res = isl_pw_qpolynomial_split_periods(copy(), max_periods); - return manage(res); + return this->flat_range_product(isl::pw_multi_aff(pma2)); } -isl::pw_qpolynomial pw_qpolynomial::sub(isl::pw_qpolynomial pwqp2) const +void pw_multi_aff::foreach_piece(const std::function &fn) const { - auto res = isl_pw_qpolynomial_sub(copy(), pwqp2.release()); - return manage(res); + struct fn_data { + std::function 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(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); + return; } -isl::pw_qpolynomial pw_qpolynomial::subtract_domain(isl::set set) const +isl::pw_multi_aff pw_multi_aff::from_map(isl::map map) { - auto res = isl_pw_qpolynomial_subtract_domain(copy(), set.release()); + auto res = isl_pw_multi_aff_from_map(map.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::to_polynomial(int sign) const +isl::pw_multi_aff pw_multi_aff::gist(isl::set set) const { - auto res = isl_pw_qpolynomial_to_polynomial(copy(), sign); + auto res = isl_pw_multi_aff_gist(copy(), set.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::zero(isl::space space) +isl::union_pw_multi_aff pw_multi_aff::gist(const isl::union_set &context) const { - auto res = isl_pw_qpolynomial_zero(space.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).gist(context); } -// implementations for isl::pw_qpolynomial_fold_list -pw_qpolynomial_fold_list manage(__isl_take isl_pw_qpolynomial_fold_list *ptr) { - return pw_qpolynomial_fold_list(ptr); -} -pw_qpolynomial_fold_list manage_copy(__isl_keep isl_pw_qpolynomial_fold_list *ptr) { - ptr = isl_pw_qpolynomial_fold_list_copy(ptr); - return pw_qpolynomial_fold_list(ptr); +isl::pw_multi_aff pw_multi_aff::gist(const isl::basic_set &set) const +{ + return this->gist(isl::set(set)); } -pw_qpolynomial_fold_list::pw_qpolynomial_fold_list() - : ptr(nullptr) {} +isl::pw_multi_aff pw_multi_aff::gist(const isl::point &set) const +{ + return this->gist(isl::set(set)); +} -pw_qpolynomial_fold_list::pw_qpolynomial_fold_list(const pw_qpolynomial_fold_list &obj) - : ptr(nullptr) +bool pw_multi_aff::has_range_tuple_id() const { - ptr = obj.copy(); + auto res = isl_pw_multi_aff_has_range_tuple_id(get()); + return res; } +isl::multi_pw_aff pw_multi_aff::identity() const +{ + return isl::multi_pw_aff(*this).identity(); +} -pw_qpolynomial_fold_list::pw_qpolynomial_fold_list(__isl_take isl_pw_qpolynomial_fold_list *ptr) - : ptr(ptr) {} +isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space) +{ + auto res = isl_pw_multi_aff_identity_on_domain_space(space.release()); + return manage(res); +} +isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) const +{ + auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release()); + return manage(res); +} -pw_qpolynomial_fold_list &pw_qpolynomial_fold_list::operator=(pw_qpolynomial_fold_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const +{ + auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release()); + return manage(res); } -pw_qpolynomial_fold_list::~pw_qpolynomial_fold_list() { - if (ptr) - isl_pw_qpolynomial_fold_list_free(ptr); +isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::space &space) const +{ + return isl::union_pw_multi_aff(*this).intersect_domain(space); } -__isl_give isl_pw_qpolynomial_fold_list *pw_qpolynomial_fold_list::copy() const & { - return isl_pw_qpolynomial_fold_list_copy(ptr); +isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::union_set &uset) const +{ + return isl::union_pw_multi_aff(*this).intersect_domain(uset); } -__isl_keep isl_pw_qpolynomial_fold_list *pw_qpolynomial_fold_list::get() const { - return ptr; +isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::basic_set &set) const +{ + return this->intersect_domain(isl::set(set)); } -__isl_give isl_pw_qpolynomial_fold_list *pw_qpolynomial_fold_list::release() { - isl_pw_qpolynomial_fold_list *tmp = ptr; - ptr = nullptr; - return tmp; +isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::point &set) const +{ + return this->intersect_domain(isl::set(set)); } -bool pw_qpolynomial_fold_list::is_null() const { - return ptr == nullptr; +isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const +{ + 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 +{ + return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_range(uset); +} -isl::ctx pw_qpolynomial_fold_list::ctx() const { - return isl::ctx(isl_pw_qpolynomial_fold_list_get_ctx(ptr)); +isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const +{ + auto res = isl_pw_multi_aff_intersect_params(copy(), set.release()); + return manage(res); } -void pw_qpolynomial_fold_list::dump() const { - isl_pw_qpolynomial_fold_list_dump(get()); +bool pw_multi_aff::involves_locals() const +{ + auto res = isl_pw_multi_aff_involves_locals(get()); + return res; } +bool pw_multi_aff::involves_nan() const +{ + return isl::multi_pw_aff(*this).involves_nan(); +} +bool pw_multi_aff::involves_param(const isl::id &id) const +{ + return isl::multi_pw_aff(*this).involves_param(id); +} -// implementations for isl::pw_qpolynomial_list -pw_qpolynomial_list manage(__isl_take isl_pw_qpolynomial_list *ptr) { - return pw_qpolynomial_list(ptr); +bool pw_multi_aff::involves_param(const std::string &id) const +{ + return this->involves_param(isl::id(ctx(), id)); } -pw_qpolynomial_list manage_copy(__isl_keep isl_pw_qpolynomial_list *ptr) { - ptr = isl_pw_qpolynomial_list_copy(ptr); - return pw_qpolynomial_list(ptr); + +bool pw_multi_aff::involves_param(const isl::id_list &list) const +{ + return isl::multi_pw_aff(*this).involves_param(list); } -pw_qpolynomial_list::pw_qpolynomial_list() - : ptr(nullptr) {} +bool pw_multi_aff::isa_multi_aff() const +{ + auto res = isl_pw_multi_aff_isa_multi_aff(get()); + return res; +} -pw_qpolynomial_list::pw_qpolynomial_list(const pw_qpolynomial_list &obj) - : ptr(nullptr) +bool pw_multi_aff::isa_pw_multi_aff() const { - ptr = obj.copy(); + return isl::union_pw_multi_aff(*this).isa_pw_multi_aff(); } +isl::pw_aff_list pw_multi_aff::list() const +{ + return isl::multi_pw_aff(*this).list(); +} -pw_qpolynomial_list::pw_qpolynomial_list(__isl_take isl_pw_qpolynomial_list *ptr) - : ptr(ptr) {} +isl::multi_pw_aff pw_multi_aff::max(const isl::multi_pw_aff &multi2) const +{ + return isl::multi_pw_aff(*this).max(multi2); +} +isl::multi_val pw_multi_aff::max_multi_val() const +{ + auto res = isl_pw_multi_aff_max_multi_val(copy()); + return manage(res); +} -pw_qpolynomial_list &pw_qpolynomial_list::operator=(pw_qpolynomial_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::multi_pw_aff pw_multi_aff::min(const isl::multi_pw_aff &multi2) const +{ + return isl::multi_pw_aff(*this).min(multi2); } -pw_qpolynomial_list::~pw_qpolynomial_list() { - if (ptr) - isl_pw_qpolynomial_list_free(ptr); +isl::multi_val pw_multi_aff::min_multi_val() const +{ + auto res = isl_pw_multi_aff_min_multi_val(copy()); + return manage(res); } -__isl_give isl_pw_qpolynomial_list *pw_qpolynomial_list::copy() const & { - return isl_pw_qpolynomial_list_copy(ptr); +isl::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::set domain, isl::multi_val mv) +{ + auto res = isl_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release()); + return manage(res); } -__isl_keep isl_pw_qpolynomial_list *pw_qpolynomial_list::get() const { - return ptr; +isl_size pw_multi_aff::n_piece() const +{ + auto res = isl_pw_multi_aff_n_piece(get()); + return res; } -__isl_give isl_pw_qpolynomial_list *pw_qpolynomial_list::release() { - isl_pw_qpolynomial_list *tmp = ptr; - ptr = nullptr; - return tmp; +isl::multi_pw_aff pw_multi_aff::neg() const +{ + return isl::multi_pw_aff(*this).neg(); } -bool pw_qpolynomial_list::is_null() const { - return ptr == nullptr; +bool pw_multi_aff::plain_is_empty() const +{ + return isl::union_pw_multi_aff(*this).plain_is_empty(); } +bool pw_multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const +{ + return isl::multi_pw_aff(*this).plain_is_equal(multi2); +} -isl::ctx pw_qpolynomial_list::ctx() const { - return isl::ctx(isl_pw_qpolynomial_list_get_ctx(ptr)); +bool pw_multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +{ + return isl::multi_pw_aff(*this).plain_is_equal(multi2); } -void pw_qpolynomial_list::dump() const { - isl_pw_qpolynomial_list_dump(get()); +isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const +{ + auto res = isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(copy(), pma2.release()); + return manage(res); } +isl::union_pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const +{ + return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2); +} -isl::pw_qpolynomial_list pw_qpolynomial_list::add(isl::pw_qpolynomial el) const +isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const { - auto res = isl_pw_qpolynomial_list_add(copy(), el.release()); - return manage(res); + return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2)); } -isl::pw_qpolynomial_list pw_qpolynomial_list::alloc(isl::ctx ctx, int n) +isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const { - auto res = isl_pw_qpolynomial_list_alloc(ctx.release(), n); - return manage(res); + return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2)); } -isl::pw_qpolynomial_list pw_qpolynomial_list::clear() const +isl::multi_pw_aff pw_multi_aff::product(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_qpolynomial_list_clear(copy()); - return manage(res); + return isl::multi_pw_aff(*this).product(multi2); } -isl::pw_qpolynomial_list pw_qpolynomial_list::concat(isl::pw_qpolynomial_list list2) const +isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const { - auto res = isl_pw_qpolynomial_list_concat(copy(), list2.release()); + auto res = isl_pw_multi_aff_product(copy(), pma2.release()); return manage(res); } -isl::pw_qpolynomial_list pw_qpolynomial_list::drop(unsigned int first, unsigned int n) const +isl::pw_multi_aff pw_multi_aff::product(const isl::multi_aff &pma2) const { - auto res = isl_pw_qpolynomial_list_drop(copy(), first, n); - return manage(res); + return this->product(isl::pw_multi_aff(pma2)); } -stat pw_qpolynomial_list::foreach(const std::function &fn) const +isl::pw_multi_aff pw_multi_aff::product(const isl::pw_aff &pma2) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_pw_qpolynomial *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_pw_qpolynomial_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); + return this->product(isl::pw_multi_aff(pma2)); } -isl::pw_qpolynomial_list pw_qpolynomial_list::from_pw_qpolynomial(isl::pw_qpolynomial el) +isl::pw_multi_aff pw_multi_aff::project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n) { - auto res = isl_pw_qpolynomial_list_from_pw_qpolynomial(el.release()); + auto res = isl_pw_multi_aff_project_out_map(space.release(), static_cast(type), first, n); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial_list::get_at(int index) const +isl::multi_pw_aff pw_multi_aff::pullback(const isl::multi_pw_aff &mpa2) const { - auto res = isl_pw_qpolynomial_list_get_at(get(), index); - return manage(res); + return isl::multi_pw_aff(*this).pullback(mpa2); } -isl::pw_qpolynomial pw_qpolynomial_list::get_pw_qpolynomial(int index) const +isl::pw_multi_aff pw_multi_aff::pullback(isl::multi_aff ma) const { - auto res = isl_pw_qpolynomial_list_get_pw_qpolynomial(get(), index); + auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release()); return manage(res); } -isl::pw_qpolynomial_list pw_qpolynomial_list::insert(unsigned int pos, isl::pw_qpolynomial el) const +isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const { - auto res = isl_pw_qpolynomial_list_insert(copy(), pos, el.release()); + auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release()); return manage(res); } -isl_size pw_qpolynomial_list::n_pw_qpolynomial() const +isl::union_pw_multi_aff pw_multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_qpolynomial_list_n_pw_qpolynomial(get()); - return res; + return isl::union_pw_multi_aff(*this).pullback(upma2); } -isl::pw_qpolynomial_list pw_qpolynomial_list::reverse() const +isl::pw_multi_aff_list pw_multi_aff::pw_multi_aff_list() const { - auto res = isl_pw_qpolynomial_list_reverse(copy()); - return manage(res); + return isl::union_pw_multi_aff(*this).pw_multi_aff_list(); } -isl::pw_qpolynomial_list pw_qpolynomial_list::set_pw_qpolynomial(int index, isl::pw_qpolynomial el) const +isl::pw_multi_aff pw_multi_aff::range_factor_domain() const { - auto res = isl_pw_qpolynomial_list_set_pw_qpolynomial(copy(), index, el.release()); + auto res = isl_pw_multi_aff_range_factor_domain(copy()); return manage(res); } -isl_size pw_qpolynomial_list::size() const +isl::pw_multi_aff pw_multi_aff::range_factor_range() const { - auto res = isl_pw_qpolynomial_list_size(get()); - return res; + auto res = isl_pw_multi_aff_range_factor_range(copy()); + return manage(res); } -isl::pw_qpolynomial_list pw_qpolynomial_list::swap(unsigned int pos1, unsigned int pos2) const +isl::pw_multi_aff pw_multi_aff::range_map(isl::space space) { - auto res = isl_pw_qpolynomial_list_swap(copy(), pos1, pos2); + auto res = isl_pw_multi_aff_range_map(space.release()); return manage(res); } -// implementations for isl::qpolynomial -qpolynomial manage(__isl_take isl_qpolynomial *ptr) { - return qpolynomial(ptr); -} -qpolynomial manage_copy(__isl_keep isl_qpolynomial *ptr) { - ptr = isl_qpolynomial_copy(ptr); - return qpolynomial(ptr); +isl::multi_pw_aff pw_multi_aff::range_product(const isl::multi_pw_aff &multi2) const +{ + return isl::multi_pw_aff(*this).range_product(multi2); } -qpolynomial::qpolynomial() - : ptr(nullptr) {} - -qpolynomial::qpolynomial(const qpolynomial &obj) - : ptr(nullptr) +isl::multi_union_pw_aff pw_multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const { - ptr = obj.copy(); + return isl::multi_pw_aff(*this).range_product(multi2); } - -qpolynomial::qpolynomial(__isl_take isl_qpolynomial *ptr) - : ptr(ptr) {} - - -qpolynomial &qpolynomial::operator=(qpolynomial obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const +{ + auto res = isl_pw_multi_aff_range_product(copy(), pma2.release()); + return manage(res); } -qpolynomial::~qpolynomial() { - if (ptr) - isl_qpolynomial_free(ptr); +isl::union_pw_multi_aff pw_multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const +{ + return isl::union_pw_multi_aff(*this).range_product(upma2); } -__isl_give isl_qpolynomial *qpolynomial::copy() const & { - return isl_qpolynomial_copy(ptr); +isl::pw_multi_aff pw_multi_aff::range_product(const isl::multi_aff &pma2) const +{ + return this->range_product(isl::pw_multi_aff(pma2)); } -__isl_keep isl_qpolynomial *qpolynomial::get() const { - return ptr; +isl::pw_multi_aff pw_multi_aff::range_product(const isl::pw_aff &pma2) const +{ + return this->range_product(isl::pw_multi_aff(pma2)); } -__isl_give isl_qpolynomial *qpolynomial::release() { - isl_qpolynomial *tmp = ptr; - ptr = nullptr; - return tmp; +isl::id pw_multi_aff::range_tuple_id() const +{ + auto res = isl_pw_multi_aff_get_range_tuple_id(get()); + return manage(res); } -bool qpolynomial::is_null() const { - return ptr == nullptr; +isl::id pw_multi_aff::get_range_tuple_id() const +{ + return range_tuple_id(); } - -isl::ctx qpolynomial::ctx() const { - return isl::ctx(isl_qpolynomial_get_ctx(ptr)); +isl::multi_pw_aff pw_multi_aff::reset_range_tuple_id() const +{ + return isl::multi_pw_aff(*this).reset_range_tuple_id(); } -void qpolynomial::dump() const { - isl_qpolynomial_dump(get()); +isl::multi_pw_aff pw_multi_aff::reset_tuple_id(isl::dim type) const +{ + return isl::multi_pw_aff(*this).reset_tuple_id(type); } +isl::multi_pw_aff pw_multi_aff::scale(const isl::multi_val &mv) const +{ + return isl::multi_pw_aff(*this).scale(mv); +} -isl::qpolynomial qpolynomial::add(isl::qpolynomial qp2) const +isl::pw_multi_aff pw_multi_aff::scale(isl::val v) const { - auto res = isl_qpolynomial_add(copy(), qp2.release()); + auto res = isl_pw_multi_aff_scale_val(copy(), v.release()); return manage(res); } -isl::qpolynomial qpolynomial::add_dims(isl::dim type, unsigned int n) const +isl::pw_multi_aff pw_multi_aff::scale(long v) const { - auto res = isl_qpolynomial_add_dims(copy(), static_cast(type), n); - return manage(res); + return this->scale(isl::val(ctx(), v)); } -isl::qpolynomial qpolynomial::align_params(isl::space model) const +isl::multi_pw_aff pw_multi_aff::scale_down(const isl::multi_val &mv) const { - auto res = isl_qpolynomial_align_params(copy(), model.release()); - return manage(res); + return isl::multi_pw_aff(*this).scale_down(mv); } -stat qpolynomial::as_polynomial_on_domain(const isl::basic_set &bset, const std::function &fn) const +isl::pw_multi_aff pw_multi_aff::scale_down(isl::val v) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_basic_set *arg_0, isl_qpolynomial *arg_1, void *arg_2) -> isl_stat { - auto *data = static_cast(arg_2); - stat ret = (*data->func)(manage(arg_0), manage(arg_1)); - return ret.release(); - }; - auto res = isl_qpolynomial_as_polynomial_on_domain(get(), bset.get(), fn_lambda, &fn_data); + auto res = isl_pw_multi_aff_scale_down_val(copy(), v.release()); return manage(res); } -isl_size qpolynomial::dim(isl::dim type) const +isl::pw_multi_aff pw_multi_aff::scale_down(long v) const { - auto res = isl_qpolynomial_dim(get(), static_cast(type)); - return res; + return this->scale_down(isl::val(ctx(), v)); } -isl::qpolynomial qpolynomial::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::multi_pw_aff pw_multi_aff::set_at(int pos, const isl::pw_aff &el) const { - auto res = isl_qpolynomial_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::multi_pw_aff(*this).set_at(pos, el); } -isl::val qpolynomial::eval(isl::point pnt) const +isl::multi_union_pw_aff pw_multi_aff::set_at(int pos, const isl::union_pw_aff &el) const { - auto res = isl_qpolynomial_eval(copy(), pnt.release()); - return manage(res); + return isl::multi_pw_aff(*this).set_at(pos, el); } -stat qpolynomial::foreach_term(const std::function &fn) const +isl::multi_pw_aff pw_multi_aff::set_pw_aff(int pos, const isl::pw_aff &el) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_term *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_qpolynomial_foreach_term(get(), fn_lambda, &fn_data); - return manage(res); + return isl::multi_pw_aff(*this).set_pw_aff(pos, el); } -isl::qpolynomial qpolynomial::from_aff(isl::aff aff) +isl::pw_multi_aff pw_multi_aff::set_pw_aff(unsigned int pos, isl::pw_aff pa) const { - auto res = isl_qpolynomial_from_aff(aff.release()); + auto res = isl_pw_multi_aff_set_pw_aff(copy(), pos, pa.release()); return manage(res); } -isl::qpolynomial qpolynomial::from_constraint(isl::constraint c, isl::dim type, unsigned int pos) +isl::pw_multi_aff pw_multi_aff::set_range_tuple(isl::id id) const { - auto res = isl_qpolynomial_from_constraint(c.release(), static_cast(type), pos); + auto res = isl_pw_multi_aff_set_range_tuple_id(copy(), id.release()); return manage(res); } -isl::qpolynomial qpolynomial::from_term(isl::term term) +isl::pw_multi_aff pw_multi_aff::set_range_tuple(const std::string &id) const { - auto res = isl_qpolynomial_from_term(term.release()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } -isl::val qpolynomial::get_constant_val() const +isl::multi_union_pw_aff pw_multi_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const { - auto res = isl_qpolynomial_get_constant_val(get()); - return manage(res); + return isl::multi_pw_aff(*this).set_union_pw_aff(pos, el); } -isl::space qpolynomial::get_domain_space() const +isl_size pw_multi_aff::size() const { - auto res = isl_qpolynomial_get_domain_space(get()); - return manage(res); + return isl::multi_pw_aff(*this).size(); } -isl::space qpolynomial::get_space() const +isl::space pw_multi_aff::space() const { - auto res = isl_qpolynomial_get_space(get()); + auto res = isl_pw_multi_aff_get_space(get()); return manage(res); } -isl::qpolynomial qpolynomial::gist(isl::set context) const +isl::space pw_multi_aff::get_space() const { - auto res = isl_qpolynomial_gist(copy(), context.release()); - return manage(res); + return space(); } -isl::qpolynomial qpolynomial::gist_params(isl::set context) const +isl::multi_pw_aff pw_multi_aff::sub(const isl::multi_pw_aff &multi2) const { - auto res = isl_qpolynomial_gist_params(copy(), context.release()); - return manage(res); + return isl::multi_pw_aff(*this).sub(multi2); } -isl::qpolynomial qpolynomial::homogenize() const +isl::multi_union_pw_aff pw_multi_aff::sub(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_qpolynomial_homogenize(copy()); - return manage(res); + return isl::multi_pw_aff(*this).sub(multi2); } -isl::qpolynomial qpolynomial::infty_on_domain(isl::space domain) +isl::pw_multi_aff pw_multi_aff::sub(isl::pw_multi_aff pma2) const { - auto res = isl_qpolynomial_infty_on_domain(domain.release()); + auto res = isl_pw_multi_aff_sub(copy(), pma2.release()); return manage(res); } -isl::qpolynomial qpolynomial::insert_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_pw_multi_aff pw_multi_aff::sub(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_qpolynomial_insert_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::union_pw_multi_aff(*this).sub(upma2); } -boolean qpolynomial::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::pw_multi_aff pw_multi_aff::sub(const isl::multi_aff &pma2) const { - auto res = isl_qpolynomial_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return this->sub(isl::pw_multi_aff(pma2)); } -boolean qpolynomial::is_infty() const +isl::pw_multi_aff pw_multi_aff::sub(const isl::pw_aff &pma2) const { - auto res = isl_qpolynomial_is_infty(get()); - return manage(res); + return this->sub(isl::pw_multi_aff(pma2)); } -boolean qpolynomial::is_nan() const +isl::pw_multi_aff pw_multi_aff::subtract_domain(isl::set set) const { - auto res = isl_qpolynomial_is_nan(get()); + auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release()); return manage(res); } -boolean qpolynomial::is_neginfty() const +isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::space &space) const { - auto res = isl_qpolynomial_is_neginfty(get()); - return manage(res); + return isl::union_pw_multi_aff(*this).subtract_domain(space); } -boolean qpolynomial::is_zero() const +isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::union_set &uset) const { - auto res = isl_qpolynomial_is_zero(get()); - return manage(res); + return isl::union_pw_multi_aff(*this).subtract_domain(uset); } -isl::qpolynomial qpolynomial::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const +isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::basic_set &set) const { - auto res = isl_qpolynomial_move_dims(copy(), static_cast(dst_type), dst_pos, static_cast(src_type), src_pos, n); - return manage(res); + return this->subtract_domain(isl::set(set)); } -isl::qpolynomial qpolynomial::mul(isl::qpolynomial qp2) const +isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::point &set) const { - auto res = isl_qpolynomial_mul(copy(), qp2.release()); - return manage(res); + return this->subtract_domain(isl::set(set)); } -isl::qpolynomial qpolynomial::nan_on_domain(isl::space domain) +isl::pw_multi_aff_list pw_multi_aff::to_list() const { - auto res = isl_qpolynomial_nan_on_domain(domain.release()); + auto res = isl_pw_multi_aff_to_list(copy()); return manage(res); } -isl::qpolynomial qpolynomial::neg() const +isl::multi_pw_aff pw_multi_aff::to_multi_pw_aff() const { - auto res = isl_qpolynomial_neg(copy()); + auto res = isl_pw_multi_aff_to_multi_pw_aff(copy()); return manage(res); } -isl::qpolynomial qpolynomial::neginfty_on_domain(isl::space domain) +isl::union_pw_multi_aff pw_multi_aff::to_union_pw_multi_aff() const { - auto res = isl_qpolynomial_neginfty_on_domain(domain.release()); + auto res = isl_pw_multi_aff_to_union_pw_multi_aff(copy()); return manage(res); } -isl::qpolynomial qpolynomial::one_on_domain(isl::space domain) +isl::id pw_multi_aff::tuple_id(isl::dim type) const { - auto res = isl_qpolynomial_one_on_domain(domain.release()); + auto res = isl_pw_multi_aff_get_tuple_id(get(), static_cast(type)); return manage(res); } -boolean qpolynomial::plain_is_equal(const isl::qpolynomial &qp2) const +isl::id pw_multi_aff::get_tuple_id(isl::dim type) const { - auto res = isl_qpolynomial_plain_is_equal(get(), qp2.get()); - return manage(res); + return tuple_id(type); } -isl::qpolynomial qpolynomial::pow(unsigned int power) const +isl::multi_pw_aff pw_multi_aff::unbind_params_insert_domain(const isl::multi_id &domain) const { - auto res = isl_qpolynomial_pow(copy(), power); - return manage(res); + return isl::multi_pw_aff(*this).unbind_params_insert_domain(domain); } -isl::qpolynomial qpolynomial::project_domain_on_params() const +isl::multi_pw_aff pw_multi_aff::union_add(const isl::multi_pw_aff &mpa2) const { - auto res = isl_qpolynomial_project_domain_on_params(copy()); - return manage(res); + return isl::multi_pw_aff(*this).union_add(mpa2); } -isl::qpolynomial qpolynomial::scale_down_val(isl::val v) const +isl::multi_union_pw_aff pw_multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const { - auto res = isl_qpolynomial_scale_down_val(copy(), v.release()); - return manage(res); + return isl::multi_pw_aff(*this).union_add(mupa2); } -isl::qpolynomial qpolynomial::scale_val(isl::val v) const +isl::pw_multi_aff pw_multi_aff::union_add(isl::pw_multi_aff pma2) const { - auto res = isl_qpolynomial_scale_val(copy(), v.release()); + auto res = isl_pw_multi_aff_union_add(copy(), pma2.release()); return manage(res); } -int qpolynomial::sgn() const +isl::union_pw_multi_aff pw_multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_qpolynomial_sgn(get()); - return res; + return isl::union_pw_multi_aff(*this).union_add(upma2); } -isl::qpolynomial qpolynomial::sub(isl::qpolynomial qp2) const +isl::pw_multi_aff pw_multi_aff::union_add(const isl::multi_aff &pma2) const { - auto res = isl_qpolynomial_sub(copy(), qp2.release()); - return manage(res); + return this->union_add(isl::pw_multi_aff(pma2)); } -isl::qpolynomial qpolynomial::val_on_domain(isl::space space, isl::val val) +isl::pw_multi_aff pw_multi_aff::union_add(const isl::pw_aff &pma2) const { - auto res = isl_qpolynomial_val_on_domain(space.release(), val.release()); - return manage(res); + return this->union_add(isl::pw_multi_aff(pma2)); } -isl::qpolynomial qpolynomial::var_on_domain(isl::space domain, isl::dim type, unsigned int pos) +isl::pw_multi_aff pw_multi_aff::zero(isl::space space) { - auto res = isl_qpolynomial_var_on_domain(domain.release(), static_cast(type), pos); + auto res = isl_pw_multi_aff_zero(space.release()); return manage(res); } -isl::qpolynomial qpolynomial::zero_on_domain(isl::space domain) +inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff &obj) { - auto res = isl_qpolynomial_zero_on_domain(domain.release()); - return manage(res); + char *str = isl_pw_multi_aff_to_str(obj.get()); + os << str; + free(str); + return os; } -// implementations for isl::qpolynomial_list -qpolynomial_list manage(__isl_take isl_qpolynomial_list *ptr) { - return qpolynomial_list(ptr); +// implementations for isl::pw_multi_aff_list +pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) { + return pw_multi_aff_list(ptr); } -qpolynomial_list manage_copy(__isl_keep isl_qpolynomial_list *ptr) { - ptr = isl_qpolynomial_list_copy(ptr); - return qpolynomial_list(ptr); +pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) { + ptr = isl_pw_multi_aff_list_copy(ptr); + return pw_multi_aff_list(ptr); } -qpolynomial_list::qpolynomial_list() +pw_multi_aff_list::pw_multi_aff_list() : ptr(nullptr) {} -qpolynomial_list::qpolynomial_list(const qpolynomial_list &obj) +pw_multi_aff_list::pw_multi_aff_list(const pw_multi_aff_list &obj) : ptr(nullptr) { ptr = obj.copy(); } - -qpolynomial_list::qpolynomial_list(__isl_take isl_qpolynomial_list *ptr) +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 res = isl_pw_multi_aff_list_alloc(ctx.release(), n); + ptr = res; +} + +pw_multi_aff_list::pw_multi_aff_list(isl::pw_multi_aff el) +{ + auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release()); + ptr = res; +} + +pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, const std::string &str) +{ + auto res = isl_pw_multi_aff_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} -qpolynomial_list &qpolynomial_list::operator=(qpolynomial_list obj) { +pw_multi_aff_list &pw_multi_aff_list::operator=(pw_multi_aff_list obj) { std::swap(this->ptr, obj.ptr); return *this; } -qpolynomial_list::~qpolynomial_list() { +pw_multi_aff_list::~pw_multi_aff_list() { if (ptr) - isl_qpolynomial_list_free(ptr); + isl_pw_multi_aff_list_free(ptr); } -__isl_give isl_qpolynomial_list *qpolynomial_list::copy() const & { - return isl_qpolynomial_list_copy(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_qpolynomial_list *qpolynomial_list::get() const { +__isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const { return ptr; } -__isl_give isl_qpolynomial_list *qpolynomial_list::release() { - isl_qpolynomial_list *tmp = 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 qpolynomial_list::is_null() const { +bool pw_multi_aff_list::is_null() const { return ptr == nullptr; } - -isl::ctx qpolynomial_list::ctx() const { - return isl::ctx(isl_qpolynomial_list_get_ctx(ptr)); -} - -void qpolynomial_list::dump() const { - isl_qpolynomial_list_dump(get()); -} - - -isl::qpolynomial_list qpolynomial_list::add(isl::qpolynomial el) const -{ - auto res = isl_qpolynomial_list_add(copy(), el.release()); - return manage(res); -} - -isl::qpolynomial_list qpolynomial_list::alloc(isl::ctx ctx, int n) -{ - auto res = isl_qpolynomial_list_alloc(ctx.release(), n); - return manage(res); -} - -isl::qpolynomial_list qpolynomial_list::clear() const -{ - auto res = isl_qpolynomial_list_clear(copy()); - return manage(res); -} - -isl::qpolynomial_list qpolynomial_list::concat(isl::qpolynomial_list list2) const -{ - auto res = isl_qpolynomial_list_concat(copy(), list2.release()); - return manage(res); -} - -isl::qpolynomial_list qpolynomial_list::drop(unsigned int first, unsigned int n) const -{ - auto res = isl_qpolynomial_list_drop(copy(), first, n); - return manage(res); +isl::ctx pw_multi_aff_list::ctx() const { + return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr)); } -stat qpolynomial_list::foreach(const std::function &fn) const +isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_qpolynomial *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_qpolynomial_list_foreach(get(), fn_lambda, &fn_data); + auto res = isl_pw_multi_aff_list_add(copy(), el.release()); return manage(res); } -isl::qpolynomial_list qpolynomial_list::from_qpolynomial(isl::qpolynomial el) +isl::pw_multi_aff pw_multi_aff_list::at(int index) const { - auto res = isl_qpolynomial_list_from_qpolynomial(el.release()); + auto res = isl_pw_multi_aff_list_get_at(get(), index); return manage(res); } -isl::qpolynomial qpolynomial_list::get_at(int index) const +isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const { - auto res = isl_qpolynomial_list_get_at(get(), index); - return manage(res); + return at(index); } -isl::qpolynomial qpolynomial_list::get_qpolynomial(int index) const +isl::pw_multi_aff_list pw_multi_aff_list::clear() const { - auto res = isl_qpolynomial_list_get_qpolynomial(get(), index); + auto res = isl_pw_multi_aff_list_clear(copy()); return manage(res); } -isl::qpolynomial_list qpolynomial_list::insert(unsigned int pos, isl::qpolynomial el) const +isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const { - auto res = isl_qpolynomial_list_insert(copy(), pos, el.release()); + auto res = isl_pw_multi_aff_list_concat(copy(), list2.release()); return manage(res); } -isl_size qpolynomial_list::n_qpolynomial() const +isl::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const { - auto res = isl_qpolynomial_list_n_qpolynomial(get()); - return res; + auto res = isl_pw_multi_aff_list_drop(copy(), first, n); + return manage(res); } -isl::qpolynomial_list qpolynomial_list::reverse() const +void pw_multi_aff_list::foreach(const std::function &fn) const { - auto res = isl_qpolynomial_list_reverse(copy()); - return manage(res); + struct fn_data { + std::function 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(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); + return; } -isl::qpolynomial_list qpolynomial_list::set_qpolynomial(int index, isl::qpolynomial el) const +isl::pw_multi_aff_list pw_multi_aff_list::insert(unsigned int pos, isl::pw_multi_aff el) const { - auto res = isl_qpolynomial_list_set_qpolynomial(copy(), index, el.release()); + auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release()); return manage(res); } -isl_size qpolynomial_list::size() const +isl_size pw_multi_aff_list::size() const { - auto res = isl_qpolynomial_list_size(get()); + auto res = isl_pw_multi_aff_list_size(get()); return res; } -isl::qpolynomial_list qpolynomial_list::swap(unsigned int pos1, unsigned int pos2) const +inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff_list &obj) { - auto res = isl_qpolynomial_list_swap(copy(), pos1, pos2); - return manage(res); + char *str = isl_pw_multi_aff_list_to_str(obj.get()); + os << str; + free(str); + return os; } // implementations for isl::schedule @@ -14680,7 +16996,6 @@ ptr = obj.copy(); } - schedule::schedule(__isl_take isl_schedule *ptr) : ptr(ptr) {} @@ -14718,49 +17033,30 @@ return ptr == nullptr; } - isl::ctx schedule::ctx() const { return isl::ctx(isl_schedule_get_ctx(ptr)); } -void schedule::dump() const { - isl_schedule_dump(get()); -} - - isl::schedule schedule::align_params(isl::space space) const { auto res = isl_schedule_align_params(copy(), space.release()); return manage(res); } -isl::schedule schedule::empty(isl::space space) -{ - auto res = isl_schedule_empty(space.release()); - return manage(res); -} - -isl::schedule schedule::from_domain(isl::union_set domain) -{ - auto res = isl_schedule_from_domain(domain.release()); - return manage(res); -} - -isl::union_set schedule::get_domain() const +isl::union_set schedule::domain() const { auto res = isl_schedule_get_domain(get()); return manage(res); } -isl::union_map schedule::get_map() const +isl::union_set schedule::get_domain() const { - auto res = isl_schedule_get_map(get()); - return manage(res); + return domain(); } -isl::schedule_node schedule::get_root() const +isl::schedule schedule::from_domain(isl::union_set domain) { - auto res = isl_schedule_get_root(get()); + auto res = isl_schedule_from_domain(domain.release()); return manage(res); } @@ -14770,18 +17066,6 @@ return manage(res); } -isl::schedule schedule::insert_context(isl::set context) const -{ - auto res = isl_schedule_insert_context(copy(), context.release()); - return manage(res); -} - -isl::schedule schedule::insert_guard(isl::set guard) const -{ - auto res = isl_schedule_insert_guard(copy(), guard.release()); - return manage(res); -} - isl::schedule schedule::insert_partial_schedule(isl::multi_union_pw_aff partial) const { auto res = isl_schedule_insert_partial_schedule(copy(), partial.release()); @@ -14794,30 +17078,48 @@ return manage(res); } -boolean schedule::plain_is_equal(const isl::schedule &schedule2) const +isl::union_map schedule::map() const { - auto res = isl_schedule_plain_is_equal(get(), schedule2.get()); + auto res = isl_schedule_get_map(get()); return manage(res); } +isl::union_map schedule::get_map() const +{ + return map(); +} + isl::schedule schedule::pullback(isl::union_pw_multi_aff upma) const { auto res = isl_schedule_pullback_union_pw_multi_aff(copy(), upma.release()); return manage(res); } -isl::schedule schedule::reset_user() const +isl::schedule_node schedule::root() const { - auto res = isl_schedule_reset_user(copy()); + auto res = isl_schedule_get_root(get()); return manage(res); } +isl::schedule_node schedule::get_root() const +{ + return root(); +} + isl::schedule schedule::sequence(isl::schedule schedule2) const { auto res = isl_schedule_sequence(copy(), schedule2.release()); return manage(res); } +inline std::ostream &operator<<(std::ostream &os, const schedule &obj) +{ + char *str = isl_schedule_to_str(obj.get()); + os << str; + free(str); + return os; +} + // implementations for isl::schedule_constraints schedule_constraints manage(__isl_take isl_schedule_constraints *ptr) { return schedule_constraints(ptr); @@ -14836,7 +17138,6 @@ ptr = obj.copy(); } - schedule_constraints::schedule_constraints(__isl_take isl_schedule_constraints *ptr) : ptr(ptr) {} @@ -14874,4762 +17175,4572 @@ return ptr == nullptr; } - -isl::ctx schedule_constraints::ctx() const { - return isl::ctx(isl_schedule_constraints_get_ctx(ptr)); -} - -void schedule_constraints::dump() const { - isl_schedule_constraints_dump(get()); -} - - -isl::schedule_constraints schedule_constraints::apply(isl::union_map umap) const -{ - auto res = isl_schedule_constraints_apply(copy(), umap.release()); - return manage(res); -} - -isl::schedule schedule_constraints::compute_schedule() const -{ - auto res = isl_schedule_constraints_compute_schedule(copy()); - return manage(res); -} - -isl::union_map schedule_constraints::get_coincidence() const -{ - auto res = isl_schedule_constraints_get_coincidence(get()); - return manage(res); -} - -isl::union_map schedule_constraints::get_conditional_validity() const -{ - auto res = isl_schedule_constraints_get_conditional_validity(get()); - return manage(res); -} - -isl::union_map schedule_constraints::get_conditional_validity_condition() const -{ - auto res = isl_schedule_constraints_get_conditional_validity_condition(get()); - return manage(res); -} - -isl::set schedule_constraints::get_context() const -{ - auto res = isl_schedule_constraints_get_context(get()); - return manage(res); -} - -isl::union_set schedule_constraints::get_domain() const -{ - auto res = isl_schedule_constraints_get_domain(get()); - return manage(res); -} - -isl::union_map schedule_constraints::get_proximity() const -{ - auto res = isl_schedule_constraints_get_proximity(get()); - return manage(res); -} - -isl::union_map schedule_constraints::get_validity() const -{ - auto res = isl_schedule_constraints_get_validity(get()); - return manage(res); -} - -isl::schedule_constraints schedule_constraints::on_domain(isl::union_set domain) -{ - auto res = isl_schedule_constraints_on_domain(domain.release()); - return manage(res); -} - -isl::schedule_constraints schedule_constraints::set_coincidence(isl::union_map coincidence) const -{ - auto res = isl_schedule_constraints_set_coincidence(copy(), coincidence.release()); - return manage(res); -} - -isl::schedule_constraints schedule_constraints::set_conditional_validity(isl::union_map condition, isl::union_map validity) const -{ - auto res = isl_schedule_constraints_set_conditional_validity(copy(), condition.release(), validity.release()); - return manage(res); -} - -isl::schedule_constraints schedule_constraints::set_context(isl::set context) const -{ - auto res = isl_schedule_constraints_set_context(copy(), context.release()); - return manage(res); -} - -isl::schedule_constraints schedule_constraints::set_proximity(isl::union_map proximity) const -{ - auto res = isl_schedule_constraints_set_proximity(copy(), proximity.release()); - return manage(res); -} - -isl::schedule_constraints schedule_constraints::set_validity(isl::union_map validity) const -{ - auto res = isl_schedule_constraints_set_validity(copy(), validity.release()); - return manage(res); -} - -// implementations for isl::schedule_node -schedule_node manage(__isl_take isl_schedule_node *ptr) { - return schedule_node(ptr); -} -schedule_node manage_copy(__isl_keep isl_schedule_node *ptr) { - ptr = isl_schedule_node_copy(ptr); - return schedule_node(ptr); -} - -schedule_node::schedule_node() - : ptr(nullptr) {} - -schedule_node::schedule_node(const schedule_node &obj) - : ptr(nullptr) -{ - ptr = obj.copy(); -} - - -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; -} - - -isl::ctx schedule_node::ctx() const { - return isl::ctx(isl_schedule_node_get_ctx(ptr)); -} - -void schedule_node::dump() const { - isl_schedule_node_dump(get()); -} - - -isl::schedule_node schedule_node::align_params(isl::space space) const -{ - auto res = isl_schedule_node_align_params(copy(), space.release()); - return manage(res); -} - -isl::schedule_node schedule_node::ancestor(int generation) const -{ - auto res = isl_schedule_node_ancestor(copy(), generation); - return manage(res); -} - -boolean schedule_node::band_member_get_coincident(int pos) const -{ - auto res = isl_schedule_node_band_member_get_coincident(get(), pos); - return manage(res); -} - -isl::schedule_node schedule_node::band_member_set_coincident(int pos, int coincident) const -{ - auto res = isl_schedule_node_band_member_set_coincident(copy(), pos, coincident); - return manage(res); -} - -isl::schedule_node schedule_node::band_set_ast_build_options(isl::union_set options) const -{ - auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release()); - return manage(res); -} - -isl::schedule_node schedule_node::child(int pos) const -{ - auto res = isl_schedule_node_child(copy(), pos); - return manage(res); -} - -isl::set schedule_node::context_get_context() const -{ - auto res = isl_schedule_node_context_get_context(get()); - return manage(res); -} - -isl::schedule_node schedule_node::cut() const -{ - auto res = isl_schedule_node_cut(copy()); - return manage(res); -} - -isl::union_set schedule_node::domain_get_domain() const -{ - auto res = isl_schedule_node_domain_get_domain(get()); - return manage(res); +isl::ctx schedule_constraints::ctx() const { + return isl::ctx(isl_schedule_constraints_get_ctx(ptr)); } -isl::union_pw_multi_aff schedule_node::expansion_get_contraction() const +isl::union_map schedule_constraints::coincidence() const { - auto res = isl_schedule_node_expansion_get_contraction(get()); + auto res = isl_schedule_constraints_get_coincidence(get()); return manage(res); } -isl::union_map schedule_node::expansion_get_expansion() const +isl::union_map schedule_constraints::get_coincidence() const { - auto res = isl_schedule_node_expansion_get_expansion(get()); - return manage(res); + return coincidence(); } -isl::union_map schedule_node::extension_get_extension() const +isl::schedule schedule_constraints::compute_schedule() const { - auto res = isl_schedule_node_extension_get_extension(get()); + auto res = isl_schedule_constraints_compute_schedule(copy()); return manage(res); } -isl::union_set schedule_node::filter_get_filter() const +isl::union_map schedule_constraints::conditional_validity() const { - auto res = isl_schedule_node_filter_get_filter(get()); + auto res = isl_schedule_constraints_get_conditional_validity(get()); return manage(res); } -isl::schedule_node schedule_node::first_child() const +isl::union_map schedule_constraints::get_conditional_validity() const { - auto res = isl_schedule_node_first_child(copy()); - return manage(res); + return conditional_validity(); } -stat schedule_node::foreach_ancestor_top_down(const std::function &fn) const +isl::union_map schedule_constraints::conditional_validity_condition() const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage_copy(arg_0)); - return ret.release(); - }; - auto res = isl_schedule_node_foreach_ancestor_top_down(get(), fn_lambda, &fn_data); + auto res = isl_schedule_constraints_get_conditional_validity_condition(get()); return manage(res); } -isl::schedule_node schedule_node::from_domain(isl::union_set domain) +isl::union_map schedule_constraints::get_conditional_validity_condition() const { - auto res = isl_schedule_node_from_domain(domain.release()); - return manage(res); + return conditional_validity_condition(); } -isl::schedule_node schedule_node::from_extension(isl::union_map extension) +isl::set schedule_constraints::context() const { - auto res = isl_schedule_node_from_extension(extension.release()); + auto res = isl_schedule_constraints_get_context(get()); return manage(res); } -isl_size schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const +isl::set schedule_constraints::get_context() const { - auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get()); - return res; + return context(); } -isl::schedule_node schedule_node::get_child(int pos) const +isl::union_set schedule_constraints::domain() const { - auto res = isl_schedule_node_get_child(get(), pos); + auto res = isl_schedule_constraints_get_domain(get()); return manage(res); } -isl_size schedule_node::get_child_position() const +isl::union_set schedule_constraints::get_domain() const { - auto res = isl_schedule_node_get_child_position(get()); - return res; + return domain(); } -isl::union_set schedule_node::get_domain() const +isl::schedule_constraints schedule_constraints::on_domain(isl::union_set domain) { - auto res = isl_schedule_node_get_domain(get()); + auto res = isl_schedule_constraints_on_domain(domain.release()); return manage(res); } -isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const +isl::union_map schedule_constraints::proximity() const { - auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get()); + auto res = isl_schedule_constraints_get_proximity(get()); return manage(res); } -isl::union_map schedule_node::get_prefix_schedule_relation() const +isl::union_map schedule_constraints::get_proximity() const { - auto res = isl_schedule_node_get_prefix_schedule_relation(get()); - return manage(res); + return proximity(); } -isl::union_map schedule_node::get_prefix_schedule_union_map() const +isl::schedule_constraints schedule_constraints::set_coincidence(isl::union_map coincidence) const { - auto res = isl_schedule_node_get_prefix_schedule_union_map(get()); + auto res = isl_schedule_constraints_set_coincidence(copy(), coincidence.release()); return manage(res); } -isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const +isl::schedule_constraints schedule_constraints::set_conditional_validity(isl::union_map condition, isl::union_map validity) const { - auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get()); + auto res = isl_schedule_constraints_set_conditional_validity(copy(), condition.release(), validity.release()); return manage(res); } -isl::schedule schedule_node::get_schedule() const +isl::schedule_constraints schedule_constraints::set_context(isl::set context) const { - auto res = isl_schedule_node_get_schedule(get()); + auto res = isl_schedule_constraints_set_context(copy(), context.release()); return manage(res); } -isl_size schedule_node::get_schedule_depth() const -{ - auto res = isl_schedule_node_get_schedule_depth(get()); - return res; -} - -isl::schedule_node schedule_node::get_shared_ancestor(const isl::schedule_node &node2) const +isl::schedule_constraints schedule_constraints::set_proximity(isl::union_map proximity) const { - auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get()); + auto res = isl_schedule_constraints_set_proximity(copy(), proximity.release()); return manage(res); } -isl::union_pw_multi_aff schedule_node::get_subtree_contraction() const +isl::schedule_constraints schedule_constraints::set_validity(isl::union_map validity) const { - auto res = isl_schedule_node_get_subtree_contraction(get()); + auto res = isl_schedule_constraints_set_validity(copy(), validity.release()); return manage(res); } -isl::union_map schedule_node::get_subtree_expansion() const +isl::union_map schedule_constraints::validity() const { - auto res = isl_schedule_node_get_subtree_expansion(get()); + auto res = isl_schedule_constraints_get_validity(get()); return manage(res); } -isl::union_map schedule_node::get_subtree_schedule_union_map() const +isl::union_map schedule_constraints::get_validity() const { - auto res = isl_schedule_node_get_subtree_schedule_union_map(get()); - return manage(res); + return validity(); } -isl_size schedule_node::get_tree_depth() const +inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj) { - auto res = isl_schedule_node_get_tree_depth(get()); - return res; + char *str = isl_schedule_constraints_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::union_set schedule_node::get_universe_domain() const -{ - auto res = isl_schedule_node_get_universe_domain(get()); - return manage(res); +// implementations for isl::schedule_node +schedule_node manage(__isl_take isl_schedule_node *ptr) { + return schedule_node(ptr); +} +schedule_node manage_copy(__isl_keep isl_schedule_node *ptr) { + ptr = isl_schedule_node_copy(ptr); + return schedule_node(ptr); } -isl::schedule_node schedule_node::graft_after(isl::schedule_node graft) const +schedule_node::schedule_node() + : ptr(nullptr) {} + +schedule_node::schedule_node(const schedule_node &obj) + : ptr(nullptr) { - auto res = isl_schedule_node_graft_after(copy(), graft.release()); - return manage(res); + ptr = obj.copy(); } -isl::schedule_node schedule_node::graft_before(isl::schedule_node graft) const -{ - auto res = isl_schedule_node_graft_before(copy(), graft.release()); - return manage(res); +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; } -isl::schedule_node schedule_node::group(isl::id group_id) const -{ - auto res = isl_schedule_node_group(copy(), group_id.release()); - return manage(res); +schedule_node::~schedule_node() { + if (ptr) + isl_schedule_node_free(ptr); } -isl::set schedule_node::guard_get_guard() const -{ - auto res = isl_schedule_node_guard_get_guard(get()); - return manage(res); +__isl_give isl_schedule_node *schedule_node::copy() const & { + return isl_schedule_node_copy(ptr); } -boolean schedule_node::has_children() const -{ - auto res = isl_schedule_node_has_children(get()); - return manage(res); +__isl_keep isl_schedule_node *schedule_node::get() const { + return ptr; } -boolean schedule_node::has_next_sibling() const -{ - auto res = isl_schedule_node_has_next_sibling(get()); - return manage(res); +__isl_give isl_schedule_node *schedule_node::release() { + isl_schedule_node *tmp = ptr; + ptr = nullptr; + return tmp; } -boolean schedule_node::has_parent() const -{ - auto res = isl_schedule_node_has_parent(get()); - return manage(res); +bool schedule_node::is_null() const { + return ptr == nullptr; } -boolean schedule_node::has_previous_sibling() const +template +bool schedule_node::isa_type(T subtype) const { - auto res = isl_schedule_node_has_previous_sibling(get()); - return manage(res); + return isl_schedule_node_get_type(get()) == subtype; } - -isl::schedule_node schedule_node::insert_context(isl::set context) const +template +bool schedule_node::isa() const { - auto res = isl_schedule_node_insert_context(copy(), context.release()); - return manage(res); + return isa_type(T::type); } - -isl::schedule_node schedule_node::insert_filter(isl::union_set filter) const +template +T schedule_node::as() const { - auto res = isl_schedule_node_insert_filter(copy(), filter.release()); - return manage(res); + if (!isa()) + exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__); + return T(copy()); } -isl::schedule_node schedule_node::insert_guard(isl::set context) const -{ - auto res = isl_schedule_node_insert_guard(copy(), context.release()); - return manage(res); +isl::ctx schedule_node::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::schedule_node schedule_node::insert_mark(isl::id mark) const +isl::schedule_node schedule_node::ancestor(int generation) const { - auto res = isl_schedule_node_insert_mark(copy(), mark.release()); + auto res = isl_schedule_node_ancestor(copy(), generation); return manage(res); } -isl::schedule_node schedule_node::insert_partial_schedule(isl::multi_union_pw_aff schedule) const +isl_size schedule_node::ancestor_child_position(const isl::schedule_node &ancestor) const { - auto res = isl_schedule_node_insert_partial_schedule(copy(), schedule.release()); - return manage(res); + auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get()); + return res; } -isl::schedule_node schedule_node::insert_sequence(isl::union_set_list filters) const +isl_size schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const { - auto res = isl_schedule_node_insert_sequence(copy(), filters.release()); - return manage(res); + return ancestor_child_position(ancestor); } -isl::schedule_node schedule_node::insert_set(isl::union_set_list filters) const +isl::schedule_node schedule_node::child(int pos) const { - auto res = isl_schedule_node_insert_set(copy(), filters.release()); + auto res = isl_schedule_node_child(copy(), pos); return manage(res); } -boolean schedule_node::is_equal(const isl::schedule_node &node2) const +isl_size schedule_node::child_position() const { - auto res = isl_schedule_node_is_equal(get(), node2.get()); - return manage(res); + auto res = isl_schedule_node_get_child_position(get()); + return res; } -boolean schedule_node::is_subtree_anchored() const +isl_size schedule_node::get_child_position() const { - auto res = isl_schedule_node_is_subtree_anchored(get()); - return manage(res); + return child_position(); } -isl::id schedule_node::mark_get_id() const +isl::union_set schedule_node::domain() const { - auto res = isl_schedule_node_mark_get_id(get()); + auto res = isl_schedule_node_get_domain(get()); return manage(res); } -isl_size schedule_node::n_children() const +isl::union_set schedule_node::get_domain() const { - auto res = isl_schedule_node_n_children(get()); - return res; + return domain(); } -isl::schedule_node schedule_node::next_sibling() const +bool schedule_node::every_descendant(const std::function &test) const { - auto res = isl_schedule_node_next_sibling(copy()); - return manage(res); + struct test_data { + std::function 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(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); + return res; } -isl::schedule_node schedule_node::order_after(isl::union_set filter) const +isl::schedule_node schedule_node::first_child() const { - auto res = isl_schedule_node_order_after(copy(), filter.release()); + auto res = isl_schedule_node_first_child(copy()); return manage(res); } -isl::schedule_node schedule_node::order_before(isl::union_set filter) const +void schedule_node::foreach_ancestor_top_down(const std::function &fn) const { - auto res = isl_schedule_node_order_before(copy(), filter.release()); - return manage(res); + struct fn_data { + std::function 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(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); + return; } -isl::schedule_node schedule_node::parent() const +void schedule_node::foreach_descendant_top_down(const std::function &fn) const { - auto res = isl_schedule_node_parent(copy()); - return manage(res); + struct fn_data { + std::function 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(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); + return; } -isl::schedule_node schedule_node::previous_sibling() const +isl::schedule_node schedule_node::from_domain(isl::union_set domain) { - auto res = isl_schedule_node_previous_sibling(copy()); + auto res = isl_schedule_node_from_domain(domain.release()); return manage(res); } -isl::schedule_node schedule_node::reset_user() const +isl::schedule_node schedule_node::from_extension(isl::union_map extension) { - auto res = isl_schedule_node_reset_user(copy()); + auto res = isl_schedule_node_from_extension(extension.release()); return manage(res); } -isl::schedule_node schedule_node::root() const +isl::schedule_node schedule_node::graft_after(isl::schedule_node graft) const { - auto res = isl_schedule_node_root(copy()); + auto res = isl_schedule_node_graft_after(copy(), graft.release()); return manage(res); } -isl::schedule_node schedule_node::sequence_splice_child(int pos) const +isl::schedule_node schedule_node::graft_before(isl::schedule_node graft) const { - auto res = isl_schedule_node_sequence_splice_child(copy(), pos); + auto res = isl_schedule_node_graft_before(copy(), graft.release()); return manage(res); } -// implementations for isl::set -set manage(__isl_take isl_set *ptr) { - return set(ptr); -} -set manage_copy(__isl_keep isl_set *ptr) { - ptr = isl_set_copy(ptr); - return set(ptr); -} - -set::set() - : ptr(nullptr) {} - -set::set(const set &obj) - : ptr(nullptr) +bool schedule_node::has_children() const { - ptr = obj.copy(); + auto res = isl_schedule_node_has_children(get()); + return res; } - -set::set(__isl_take isl_set *ptr) - : ptr(ptr) {} - -set::set(isl::basic_set bset) -{ - auto res = isl_set_from_basic_set(bset.release()); - ptr = res; -} -set::set(isl::point pnt) +bool schedule_node::has_next_sibling() const { - auto res = isl_set_from_point(pnt.release()); - ptr = res; -} -set::set(isl::union_set uset) -{ - auto res = isl_set_from_union_set(uset.release()); - ptr = res; + auto res = isl_schedule_node_has_next_sibling(get()); + return res; } -set::set(isl::ctx ctx, const std::string &str) + +bool schedule_node::has_parent() const { - auto res = isl_set_read_from_str(ctx.release(), str.c_str()); - ptr = res; + auto res = isl_schedule_node_has_parent(get()); + return res; } -set &set::operator=(set obj) { - std::swap(this->ptr, obj.ptr); - return *this; +bool schedule_node::has_previous_sibling() const +{ + auto res = isl_schedule_node_has_previous_sibling(get()); + return res; } -set::~set() { - if (ptr) - isl_set_free(ptr); +isl::schedule_node schedule_node::insert_context(isl::set context) const +{ + auto res = isl_schedule_node_insert_context(copy(), context.release()); + return manage(res); } -__isl_give isl_set *set::copy() const & { - return isl_set_copy(ptr); +isl::schedule_node schedule_node::insert_filter(isl::union_set filter) const +{ + auto res = isl_schedule_node_insert_filter(copy(), filter.release()); + return manage(res); } -__isl_keep isl_set *set::get() const { - return ptr; +isl::schedule_node schedule_node::insert_guard(isl::set context) const +{ + auto res = isl_schedule_node_insert_guard(copy(), context.release()); + return manage(res); } -__isl_give isl_set *set::release() { - isl_set *tmp = ptr; - ptr = nullptr; - return tmp; +isl::schedule_node schedule_node::insert_mark(isl::id mark) const +{ + auto res = isl_schedule_node_insert_mark(copy(), mark.release()); + return manage(res); } -bool set::is_null() const { - return ptr == nullptr; +isl::schedule_node schedule_node::insert_mark(const std::string &mark) const +{ + return this->insert_mark(isl::id(ctx(), mark)); } +isl::schedule_node schedule_node::insert_partial_schedule(isl::multi_union_pw_aff schedule) const +{ + auto res = isl_schedule_node_insert_partial_schedule(copy(), schedule.release()); + return manage(res); +} -isl::ctx set::ctx() const { - return isl::ctx(isl_set_get_ctx(ptr)); +isl::schedule_node schedule_node::insert_sequence(isl::union_set_list filters) const +{ + auto res = isl_schedule_node_insert_sequence(copy(), filters.release()); + return manage(res); } -void set::dump() const { - isl_set_dump(get()); +isl::schedule_node schedule_node::insert_set(isl::union_set_list filters) const +{ + auto res = isl_schedule_node_insert_set(copy(), filters.release()); + return manage(res); } +bool schedule_node::is_equal(const isl::schedule_node &node2) const +{ + auto res = isl_schedule_node_is_equal(get(), node2.get()); + return res; +} -isl::set set::add_constraint(isl::constraint constraint) const +bool schedule_node::is_subtree_anchored() const { - auto res = isl_set_add_constraint(copy(), constraint.release()); - return manage(res); + auto res = isl_schedule_node_is_subtree_anchored(get()); + return res; } -isl::set set::add_dims(isl::dim type, unsigned int n) const +isl::schedule_node schedule_node::map_descendant_bottom_up(const std::function &fn) const { - auto res = isl_set_add_dims(copy(), static_cast(type), n); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return NULL; + } + }; + auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data); return manage(res); } -isl::basic_set set::affine_hull() const +isl_size schedule_node::n_children() const { - auto res = isl_set_affine_hull(copy()); - return manage(res); + auto res = isl_schedule_node_n_children(get()); + return res; } -isl::set set::align_params(isl::space model) const +isl::schedule_node schedule_node::next_sibling() const { - auto res = isl_set_align_params(copy(), model.release()); + auto res = isl_schedule_node_next_sibling(copy()); return manage(res); } -isl::set set::apply(isl::map map) const +isl::schedule_node schedule_node::order_after(isl::union_set filter) const { - auto res = isl_set_apply(copy(), map.release()); + auto res = isl_schedule_node_order_after(copy(), filter.release()); return manage(res); } -isl::set set::bind(isl::multi_id tuple) const +isl::schedule_node schedule_node::order_before(isl::union_set filter) const { - auto res = isl_set_bind(copy(), tuple.release()); + auto res = isl_schedule_node_order_before(copy(), filter.release()); return manage(res); } -isl::basic_set set::bounded_simple_hull() const +isl::schedule_node schedule_node::parent() const { - auto res = isl_set_bounded_simple_hull(copy()); + auto res = isl_schedule_node_parent(copy()); return manage(res); } -isl::set set::box_from_points(isl::point pnt1, isl::point pnt2) +isl::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const { - auto res = isl_set_box_from_points(pnt1.release(), pnt2.release()); + auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get()); return manage(res); } -isl::set set::coalesce() const +isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const { - auto res = isl_set_coalesce(copy()); - return manage(res); + return prefix_schedule_multi_union_pw_aff(); } -isl::basic_set set::coefficients() const +isl::union_map schedule_node::prefix_schedule_relation() const { - auto res = isl_set_coefficients(copy()); + auto res = isl_schedule_node_get_prefix_schedule_relation(get()); return manage(res); } -isl::set set::complement() const +isl::union_map schedule_node::get_prefix_schedule_relation() const { - auto res = isl_set_complement(copy()); - return manage(res); + return prefix_schedule_relation(); } -isl::basic_set set::convex_hull() const +isl::union_map schedule_node::prefix_schedule_union_map() const { - auto res = isl_set_convex_hull(copy()); + auto res = isl_schedule_node_get_prefix_schedule_union_map(get()); return manage(res); } -isl::val set::count_val() const +isl::union_map schedule_node::get_prefix_schedule_union_map() const { - auto res = isl_set_count_val(get()); - return manage(res); + return prefix_schedule_union_map(); } -isl::set set::detect_equalities() const +isl::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const { - auto res = isl_set_detect_equalities(copy()); + auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get()); return manage(res); } -isl_size set::dim(isl::dim type) const +isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const { - auto res = isl_set_dim(get(), static_cast(type)); - return res; + return prefix_schedule_union_pw_multi_aff(); } -boolean set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const +isl::schedule_node schedule_node::previous_sibling() const { - auto res = isl_set_dim_has_any_lower_bound(get(), static_cast(type), pos); + auto res = isl_schedule_node_previous_sibling(copy()); return manage(res); } -boolean set::dim_has_any_upper_bound(isl::dim type, unsigned int pos) const +isl::schedule_node schedule_node::root() const { - auto res = isl_set_dim_has_any_upper_bound(get(), static_cast(type), pos); + auto res = isl_schedule_node_root(copy()); return manage(res); } -boolean set::dim_has_lower_bound(isl::dim type, unsigned int pos) const +isl::schedule schedule_node::schedule() const { - auto res = isl_set_dim_has_lower_bound(get(), static_cast(type), pos); + auto res = isl_schedule_node_get_schedule(get()); return manage(res); } -boolean set::dim_has_upper_bound(isl::dim type, unsigned int pos) const +isl::schedule schedule_node::get_schedule() const { - auto res = isl_set_dim_has_upper_bound(get(), static_cast(type), pos); - return manage(res); + return schedule(); } -boolean set::dim_is_bounded(isl::dim type, unsigned int pos) const +isl_size schedule_node::schedule_depth() const { - auto res = isl_set_dim_is_bounded(get(), static_cast(type), pos); - return manage(res); + auto res = isl_schedule_node_get_schedule_depth(get()); + return res; } -isl::pw_aff set::dim_max(int pos) const +isl_size schedule_node::get_schedule_depth() const { - auto res = isl_set_dim_max(copy(), pos); - return manage(res); + return schedule_depth(); } -isl::val set::dim_max_val(int pos) const +isl::schedule_node schedule_node::shared_ancestor(const isl::schedule_node &node2) const { - auto res = isl_set_dim_max_val(copy(), pos); + auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get()); return manage(res); } -isl::pw_aff set::dim_min(int pos) const +isl::schedule_node schedule_node::get_shared_ancestor(const isl::schedule_node &node2) const { - auto res = isl_set_dim_min(copy(), pos); - return manage(res); + return shared_ancestor(node2); } -isl::val set::dim_min_val(int pos) const +isl_size schedule_node::tree_depth() const { - auto res = isl_set_dim_min_val(copy(), pos); - return manage(res); + auto res = isl_schedule_node_get_tree_depth(get()); + return res; } -isl::set set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl_size schedule_node::get_tree_depth() const { - auto res = isl_set_drop_constraints_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return tree_depth(); } -isl::set set::drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_set schedule_node::universe_domain() const { - auto res = isl_set_drop_constraints_not_involving_dims(copy(), static_cast(type), first, n); + auto res = isl_schedule_node_get_universe_domain(get()); return manage(res); } -isl::set set::drop_unused_params() const +isl::union_set schedule_node::get_universe_domain() const { - auto res = isl_set_drop_unused_params(copy()); - return manage(res); + return universe_domain(); } -isl::set set::eliminate(isl::dim type, unsigned int first, unsigned int n) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj) { - auto res = isl_set_eliminate(copy(), static_cast(type), first, n); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::set set::empty(isl::space space) +// 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) { - auto res = isl_set_empty(space.release()); +} + +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 +{ + auto res = isl_schedule_node_band_get_ast_build_options(get()); return manage(res); } -isl::set set::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const +isl::union_set schedule_node_band::get_ast_build_options() const +{ + return ast_build_options(); +} + +isl::set schedule_node_band::ast_isolate_option() const { - auto res = isl_set_equate(copy(), static_cast(type1), pos1, static_cast(type2), pos2); + auto res = isl_schedule_node_band_get_ast_isolate_option(get()); return manage(res); } -int set::find_dim_by_id(isl::dim type, const isl::id &id) const +isl::set schedule_node_band::get_ast_isolate_option() const { - auto res = isl_set_find_dim_by_id(get(), static_cast(type), id.get()); - return res; + return ast_isolate_option(); } -int set::find_dim_by_name(isl::dim type, const std::string &name) const +bool schedule_node_band::member_get_coincident(int pos) const { - auto res = isl_set_find_dim_by_name(get(), static_cast(type), name.c_str()); + auto res = isl_schedule_node_band_member_get_coincident(get(), pos); return res; } -isl::set set::fix_si(isl::dim type, unsigned int pos, int value) const +schedule_node_band schedule_node_band::member_set_coincident(int pos, int coincident) const { - auto res = isl_set_fix_si(copy(), static_cast(type), pos, value); - return manage(res); + auto res = isl_schedule_node_band_member_set_coincident(copy(), pos, coincident); + return manage(res).as(); } -isl::set set::fix_val(isl::dim type, unsigned int pos, isl::val v) const +schedule_node_band schedule_node_band::mod(isl::multi_val mv) const { - auto res = isl_set_fix_val(copy(), static_cast(type), pos, v.release()); - return manage(res); + auto res = isl_schedule_node_band_mod(copy(), mv.release()); + return manage(res).as(); } -isl::set set::flat_product(isl::set set2) const +isl_size schedule_node_band::n_member() const { - auto res = isl_set_flat_product(copy(), set2.release()); - return manage(res); + auto res = isl_schedule_node_band_n_member(get()); + return res; } -isl::set set::flatten() const +isl::multi_union_pw_aff schedule_node_band::partial_schedule() const { - auto res = isl_set_flatten(copy()); + auto res = isl_schedule_node_band_get_partial_schedule(get()); return manage(res); } -isl::map set::flatten_map() const +isl::multi_union_pw_aff schedule_node_band::get_partial_schedule() const { - auto res = isl_set_flatten_map(copy()); - return manage(res); + return partial_schedule(); } -int set::follows_at(const isl::set &set2, int pos) const +bool schedule_node_band::permutable() const { - auto res = isl_set_follows_at(get(), set2.get(), pos); + auto res = isl_schedule_node_band_get_permutable(get()); return res; } -stat set::foreach_basic_set(const std::function &fn) const +bool schedule_node_band::get_permutable() const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_set_foreach_basic_set(get(), fn_lambda, &fn_data); - return manage(res); + return permutable(); } -stat set::foreach_point(const std::function &fn) const +schedule_node_band schedule_node_band::scale(isl::multi_val mv) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_set_foreach_point(get(), fn_lambda, &fn_data); - return manage(res); + auto res = isl_schedule_node_band_scale(copy(), mv.release()); + return manage(res).as(); } -isl::set set::from_multi_aff(isl::multi_aff ma) +schedule_node_band schedule_node_band::scale_down(isl::multi_val mv) const { - auto res = isl_set_from_multi_aff(ma.release()); - return manage(res); + auto res = isl_schedule_node_band_scale_down(copy(), mv.release()); + return manage(res).as(); } -isl::set set::from_multi_pw_aff(isl::multi_pw_aff mpa) +schedule_node_band schedule_node_band::set_ast_build_options(isl::union_set options) const { - auto res = isl_set_from_multi_pw_aff(mpa.release()); - return manage(res); + auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release()); + return manage(res).as(); } -isl::set set::from_params() const +schedule_node_band schedule_node_band::set_permutable(int permutable) const { - auto res = isl_set_from_params(copy()); - return manage(res); + auto res = isl_schedule_node_band_set_permutable(copy(), permutable); + return manage(res).as(); } -isl::set set::from_pw_aff(isl::pw_aff pwaff) +schedule_node_band schedule_node_band::shift(isl::multi_union_pw_aff shift) const { - auto res = isl_set_from_pw_aff(pwaff.release()); - return manage(res); + auto res = isl_schedule_node_band_shift(copy(), shift.release()); + return manage(res).as(); } -isl::set set::from_pw_multi_aff(isl::pw_multi_aff pma) +schedule_node_band schedule_node_band::split(int pos) const { - auto res = isl_set_from_pw_multi_aff(pma.release()); - return manage(res); + auto res = isl_schedule_node_band_split(copy(), pos); + return manage(res).as(); } -isl::basic_set_list set::get_basic_set_list() const +schedule_node_band schedule_node_band::tile(isl::multi_val sizes) const { - auto res = isl_set_get_basic_set_list(get()); - return manage(res); + auto res = isl_schedule_node_band_tile(copy(), sizes.release()); + return manage(res).as(); } -isl::id set::get_dim_id(isl::dim type, unsigned int pos) const +schedule_node_band schedule_node_band::member_set_ast_loop_default(int pos) const { - auto res = isl_set_get_dim_id(get(), static_cast(type), pos); - return manage(res); + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_default); + return manage(res).as(); } -std::string set::get_dim_name(isl::dim type, unsigned int pos) const +schedule_node_band schedule_node_band::member_set_ast_loop_atomic(int pos) const { - auto res = isl_set_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_atomic); + return manage(res).as(); } -isl::multi_val set::get_plain_multi_val_if_fixed() const +schedule_node_band schedule_node_band::member_set_ast_loop_unroll(int pos) const { - auto res = isl_set_get_plain_multi_val_if_fixed(get()); - return manage(res); + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_unroll); + return manage(res).as(); } -isl::fixed_box set::get_simple_fixed_box_hull() const +schedule_node_band schedule_node_band::member_set_ast_loop_separate(int pos) const { - auto res = isl_set_get_simple_fixed_box_hull(get()); - return manage(res); + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_separate); + return manage(res).as(); } -isl::space set::get_space() const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj) { - auto res = isl_set_get_space(get()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::val set::get_stride(int pos) const +// 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) { - auto res = isl_set_get_stride(get(), pos); - return manage(res); } -isl::id set::get_tuple_id() const +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::set schedule_node_context::context() const { - auto res = isl_set_get_tuple_id(get()); + auto res = isl_schedule_node_context_get_context(get()); return manage(res); } -std::string set::get_tuple_name() const +isl::set schedule_node_context::get_context() const { - auto res = isl_set_get_tuple_name(get()); - std::string tmp(res); - return tmp; + return context(); } -isl::set set::gist(isl::set context) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj) { - auto res = isl_set_gist(copy(), context.release()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::set set::gist_basic_set(isl::basic_set context) 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) { - auto res = isl_set_gist_basic_set(copy(), context.release()); - return manage(res); } -isl::set set::gist_params(isl::set context) 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 { - auto res = isl_set_gist_params(copy(), context.release()); + auto res = isl_schedule_node_domain_get_domain(get()); return manage(res); } -boolean set::has_dim_id(isl::dim type, unsigned int pos) const +isl::union_set schedule_node_domain::get_domain() const { - auto res = isl_set_has_dim_id(get(), static_cast(type), pos); - return manage(res); + return domain(); } -boolean set::has_dim_name(isl::dim type, unsigned int pos) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj) { - auto res = isl_set_has_dim_name(get(), static_cast(type), pos); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -boolean set::has_equal_space(const isl::set &set2) 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) { - auto res = isl_set_has_equal_space(get(), set2.get()); - return manage(res); } -boolean set::has_tuple_id() const -{ - auto res = isl_set_has_tuple_id(get()); - return manage(res); +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; } -boolean set::has_tuple_name() const -{ - auto res = isl_set_has_tuple_name(get()); - return manage(res); +isl::ctx schedule_node_expansion::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::map set::identity() const +isl::union_pw_multi_aff schedule_node_expansion::contraction() const { - auto res = isl_set_identity(copy()); + auto res = isl_schedule_node_expansion_get_contraction(get()); return manage(res); } -isl::pw_aff set::indicator_function() const +isl::union_pw_multi_aff schedule_node_expansion::get_contraction() const { - auto res = isl_set_indicator_function(copy()); - return manage(res); + return contraction(); } -isl::set set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const +isl::union_map schedule_node_expansion::expansion() const { - auto res = isl_set_insert_dims(copy(), static_cast(type), pos, n); + auto res = isl_schedule_node_expansion_get_expansion(get()); return manage(res); } -isl::map set::insert_domain(isl::space domain) const +isl::union_map schedule_node_expansion::get_expansion() const { - auto res = isl_set_insert_domain(copy(), domain.release()); - return manage(res); + return expansion(); } -isl::set set::intersect(isl::set set2) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj) { - auto res = isl_set_intersect(copy(), set2.release()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::set set::intersect_factor_domain(isl::set domain) const +// 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) { - auto res = isl_set_intersect_factor_domain(copy(), domain.release()); - return manage(res); } -isl::set set::intersect_factor_range(isl::set range) const -{ - auto res = isl_set_intersect_factor_range(copy(), range.release()); - 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::set set::intersect_params(isl::set params) const -{ - auto res = isl_set_intersect_params(copy(), params.release()); - return manage(res); +isl::ctx schedule_node_extension::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -boolean set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_map schedule_node_extension::extension() const { - auto res = isl_set_involves_dims(get(), static_cast(type), first, n); + auto res = isl_schedule_node_extension_get_extension(get()); return manage(res); } -boolean set::involves_locals() const +isl::union_map schedule_node_extension::get_extension() const { - auto res = isl_set_involves_locals(get()); - return manage(res); + return extension(); } -boolean set::is_bounded() const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj) { - auto res = isl_set_is_bounded(get()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -boolean set::is_box() const +// 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) { - auto res = isl_set_is_box(get()); - return manage(res); } -boolean set::is_disjoint(const isl::set &set2) const -{ - auto res = isl_set_is_disjoint(get(), set2.get()); - 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; } -boolean set::is_empty() const -{ - auto res = isl_set_is_empty(get()); - return manage(res); +isl::ctx schedule_node_filter::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -boolean set::is_equal(const isl::set &set2) const +isl::union_set schedule_node_filter::filter() const { - auto res = isl_set_is_equal(get(), set2.get()); + auto res = isl_schedule_node_filter_get_filter(get()); return manage(res); } -boolean set::is_params() const +isl::union_set schedule_node_filter::get_filter() const { - auto res = isl_set_is_params(get()); - return manage(res); + return filter(); } -boolean set::is_singleton() const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj) { - auto res = isl_set_is_singleton(get()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -boolean set::is_strict_subset(const isl::set &set2) 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) { - auto res = isl_set_is_strict_subset(get(), set2.get()); - return manage(res); } -boolean set::is_subset(const isl::set &set2) const -{ - auto res = isl_set_is_subset(get(), set2.get()); - return manage(res); +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; } -boolean set::is_wrapping() const -{ - auto res = isl_set_is_wrapping(get()); - return manage(res); +isl::ctx schedule_node_guard::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::map set::lex_ge_set(isl::set set2) const +isl::set schedule_node_guard::guard() const { - auto res = isl_set_lex_ge_set(copy(), set2.release()); + auto res = isl_schedule_node_guard_get_guard(get()); return manage(res); } -isl::map set::lex_gt_set(isl::set set2) const +isl::set schedule_node_guard::get_guard() const { - auto res = isl_set_lex_gt_set(copy(), set2.release()); - return manage(res); + return guard(); } -isl::map set::lex_lt_set(isl::set set2) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_guard &obj) { - auto res = isl_set_lex_lt_set(copy(), set2.release()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::set set::lexmax() 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) { - auto res = isl_set_lexmax(copy()); - return manage(res); } -isl::pw_multi_aff set::lexmax_pw_multi_aff() const -{ - auto res = isl_set_lexmax_pw_multi_aff(copy()); - 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::set set::lexmin() const -{ - auto res = isl_set_lexmin(copy()); - return manage(res); +isl::ctx schedule_node_leaf::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::pw_multi_aff set::lexmin_pw_multi_aff() const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_leaf &obj) { - auto res = isl_set_lexmin_pw_multi_aff(copy()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::set set::lower_bound(isl::multi_pw_aff lower) 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) { - auto res = isl_set_lower_bound_multi_pw_aff(copy(), lower.release()); - return manage(res); } -isl::set set::lower_bound(isl::multi_val lower) const -{ - auto res = isl_set_lower_bound_multi_val(copy(), lower.release()); - return manage(res); +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::set set::lower_bound_si(isl::dim type, unsigned int pos, int value) const -{ - auto res = isl_set_lower_bound_si(copy(), static_cast(type), pos, value); - return manage(res); +isl::ctx schedule_node_mark::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::set set::lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const +isl::id schedule_node_mark::id() const { - auto res = isl_set_lower_bound_val(copy(), static_cast(type), pos, value.release()); + auto res = isl_schedule_node_mark_get_id(get()); return manage(res); } -isl::multi_pw_aff set::max_multi_pw_aff() const +isl::id schedule_node_mark::get_id() const { - auto res = isl_set_max_multi_pw_aff(copy()); - return manage(res); + return id(); } -isl::val set::max_val(const isl::aff &obj) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_mark &obj) { - auto res = isl_set_max_val(get(), obj.get()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::multi_pw_aff set::min_multi_pw_aff() const +// 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) { - auto res = isl_set_min_multi_pw_aff(copy()); - return manage(res); } -isl::val set::min_val(const isl::aff &obj) const -{ - auto res = isl_set_min_val(get(), obj.get()); - 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::set set::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const -{ - auto res = isl_set_move_dims(copy(), static_cast(dst_type), dst_pos, static_cast(src_type), src_pos, n); - return manage(res); +isl::ctx schedule_node_sequence::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl_size set::n_basic_set() const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_sequence &obj) { - auto res = isl_set_n_basic_set(get()); - return res; + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -isl_size set::n_dim() const +// 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) { - auto res = isl_set_n_dim(get()); - return res; } -isl::set set::nat_universe(isl::space space) -{ - auto res = isl_set_nat_universe(space.release()); - return manage(res); +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::set set::neg() const -{ - auto res = isl_set_neg(copy()); - return manage(res); +isl::ctx schedule_node_set::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::set set::params() const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_set &obj) { - auto res = isl_set_params(copy()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + os << str; + free(str); + return os; } -int set::plain_cmp(const isl::set &set2) const -{ - auto res = isl_set_plain_cmp(get(), set2.get()); - return res; +// implementations for isl::set +set manage(__isl_take isl_set *ptr) { + return set(ptr); +} +set manage_copy(__isl_keep isl_set *ptr) { + ptr = isl_set_copy(ptr); + return set(ptr); } -isl::val set::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const +set::set() + : ptr(nullptr) {} + +set::set(const set &obj) + : ptr(nullptr) { - auto res = isl_set_plain_get_val_if_fixed(get(), static_cast(type), pos); - return manage(res); + ptr = obj.copy(); } -boolean set::plain_is_disjoint(const isl::set &set2) const +set::set(__isl_take isl_set *ptr) + : ptr(ptr) {} + +set::set(isl::basic_set bset) { - auto res = isl_set_plain_is_disjoint(get(), set2.get()); - return manage(res); + auto res = isl_set_from_basic_set(bset.release()); + ptr = res; } -boolean set::plain_is_empty() const +set::set(isl::point pnt) { - auto res = isl_set_plain_is_empty(get()); - return manage(res); + auto res = isl_set_from_point(pnt.release()); + ptr = res; } -boolean set::plain_is_equal(const isl::set &set2) const +set::set(isl::union_set uset) { - auto res = isl_set_plain_is_equal(get(), set2.get()); - return manage(res); + auto res = isl_set_from_union_set(uset.release()); + ptr = res; } -boolean set::plain_is_universe() const +set::set(isl::ctx ctx, const std::string &str) { - auto res = isl_set_plain_is_universe(get()); - return manage(res); + auto res = isl_set_read_from_str(ctx.release(), str.c_str()); + ptr = res; } -isl::basic_set set::plain_unshifted_simple_hull() const -{ - auto res = isl_set_plain_unshifted_simple_hull(copy()); - return manage(res); +set &set::operator=(set obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl::basic_set set::polyhedral_hull() const -{ - auto res = isl_set_polyhedral_hull(copy()); - return manage(res); +set::~set() { + if (ptr) + isl_set_free(ptr); } -isl::set set::preimage(isl::multi_aff ma) const -{ - auto res = isl_set_preimage_multi_aff(copy(), ma.release()); - return manage(res); +__isl_give isl_set *set::copy() const & { + return isl_set_copy(ptr); } -isl::set set::preimage(isl::multi_pw_aff mpa) const -{ - auto res = isl_set_preimage_multi_pw_aff(copy(), mpa.release()); - return manage(res); +__isl_keep isl_set *set::get() const { + return ptr; } -isl::set set::preimage(isl::pw_multi_aff pma) const -{ - auto res = isl_set_preimage_pw_multi_aff(copy(), pma.release()); - return manage(res); +__isl_give isl_set *set::release() { + isl_set *tmp = ptr; + ptr = nullptr; + return tmp; } -isl::set set::product(isl::set set2) const -{ - auto res = isl_set_product(copy(), set2.release()); - return manage(res); +bool set::is_null() const { + return ptr == nullptr; } -isl::map set::project_onto_map(isl::dim type, unsigned int first, unsigned int n) const -{ - auto res = isl_set_project_onto_map(copy(), static_cast(type), first, n); - return manage(res); +isl::ctx set::ctx() const { + return isl::ctx(isl_set_get_ctx(ptr)); } -isl::set set::project_out(isl::dim type, unsigned int first, unsigned int n) const +isl::set set::add_constraint(isl::constraint constraint) const { - auto res = isl_set_project_out(copy(), static_cast(type), first, n); + auto res = isl_set_add_constraint(copy(), constraint.release()); return manage(res); } -isl::set set::project_out_all_params() const +isl::set set::add_dims(isl::dim type, unsigned int n) const { - auto res = isl_set_project_out_all_params(copy()); + auto res = isl_set_add_dims(copy(), static_cast(type), n); return manage(res); } -isl::set set::project_out_param(isl::id id) const +isl::basic_set set::affine_hull() const { - auto res = isl_set_project_out_param_id(copy(), id.release()); + auto res = isl_set_affine_hull(copy()); return manage(res); } -isl::set set::project_out_param(isl::id_list list) const +isl::set set::align_params(isl::space model) const { - auto res = isl_set_project_out_param_id_list(copy(), list.release()); + auto res = isl_set_align_params(copy(), model.release()); return manage(res); } -isl::set set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::set set::apply(isl::map map) const { - auto res = isl_set_remove_dims(copy(), static_cast(type), first, n); + auto res = isl_set_apply(copy(), map.release()); return manage(res); } -isl::set set::remove_divs() const +isl::union_set set::apply(const isl::union_map &umap) const { - auto res = isl_set_remove_divs(copy()); - return manage(res); + return isl::union_set(*this).apply(umap); } -isl::set set::remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::set set::apply(const isl::basic_map &map) const { - auto res = isl_set_remove_divs_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return this->apply(isl::map(map)); } -isl::set set::remove_redundancies() const +isl::pw_multi_aff set::as_pw_multi_aff() const { - auto res = isl_set_remove_redundancies(copy()); + auto res = isl_set_as_pw_multi_aff(copy()); return manage(res); } -isl::set set::remove_unknown_divs() const +isl::set set::as_set() const { - auto res = isl_set_remove_unknown_divs(copy()); - return manage(res); + return isl::union_set(*this).as_set(); } -isl::set set::reset_space(isl::space space) const +isl::basic_set_list set::basic_set_list() const { - auto res = isl_set_reset_space(copy(), space.release()); + auto res = isl_set_get_basic_set_list(get()); return manage(res); } -isl::set set::reset_tuple_id() const +isl::basic_set_list set::get_basic_set_list() const { - auto res = isl_set_reset_tuple_id(copy()); - return manage(res); + return basic_set_list(); } -isl::set set::reset_user() const +isl::set set::bind(isl::multi_id tuple) const { - auto res = isl_set_reset_user(copy()); + auto res = isl_set_bind(copy(), tuple.release()); return manage(res); } -isl::basic_set set::sample() const +isl::set set::coalesce() const { - auto res = isl_set_sample(copy()); + auto res = isl_set_coalesce(copy()); return manage(res); } -isl::point set::sample_point() const +isl::set set::complement() const { - auto res = isl_set_sample_point(copy()); + auto res = isl_set_complement(copy()); return manage(res); } -isl::set set::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::union_set set::compute_divs() const { - auto res = isl_set_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); + return isl::union_set(*this).compute_divs(); } -isl::set set::set_tuple_id(isl::id id) const +bool set::contains(const isl::space &space) const { - auto res = isl_set_set_tuple_id(copy(), id.release()); - return manage(res); + return isl::union_set(*this).contains(space); } -isl::set set::set_tuple_name(const std::string &s) const +isl::basic_set set::convex_hull() const { - auto res = isl_set_set_tuple_name(copy(), s.c_str()); + auto res = isl_set_convex_hull(copy()); return manage(res); } -isl::basic_set set::simple_hull() const +isl::set set::detect_equalities() const { - auto res = isl_set_simple_hull(copy()); + auto res = isl_set_detect_equalities(copy()); return manage(res); } -int set::size() const +isl_size set::dim(isl::dim type) const { - auto res = isl_set_size(get()); + auto res = isl_set_dim(get(), static_cast(type)); return res; } -isl::basic_set set::solutions() const +bool set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const { - auto res = isl_set_solutions(copy()); - return manage(res); + auto res = isl_set_dim_has_any_lower_bound(get(), static_cast(type), pos); + return res; } -isl::set set::split_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::id set::dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_set_split_dims(copy(), static_cast(type), first, n); + auto res = isl_set_get_dim_id(get(), static_cast(type), pos); return manage(res); } -isl::set set::subtract(isl::set set2) const +isl::id set::get_dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_set_subtract(copy(), set2.release()); - return manage(res); + return dim_id(type, pos); } -isl::set set::sum(isl::set set2) const +isl::pw_aff set::dim_max(int pos) const { - auto res = isl_set_sum(copy(), set2.release()); + auto res = isl_set_dim_max(copy(), pos); return manage(res); } -isl::map set::translation() const +isl::val set::dim_max_val(int pos) const { - auto res = isl_set_translation(copy()); + auto res = isl_set_dim_max_val(copy(), pos); return manage(res); } -isl_size set::tuple_dim() const +isl::pw_aff set::dim_min(int pos) const { - auto res = isl_set_tuple_dim(get()); - return res; + auto res = isl_set_dim_min(copy(), pos); + return manage(res); } -isl::set set::unbind_params(isl::multi_id tuple) const +isl::val set::dim_min_val(int pos) const { - auto res = isl_set_unbind_params(copy(), tuple.release()); + auto res = isl_set_dim_min_val(copy(), pos); return manage(res); } -isl::map set::unbind_params_insert_domain(isl::multi_id domain) const +std::string set::dim_name(isl::dim type, unsigned int pos) const { - auto res = isl_set_unbind_params_insert_domain(copy(), domain.release()); - return manage(res); + auto res = isl_set_get_dim_name(get(), static_cast(type), pos); + std::string tmp(res); + return tmp; } -isl::set set::unite(isl::set set2) const +std::string set::get_dim_name(isl::dim type, unsigned int pos) const { - auto res = isl_set_union(copy(), set2.release()); - return manage(res); + return dim_name(type, pos); } -isl::set set::universe(isl::space space) +isl::set set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_set_universe(space.release()); + auto res = isl_set_drop_constraints_involving_dims(copy(), static_cast(type), first, n); return manage(res); } -isl::basic_set set::unshifted_simple_hull() const +isl::set set::eliminate(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_set_unshifted_simple_hull(copy()); + auto res = isl_set_eliminate(copy(), static_cast(type), first, n); return manage(res); } -isl::basic_set set::unshifted_simple_hull_from_set_list(isl::set_list list) const +isl::set set::empty(isl::space space) { - auto res = isl_set_unshifted_simple_hull_from_set_list(copy(), list.release()); + auto res = isl_set_empty(space.release()); return manage(res); } -isl::map set::unwrap() const +bool set::every_set(const std::function &test) const { - auto res = isl_set_unwrap(copy()); - return manage(res); + return isl::union_set(*this).every_set(test); } -isl::set set::upper_bound(isl::multi_pw_aff upper) const +isl::set set::extract_set(const isl::space &space) const { - auto res = isl_set_upper_bound_multi_pw_aff(copy(), upper.release()); - return manage(res); + return isl::union_set(*this).extract_set(space); } -isl::set set::upper_bound(isl::multi_val upper) const +int set::find_dim_by_id(isl::dim type, const isl::id &id) const { - auto res = isl_set_upper_bound_multi_val(copy(), upper.release()); - return manage(res); + auto res = isl_set_find_dim_by_id(get(), static_cast(type), id.get()); + return res; } -isl::set set::upper_bound_si(isl::dim type, unsigned int pos, int value) const +int set::find_dim_by_id(isl::dim type, const std::string &id) const { - auto res = isl_set_upper_bound_si(copy(), static_cast(type), pos, value); - return manage(res); + return this->find_dim_by_id(type, isl::id(ctx(), id)); } -isl::set set::upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const +isl::set set::fix_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_set_upper_bound_val(copy(), static_cast(type), pos, value.release()); + auto res = isl_set_fix_si(copy(), static_cast(type), pos, value); return manage(res); } -isl::map set::wrapped_domain_map() const +isl::set set::flatten() const { - auto res = isl_set_wrapped_domain_map(copy()); + auto res = isl_set_flatten(copy()); return manage(res); } -// implementations for isl::set_list -set_list manage(__isl_take isl_set_list *ptr) { - return set_list(ptr); -} -set_list manage_copy(__isl_keep isl_set_list *ptr) { - ptr = isl_set_list_copy(ptr); - return set_list(ptr); -} - -set_list::set_list() - : ptr(nullptr) {} - -set_list::set_list(const set_list &obj) - : ptr(nullptr) +void set::foreach_basic_set(const std::function &fn) const { - ptr = obj.copy(); + struct fn_data { + std::function 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(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); + return; } - -set_list::set_list(__isl_take isl_set_list *ptr) - : ptr(ptr) {} - - -set_list &set_list::operator=(set_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; +void set::foreach_point(const std::function &fn) const +{ + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(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); + return; } -set_list::~set_list() { - if (ptr) - isl_set_list_free(ptr); +void set::foreach_set(const std::function &fn) const +{ + return isl::union_set(*this).foreach_set(fn); } -__isl_give isl_set_list *set_list::copy() const & { - return isl_set_list_copy(ptr); +isl::set set::gist(isl::set context) const +{ + auto res = isl_set_gist(copy(), context.release()); + return manage(res); } -__isl_keep isl_set_list *set_list::get() const { - return ptr; +isl::union_set set::gist(const isl::union_set &context) const +{ + return isl::union_set(*this).gist(context); } -__isl_give isl_set_list *set_list::release() { - isl_set_list *tmp = ptr; - ptr = nullptr; - return tmp; +isl::set set::gist(const isl::basic_set &context) const +{ + return this->gist(isl::set(context)); } -bool set_list::is_null() const { - return ptr == nullptr; +isl::set set::gist(const isl::point &context) const +{ + return this->gist(isl::set(context)); } - -isl::ctx set_list::ctx() const { - return isl::ctx(isl_set_list_get_ctx(ptr)); +isl::set set::gist_params(isl::set context) const +{ + auto res = isl_set_gist_params(copy(), context.release()); + return manage(res); } -void set_list::dump() const { - isl_set_list_dump(get()); +bool set::has_equal_space(const isl::set &set2) const +{ + auto res = isl_set_has_equal_space(get(), set2.get()); + return res; } - -isl::set_list set_list::add(isl::set el) const +isl::map set::identity() const { - auto res = isl_set_list_add(copy(), el.release()); + auto res = isl_set_identity(copy()); return manage(res); } -isl::set_list set_list::alloc(isl::ctx ctx, int n) +isl::union_pw_multi_aff set::identity_union_pw_multi_aff() const { - auto res = isl_set_list_alloc(ctx.release(), n); - return manage(res); + return isl::union_set(*this).identity_union_pw_multi_aff(); } -isl::set_list set_list::clear() const +isl::pw_aff set::indicator_function() const { - auto res = isl_set_list_clear(copy()); + auto res = isl_set_indicator_function(copy()); return manage(res); } -isl::set_list set_list::concat(isl::set_list list2) const +isl::set set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const { - auto res = isl_set_list_concat(copy(), list2.release()); + auto res = isl_set_insert_dims(copy(), static_cast(type), pos, n); return manage(res); } -isl::set_list set_list::drop(unsigned int first, unsigned int n) const +isl::map set::insert_domain(isl::space domain) const { - auto res = isl_set_list_drop(copy(), first, n); + auto res = isl_set_insert_domain(copy(), domain.release()); return manage(res); } -stat set_list::foreach(const std::function &fn) const +isl::set set::intersect(isl::set set2) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_set_list_foreach(get(), fn_lambda, &fn_data); + auto res = isl_set_intersect(copy(), set2.release()); return manage(res); } -isl::set_list set_list::from_set(isl::set el) +isl::union_set set::intersect(const isl::union_set &uset2) const { - auto res = isl_set_list_from_set(el.release()); - return manage(res); + return isl::union_set(*this).intersect(uset2); } -isl::set set_list::get_at(int index) const +isl::set set::intersect(const isl::basic_set &set2) const { - auto res = isl_set_list_get_at(get(), index); - return manage(res); + return this->intersect(isl::set(set2)); } -isl::set set_list::get_set(int index) const +isl::set set::intersect(const isl::point &set2) const { - auto res = isl_set_list_get_set(get(), index); - return manage(res); + return this->intersect(isl::set(set2)); } -isl::set_list set_list::insert(unsigned int pos, isl::set el) const +isl::set set::intersect_params(isl::set params) const { - auto res = isl_set_list_insert(copy(), pos, el.release()); + auto res = isl_set_intersect_params(copy(), params.release()); return manage(res); } -isl_size set_list::n_set() const +bool set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_set_list_n_set(get()); + auto res = isl_set_involves_dims(get(), static_cast(type), first, n); return res; } -isl::set_list set_list::reverse() const +bool set::involves_locals() const { - auto res = isl_set_list_reverse(copy()); - return manage(res); + auto res = isl_set_involves_locals(get()); + return res; } -isl::set_list set_list::set_set(int index, isl::set el) const +bool set::is_bounded() const { - auto res = isl_set_list_set_set(copy(), index, el.release()); - return manage(res); + auto res = isl_set_is_bounded(get()); + return res; } -isl_size set_list::size() const +bool set::is_disjoint(const isl::set &set2) const { - auto res = isl_set_list_size(get()); + auto res = isl_set_is_disjoint(get(), set2.get()); return res; } -isl::set_list set_list::swap(unsigned int pos1, unsigned int pos2) const +bool set::is_disjoint(const isl::union_set &uset2) const { - auto res = isl_set_list_swap(copy(), pos1, pos2); - return manage(res); + return isl::union_set(*this).is_disjoint(uset2); } -isl::set set_list::unite() const +bool set::is_disjoint(const isl::basic_set &set2) const { - auto res = isl_set_list_union(copy()); - return manage(res); + return this->is_disjoint(isl::set(set2)); } -// implementations for isl::space -space manage(__isl_take isl_space *ptr) { - return space(ptr); +bool set::is_disjoint(const isl::point &set2) const +{ + return this->is_disjoint(isl::set(set2)); } -space manage_copy(__isl_keep isl_space *ptr) { - ptr = isl_space_copy(ptr); - return space(ptr); + +bool set::is_empty() const +{ + auto res = isl_set_is_empty(get()); + return res; } -space::space() - : ptr(nullptr) {} +bool set::is_equal(const isl::set &set2) const +{ + auto res = isl_set_is_equal(get(), set2.get()); + return res; +} -space::space(const space &obj) - : ptr(nullptr) +bool set::is_equal(const isl::union_set &uset2) const { - ptr = obj.copy(); + return isl::union_set(*this).is_equal(uset2); } +bool set::is_equal(const isl::basic_set &set2) const +{ + return this->is_equal(isl::set(set2)); +} -space::space(__isl_take isl_space *ptr) - : ptr(ptr) {} +bool set::is_equal(const isl::point &set2) const +{ + return this->is_equal(isl::set(set2)); +} -space::space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out) +bool set::is_params() const { - auto res = isl_space_alloc(ctx.release(), nparam, n_in, n_out); - ptr = res; + auto res = isl_set_is_params(get()); + return res; } -space::space(isl::ctx ctx, unsigned int nparam, unsigned int dim) + +bool set::is_singleton() const { - auto res = isl_space_set_alloc(ctx.release(), nparam, dim); - ptr = res; + auto res = isl_set_is_singleton(get()); + return res; } -space &space::operator=(space obj) { - std::swap(this->ptr, obj.ptr); - return *this; +bool set::is_strict_subset(const isl::set &set2) const +{ + auto res = isl_set_is_strict_subset(get(), set2.get()); + return res; } -space::~space() { - if (ptr) - isl_space_free(ptr); +bool set::is_strict_subset(const isl::union_set &uset2) const +{ + return isl::union_set(*this).is_strict_subset(uset2); } -__isl_give isl_space *space::copy() const & { - return isl_space_copy(ptr); +bool set::is_strict_subset(const isl::basic_set &set2) const +{ + return this->is_strict_subset(isl::set(set2)); } -__isl_keep isl_space *space::get() const { - return ptr; +bool set::is_strict_subset(const isl::point &set2) const +{ + return this->is_strict_subset(isl::set(set2)); } -__isl_give isl_space *space::release() { - isl_space *tmp = ptr; - ptr = nullptr; - return tmp; +bool set::is_subset(const isl::set &set2) const +{ + auto res = isl_set_is_subset(get(), set2.get()); + return res; } -bool space::is_null() const { - return ptr == nullptr; +bool set::is_subset(const isl::union_set &uset2) const +{ + return isl::union_set(*this).is_subset(uset2); } +bool set::is_subset(const isl::basic_set &set2) const +{ + return this->is_subset(isl::set(set2)); +} -isl::ctx space::ctx() const { - return isl::ctx(isl_space_get_ctx(ptr)); +bool set::is_subset(const isl::point &set2) const +{ + return this->is_subset(isl::set(set2)); } -void space::dump() const { - isl_space_dump(get()); +bool set::is_wrapping() const +{ + auto res = isl_set_is_wrapping(get()); + return res; } +bool set::isa_set() const +{ + return isl::union_set(*this).isa_set(); +} -isl::space space::add_dims(isl::dim type, unsigned int n) const +isl::set set::lexmax() const { - auto res = isl_space_add_dims(copy(), static_cast(type), n); + auto res = isl_set_lexmax(copy()); return manage(res); } -isl::space space::add_named_tuple(isl::id tuple_id, unsigned int dim) const +isl::pw_multi_aff set::lexmax_pw_multi_aff() const { - auto res = isl_space_add_named_tuple_id_ui(copy(), tuple_id.release(), dim); + auto res = isl_set_lexmax_pw_multi_aff(copy()); return manage(res); } -isl::space space::add_param_id(isl::id id) const +isl::set set::lexmin() const { - auto res = isl_space_add_param_id(copy(), id.release()); + auto res = isl_set_lexmin(copy()); return manage(res); } -isl::space space::add_unnamed_tuple(unsigned int dim) const +isl::pw_multi_aff set::lexmin_pw_multi_aff() const { - auto res = isl_space_add_unnamed_tuple_ui(copy(), dim); + auto res = isl_set_lexmin_pw_multi_aff(copy()); return manage(res); } -isl::space space::align_params(isl::space space2) const +isl::set set::lower_bound(isl::multi_pw_aff lower) const { - auto res = isl_space_align_params(copy(), space2.release()); + auto res = isl_set_lower_bound_multi_pw_aff(copy(), lower.release()); return manage(res); } -boolean space::can_curry() const +isl::set set::lower_bound(isl::multi_val lower) const { - auto res = isl_space_can_curry(get()); + auto res = isl_set_lower_bound_multi_val(copy(), lower.release()); return manage(res); } -boolean space::can_range_curry() const +isl::set set::lower_bound_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_space_can_range_curry(get()); + auto res = isl_set_lower_bound_si(copy(), static_cast(type), pos, value); return manage(res); } -boolean space::can_uncurry() const +isl::set set::lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const { - auto res = isl_space_can_uncurry(get()); + auto res = isl_set_lower_bound_val(copy(), static_cast(type), pos, value.release()); return manage(res); } -boolean space::can_zip() const +isl::set set::lower_bound_val(isl::dim type, unsigned int pos, long value) const { - auto res = isl_space_can_zip(get()); - return manage(res); + return this->lower_bound_val(type, pos, isl::val(ctx(), value)); } -isl::space space::curry() const +isl::multi_pw_aff set::max_multi_pw_aff() const { - auto res = isl_space_curry(copy()); + auto res = isl_set_max_multi_pw_aff(copy()); return manage(res); } -isl_size space::dim(isl::dim type) const +isl::val set::max_val(const isl::aff &obj) const { - auto res = isl_space_dim(get(), static_cast(type)); - return res; + auto res = isl_set_max_val(get(), obj.get()); + return manage(res); } -isl::space space::domain() const +isl::multi_pw_aff set::min_multi_pw_aff() const { - auto res = isl_space_domain(copy()); + auto res = isl_set_min_multi_pw_aff(copy()); return manage(res); } -isl::space space::domain_factor_domain() const +isl::val set::min_val(const isl::aff &obj) const { - auto res = isl_space_domain_factor_domain(copy()); + auto res = isl_set_min_val(get(), obj.get()); return manage(res); } -isl::space space::domain_factor_range() const +isl_size set::n_basic_set() const { - auto res = isl_space_domain_factor_range(copy()); - return manage(res); + auto res = isl_set_n_basic_set(get()); + return res; } -boolean space::domain_is_wrapping() const +isl::set set::params() const { - auto res = isl_space_domain_is_wrapping(get()); + auto res = isl_set_params(copy()); return manage(res); } -isl::space space::domain_map() const +isl::val set::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const { - auto res = isl_space_domain_map(copy()); + auto res = isl_set_plain_get_val_if_fixed(get(), static_cast(type), pos); return manage(res); } -isl::space space::domain_product(isl::space right) const +isl::multi_val set::plain_multi_val_if_fixed() const { - auto res = isl_space_domain_product(copy(), right.release()); + auto res = isl_set_get_plain_multi_val_if_fixed(get()); return manage(res); } -isl::space space::drop_all_params() const +isl::multi_val set::get_plain_multi_val_if_fixed() const { - auto res = isl_space_drop_all_params(copy()); - return manage(res); + return plain_multi_val_if_fixed(); } -isl::space space::drop_dims(isl::dim type, unsigned int first, unsigned int num) const +isl::basic_set set::polyhedral_hull() const { - auto res = isl_space_drop_dims(copy(), static_cast(type), first, num); + auto res = isl_set_polyhedral_hull(copy()); return manage(res); } -isl::space space::factor_domain() const +isl::set set::preimage(isl::multi_aff ma) const { - auto res = isl_space_factor_domain(copy()); + auto res = isl_set_preimage_multi_aff(copy(), ma.release()); return manage(res); } -isl::space space::factor_range() const +isl::set set::preimage(isl::multi_pw_aff mpa) const { - auto res = isl_space_factor_range(copy()); + auto res = isl_set_preimage_multi_pw_aff(copy(), mpa.release()); return manage(res); } -int space::find_dim_by_id(isl::dim type, const isl::id &id) const +isl::set set::preimage(isl::pw_multi_aff pma) const { - auto res = isl_space_find_dim_by_id(get(), static_cast(type), id.get()); - return res; + auto res = isl_set_preimage_pw_multi_aff(copy(), pma.release()); + return manage(res); } -int space::find_dim_by_name(isl::dim type, const std::string &name) const +isl::union_set set::preimage(const isl::union_pw_multi_aff &upma) const { - auto res = isl_space_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + return isl::union_set(*this).preimage(upma); } -isl::space space::flatten_domain() const +isl::set set::product(isl::set set2) const { - auto res = isl_space_flatten_domain(copy()); + auto res = isl_set_product(copy(), set2.release()); return manage(res); } -isl::space space::flatten_range() const +isl::set set::project_out(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_space_flatten_range(copy()); + auto res = isl_set_project_out(copy(), static_cast(type), first, n); return manage(res); } -isl::space space::from_domain() const +isl::set set::project_out_all_params() const { - auto res = isl_space_from_domain(copy()); + auto res = isl_set_project_out_all_params(copy()); return manage(res); } -isl::space space::from_range() const +isl::set set::project_out_param(isl::id id) const { - auto res = isl_space_from_range(copy()); + auto res = isl_set_project_out_param_id(copy(), id.release()); return manage(res); } -isl::id space::get_dim_id(isl::dim type, unsigned int pos) const +isl::set set::project_out_param(const std::string &id) const { - auto res = isl_space_get_dim_id(get(), static_cast(type), pos); - return manage(res); + return this->project_out_param(isl::id(ctx(), id)); } -std::string space::get_dim_name(isl::dim type, unsigned int pos) const +isl::set set::project_out_param(isl::id_list list) const { - auto res = isl_space_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + auto res = isl_set_project_out_param_id_list(copy(), list.release()); + return manage(res); } -isl::id space::get_tuple_id(isl::dim type) const +isl::pw_multi_aff set::pw_multi_aff_on_domain(isl::multi_val mv) const { - auto res = isl_space_get_tuple_id(get(), static_cast(type)); + auto res = isl_set_pw_multi_aff_on_domain_multi_val(copy(), mv.release()); return manage(res); } -std::string space::get_tuple_name(isl::dim type) const +isl::set set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_space_get_tuple_name(get(), static_cast(type)); - std::string tmp(res); - return tmp; + auto res = isl_set_remove_dims(copy(), static_cast(type), first, n); + return manage(res); } -boolean space::has_dim_id(isl::dim type, unsigned int pos) const +isl::set set::remove_divs() const { - auto res = isl_space_has_dim_id(get(), static_cast(type), pos); + auto res = isl_set_remove_divs(copy()); return manage(res); } -boolean space::has_dim_name(isl::dim type, unsigned int pos) const +isl::set set::remove_redundancies() const { - auto res = isl_space_has_dim_name(get(), static_cast(type), pos); + auto res = isl_set_remove_redundancies(copy()); return manage(res); } -boolean space::has_equal_params(const isl::space &space2) const +isl::set set::reset_tuple_id() const { - auto res = isl_space_has_equal_params(get(), space2.get()); + auto res = isl_set_reset_tuple_id(copy()); return manage(res); } -boolean space::has_equal_tuples(const isl::space &space2) const +isl::basic_set set::sample() const { - auto res = isl_space_has_equal_tuples(get(), space2.get()); + auto res = isl_set_sample(copy()); return manage(res); } -boolean space::has_tuple_id(isl::dim type) const +isl::point set::sample_point() const { - auto res = isl_space_has_tuple_id(get(), static_cast(type)); + auto res = isl_set_sample_point(copy()); return manage(res); } -boolean space::has_tuple_name(isl::dim type) const +isl::set set::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const { - auto res = isl_space_has_tuple_name(get(), static_cast(type)); + auto res = isl_set_set_dim_id(copy(), static_cast(type), pos, id.release()); return manage(res); } -isl::space space::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const +isl::set set::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const { - auto res = isl_space_insert_dims(copy(), static_cast(type), pos, n); - return manage(res); + return this->set_dim_id(type, pos, isl::id(ctx(), id)); } -boolean space::is_domain(const isl::space &space2) const +isl::set_list set::set_list() const { - auto res = isl_space_is_domain(get(), space2.get()); - return manage(res); + return isl::union_set(*this).set_list(); } -boolean space::is_equal(const isl::space &space2) const +isl::set set::set_tuple_id(isl::id id) const { - auto res = isl_space_is_equal(get(), space2.get()); + auto res = isl_set_set_tuple_id(copy(), id.release()); return manage(res); } -boolean space::is_map() const +isl::set set::set_tuple_id(const std::string &id) const { - auto res = isl_space_is_map(get()); - return manage(res); + return this->set_tuple_id(isl::id(ctx(), id)); } -boolean space::is_params() const +isl::fixed_box set::simple_fixed_box_hull() const { - auto res = isl_space_is_params(get()); + auto res = isl_set_get_simple_fixed_box_hull(get()); return manage(res); } -boolean space::is_product() const +isl::fixed_box set::get_simple_fixed_box_hull() const { - auto res = isl_space_is_product(get()); - return manage(res); + return simple_fixed_box_hull(); } -boolean space::is_range(const isl::space &space2) const +isl::basic_set set::simple_hull() const { - auto res = isl_space_is_range(get(), space2.get()); + auto res = isl_set_simple_hull(copy()); return manage(res); } -boolean space::is_set() const +isl::space set::space() const { - auto res = isl_space_is_set(get()); + auto res = isl_set_get_space(get()); return manage(res); } -boolean space::is_wrapping() const +isl::space set::get_space() const { - auto res = isl_space_is_wrapping(get()); - return manage(res); + return space(); } -isl::space space::join(isl::space right) const +isl::val set::stride(int pos) const { - auto res = isl_space_join(copy(), right.release()); + auto res = isl_set_get_stride(get(), pos); return manage(res); } -isl::space space::map_from_domain_and_range(isl::space range) const +isl::val set::get_stride(int pos) const { - auto res = isl_space_map_from_domain_and_range(copy(), range.release()); - return manage(res); + return stride(pos); } -isl::space space::map_from_set() const +isl::set set::subtract(isl::set set2) const { - auto res = isl_space_map_from_set(copy()); + auto res = isl_set_subtract(copy(), set2.release()); return manage(res); } -isl::space space::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const +isl::union_set set::subtract(const isl::union_set &uset2) const { - auto res = isl_space_move_dims(copy(), static_cast(dst_type), dst_pos, static_cast(src_type), src_pos, n); - return manage(res); + return isl::union_set(*this).subtract(uset2); } -isl::space space::params() const +isl::set set::subtract(const isl::basic_set &set2) const { - auto res = isl_space_params(copy()); - return manage(res); + return this->subtract(isl::set(set2)); } -isl::space space::params_alloc(isl::ctx ctx, unsigned int nparam) +isl::set set::subtract(const isl::point &set2) const { - auto res = isl_space_params_alloc(ctx.release(), nparam); - return manage(res); + return this->subtract(isl::set(set2)); } -isl::space space::product(isl::space right) const +isl::set_list set::to_list() const { - auto res = isl_space_product(copy(), right.release()); + auto res = isl_set_to_list(copy()); return manage(res); } -isl::space space::range() const +isl::union_set set::to_union_set() const { - auto res = isl_space_range(copy()); + auto res = isl_set_to_union_set(copy()); return manage(res); } -isl::space space::range_curry() const +isl::map set::translation() const { - auto res = isl_space_range_curry(copy()); + auto res = isl_set_translation(copy()); return manage(res); } -isl::space space::range_factor_domain() const +isl_size set::tuple_dim() const { - auto res = isl_space_range_factor_domain(copy()); - return manage(res); + auto res = isl_set_tuple_dim(get()); + return res; } -isl::space space::range_factor_range() const +isl::id set::tuple_id() const { - auto res = isl_space_range_factor_range(copy()); + auto res = isl_set_get_tuple_id(get()); return manage(res); } -boolean space::range_is_wrapping() const +isl::id set::get_tuple_id() const { - auto res = isl_space_range_is_wrapping(get()); - return manage(res); + return tuple_id(); } -isl::space space::range_map() const +std::string set::tuple_name() const { - auto res = isl_space_range_map(copy()); - return manage(res); + auto res = isl_set_get_tuple_name(get()); + std::string tmp(res); + return tmp; } -isl::space space::range_product(isl::space right) const +std::string set::get_tuple_name() const { - auto res = isl_space_range_product(copy(), right.release()); - return manage(res); + return tuple_name(); } -isl::space space::range_reverse() const +isl::set set::unbind_params(isl::multi_id tuple) const { - auto res = isl_space_range_reverse(copy()); + auto res = isl_set_unbind_params(copy(), tuple.release()); return manage(res); } -isl::space space::reset_tuple_id(isl::dim type) const +isl::map set::unbind_params_insert_domain(isl::multi_id domain) const { - auto res = isl_space_reset_tuple_id(copy(), static_cast(type)); + auto res = isl_set_unbind_params_insert_domain(copy(), domain.release()); return manage(res); } -isl::space space::reset_user() const +isl::set set::unite(isl::set set2) const { - auto res = isl_space_reset_user(copy()); + auto res = isl_set_union(copy(), set2.release()); return manage(res); } -isl::space space::reverse() const +isl::union_set set::unite(const isl::union_set &uset2) const { - auto res = isl_space_reverse(copy()); - return manage(res); + return isl::union_set(*this).unite(uset2); } -isl::space space::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::set set::unite(const isl::basic_set &set2) const { - auto res = isl_space_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); + return this->unite(isl::set(set2)); } -isl::space space::set_from_params() const +isl::set set::unite(const isl::point &set2) const { - auto res = isl_space_set_from_params(copy()); - return manage(res); + return this->unite(isl::set(set2)); } -isl::space space::set_tuple_id(isl::dim type, isl::id id) const +isl::set set::universe(isl::space space) { - auto res = isl_space_set_tuple_id(copy(), static_cast(type), id.release()); + auto res = isl_set_universe(space.release()); return manage(res); } -isl::space space::set_tuple_name(isl::dim type, const std::string &s) const +isl::basic_set set::unshifted_simple_hull() const { - auto res = isl_space_set_tuple_name(copy(), static_cast(type), s.c_str()); + auto res = isl_set_unshifted_simple_hull(copy()); return manage(res); } -boolean space::tuple_is_equal(isl::dim type1, const isl::space &space2, isl::dim type2) const +isl::map set::unwrap() const { - auto res = isl_space_tuple_is_equal(get(), static_cast(type1), space2.get(), static_cast(type2)); + auto res = isl_set_unwrap(copy()); return manage(res); } -isl::space space::uncurry() const +isl::set set::upper_bound(isl::multi_pw_aff upper) const { - auto res = isl_space_uncurry(copy()); + auto res = isl_set_upper_bound_multi_pw_aff(copy(), upper.release()); return manage(res); } -isl::space space::unit(isl::ctx ctx) +isl::set set::upper_bound(isl::multi_val upper) const { - auto res = isl_space_unit(ctx.release()); + auto res = isl_set_upper_bound_multi_val(copy(), upper.release()); return manage(res); } -isl::space space::unwrap() const +isl::set set::upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const { - auto res = isl_space_unwrap(copy()); + auto res = isl_set_upper_bound_val(copy(), static_cast(type), pos, value.release()); return manage(res); } -isl::space space::wrap() const +isl::set set::upper_bound_val(isl::dim type, unsigned int pos, long value) const { - auto res = isl_space_wrap(copy()); - return manage(res); + return this->upper_bound_val(type, pos, isl::val(ctx(), value)); } -isl::space space::zip() const +inline std::ostream &operator<<(std::ostream &os, const set &obj) { - auto res = isl_space_zip(copy()); - return manage(res); + char *str = isl_set_to_str(obj.get()); + os << str; + free(str); + return os; } -// implementations for isl::term -term manage(__isl_take isl_term *ptr) { - return term(ptr); +// implementations for isl::set_list +set_list manage(__isl_take isl_set_list *ptr) { + return set_list(ptr); } -term manage_copy(__isl_keep isl_term *ptr) { - ptr = isl_term_copy(ptr); - return term(ptr); +set_list manage_copy(__isl_keep isl_set_list *ptr) { + ptr = isl_set_list_copy(ptr); + return set_list(ptr); } -term::term() +set_list::set_list() : ptr(nullptr) {} -term::term(const term &obj) +set_list::set_list(const set_list &obj) : ptr(nullptr) { ptr = obj.copy(); } - -term::term(__isl_take isl_term *ptr) +set_list::set_list(__isl_take isl_set_list *ptr) : ptr(ptr) {} +set_list::set_list(isl::ctx ctx, int n) +{ + auto res = isl_set_list_alloc(ctx.release(), n); + ptr = res; +} + +set_list::set_list(isl::set el) +{ + auto res = isl_set_list_from_set(el.release()); + ptr = res; +} + +set_list::set_list(isl::ctx ctx, const std::string &str) +{ + auto res = isl_set_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} -term &term::operator=(term obj) { +set_list &set_list::operator=(set_list obj) { std::swap(this->ptr, obj.ptr); return *this; } -term::~term() { +set_list::~set_list() { if (ptr) - isl_term_free(ptr); + isl_set_list_free(ptr); } -__isl_give isl_term *term::copy() const & { - return isl_term_copy(ptr); +__isl_give isl_set_list *set_list::copy() const & { + return isl_set_list_copy(ptr); } -__isl_keep isl_term *term::get() const { +__isl_keep isl_set_list *set_list::get() const { return ptr; } -__isl_give isl_term *term::release() { - isl_term *tmp = ptr; +__isl_give isl_set_list *set_list::release() { + isl_set_list *tmp = ptr; ptr = nullptr; return tmp; } -bool term::is_null() const { +bool set_list::is_null() const { return ptr == nullptr; } +isl::ctx set_list::ctx() const { + return isl::ctx(isl_set_list_get_ctx(ptr)); +} + +isl::set_list set_list::add(isl::set el) const +{ + auto res = isl_set_list_add(copy(), el.release()); + return manage(res); +} + +isl::set set_list::at(int index) const +{ + auto res = isl_set_list_get_at(get(), index); + return manage(res); +} -isl::ctx term::ctx() const { - return isl::ctx(isl_term_get_ctx(ptr)); +isl::set set_list::get_at(int index) const +{ + return at(index); } +isl::set_list set_list::clear() const +{ + auto res = isl_set_list_clear(copy()); + return manage(res); +} -isl_size term::dim(isl::dim type) const +isl::set_list set_list::concat(isl::set_list list2) const { - auto res = isl_term_dim(get(), static_cast(type)); - return res; + auto res = isl_set_list_concat(copy(), list2.release()); + return manage(res); } -isl::val term::get_coefficient_val() const +isl::set_list set_list::drop(unsigned int first, unsigned int n) const { - auto res = isl_term_get_coefficient_val(get()); + auto res = isl_set_list_drop(copy(), first, n); return manage(res); } -isl::aff term::get_div(unsigned int pos) const +void set_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(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_list_foreach(get(), fn_lambda, &fn_data); + return; +} + +isl::set_list set_list::insert(unsigned int pos, isl::set el) const { - auto res = isl_term_get_div(get(), pos); + auto res = isl_set_list_insert(copy(), pos, el.release()); return manage(res); } -isl_size term::get_exp(isl::dim type, unsigned int pos) const +isl_size set_list::size() const { - auto res = isl_term_get_exp(get(), static_cast(type), pos); + auto res = isl_set_list_size(get()); return res; } -// implementations for isl::union_access_info -union_access_info manage(__isl_take isl_union_access_info *ptr) { - return union_access_info(ptr); +inline std::ostream &operator<<(std::ostream &os, const set_list &obj) +{ + char *str = isl_set_list_to_str(obj.get()); + os << str; + free(str); + return os; } -union_access_info manage_copy(__isl_keep isl_union_access_info *ptr) { - ptr = isl_union_access_info_copy(ptr); - return union_access_info(ptr); + +// implementations for isl::space +space manage(__isl_take isl_space *ptr) { + return space(ptr); +} +space manage_copy(__isl_keep isl_space *ptr) { + ptr = isl_space_copy(ptr); + return space(ptr); } -union_access_info::union_access_info() +space::space() : ptr(nullptr) {} -union_access_info::union_access_info(const union_access_info &obj) +space::space(const space &obj) : ptr(nullptr) { ptr = obj.copy(); } - -union_access_info::union_access_info(__isl_take isl_union_access_info *ptr) +space::space(__isl_take isl_space *ptr) : ptr(ptr) {} -union_access_info::union_access_info(isl::union_map sink) +space::space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out) { - auto res = isl_union_access_info_from_sink(sink.release()); + auto res = isl_space_alloc(ctx.release(), nparam, n_in, n_out); ptr = res; } -union_access_info &union_access_info::operator=(union_access_info obj) { +space::space(isl::ctx ctx, unsigned int nparam, unsigned int dim) +{ + auto res = isl_space_set_alloc(ctx.release(), nparam, dim); + ptr = res; +} + +space &space::operator=(space obj) { std::swap(this->ptr, obj.ptr); return *this; } -union_access_info::~union_access_info() { +space::~space() { if (ptr) - isl_union_access_info_free(ptr); + isl_space_free(ptr); } -__isl_give isl_union_access_info *union_access_info::copy() const & { - return isl_union_access_info_copy(ptr); +__isl_give isl_space *space::copy() const & { + return isl_space_copy(ptr); } -__isl_keep isl_union_access_info *union_access_info::get() const { +__isl_keep isl_space *space::get() const { return ptr; } -__isl_give isl_union_access_info *union_access_info::release() { - isl_union_access_info *tmp = ptr; +__isl_give isl_space *space::release() { + isl_space *tmp = ptr; ptr = nullptr; return tmp; } -bool union_access_info::is_null() const { +bool space::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 space::ctx() const { + return isl::ctx(isl_space_get_ctx(ptr)); } - -isl::union_flow union_access_info::compute_flow() const +isl::space space::add_dims(isl::dim type, unsigned int n) const { - auto res = isl_union_access_info_compute_flow(copy()); + auto res = isl_space_add_dims(copy(), static_cast(type), n); return manage(res); } -isl::union_access_info union_access_info::set_kill(isl::union_map kill) const +isl::space space::add_named_tuple(isl::id tuple_id, unsigned int dim) const { - auto res = isl_union_access_info_set_kill(copy(), kill.release()); + auto res = isl_space_add_named_tuple_id_ui(copy(), tuple_id.release(), dim); return manage(res); } -isl::union_access_info union_access_info::set_may_source(isl::union_map may_source) const +isl::space space::add_named_tuple(const std::string &tuple_id, unsigned int dim) const { - auto res = isl_union_access_info_set_may_source(copy(), may_source.release()); - return manage(res); + return this->add_named_tuple(isl::id(ctx(), tuple_id), dim); } -isl::union_access_info union_access_info::set_must_source(isl::union_map must_source) const +isl::space space::add_param(isl::id id) const { - auto res = isl_union_access_info_set_must_source(copy(), must_source.release()); + auto res = isl_space_add_param_id(copy(), id.release()); return manage(res); } -isl::union_access_info union_access_info::set_schedule(isl::schedule schedule) const +isl::space space::add_param(const std::string &id) const { - auto res = isl_union_access_info_set_schedule(copy(), schedule.release()); - return manage(res); + return this->add_param(isl::id(ctx(), id)); } -isl::union_access_info union_access_info::set_schedule_map(isl::union_map schedule_map) const +isl::space space::add_unnamed_tuple(unsigned int dim) const { - auto res = isl_union_access_info_set_schedule_map(copy(), schedule_map.release()); + auto res = isl_space_add_unnamed_tuple_ui(copy(), dim); return manage(res); } -// implementations for isl::union_flow -union_flow manage(__isl_take isl_union_flow *ptr) { - return union_flow(ptr); -} -union_flow manage_copy(__isl_keep isl_union_flow *ptr) { - ptr = isl_union_flow_copy(ptr); - return union_flow(ptr); -} - -union_flow::union_flow() - : ptr(nullptr) {} - -union_flow::union_flow(const union_flow &obj) - : ptr(nullptr) +isl::space space::align_params(isl::space space2) const { - ptr = obj.copy(); -} - - -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); + auto res = isl_space_align_params(copy(), space2.release()); + return manage(res); } -__isl_keep isl_union_flow *union_flow::get() const { - return ptr; +isl::space space::curry() const +{ + auto res = isl_space_curry(copy()); + return manage(res); } -__isl_give isl_union_flow *union_flow::release() { - isl_union_flow *tmp = ptr; - ptr = nullptr; - return tmp; +isl_size space::dim(isl::dim type) const +{ + auto res = isl_space_dim(get(), static_cast(type)); + return res; } -bool union_flow::is_null() const { - return ptr == nullptr; +isl::id space::dim_id(isl::dim type, unsigned int pos) const +{ + auto res = isl_space_get_dim_id(get(), static_cast(type), pos); + return manage(res); } - -isl::ctx union_flow::ctx() const { - return isl::ctx(isl_union_flow_get_ctx(ptr)); +isl::id space::get_dim_id(isl::dim type, unsigned int pos) const +{ + return dim_id(type, pos); } - -isl::union_map union_flow::get_full_may_dependence() const +isl::space space::domain() const { - auto res = isl_union_flow_get_full_may_dependence(get()); + auto res = isl_space_domain(copy()); return manage(res); } -isl::union_map union_flow::get_full_must_dependence() const +isl::multi_aff space::domain_map_multi_aff() const { - auto res = isl_union_flow_get_full_must_dependence(get()); + auto res = isl_space_domain_map_multi_aff(copy()); return manage(res); } -isl::union_map union_flow::get_may_dependence() const +isl::pw_multi_aff space::domain_map_pw_multi_aff() const { - auto res = isl_union_flow_get_may_dependence(get()); + auto res = isl_space_domain_map_pw_multi_aff(copy()); return manage(res); } -isl::union_map union_flow::get_may_no_source() const +isl::id space::domain_tuple_id() const { - auto res = isl_union_flow_get_may_no_source(get()); + auto res = isl_space_get_domain_tuple_id(get()); return manage(res); } -isl::union_map union_flow::get_must_dependence() const +isl::id space::get_domain_tuple_id() const { - auto res = isl_union_flow_get_must_dependence(get()); - return manage(res); + return domain_tuple_id(); } -isl::union_map union_flow::get_must_no_source() const +isl::space space::drop_dims(isl::dim type, unsigned int first, unsigned int num) const { - auto res = isl_union_flow_get_must_no_source(get()); + auto res = isl_space_drop_dims(copy(), static_cast(type), first, num); return manage(res); } -// implementations for isl::union_map -union_map manage(__isl_take isl_union_map *ptr) { - return union_map(ptr); -} -union_map manage_copy(__isl_keep isl_union_map *ptr) { - ptr = isl_union_map_copy(ptr); - return union_map(ptr); -} - -union_map::union_map() - : ptr(nullptr) {} - -union_map::union_map(const union_map &obj) - : ptr(nullptr) +int space::find_dim_by_id(isl::dim type, const isl::id &id) const { - ptr = obj.copy(); + auto res = isl_space_find_dim_by_id(get(), static_cast(type), id.get()); + return res; } - -union_map::union_map(__isl_take isl_union_map *ptr) - : ptr(ptr) {} - -union_map::union_map(isl::basic_map bmap) +int space::find_dim_by_id(isl::dim type, const std::string &id) const { - auto res = isl_union_map_from_basic_map(bmap.release()); - ptr = res; + return this->find_dim_by_id(type, isl::id(ctx(), id)); } -union_map::union_map(isl::map map) + +isl::space space::flatten_domain() const { - auto res = isl_union_map_from_map(map.release()); - ptr = res; + auto res = isl_space_flatten_domain(copy()); + return manage(res); } -union_map::union_map(isl::union_pw_multi_aff upma) + +isl::space space::flatten_range() const { - auto res = isl_union_map_from_union_pw_multi_aff(upma.release()); - ptr = res; + auto res = isl_space_flatten_range(copy()); + return manage(res); } -union_map::union_map(isl::ctx ctx, const std::string &str) + +bool space::has_domain_tuple_id() const { - auto res = isl_union_map_read_from_str(ctx.release(), str.c_str()); - ptr = res; + auto res = isl_space_has_domain_tuple_id(get()); + return res; } -union_map &union_map::operator=(union_map obj) { - std::swap(this->ptr, obj.ptr); - return *this; +bool space::has_equal_tuples(const isl::space &space2) const +{ + auto res = isl_space_has_equal_tuples(get(), space2.get()); + return res; } -union_map::~union_map() { - if (ptr) - isl_union_map_free(ptr); +bool space::has_range_tuple_id() const +{ + auto res = isl_space_has_range_tuple_id(get()); + return res; } -__isl_give isl_union_map *union_map::copy() const & { - return isl_union_map_copy(ptr); +bool space::has_tuple_id(isl::dim type) const +{ + auto res = isl_space_has_tuple_id(get(), static_cast(type)); + return res; } -__isl_keep isl_union_map *union_map::get() const { - return ptr; +bool space::has_tuple_name(isl::dim type) const +{ + auto res = isl_space_has_tuple_name(get(), static_cast(type)); + return res; } -__isl_give isl_union_map *union_map::release() { - isl_union_map *tmp = ptr; - ptr = nullptr; - return tmp; +isl::multi_aff space::identity_multi_aff_on_domain() const +{ + auto res = isl_space_identity_multi_aff_on_domain(copy()); + return manage(res); } -bool union_map::is_null() const { - return ptr == nullptr; +isl::multi_pw_aff space::identity_multi_pw_aff_on_domain() const +{ + auto res = isl_space_identity_multi_pw_aff_on_domain(copy()); + return manage(res); } - -isl::ctx union_map::ctx() const { - return isl::ctx(isl_union_map_get_ctx(ptr)); +isl::pw_multi_aff space::identity_pw_multi_aff_on_domain() const +{ + auto res = isl_space_identity_pw_multi_aff_on_domain(copy()); + return manage(res); } -void union_map::dump() const { - isl_union_map_dump(get()); +bool space::is_equal(const isl::space &space2) const +{ + auto res = isl_space_is_equal(get(), space2.get()); + return res; } +bool space::is_params() const +{ + auto res = isl_space_is_params(get()); + return res; +} -isl::union_map union_map::affine_hull() const +bool space::is_set() const { - auto res = isl_union_map_affine_hull(copy()); - return manage(res); + auto res = isl_space_is_set(get()); + return res; } -isl::union_map union_map::align_params(isl::space model) const +bool space::is_wrapping() const { - auto res = isl_union_map_align_params(copy(), model.release()); - return manage(res); + auto res = isl_space_is_wrapping(get()); + return res; } -isl::union_map union_map::apply_domain(isl::union_map umap2) const +isl::space space::map_from_domain_and_range(isl::space range) const { - auto res = isl_union_map_apply_domain(copy(), umap2.release()); + auto res = isl_space_map_from_domain_and_range(copy(), range.release()); return manage(res); } -isl::union_map union_map::apply_range(isl::union_map umap2) const +isl::space space::map_from_set() const { - auto res = isl_union_map_apply_range(copy(), umap2.release()); + auto res = isl_space_map_from_set(copy()); return manage(res); } -isl::union_set union_map::bind_range(isl::multi_id tuple) const +isl::multi_aff space::multi_aff(isl::aff_list list) const { - auto res = isl_union_map_bind_range(copy(), tuple.release()); + auto res = isl_space_multi_aff(copy(), list.release()); return manage(res); } -isl::union_map union_map::coalesce() const +isl::multi_aff space::multi_aff_on_domain(isl::multi_val mv) const { - auto res = isl_union_map_coalesce(copy()); + auto res = isl_space_multi_aff_on_domain_multi_val(copy(), mv.release()); return manage(res); } -boolean union_map::contains(const isl::space &space) const +isl::multi_id space::multi_id(isl::id_list list) const { - auto res = isl_union_map_contains(get(), space.get()); + auto res = isl_space_multi_id(copy(), list.release()); return manage(res); } -isl::union_map union_map::curry() const +isl::multi_pw_aff space::multi_pw_aff(isl::pw_aff_list list) const { - auto res = isl_union_map_curry(copy()); + auto res = isl_space_multi_pw_aff(copy(), list.release()); return manage(res); } -isl::union_set union_map::deltas() const +isl::multi_union_pw_aff space::multi_union_pw_aff(isl::union_pw_aff_list list) const { - auto res = isl_union_map_deltas(copy()); + auto res = isl_space_multi_union_pw_aff(copy(), list.release()); return manage(res); } -isl::union_map union_map::deltas_map() const +isl::multi_val space::multi_val(isl::val_list list) const { - auto res = isl_union_map_deltas_map(copy()); + auto res = isl_space_multi_val(copy(), list.release()); return manage(res); } -isl::union_map union_map::detect_equalities() const +isl::aff space::param_aff_on_domain(isl::id id) const { - auto res = isl_union_map_detect_equalities(copy()); + auto res = isl_space_param_aff_on_domain_id(copy(), id.release()); return manage(res); } -isl_size union_map::dim(isl::dim type) const +isl::aff space::param_aff_on_domain(const std::string &id) const { - auto res = isl_union_map_dim(get(), static_cast(type)); - return res; + return this->param_aff_on_domain(isl::id(ctx(), id)); } -isl::union_set union_map::domain() const +isl::space space::params() const { - auto res = isl_union_map_domain(copy()); + auto res = isl_space_params(copy()); return manage(res); } -isl::union_map union_map::domain_factor_domain() const +isl::space space::params_alloc(isl::ctx ctx, unsigned int nparam) { - auto res = isl_union_map_domain_factor_domain(copy()); + auto res = isl_space_params_alloc(ctx.release(), nparam); return manage(res); } -isl::union_map union_map::domain_factor_range() const +isl::space space::product(isl::space right) const { - auto res = isl_union_map_domain_factor_range(copy()); + auto res = isl_space_product(copy(), right.release()); return manage(res); } -isl::union_map union_map::domain_map() const +isl::space space::range() const { - auto res = isl_union_map_domain_map(copy()); + auto res = isl_space_range(copy()); return manage(res); } -isl::union_pw_multi_aff union_map::domain_map_union_pw_multi_aff() const +isl::multi_aff space::range_map_multi_aff() const { - auto res = isl_union_map_domain_map_union_pw_multi_aff(copy()); + auto res = isl_space_range_map_multi_aff(copy()); return manage(res); } -isl::union_map union_map::domain_product(isl::union_map umap2) const +isl::pw_multi_aff space::range_map_pw_multi_aff() const { - auto res = isl_union_map_domain_product(copy(), umap2.release()); + auto res = isl_space_range_map_pw_multi_aff(copy()); return manage(res); } -isl::union_map union_map::empty(isl::ctx ctx) +isl::space space::range_reverse() const { - auto res = isl_union_map_empty_ctx(ctx.release()); + auto res = isl_space_range_reverse(copy()); return manage(res); } -isl::union_map union_map::eq_at(isl::multi_union_pw_aff mupa) const +isl::id space::range_tuple_id() const { - auto res = isl_union_map_eq_at_multi_union_pw_aff(copy(), mupa.release()); + auto res = isl_space_get_range_tuple_id(get()); return manage(res); } -isl::map union_map::extract_map(isl::space space) const +isl::id space::get_range_tuple_id() const { - auto res = isl_union_map_extract_map(get(), space.release()); - return manage(res); + return range_tuple_id(); } -isl::union_map union_map::factor_domain() const +isl::space space::reverse() const { - auto res = isl_union_map_factor_domain(copy()); + auto res = isl_space_reverse(copy()); return manage(res); } -isl::union_map union_map::factor_range() const +isl::space space::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const { - auto res = isl_union_map_factor_range(copy()); + auto res = isl_space_set_dim_id(copy(), static_cast(type), pos, id.release()); return manage(res); } -int union_map::find_dim_by_name(isl::dim type, const std::string &name) const +isl::space space::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const { - auto res = isl_union_map_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + return this->set_dim_id(type, pos, isl::id(ctx(), id)); } -isl::union_map union_map::fixed_power(isl::val exp) const +isl::space space::set_domain_tuple(isl::id id) const { - auto res = isl_union_map_fixed_power_val(copy(), exp.release()); + auto res = isl_space_set_domain_tuple_id(copy(), id.release()); return manage(res); } -isl::union_map union_map::flat_domain_product(isl::union_map umap2) const +isl::space space::set_domain_tuple(const std::string &id) const { - auto res = isl_union_map_flat_domain_product(copy(), umap2.release()); - return manage(res); + return this->set_domain_tuple(isl::id(ctx(), id)); } -isl::union_map union_map::flat_range_product(isl::union_map umap2) const +isl::space space::set_from_params() const { - auto res = isl_union_map_flat_range_product(copy(), umap2.release()); + auto res = isl_space_set_from_params(copy()); return manage(res); } -stat union_map::foreach_map(const std::function &fn) const +isl::space space::set_range_tuple(isl::id id) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_union_map_foreach_map(get(), fn_lambda, &fn_data); + auto res = isl_space_set_range_tuple_id(copy(), id.release()); return manage(res); } -isl::union_map union_map::from(isl::multi_union_pw_aff mupa) +isl::space space::set_range_tuple(const std::string &id) const { - auto res = isl_union_map_from_multi_union_pw_aff(mupa.release()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } -isl::union_map union_map::from_domain(isl::union_set uset) +isl::space space::set_tuple_id(isl::dim type, isl::id id) const { - auto res = isl_union_map_from_domain(uset.release()); + auto res = isl_space_set_tuple_id(copy(), static_cast(type), id.release()); return manage(res); } -isl::union_map union_map::from_domain_and_range(isl::union_set domain, isl::union_set range) +isl::space space::set_tuple_id(isl::dim type, const std::string &id) const { - auto res = isl_union_map_from_domain_and_range(domain.release(), range.release()); - return manage(res); + return this->set_tuple_id(type, isl::id(ctx(), id)); } -isl::union_map union_map::from_range(isl::union_set uset) +isl::id space::tuple_id(isl::dim type) const { - auto res = isl_union_map_from_range(uset.release()); + auto res = isl_space_get_tuple_id(get(), static_cast(type)); return manage(res); } -isl::union_map union_map::from_union_pw_aff(isl::union_pw_aff upa) +isl::id space::get_tuple_id(isl::dim type) const { - auto res = isl_union_map_from_union_pw_aff(upa.release()); - return manage(res); + return tuple_id(type); } -isl::id union_map::get_dim_id(isl::dim type, unsigned int pos) const +std::string space::tuple_name(isl::dim type) const { - auto res = isl_union_map_get_dim_id(get(), static_cast(type), pos); - return manage(res); + auto res = isl_space_get_tuple_name(get(), static_cast(type)); + std::string tmp(res); + return tmp; } -uint32_t union_map::get_hash() const +std::string space::get_tuple_name(isl::dim type) const { - auto res = isl_union_map_get_hash(get()); - return res; + return tuple_name(type); } -isl::map_list union_map::get_map_list() const +isl::space space::uncurry() const { - auto res = isl_union_map_get_map_list(get()); + auto res = isl_space_uncurry(copy()); return manage(res); } -isl::space union_map::get_space() const +isl::space space::unit(isl::ctx ctx) { - auto res = isl_union_map_get_space(get()); + auto res = isl_space_unit(ctx.release()); return manage(res); } -isl::union_map union_map::gist(isl::union_map context) const +isl::map space::universe_map() const { - auto res = isl_union_map_gist(copy(), context.release()); + auto res = isl_space_universe_map(copy()); return manage(res); } -isl::union_map union_map::gist_domain(isl::union_set uset) const +isl::set space::universe_set() const { - auto res = isl_union_map_gist_domain(copy(), uset.release()); + auto res = isl_space_universe_set(copy()); return manage(res); } -isl::union_map union_map::gist_params(isl::set set) const +isl::space space::unwrap() const { - auto res = isl_union_map_gist_params(copy(), set.release()); + auto res = isl_space_unwrap(copy()); return manage(res); } -isl::union_map union_map::gist_range(isl::union_set uset) const +isl::space space::wrap() const { - auto res = isl_union_map_gist_range(copy(), uset.release()); + auto res = isl_space_wrap(copy()); return manage(res); } -isl::union_map union_map::intersect(isl::union_map umap2) const +isl::aff space::zero_aff_on_domain() const { - auto res = isl_union_map_intersect(copy(), umap2.release()); + auto res = isl_space_zero_aff_on_domain(copy()); return manage(res); } -isl::union_map union_map::intersect_domain(isl::space space) const +isl::multi_aff space::zero_multi_aff() const { - auto res = isl_union_map_intersect_domain_space(copy(), space.release()); + auto res = isl_space_zero_multi_aff(copy()); return manage(res); } -isl::union_map union_map::intersect_domain(isl::union_set uset) const +isl::multi_pw_aff space::zero_multi_pw_aff() const { - auto res = isl_union_map_intersect_domain_union_set(copy(), uset.release()); + auto res = isl_space_zero_multi_pw_aff(copy()); return manage(res); } -isl::union_map union_map::intersect_domain_factor_domain(isl::union_map factor) const +isl::multi_union_pw_aff space::zero_multi_union_pw_aff() const { - auto res = isl_union_map_intersect_domain_factor_domain(copy(), factor.release()); + auto res = isl_space_zero_multi_union_pw_aff(copy()); return manage(res); } -isl::union_map union_map::intersect_domain_factor_range(isl::union_map factor) const +isl::multi_val space::zero_multi_val() const { - auto res = isl_union_map_intersect_domain_factor_range(copy(), factor.release()); + auto res = isl_space_zero_multi_val(copy()); return manage(res); } -isl::union_map union_map::intersect_params(isl::set set) const +inline std::ostream &operator<<(std::ostream &os, const space &obj) { - auto res = isl_union_map_intersect_params(copy(), set.release()); - return manage(res); + char *str = isl_space_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::union_map union_map::intersect_range(isl::space space) const +// implementations for isl::union_access_info +union_access_info manage(__isl_take isl_union_access_info *ptr) { + return union_access_info(ptr); +} +union_access_info manage_copy(__isl_keep isl_union_access_info *ptr) { + ptr = isl_union_access_info_copy(ptr); + return union_access_info(ptr); +} + +union_access_info::union_access_info() + : ptr(nullptr) {} + +union_access_info::union_access_info(const union_access_info &obj) + : ptr(nullptr) { - auto res = isl_union_map_intersect_range_space(copy(), space.release()); - return manage(res); + ptr = obj.copy(); } -isl::union_map union_map::intersect_range(isl::union_set uset) const +union_access_info::union_access_info(__isl_take isl_union_access_info *ptr) + : ptr(ptr) {} + +union_access_info::union_access_info(isl::union_map sink) { - auto res = isl_union_map_intersect_range_union_set(copy(), uset.release()); + auto res = isl_union_access_info_from_sink(sink.release()); + ptr = res; +} + +union_access_info &union_access_info::operator=(union_access_info obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_access_info::~union_access_info() { + if (ptr) + isl_union_access_info_free(ptr); +} + +__isl_give isl_union_access_info *union_access_info::copy() const & { + return isl_union_access_info_copy(ptr); +} + +__isl_keep isl_union_access_info *union_access_info::get() const { + return ptr; +} + +__isl_give isl_union_access_info *union_access_info::release() { + isl_union_access_info *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_access_info::is_null() const { + return ptr == nullptr; +} + +isl::ctx union_access_info::ctx() const { + return isl::ctx(isl_union_access_info_get_ctx(ptr)); +} + +isl::union_flow union_access_info::compute_flow() const +{ + auto res = isl_union_access_info_compute_flow(copy()); return manage(res); } -isl::union_map union_map::intersect_range_factor_domain(isl::union_map factor) const +isl::union_access_info union_access_info::set_kill(isl::union_map kill) const { - auto res = isl_union_map_intersect_range_factor_domain(copy(), factor.release()); + auto res = isl_union_access_info_set_kill(copy(), kill.release()); return manage(res); } -isl::union_map union_map::intersect_range_factor_range(isl::union_map factor) const +isl::union_access_info union_access_info::set_may_source(isl::union_map may_source) const { - auto res = isl_union_map_intersect_range_factor_range(copy(), factor.release()); + auto res = isl_union_access_info_set_may_source(copy(), may_source.release()); return manage(res); } -boolean union_map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_access_info union_access_info::set_must_source(isl::union_map must_source) const { - auto res = isl_union_map_involves_dims(get(), static_cast(type), first, n); + auto res = isl_union_access_info_set_must_source(copy(), must_source.release()); return manage(res); } -boolean union_map::is_bijective() const +isl::union_access_info union_access_info::set_schedule(isl::schedule schedule) const { - auto res = isl_union_map_is_bijective(get()); + auto res = isl_union_access_info_set_schedule(copy(), schedule.release()); return manage(res); } -boolean union_map::is_disjoint(const isl::union_map &umap2) const +isl::union_access_info union_access_info::set_schedule_map(isl::union_map schedule_map) const { - auto res = isl_union_map_is_disjoint(get(), umap2.get()); + auto res = isl_union_access_info_set_schedule_map(copy(), schedule_map.release()); return manage(res); } -boolean union_map::is_empty() const -{ - auto res = isl_union_map_is_empty(get()); - return manage(res); -} +inline std::ostream &operator<<(std::ostream &os, const union_access_info &obj) +{ + char *str = isl_union_access_info_to_str(obj.get()); + os << str; + free(str); + return os; +} + +// implementations for isl::union_flow +union_flow manage(__isl_take isl_union_flow *ptr) { + return union_flow(ptr); +} +union_flow manage_copy(__isl_keep isl_union_flow *ptr) { + ptr = isl_union_flow_copy(ptr); + return union_flow(ptr); +} + +union_flow::union_flow() + : ptr(nullptr) {} -boolean union_map::is_equal(const isl::union_map &umap2) const +union_flow::union_flow(const union_flow &obj) + : ptr(nullptr) { - auto res = isl_union_map_is_equal(get(), umap2.get()); - return manage(res); + ptr = obj.copy(); } -boolean union_map::is_identity() const -{ - auto res = isl_union_map_is_identity(get()); - 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; } -boolean union_map::is_injective() const -{ - auto res = isl_union_map_is_injective(get()); - return manage(res); +union_flow::~union_flow() { + if (ptr) + isl_union_flow_free(ptr); } -boolean union_map::is_single_valued() const -{ - auto res = isl_union_map_is_single_valued(get()); - return manage(res); +__isl_give isl_union_flow *union_flow::copy() const & { + return isl_union_flow_copy(ptr); } -boolean union_map::is_strict_subset(const isl::union_map &umap2) const -{ - auto res = isl_union_map_is_strict_subset(get(), umap2.get()); - return manage(res); +__isl_keep isl_union_flow *union_flow::get() const { + return ptr; } -boolean union_map::is_subset(const isl::union_map &umap2) const -{ - auto res = isl_union_map_is_subset(get(), umap2.get()); - return manage(res); +__isl_give isl_union_flow *union_flow::release() { + isl_union_flow *tmp = ptr; + ptr = nullptr; + return tmp; } -boolean union_map::isa_map() const -{ - auto res = isl_union_map_isa_map(get()); - return manage(res); +bool union_flow::is_null() const { + return ptr == nullptr; } -isl::union_map union_map::lex_ge_at_multi_union_pw_aff(isl::multi_union_pw_aff mupa) const -{ - auto res = isl_union_map_lex_ge_at_multi_union_pw_aff(copy(), mupa.release()); - return manage(res); +isl::ctx union_flow::ctx() const { + return isl::ctx(isl_union_flow_get_ctx(ptr)); } -isl::union_map union_map::lex_ge_union_map(isl::union_map umap2) const +isl::union_map union_flow::full_may_dependence() const { - auto res = isl_union_map_lex_ge_union_map(copy(), umap2.release()); + auto res = isl_union_flow_get_full_may_dependence(get()); return manage(res); } -isl::union_map union_map::lex_gt_at_multi_union_pw_aff(isl::multi_union_pw_aff mupa) const +isl::union_map union_flow::get_full_may_dependence() const { - auto res = isl_union_map_lex_gt_at_multi_union_pw_aff(copy(), mupa.release()); - return manage(res); + return full_may_dependence(); } -isl::union_map union_map::lex_gt_union_map(isl::union_map umap2) const +isl::union_map union_flow::full_must_dependence() const { - auto res = isl_union_map_lex_gt_union_map(copy(), umap2.release()); + auto res = isl_union_flow_get_full_must_dependence(get()); return manage(res); } -isl::union_map union_map::lex_le_at_multi_union_pw_aff(isl::multi_union_pw_aff mupa) const +isl::union_map union_flow::get_full_must_dependence() const { - auto res = isl_union_map_lex_le_at_multi_union_pw_aff(copy(), mupa.release()); - return manage(res); + return full_must_dependence(); } -isl::union_map union_map::lex_le_union_map(isl::union_map umap2) const +isl::union_map union_flow::may_dependence() const { - auto res = isl_union_map_lex_le_union_map(copy(), umap2.release()); + auto res = isl_union_flow_get_may_dependence(get()); return manage(res); } -isl::union_map union_map::lex_lt_at_multi_union_pw_aff(isl::multi_union_pw_aff mupa) const +isl::union_map union_flow::get_may_dependence() const { - auto res = isl_union_map_lex_lt_at_multi_union_pw_aff(copy(), mupa.release()); - return manage(res); + return may_dependence(); } -isl::union_map union_map::lex_lt_union_map(isl::union_map umap2) const +isl::union_map union_flow::may_no_source() const { - auto res = isl_union_map_lex_lt_union_map(copy(), umap2.release()); + auto res = isl_union_flow_get_may_no_source(get()); return manage(res); } -isl::union_map union_map::lexmax() const +isl::union_map union_flow::get_may_no_source() const { - auto res = isl_union_map_lexmax(copy()); - return manage(res); + return may_no_source(); } -isl::union_map union_map::lexmin() const +isl::union_map union_flow::must_dependence() const { - auto res = isl_union_map_lexmin(copy()); + auto res = isl_union_flow_get_must_dependence(get()); return manage(res); } -isl_size union_map::n_map() const +isl::union_map union_flow::get_must_dependence() const { - auto res = isl_union_map_n_map(get()); - return res; + return must_dependence(); } -isl::set union_map::params() const +isl::union_map union_flow::must_no_source() const { - auto res = isl_union_map_params(copy()); + auto res = isl_union_flow_get_must_no_source(get()); return manage(res); } -boolean union_map::plain_is_empty() const +isl::union_map union_flow::get_must_no_source() const { - auto res = isl_union_map_plain_is_empty(get()); - return manage(res); + return must_no_source(); } -boolean union_map::plain_is_injective() const +inline std::ostream &operator<<(std::ostream &os, const union_flow &obj) { - auto res = isl_union_map_plain_is_injective(get()); - return manage(res); + char *str = isl_union_flow_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::union_map union_map::polyhedral_hull() const -{ - auto res = isl_union_map_polyhedral_hull(copy()); - return manage(res); +// implementations for isl::union_map +union_map manage(__isl_take isl_union_map *ptr) { + return union_map(ptr); +} +union_map manage_copy(__isl_keep isl_union_map *ptr) { + ptr = isl_union_map_copy(ptr); + return union_map(ptr); } -isl::union_map union_map::preimage_domain(isl::multi_aff ma) const +union_map::union_map() + : ptr(nullptr) {} + +union_map::union_map(const union_map &obj) + : ptr(nullptr) { - auto res = isl_union_map_preimage_domain_multi_aff(copy(), ma.release()); - return manage(res); + ptr = obj.copy(); } -isl::union_map union_map::preimage_domain(isl::multi_pw_aff mpa) const +union_map::union_map(__isl_take isl_union_map *ptr) + : ptr(ptr) {} + +union_map::union_map(isl::basic_map bmap) { - auto res = isl_union_map_preimage_domain_multi_pw_aff(copy(), mpa.release()); - return manage(res); + auto res = isl_union_map_from_basic_map(bmap.release()); + ptr = res; } -isl::union_map union_map::preimage_domain(isl::pw_multi_aff pma) const +union_map::union_map(isl::map map) { - auto res = isl_union_map_preimage_domain_pw_multi_aff(copy(), pma.release()); - return manage(res); + auto res = isl_union_map_from_map(map.release()); + ptr = res; } -isl::union_map union_map::preimage_domain(isl::union_pw_multi_aff upma) const +union_map::union_map(isl::ctx ctx, const std::string &str) { - auto res = isl_union_map_preimage_domain_union_pw_multi_aff(copy(), upma.release()); - return manage(res); + auto res = isl_union_map_read_from_str(ctx.release(), str.c_str()); + ptr = res; } -isl::union_map union_map::preimage_range(isl::multi_aff ma) const -{ - auto res = isl_union_map_preimage_range_multi_aff(copy(), ma.release()); - return manage(res); +union_map &union_map::operator=(union_map obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl::union_map union_map::preimage_range(isl::pw_multi_aff pma) const -{ - auto res = isl_union_map_preimage_range_pw_multi_aff(copy(), pma.release()); - return manage(res); +union_map::~union_map() { + if (ptr) + isl_union_map_free(ptr); } -isl::union_map union_map::preimage_range(isl::union_pw_multi_aff upma) const -{ - auto res = isl_union_map_preimage_range_union_pw_multi_aff(copy(), upma.release()); - return manage(res); +__isl_give isl_union_map *union_map::copy() const & { + return isl_union_map_copy(ptr); } -isl::union_map union_map::product(isl::union_map umap2) const -{ - auto res = isl_union_map_product(copy(), umap2.release()); - return manage(res); +__isl_keep isl_union_map *union_map::get() const { + return ptr; } -isl::union_map union_map::project_out(isl::dim type, unsigned int first, unsigned int n) const -{ - auto res = isl_union_map_project_out(copy(), static_cast(type), first, n); - 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::project_out_all_params() const -{ - auto res = isl_union_map_project_out_all_params(copy()); - return manage(res); +bool union_map::is_null() const { + return ptr == nullptr; } -isl::union_set union_map::range() const -{ - auto res = isl_union_map_range(copy()); - return manage(res); +isl::ctx union_map::ctx() const { + return isl::ctx(isl_union_map_get_ctx(ptr)); } -isl::union_map union_map::range_curry() const +isl::union_map union_map::affine_hull() const { - auto res = isl_union_map_range_curry(copy()); + auto res = isl_union_map_affine_hull(copy()); return manage(res); } -isl::union_map union_map::range_factor_domain() const +isl::union_map union_map::apply_domain(isl::union_map umap2) const { - auto res = isl_union_map_range_factor_domain(copy()); + auto res = isl_union_map_apply_domain(copy(), umap2.release()); return manage(res); } -isl::union_map union_map::range_factor_range() const +isl::union_map union_map::apply_range(isl::union_map umap2) const { - auto res = isl_union_map_range_factor_range(copy()); + auto res = isl_union_map_apply_range(copy(), umap2.release()); return manage(res); } -isl::union_map union_map::range_map() const +isl::map union_map::as_map() const { - auto res = isl_union_map_range_map(copy()); + auto res = isl_union_map_as_map(copy()); return manage(res); } -isl::union_map union_map::range_product(isl::union_map umap2) const +isl::multi_union_pw_aff union_map::as_multi_union_pw_aff() const { - auto res = isl_union_map_range_product(copy(), umap2.release()); + auto res = isl_union_map_as_multi_union_pw_aff(copy()); return manage(res); } -isl::union_map union_map::range_reverse() const +isl::union_pw_multi_aff union_map::as_union_pw_multi_aff() const { - auto res = isl_union_map_range_reverse(copy()); + auto res = isl_union_map_as_union_pw_multi_aff(copy()); return manage(res); } -isl::union_map union_map::remove_divs() const +isl::union_set union_map::bind_range(isl::multi_id tuple) const { - auto res = isl_union_map_remove_divs(copy()); + auto res = isl_union_map_bind_range(copy(), tuple.release()); return manage(res); } -isl::union_map union_map::remove_redundancies() const +isl::union_map union_map::coalesce() const { - auto res = isl_union_map_remove_redundancies(copy()); + auto res = isl_union_map_coalesce(copy()); return manage(res); } -isl::union_map union_map::reset_user() const +isl::union_map union_map::compute_divs() const { - auto res = isl_union_map_reset_user(copy()); + auto res = isl_union_map_compute_divs(copy()); return manage(res); } -isl::union_map union_map::reverse() const +isl::union_map union_map::curry() const { - auto res = isl_union_map_reverse(copy()); + auto res = isl_union_map_curry(copy()); return manage(res); } -isl::basic_map union_map::sample() const +isl::union_set union_map::deltas() const { - auto res = isl_union_map_sample(copy()); + auto res = isl_union_map_deltas(copy()); return manage(res); } -isl::union_map union_map::simple_hull() const +isl::union_map union_map::detect_equalities() const { - auto res = isl_union_map_simple_hull(copy()); + auto res = isl_union_map_detect_equalities(copy()); return manage(res); } -isl::union_map union_map::subtract(isl::union_map umap2) const +isl::union_set union_map::domain() const { - auto res = isl_union_map_subtract(copy(), umap2.release()); + auto res = isl_union_map_domain(copy()); return manage(res); } -isl::union_map union_map::subtract_domain(isl::union_set dom) const +isl::union_map union_map::domain_factor_domain() const { - auto res = isl_union_map_subtract_domain(copy(), dom.release()); + auto res = isl_union_map_domain_factor_domain(copy()); return manage(res); } -isl::union_map union_map::subtract_range(isl::union_set dom) const +isl::union_map union_map::domain_factor_range() const { - auto res = isl_union_map_subtract_range(copy(), dom.release()); + auto res = isl_union_map_domain_factor_range(copy()); return manage(res); } -isl::union_map union_map::uncurry() const +isl::union_map union_map::domain_map() const { - auto res = isl_union_map_uncurry(copy()); + auto res = isl_union_map_domain_map(copy()); return manage(res); } -isl::union_map union_map::unite(isl::union_map umap2) const +isl::union_pw_multi_aff union_map::domain_map_union_pw_multi_aff() const { - auto res = isl_union_map_union(copy(), umap2.release()); + auto res = isl_union_map_domain_map_union_pw_multi_aff(copy()); return manage(res); } -isl::union_map union_map::universe() const +isl::union_map union_map::domain_product(isl::union_map umap2) const { - auto res = isl_union_map_universe(copy()); + auto res = isl_union_map_domain_product(copy(), umap2.release()); return manage(res); } -isl::union_set union_map::wrap() const +isl::union_map union_map::empty(isl::ctx ctx) { - auto res = isl_union_map_wrap(copy()); + auto res = isl_union_map_empty_ctx(ctx.release()); return manage(res); } -isl::union_map union_map::zip() const +isl::union_map union_map::eq_at(isl::multi_union_pw_aff mupa) const { - auto res = isl_union_map_zip(copy()); + auto res = isl_union_map_eq_at_multi_union_pw_aff(copy(), mupa.release()); return manage(res); } -// implementations for isl::union_map_list -union_map_list manage(__isl_take isl_union_map_list *ptr) { - return union_map_list(ptr); -} -union_map_list manage_copy(__isl_keep isl_union_map_list *ptr) { - ptr = isl_union_map_list_copy(ptr); - return union_map_list(ptr); -} - -union_map_list::union_map_list() - : ptr(nullptr) {} - -union_map_list::union_map_list(const union_map_list &obj) - : ptr(nullptr) +bool union_map::every_map(const std::function &test) const { - ptr = obj.copy(); -} - - -union_map_list::union_map_list(__isl_take isl_union_map_list *ptr) - : ptr(ptr) {} - - -union_map_list &union_map_list::operator=(union_map_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; -} - -union_map_list::~union_map_list() { - if (ptr) - isl_union_map_list_free(ptr); -} - -__isl_give isl_union_map_list *union_map_list::copy() const & { - return isl_union_map_list_copy(ptr); -} - -__isl_keep isl_union_map_list *union_map_list::get() const { - return ptr; -} - -__isl_give isl_union_map_list *union_map_list::release() { - isl_union_map_list *tmp = ptr; - ptr = nullptr; - return tmp; -} - -bool union_map_list::is_null() const { - return ptr == nullptr; -} - - -isl::ctx union_map_list::ctx() const { - return isl::ctx(isl_union_map_list_get_ctx(ptr)); + struct test_data { + std::function func; + std::exception_ptr eptr; + } test_data = { test }; + auto test_lambda = [](isl_map *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(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); + return res; } -void union_map_list::dump() const { - isl_union_map_list_dump(get()); +isl::map union_map::extract_map(isl::space space) const +{ + auto res = isl_union_map_extract_map(get(), space.release()); + return manage(res); } - -isl::union_map_list union_map_list::add(isl::union_map el) const +isl::union_map union_map::factor_domain() const { - auto res = isl_union_map_list_add(copy(), el.release()); + auto res = isl_union_map_factor_domain(copy()); return manage(res); } -isl::union_map_list union_map_list::alloc(isl::ctx ctx, int n) +isl::union_map union_map::factor_range() const { - auto res = isl_union_map_list_alloc(ctx.release(), n); + auto res = isl_union_map_factor_range(copy()); return manage(res); } -isl::union_map_list union_map_list::clear() const +isl::union_map union_map::fixed_power(isl::val exp) const { - auto res = isl_union_map_list_clear(copy()); + auto res = isl_union_map_fixed_power_val(copy(), exp.release()); return manage(res); } -isl::union_map_list union_map_list::concat(isl::union_map_list list2) const +isl::union_map union_map::fixed_power(long exp) const { - auto res = isl_union_map_list_concat(copy(), list2.release()); - return manage(res); + return this->fixed_power(isl::val(ctx(), exp)); } -isl::union_map_list union_map_list::drop(unsigned int first, unsigned int n) const +isl::union_map union_map::flat_range_product(isl::union_map umap2) const { - auto res = isl_union_map_list_drop(copy(), first, n); + auto res = isl_union_map_flat_range_product(copy(), umap2.release()); return manage(res); } -stat union_map_list::foreach(const std::function &fn) const +void union_map::foreach_map(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_union_map *arg_0, void *arg_1) -> isl_stat { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat { auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); + auto res = isl_union_map_foreach_map(get(), fn_lambda, &fn_data); + return; } -isl::union_map_list union_map_list::from_union_map(isl::union_map el) +isl::union_map union_map::from(isl::multi_union_pw_aff mupa) { - auto res = isl_union_map_list_from_union_map(el.release()); + auto res = isl_union_map_from_multi_union_pw_aff(mupa.release()); return manage(res); } -isl::union_map union_map_list::get_at(int index) const +isl::union_map union_map::from(isl::union_pw_multi_aff upma) { - auto res = isl_union_map_list_get_at(get(), index); + auto res = isl_union_map_from_union_pw_multi_aff(upma.release()); return manage(res); } -isl::union_map union_map_list::get_union_map(int index) const +isl::union_map union_map::from_domain(isl::union_set uset) { - auto res = isl_union_map_list_get_union_map(get(), index); + auto res = isl_union_map_from_domain(uset.release()); return manage(res); } -isl::union_map_list union_map_list::insert(unsigned int pos, isl::union_map el) const +isl::union_map union_map::from_domain_and_range(isl::union_set domain, isl::union_set range) { - auto res = isl_union_map_list_insert(copy(), pos, el.release()); + auto res = isl_union_map_from_domain_and_range(domain.release(), range.release()); return manage(res); } -isl_size union_map_list::n_union_map() const +isl::union_map union_map::from_range(isl::union_set uset) { - auto res = isl_union_map_list_n_union_map(get()); - return res; + auto res = isl_union_map_from_range(uset.release()); + return manage(res); } -isl::union_map_list union_map_list::reverse() const +isl::union_map union_map::gist(isl::union_map context) const { - auto res = isl_union_map_list_reverse(copy()); + auto res = isl_union_map_gist(copy(), context.release()); return manage(res); } -isl::union_map_list union_map_list::set_union_map(int index, isl::union_map el) const +isl::union_map union_map::gist_domain(isl::union_set uset) const { - auto res = isl_union_map_list_set_union_map(copy(), index, el.release()); + auto res = isl_union_map_gist_domain(copy(), uset.release()); return manage(res); } -isl_size union_map_list::size() const +isl::union_map union_map::gist_params(isl::set set) const { - auto res = isl_union_map_list_size(get()); - return res; + auto res = isl_union_map_gist_params(copy(), set.release()); + return manage(res); } -isl::union_map_list union_map_list::swap(unsigned int pos1, unsigned int pos2) const +isl::union_map union_map::gist_range(isl::union_set uset) const { - auto res = isl_union_map_list_swap(copy(), pos1, pos2); + auto res = isl_union_map_gist_range(copy(), uset.release()); return manage(res); } -// implementations for isl::union_pw_aff -union_pw_aff manage(__isl_take isl_union_pw_aff *ptr) { - return union_pw_aff(ptr); -} -union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr) { - ptr = isl_union_pw_aff_copy(ptr); - return union_pw_aff(ptr); -} - -union_pw_aff::union_pw_aff() - : ptr(nullptr) {} - -union_pw_aff::union_pw_aff(const union_pw_aff &obj) - : ptr(nullptr) +isl::union_map union_map::intersect(isl::union_map umap2) const { - ptr = obj.copy(); + auto res = isl_union_map_intersect(copy(), umap2.release()); + return manage(res); } - -union_pw_aff::union_pw_aff(__isl_take isl_union_pw_aff *ptr) - : ptr(ptr) {} - -union_pw_aff::union_pw_aff(isl::aff aff) -{ - auto res = isl_union_pw_aff_from_aff(aff.release()); - ptr = res; -} -union_pw_aff::union_pw_aff(isl::pw_aff pa) -{ - auto res = isl_union_pw_aff_from_pw_aff(pa.release()); - ptr = res; -} -union_pw_aff::union_pw_aff(isl::ctx ctx, const std::string &str) -{ - auto res = isl_union_pw_aff_read_from_str(ctx.release(), str.c_str()); - ptr = res; -} -union_pw_aff::union_pw_aff(isl::union_set domain, isl::val v) +isl::union_map union_map::intersect_domain(isl::space space) const { - auto res = isl_union_pw_aff_val_on_domain(domain.release(), v.release()); - ptr = res; -} - -union_pw_aff &union_pw_aff::operator=(union_pw_aff obj) { - std::swap(this->ptr, obj.ptr); - return *this; + auto res = isl_union_map_intersect_domain_space(copy(), space.release()); + return manage(res); } -union_pw_aff::~union_pw_aff() { - if (ptr) - isl_union_pw_aff_free(ptr); +isl::union_map union_map::intersect_domain(isl::union_set uset) const +{ + auto res = isl_union_map_intersect_domain_union_set(copy(), uset.release()); + return manage(res); } -__isl_give isl_union_pw_aff *union_pw_aff::copy() const & { - return isl_union_pw_aff_copy(ptr); +isl::union_map union_map::intersect_domain_factor_domain(isl::union_map factor) const +{ + auto res = isl_union_map_intersect_domain_factor_domain(copy(), factor.release()); + return manage(res); } -__isl_keep isl_union_pw_aff *union_pw_aff::get() const { - return ptr; +isl::union_map union_map::intersect_domain_factor_range(isl::union_map factor) const +{ + auto res = isl_union_map_intersect_domain_factor_range(copy(), factor.release()); + return manage(res); } -__isl_give isl_union_pw_aff *union_pw_aff::release() { - isl_union_pw_aff *tmp = ptr; - ptr = nullptr; - return tmp; +isl::union_map union_map::intersect_params(isl::set set) const +{ + auto res = isl_union_map_intersect_params(copy(), set.release()); + return manage(res); } -bool union_pw_aff::is_null() const { - return ptr == nullptr; +isl::union_map union_map::intersect_range(isl::space space) const +{ + auto res = isl_union_map_intersect_range_space(copy(), space.release()); + return manage(res); } - -isl::ctx union_pw_aff::ctx() const { - return isl::ctx(isl_union_pw_aff_get_ctx(ptr)); +isl::union_map union_map::intersect_range(isl::union_set uset) const +{ + auto res = isl_union_map_intersect_range_union_set(copy(), uset.release()); + return manage(res); } -void union_pw_aff::dump() const { - isl_union_pw_aff_dump(get()); +isl::union_map union_map::intersect_range_factor_domain(isl::union_map factor) const +{ + auto res = isl_union_map_intersect_range_factor_domain(copy(), factor.release()); + return manage(res); } - -isl::union_pw_aff union_pw_aff::add(isl::union_pw_aff upa2) const +isl::union_map union_map::intersect_range_factor_range(isl::union_map factor) const { - auto res = isl_union_pw_aff_add(copy(), upa2.release()); + auto res = isl_union_map_intersect_range_factor_range(copy(), factor.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::add_pw_aff(isl::pw_aff pa) const +bool union_map::is_bijective() const { - auto res = isl_union_pw_aff_add_pw_aff(copy(), pa.release()); - return manage(res); + auto res = isl_union_map_is_bijective(get()); + return res; } -isl::union_pw_aff union_pw_aff::aff_on_domain(isl::union_set domain, isl::aff aff) +bool union_map::is_disjoint(const isl::union_map &umap2) const { - auto res = isl_union_pw_aff_aff_on_domain(domain.release(), aff.release()); - return manage(res); + auto res = isl_union_map_is_disjoint(get(), umap2.get()); + return res; } -isl::union_pw_aff union_pw_aff::align_params(isl::space model) const +bool union_map::is_empty() const { - auto res = isl_union_pw_aff_align_params(copy(), model.release()); - return manage(res); + auto res = isl_union_map_is_empty(get()); + return res; } -isl::union_set union_pw_aff::bind(isl::id id) const +bool union_map::is_equal(const isl::union_map &umap2) const { - auto res = isl_union_pw_aff_bind_id(copy(), id.release()); - return manage(res); + auto res = isl_union_map_is_equal(get(), umap2.get()); + return res; } -isl::union_pw_aff union_pw_aff::coalesce() const +bool union_map::is_injective() const { - auto res = isl_union_pw_aff_coalesce(copy()); - return manage(res); + auto res = isl_union_map_is_injective(get()); + return res; } -isl_size union_pw_aff::dim(isl::dim type) const +bool union_map::is_single_valued() const { - auto res = isl_union_pw_aff_dim(get(), static_cast(type)); + auto res = isl_union_map_is_single_valued(get()); return res; } -isl::union_set union_pw_aff::domain() const +bool union_map::is_strict_subset(const isl::union_map &umap2) const { - auto res = isl_union_pw_aff_domain(copy()); - return manage(res); + auto res = isl_union_map_is_strict_subset(get(), umap2.get()); + return res; } -isl::union_pw_aff union_pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +bool union_map::is_subset(const isl::union_map &umap2) const { - auto res = isl_union_pw_aff_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + auto res = isl_union_map_is_subset(get(), umap2.get()); + return res; } -isl::union_pw_aff union_pw_aff::empty(isl::space space) +bool union_map::isa_map() const { - auto res = isl_union_pw_aff_empty(space.release()); - return manage(res); + auto res = isl_union_map_isa_map(get()); + return res; } -isl::union_pw_aff union_pw_aff::empty_ctx(isl::ctx ctx) +isl::union_map union_map::lexmax() const { - auto res = isl_union_pw_aff_empty_ctx(ctx.release()); + auto res = isl_union_map_lexmax(copy()); return manage(res); } -isl::union_pw_aff union_pw_aff::empty_space(isl::space space) +isl::union_map union_map::lexmin() const { - auto res = isl_union_pw_aff_empty_space(space.release()); + auto res = isl_union_map_lexmin(copy()); return manage(res); } -isl::pw_aff union_pw_aff::extract_pw_aff(isl::space space) const +isl::map_list union_map::map_list() const { - auto res = isl_union_pw_aff_extract_pw_aff(get(), space.release()); + auto res = isl_union_map_get_map_list(get()); return manage(res); } -int union_pw_aff::find_dim_by_name(isl::dim type, const std::string &name) const +isl::map_list union_map::get_map_list() const { - auto res = isl_union_pw_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + return map_list(); } -isl::union_pw_aff union_pw_aff::floor() const +isl::set union_map::params() const { - auto res = isl_union_pw_aff_floor(copy()); + auto res = isl_union_map_params(copy()); return manage(res); } -stat union_pw_aff::foreach_pw_aff(const std::function &fn) const +isl::union_map union_map::polyhedral_hull() const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_union_pw_aff_foreach_pw_aff(get(), fn_lambda, &fn_data); + auto res = isl_union_map_polyhedral_hull(copy()); return manage(res); } -isl::pw_aff_list union_pw_aff::get_pw_aff_list() const +isl::union_map union_map::preimage_domain(isl::multi_aff ma) const { - auto res = isl_union_pw_aff_get_pw_aff_list(get()); + auto res = isl_union_map_preimage_domain_multi_aff(copy(), ma.release()); return manage(res); } -isl::space union_pw_aff::get_space() const +isl::union_map union_map::preimage_domain(isl::multi_pw_aff mpa) const { - auto res = isl_union_pw_aff_get_space(get()); + auto res = isl_union_map_preimage_domain_multi_pw_aff(copy(), mpa.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::gist(isl::union_set context) const +isl::union_map union_map::preimage_domain(isl::pw_multi_aff pma) const { - auto res = isl_union_pw_aff_gist(copy(), context.release()); + auto res = isl_union_map_preimage_domain_pw_multi_aff(copy(), pma.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::gist_params(isl::set context) const +isl::union_map union_map::preimage_domain(isl::union_pw_multi_aff upma) const { - auto res = isl_union_pw_aff_gist_params(copy(), context.release()); + auto res = isl_union_map_preimage_domain_union_pw_multi_aff(copy(), upma.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::intersect_domain(isl::space space) const +isl::union_map union_map::preimage_range(isl::multi_aff ma) const { - auto res = isl_union_pw_aff_intersect_domain_space(copy(), space.release()); + auto res = isl_union_map_preimage_range_multi_aff(copy(), ma.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::intersect_domain(isl::union_set uset) const +isl::union_map union_map::preimage_range(isl::pw_multi_aff pma) const { - auto res = isl_union_pw_aff_intersect_domain_union_set(copy(), uset.release()); + auto res = isl_union_map_preimage_range_pw_multi_aff(copy(), pma.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_domain(isl::union_set uset) const +isl::union_map union_map::preimage_range(isl::union_pw_multi_aff upma) const { - auto res = isl_union_pw_aff_intersect_domain_wrapped_domain(copy(), uset.release()); + auto res = isl_union_map_preimage_range_union_pw_multi_aff(copy(), upma.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_range(isl::union_set uset) const +isl::union_map union_map::product(isl::union_map umap2) const { - auto res = isl_union_pw_aff_intersect_domain_wrapped_range(copy(), uset.release()); + auto res = isl_union_map_product(copy(), umap2.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::intersect_params(isl::set set) const +isl::union_map union_map::project_out_all_params() const { - auto res = isl_union_pw_aff_intersect_params(copy(), set.release()); + auto res = isl_union_map_project_out_all_params(copy()); return manage(res); } -boolean union_pw_aff::involves_nan() const +isl::union_set union_map::range() const { - auto res = isl_union_pw_aff_involves_nan(get()); + auto res = isl_union_map_range(copy()); return manage(res); } -isl::val union_pw_aff::max_val() const +isl::union_map union_map::range_factor_domain() const { - auto res = isl_union_pw_aff_max_val(copy()); + auto res = isl_union_map_range_factor_domain(copy()); return manage(res); } -isl::val union_pw_aff::min_val() const +isl::union_map union_map::range_factor_range() const { - auto res = isl_union_pw_aff_min_val(copy()); + auto res = isl_union_map_range_factor_range(copy()); return manage(res); } -isl::union_pw_aff union_pw_aff::mod_val(isl::val f) const +isl::union_map union_map::range_map() const { - auto res = isl_union_pw_aff_mod_val(copy(), f.release()); + auto res = isl_union_map_range_map(copy()); return manage(res); } -isl_size union_pw_aff::n_pw_aff() const +isl::union_map union_map::range_product(isl::union_map umap2) const { - auto res = isl_union_pw_aff_n_pw_aff(get()); - return res; + auto res = isl_union_map_range_product(copy(), umap2.release()); + return manage(res); } -isl::union_pw_aff union_pw_aff::neg() const +isl::union_map union_map::range_reverse() const { - auto res = isl_union_pw_aff_neg(copy()); + auto res = isl_union_map_range_reverse(copy()); return manage(res); } -isl::union_pw_aff union_pw_aff::param_on_domain_id(isl::union_set domain, isl::id id) +isl::union_map union_map::reverse() const { - auto res = isl_union_pw_aff_param_on_domain_id(domain.release(), id.release()); + auto res = isl_union_map_reverse(copy()); return manage(res); } -boolean union_pw_aff::plain_is_equal(const isl::union_pw_aff &upa2) const +isl::space union_map::space() const { - auto res = isl_union_pw_aff_plain_is_equal(get(), upa2.get()); + auto res = isl_union_map_get_space(get()); return manage(res); } -isl::union_pw_aff union_pw_aff::pullback(isl::union_pw_multi_aff upma) const +isl::space union_map::get_space() const { - auto res = isl_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release()); - return manage(res); + return space(); } -isl::union_pw_aff union_pw_aff::pw_aff_on_domain(isl::union_set domain, isl::pw_aff pa) +isl::union_map union_map::subtract(isl::union_map umap2) const { - auto res = isl_union_pw_aff_pw_aff_on_domain(domain.release(), pa.release()); + auto res = isl_union_map_subtract(copy(), umap2.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::reset_user() const +isl::union_map union_map::subtract_domain(isl::union_set dom) const { - auto res = isl_union_pw_aff_reset_user(copy()); + auto res = isl_union_map_subtract_domain(copy(), dom.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::scale_down_val(isl::val v) const +isl::union_map union_map::subtract_range(isl::union_set dom) const { - auto res = isl_union_pw_aff_scale_down_val(copy(), v.release()); + auto res = isl_union_map_subtract_range(copy(), dom.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::scale_val(isl::val v) const +isl::union_map union_map::uncurry() const { - auto res = isl_union_pw_aff_scale_val(copy(), v.release()); + auto res = isl_union_map_uncurry(copy()); return manage(res); } -isl::union_pw_aff union_pw_aff::sub(isl::union_pw_aff upa2) const +isl::union_map union_map::unite(isl::union_map umap2) const { - auto res = isl_union_pw_aff_sub(copy(), upa2.release()); + auto res = isl_union_map_union(copy(), umap2.release()); return manage(res); } -isl::union_pw_aff union_pw_aff::subtract_domain(isl::space space) const +isl::union_map union_map::universe() const { - auto res = isl_union_pw_aff_subtract_domain_space(copy(), space.release()); + auto res = isl_union_map_universe(copy()); return manage(res); } -isl::union_pw_aff union_pw_aff::subtract_domain(isl::union_set uset) const +isl::union_set union_map::wrap() const { - auto res = isl_union_pw_aff_subtract_domain_union_set(copy(), uset.release()); + auto res = isl_union_map_wrap(copy()); return manage(res); } -isl::union_pw_aff union_pw_aff::union_add(isl::union_pw_aff upa2) const +isl::union_map union_map::zip() const { - auto res = isl_union_pw_aff_union_add(copy(), upa2.release()); + auto res = isl_union_map_zip(copy()); return manage(res); } -isl::union_set union_pw_aff::zero_union_set() const +inline std::ostream &operator<<(std::ostream &os, const union_map &obj) { - auto res = isl_union_pw_aff_zero_union_set(copy()); - return manage(res); + char *str = isl_union_map_to_str(obj.get()); + os << str; + free(str); + return os; } -// implementations for isl::union_pw_aff_list -union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr) { - return union_pw_aff_list(ptr); +// implementations for isl::union_pw_aff +union_pw_aff manage(__isl_take isl_union_pw_aff *ptr) { + return union_pw_aff(ptr); } -union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr) { - ptr = isl_union_pw_aff_list_copy(ptr); - return union_pw_aff_list(ptr); +union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr) { + ptr = isl_union_pw_aff_copy(ptr); + return union_pw_aff(ptr); } -union_pw_aff_list::union_pw_aff_list() +union_pw_aff::union_pw_aff() : ptr(nullptr) {} -union_pw_aff_list::union_pw_aff_list(const union_pw_aff_list &obj) +union_pw_aff::union_pw_aff(const union_pw_aff &obj) : ptr(nullptr) { ptr = obj.copy(); } - -union_pw_aff_list::union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr) +union_pw_aff::union_pw_aff(__isl_take isl_union_pw_aff *ptr) : ptr(ptr) {} +union_pw_aff::union_pw_aff(isl::aff aff) +{ + auto res = isl_union_pw_aff_from_aff(aff.release()); + ptr = res; +} + +union_pw_aff::union_pw_aff(isl::pw_aff pa) +{ + auto res = isl_union_pw_aff_from_pw_aff(pa.release()); + ptr = res; +} -union_pw_aff_list &union_pw_aff_list::operator=(union_pw_aff_list obj) { +union_pw_aff::union_pw_aff(isl::ctx ctx, const std::string &str) +{ + auto res = isl_union_pw_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +union_pw_aff::union_pw_aff(isl::union_set domain, isl::val v) +{ + auto res = isl_union_pw_aff_val_on_domain(domain.release(), v.release()); + ptr = res; +} + +union_pw_aff &union_pw_aff::operator=(union_pw_aff obj) { std::swap(this->ptr, obj.ptr); return *this; } -union_pw_aff_list::~union_pw_aff_list() { +union_pw_aff::~union_pw_aff() { if (ptr) - isl_union_pw_aff_list_free(ptr); + isl_union_pw_aff_free(ptr); } -__isl_give isl_union_pw_aff_list *union_pw_aff_list::copy() const & { - return isl_union_pw_aff_list_copy(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_list *union_pw_aff_list::get() const { +__isl_keep isl_union_pw_aff *union_pw_aff::get() const { return ptr; } -__isl_give isl_union_pw_aff_list *union_pw_aff_list::release() { - isl_union_pw_aff_list *tmp = 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_list::is_null() const { +bool union_pw_aff::is_null() const { return ptr == nullptr; } - -isl::ctx union_pw_aff_list::ctx() const { - return isl::ctx(isl_union_pw_aff_list_get_ctx(ptr)); -} - -void union_pw_aff_list::dump() const { - isl_union_pw_aff_list_dump(get()); +isl::ctx union_pw_aff::ctx() const { + return isl::ctx(isl_union_pw_aff_get_ctx(ptr)); } - -isl::union_pw_aff_list union_pw_aff_list::add(isl::union_pw_aff el) const +isl::multi_union_pw_aff union_pw_aff::add(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_union_pw_aff_list_add(copy(), el.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).add(multi2); } -isl::union_pw_aff_list union_pw_aff_list::alloc(isl::ctx ctx, int n) +isl::union_pw_aff union_pw_aff::add(isl::union_pw_aff upa2) const { - auto res = isl_union_pw_aff_list_alloc(ctx.release(), n); + auto res = isl_union_pw_aff_add(copy(), upa2.release()); return manage(res); } -isl::union_pw_aff_list union_pw_aff_list::clear() const +isl::union_pw_multi_aff union_pw_aff::add(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_union_pw_aff_list_clear(copy()); - return manage(res); + return isl::union_pw_multi_aff(*this).add(upma2); } -isl::union_pw_aff_list union_pw_aff_list::concat(isl::union_pw_aff_list list2) const +isl::union_pw_aff union_pw_aff::add(const isl::aff &upa2) const { - auto res = isl_union_pw_aff_list_concat(copy(), list2.release()); - return manage(res); + return this->add(isl::union_pw_aff(upa2)); } -isl::union_pw_aff_list union_pw_aff_list::drop(unsigned int first, unsigned int n) const +isl::union_pw_aff union_pw_aff::add(const isl::pw_aff &upa2) const { - auto res = isl_union_pw_aff_list_drop(copy(), first, n); - return manage(res); + return this->add(isl::union_pw_aff(upa2)); } -stat union_pw_aff_list::foreach(const std::function &fn) const +isl::union_pw_multi_aff union_pw_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_union_pw_aff *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_union_pw_aff_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); + return isl::union_pw_multi_aff(*this).add_pw_multi_aff(pma); } -isl::union_pw_aff_list union_pw_aff_list::from_union_pw_aff(isl::union_pw_aff el) +isl::union_pw_multi_aff union_pw_aff::apply(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_union_pw_aff_list_from_union_pw_aff(el.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).apply(upma2); } -isl::union_pw_aff union_pw_aff_list::get_at(int index) const +isl::multi_union_pw_aff union_pw_aff::as_multi_union_pw_aff() const { - auto res = isl_union_pw_aff_list_get_at(get(), index); - return manage(res); + return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff(); } -isl::union_pw_aff union_pw_aff_list::get_union_pw_aff(int index) const +isl::pw_multi_aff union_pw_aff::as_pw_multi_aff() const { - auto res = isl_union_pw_aff_list_get_union_pw_aff(get(), index); - return manage(res); + return isl::union_pw_multi_aff(*this).as_pw_multi_aff(); } -isl::union_pw_aff_list union_pw_aff_list::insert(unsigned int pos, isl::union_pw_aff el) const +isl::union_map union_pw_aff::as_union_map() const { - auto res = isl_union_pw_aff_list_insert(copy(), pos, el.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).as_union_map(); } -isl_size union_pw_aff_list::n_union_pw_aff() const +isl::union_pw_aff union_pw_aff::at(int pos) const { - auto res = isl_union_pw_aff_list_n_union_pw_aff(get()); - return res; + return isl::multi_union_pw_aff(*this).at(pos); } -isl::union_pw_aff_list union_pw_aff_list::reverse() const +isl::union_set union_pw_aff::bind(const isl::multi_id &tuple) const { - auto res = isl_union_pw_aff_list_reverse(copy()); - return manage(res); + return isl::multi_union_pw_aff(*this).bind(tuple); } -isl::union_pw_aff_list union_pw_aff_list::set_union_pw_aff(int index, isl::union_pw_aff el) const +isl::union_set union_pw_aff::bind(isl::id id) const { - auto res = isl_union_pw_aff_list_set_union_pw_aff(copy(), index, el.release()); + auto res = isl_union_pw_aff_bind_id(copy(), id.release()); return manage(res); } -isl_size union_pw_aff_list::size() const +isl::union_set union_pw_aff::bind(const std::string &id) const { - auto res = isl_union_pw_aff_list_size(get()); - return res; + return this->bind(isl::id(ctx(), id)); } -isl::union_pw_aff_list union_pw_aff_list::swap(unsigned int pos1, unsigned int pos2) const +isl::union_pw_aff union_pw_aff::coalesce() const { - auto res = isl_union_pw_aff_list_swap(copy(), pos1, pos2); + auto res = isl_union_pw_aff_coalesce(copy()); return manage(res); } -// implementations for isl::union_pw_multi_aff -union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr) { - return union_pw_multi_aff(ptr); -} -union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr) { - ptr = isl_union_pw_multi_aff_copy(ptr); - return union_pw_multi_aff(ptr); -} - -union_pw_multi_aff::union_pw_multi_aff() - : ptr(nullptr) {} - -union_pw_multi_aff::union_pw_multi_aff(const union_pw_multi_aff &obj) - : ptr(nullptr) +isl_size union_pw_aff::dim(isl::dim type) const { - ptr = obj.copy(); + return isl::multi_union_pw_aff(*this).dim(type); } - -union_pw_multi_aff::union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr) - : ptr(ptr) {} - -union_pw_multi_aff::union_pw_multi_aff(isl::aff aff) -{ - auto res = isl_union_pw_multi_aff_from_aff(aff.release()); - ptr = res; -} -union_pw_multi_aff::union_pw_multi_aff(isl::union_set uset) -{ - auto res = isl_union_pw_multi_aff_from_domain(uset.release()); - ptr = res; -} -union_pw_multi_aff::union_pw_multi_aff(isl::multi_aff ma) -{ - auto res = isl_union_pw_multi_aff_from_multi_aff(ma.release()); - ptr = res; -} -union_pw_multi_aff::union_pw_multi_aff(isl::multi_union_pw_aff mupa) -{ - auto res = isl_union_pw_multi_aff_from_multi_union_pw_aff(mupa.release()); - ptr = res; -} -union_pw_multi_aff::union_pw_multi_aff(isl::pw_multi_aff pma) -{ - auto res = isl_union_pw_multi_aff_from_pw_multi_aff(pma.release()); - ptr = res; -} -union_pw_multi_aff::union_pw_multi_aff(isl::union_map umap) -{ - auto res = isl_union_pw_multi_aff_from_union_map(umap.release()); - ptr = res; -} -union_pw_multi_aff::union_pw_multi_aff(isl::union_pw_aff upa) -{ - auto res = isl_union_pw_multi_aff_from_union_pw_aff(upa.release()); - ptr = res; -} -union_pw_multi_aff::union_pw_multi_aff(isl::ctx ctx, const std::string &str) +isl::union_set union_pw_aff::domain() const { - auto res = isl_union_pw_multi_aff_read_from_str(ctx.release(), str.c_str()); - ptr = res; + auto res = isl_union_pw_aff_domain(copy()); + return manage(res); } -union_pw_multi_aff &union_pw_multi_aff::operator=(union_pw_multi_aff obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::union_pw_aff union_pw_aff::empty(isl::space space) +{ + auto res = isl_union_pw_aff_empty(space.release()); + return manage(res); } -union_pw_multi_aff::~union_pw_multi_aff() { - if (ptr) - isl_union_pw_multi_aff_free(ptr); +isl::pw_multi_aff union_pw_aff::extract_pw_multi_aff(const isl::space &space) const +{ + return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space); } -__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::copy() const & { - return isl_union_pw_multi_aff_copy(ptr); +isl::multi_union_pw_aff union_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const +{ + return isl::multi_union_pw_aff(*this).flat_range_product(multi2); } -__isl_keep isl_union_pw_multi_aff *union_pw_multi_aff::get() const { - return ptr; +isl::union_pw_multi_aff union_pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const +{ + return isl::union_pw_multi_aff(*this).flat_range_product(upma2); } -__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::release() { - isl_union_pw_multi_aff *tmp = ptr; - ptr = nullptr; - return tmp; +void union_pw_aff::foreach_pw_aff(const std::function &fn) const +{ + struct fn_data { + std::function 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(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_pw_aff_foreach_pw_aff(get(), fn_lambda, &fn_data); + return; } -bool union_pw_multi_aff::is_null() const { - return ptr == nullptr; +isl::union_pw_aff union_pw_aff::gist(isl::union_set context) const +{ + auto res = isl_union_pw_aff_gist(copy(), context.release()); + return manage(res); } - -isl::ctx union_pw_multi_aff::ctx() const { - return isl::ctx(isl_union_pw_multi_aff_get_ctx(ptr)); +bool union_pw_aff::has_range_tuple_id() const +{ + return isl::multi_union_pw_aff(*this).has_range_tuple_id(); } -void union_pw_multi_aff::dump() const { - isl_union_pw_multi_aff_dump(get()); +isl::union_pw_aff union_pw_aff::intersect_domain(isl::space space) const +{ + auto res = isl_union_pw_aff_intersect_domain_space(copy(), space.release()); + return manage(res); } - -isl::union_pw_multi_aff union_pw_multi_aff::add(isl::union_pw_multi_aff upma2) const +isl::union_pw_aff union_pw_aff::intersect_domain(isl::union_set uset) const { - auto res = isl_union_pw_multi_aff_add(copy(), upma2.release()); + auto res = isl_union_pw_aff_intersect_domain_union_set(copy(), uset.release()); return manage(res); } -isl::union_pw_multi_aff union_pw_multi_aff::add_pw_multi_aff(isl::pw_multi_aff pma) const +isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_domain(isl::union_set uset) const { - auto res = isl_union_pw_multi_aff_add_pw_multi_aff(copy(), pma.release()); + auto res = isl_union_pw_aff_intersect_domain_wrapped_domain(copy(), uset.release()); return manage(res); } -isl::union_pw_multi_aff union_pw_multi_aff::align_params(isl::space model) const +isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_range(isl::union_set uset) const { - auto res = isl_union_pw_multi_aff_align_params(copy(), model.release()); + auto res = isl_union_pw_aff_intersect_domain_wrapped_range(copy(), uset.release()); return manage(res); } -isl::union_pw_multi_aff union_pw_multi_aff::apply(isl::union_pw_multi_aff upma2) const +isl::union_pw_aff union_pw_aff::intersect_params(isl::set set) const { - auto res = isl_union_pw_multi_aff_apply_union_pw_multi_aff(copy(), upma2.release()); + auto res = isl_union_pw_aff_intersect_params(copy(), set.release()); return manage(res); } -isl::pw_multi_aff union_pw_multi_aff::as_pw_multi_aff() const +bool union_pw_aff::involves_locals() const { - auto res = isl_union_pw_multi_aff_as_pw_multi_aff(copy()); - return manage(res); + return isl::union_pw_multi_aff(*this).involves_locals(); } -isl::union_pw_multi_aff union_pw_multi_aff::coalesce() const +bool union_pw_aff::involves_nan() const { - auto res = isl_union_pw_multi_aff_coalesce(copy()); - return manage(res); + return isl::multi_union_pw_aff(*this).involves_nan(); } -isl_size union_pw_multi_aff::dim(isl::dim type) const +bool union_pw_aff::isa_pw_multi_aff() const { - auto res = isl_union_pw_multi_aff_dim(get(), static_cast(type)); - return res; + return isl::union_pw_multi_aff(*this).isa_pw_multi_aff(); } -isl::union_set union_pw_multi_aff::domain() const +isl::union_pw_aff_list union_pw_aff::list() const { - auto res = isl_union_pw_multi_aff_domain(copy()); - return manage(res); + return isl::multi_union_pw_aff(*this).list(); } -isl::union_pw_multi_aff union_pw_multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::multi_union_pw_aff union_pw_aff::neg() const { - auto res = isl_union_pw_multi_aff_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::multi_union_pw_aff(*this).neg(); } -isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::space space) +bool union_pw_aff::plain_is_empty() const { - auto res = isl_union_pw_multi_aff_empty(space.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).plain_is_empty(); } -isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::ctx ctx) +bool union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_union_pw_multi_aff_empty_ctx(ctx.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).plain_is_equal(multi2); } -isl::union_pw_multi_aff union_pw_multi_aff::empty_space(isl::space space) +isl::union_pw_multi_aff union_pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_union_pw_multi_aff_empty_space(space.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2); } -isl::pw_multi_aff union_pw_multi_aff::extract_pw_multi_aff(isl::space space) const +isl::union_pw_aff union_pw_aff::pullback(isl::union_pw_multi_aff upma) const { - auto res = isl_union_pw_multi_aff_extract_pw_multi_aff(get(), space.release()); + auto res = isl_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release()); return manage(res); } -int union_pw_multi_aff::find_dim_by_name(isl::dim type, const std::string &name) const +isl::pw_multi_aff_list union_pw_aff::pw_multi_aff_list() const { - auto res = isl_union_pw_multi_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + return isl::union_pw_multi_aff(*this).pw_multi_aff_list(); } -isl::union_pw_multi_aff union_pw_multi_aff::flat_range_product(isl::union_pw_multi_aff upma2) const +isl::union_pw_multi_aff union_pw_aff::range_factor_domain() const { - auto res = isl_union_pw_multi_aff_flat_range_product(copy(), upma2.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).range_factor_domain(); } -stat union_pw_multi_aff::foreach_pw_multi_aff(const std::function &fn) const +isl::union_pw_multi_aff union_pw_aff::range_factor_range() const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_union_pw_multi_aff_foreach_pw_multi_aff(get(), fn_lambda, &fn_data); - return manage(res); + return isl::union_pw_multi_aff(*this).range_factor_range(); } -isl::union_pw_multi_aff union_pw_multi_aff::from_union_set(isl::union_set uset) +isl::multi_union_pw_aff union_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_union_pw_multi_aff_from_union_set(uset.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).range_product(multi2); } -isl::pw_multi_aff_list union_pw_multi_aff::get_pw_multi_aff_list() const +isl::union_pw_multi_aff union_pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_union_pw_multi_aff_get_pw_multi_aff_list(get()); - return manage(res); + return isl::union_pw_multi_aff(*this).range_product(upma2); } -isl::space union_pw_multi_aff::get_space() const +isl::id union_pw_aff::range_tuple_id() const { - auto res = isl_union_pw_multi_aff_get_space(get()); - return manage(res); + return isl::multi_union_pw_aff(*this).range_tuple_id(); } -isl::union_pw_aff union_pw_multi_aff::get_union_pw_aff(int pos) const +isl::multi_union_pw_aff union_pw_aff::reset_range_tuple_id() const { - auto res = isl_union_pw_multi_aff_get_union_pw_aff(get(), pos); - return manage(res); + return isl::multi_union_pw_aff(*this).reset_range_tuple_id(); } -isl::union_pw_multi_aff union_pw_multi_aff::gist(isl::union_set context) const +isl::multi_union_pw_aff union_pw_aff::reset_tuple_id(isl::dim type) const { - auto res = isl_union_pw_multi_aff_gist(copy(), context.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).reset_tuple_id(type); } -isl::union_pw_multi_aff union_pw_multi_aff::gist_params(isl::set context) const +isl::multi_union_pw_aff union_pw_aff::scale(const isl::multi_val &mv) const { - auto res = isl_union_pw_multi_aff_gist_params(copy(), context.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).scale(mv); } -isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::space space) const +isl::multi_union_pw_aff union_pw_aff::scale(const isl::val &v) const { - auto res = isl_union_pw_multi_aff_intersect_domain_space(copy(), space.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).scale(v); } -isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::union_set uset) const +isl::multi_union_pw_aff union_pw_aff::scale(long v) const { - auto res = isl_union_pw_multi_aff_intersect_domain_union_set(copy(), uset.release()); - return manage(res); + return this->scale(isl::val(ctx(), v)); } -isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_domain(isl::union_set uset) const +isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::multi_val &mv) const { - auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_domain(copy(), uset.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).scale_down(mv); } -isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_range(isl::union_set uset) const +isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::val &v) const { - auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_range(copy(), uset.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).scale_down(v); } -isl::union_pw_multi_aff union_pw_multi_aff::intersect_params(isl::set set) const +isl::multi_union_pw_aff union_pw_aff::scale_down(long v) const { - auto res = isl_union_pw_multi_aff_intersect_params(copy(), set.release()); - return manage(res); + return this->scale_down(isl::val(ctx(), v)); } -boolean union_pw_multi_aff::involves_locals() const +isl::multi_union_pw_aff union_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const { - auto res = isl_union_pw_multi_aff_involves_locals(get()); - return manage(res); + return isl::multi_union_pw_aff(*this).set_at(pos, el); } -boolean union_pw_multi_aff::involves_nan() const +isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const isl::id &id) const { - auto res = isl_union_pw_multi_aff_involves_nan(get()); - return manage(res); + return isl::multi_union_pw_aff(*this).set_range_tuple(id); } -boolean union_pw_multi_aff::isa_pw_multi_aff() const +isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const std::string &id) const { - auto res = isl_union_pw_multi_aff_isa_pw_multi_aff(get()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } -isl::union_pw_multi_aff union_pw_multi_aff::multi_val_on_domain(isl::union_set domain, isl::multi_val mv) +isl::multi_union_pw_aff union_pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const { - auto res = isl_union_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).set_union_pw_aff(pos, el); } -isl_size union_pw_multi_aff::n_pw_multi_aff() const +isl_size union_pw_aff::size() const { - auto res = isl_union_pw_multi_aff_n_pw_multi_aff(get()); - return res; + return isl::multi_union_pw_aff(*this).size(); } -isl::union_pw_multi_aff union_pw_multi_aff::neg() const +isl::space union_pw_aff::space() const { - auto res = isl_union_pw_multi_aff_neg(copy()); + auto res = isl_union_pw_aff_get_space(get()); return manage(res); } -boolean union_pw_multi_aff::plain_is_empty() const +isl::space union_pw_aff::get_space() const { - auto res = isl_union_pw_multi_aff_plain_is_empty(get()); - return manage(res); + return space(); } -boolean union_pw_multi_aff::plain_is_equal(const isl::union_pw_multi_aff &upma2) const +isl::multi_union_pw_aff union_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_union_pw_multi_aff_plain_is_equal(get(), upma2.get()); - return manage(res); + return isl::multi_union_pw_aff(*this).sub(multi2); } -isl::union_pw_multi_aff union_pw_multi_aff::preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2) const +isl::union_pw_aff union_pw_aff::sub(isl::union_pw_aff upa2) const { - auto res = isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(copy(), upma2.release()); + auto res = isl_union_pw_aff_sub(copy(), upa2.release()); return manage(res); } -isl::union_pw_multi_aff union_pw_multi_aff::pullback(isl::union_pw_multi_aff upma2) const +isl::union_pw_multi_aff union_pw_aff::sub(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_union_pw_multi_aff_pullback_union_pw_multi_aff(copy(), upma2.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).sub(upma2); } -isl::union_pw_multi_aff union_pw_multi_aff::range_factor_domain() const +isl::union_pw_aff union_pw_aff::sub(const isl::aff &upa2) const { - auto res = isl_union_pw_multi_aff_range_factor_domain(copy()); - return manage(res); + return this->sub(isl::union_pw_aff(upa2)); } -isl::union_pw_multi_aff union_pw_multi_aff::range_factor_range() const +isl::union_pw_aff union_pw_aff::sub(const isl::pw_aff &upa2) const { - auto res = isl_union_pw_multi_aff_range_factor_range(copy()); - return manage(res); + return this->sub(isl::union_pw_aff(upa2)); } -isl::union_pw_multi_aff union_pw_multi_aff::range_product(isl::union_pw_multi_aff upma2) const +isl::union_pw_aff union_pw_aff::subtract_domain(isl::space space) const { - auto res = isl_union_pw_multi_aff_range_product(copy(), upma2.release()); + auto res = isl_union_pw_aff_subtract_domain_space(copy(), space.release()); return manage(res); } -isl::union_pw_multi_aff union_pw_multi_aff::reset_user() const +isl::union_pw_aff union_pw_aff::subtract_domain(isl::union_set uset) const { - auto res = isl_union_pw_multi_aff_reset_user(copy()); + auto res = isl_union_pw_aff_subtract_domain_union_set(copy(), uset.release()); return manage(res); } -isl::union_pw_multi_aff union_pw_multi_aff::scale_down_val(isl::val val) const +isl::union_pw_aff_list union_pw_aff::to_list() const { - auto res = isl_union_pw_multi_aff_scale_down_val(copy(), val.release()); + auto res = isl_union_pw_aff_to_list(copy()); return manage(res); } -isl::union_pw_multi_aff union_pw_multi_aff::scale_multi_val(isl::multi_val mv) const +isl::multi_union_pw_aff union_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const { - auto res = isl_union_pw_multi_aff_scale_multi_val(copy(), mv.release()); - return manage(res); + return isl::multi_union_pw_aff(*this).union_add(mupa2); } -isl::union_pw_multi_aff union_pw_multi_aff::scale_val(isl::val val) const +isl::union_pw_aff union_pw_aff::union_add(isl::union_pw_aff upa2) const { - auto res = isl_union_pw_multi_aff_scale_val(copy(), val.release()); + auto res = isl_union_pw_aff_union_add(copy(), upa2.release()); return manage(res); } -isl::union_pw_multi_aff union_pw_multi_aff::sub(isl::union_pw_multi_aff upma2) const +isl::union_pw_multi_aff union_pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_union_pw_multi_aff_sub(copy(), upma2.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).union_add(upma2); } -isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::space space) const +isl::union_pw_aff union_pw_aff::union_add(const isl::aff &upa2) const { - auto res = isl_union_pw_multi_aff_subtract_domain_space(copy(), space.release()); - return manage(res); + return this->union_add(isl::union_pw_aff(upa2)); } -isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::union_set uset) const +isl::union_pw_aff union_pw_aff::union_add(const isl::pw_aff &upa2) const { - auto res = isl_union_pw_multi_aff_subtract_domain_union_set(copy(), uset.release()); - return manage(res); + return this->union_add(isl::union_pw_aff(upa2)); } -isl::union_pw_multi_aff union_pw_multi_aff::union_add(isl::union_pw_multi_aff upma2) const +inline std::ostream &operator<<(std::ostream &os, const union_pw_aff &obj) { - auto res = isl_union_pw_multi_aff_union_add(copy(), upma2.release()); - return manage(res); + char *str = isl_union_pw_aff_to_str(obj.get()); + os << str; + free(str); + return os; } -// implementations for isl::union_pw_multi_aff_list -union_pw_multi_aff_list manage(__isl_take isl_union_pw_multi_aff_list *ptr) { - return union_pw_multi_aff_list(ptr); +// implementations for isl::union_pw_aff_list +union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr) { + return union_pw_aff_list(ptr); } -union_pw_multi_aff_list manage_copy(__isl_keep isl_union_pw_multi_aff_list *ptr) { - ptr = isl_union_pw_multi_aff_list_copy(ptr); - return union_pw_multi_aff_list(ptr); +union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr) { + ptr = isl_union_pw_aff_list_copy(ptr); + return union_pw_aff_list(ptr); } -union_pw_multi_aff_list::union_pw_multi_aff_list() +union_pw_aff_list::union_pw_aff_list() : ptr(nullptr) {} -union_pw_multi_aff_list::union_pw_multi_aff_list(const union_pw_multi_aff_list &obj) +union_pw_aff_list::union_pw_aff_list(const union_pw_aff_list &obj) : ptr(nullptr) { ptr = obj.copy(); } - -union_pw_multi_aff_list::union_pw_multi_aff_list(__isl_take isl_union_pw_multi_aff_list *ptr) +union_pw_aff_list::union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr) : ptr(ptr) {} +union_pw_aff_list::union_pw_aff_list(isl::ctx ctx, int n) +{ + auto res = isl_union_pw_aff_list_alloc(ctx.release(), n); + ptr = res; +} + +union_pw_aff_list::union_pw_aff_list(isl::union_pw_aff el) +{ + auto res = isl_union_pw_aff_list_from_union_pw_aff(el.release()); + ptr = res; +} + +union_pw_aff_list::union_pw_aff_list(isl::ctx ctx, const std::string &str) +{ + auto res = isl_union_pw_aff_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} -union_pw_multi_aff_list &union_pw_multi_aff_list::operator=(union_pw_multi_aff_list obj) { +union_pw_aff_list &union_pw_aff_list::operator=(union_pw_aff_list obj) { std::swap(this->ptr, obj.ptr); return *this; } -union_pw_multi_aff_list::~union_pw_multi_aff_list() { +union_pw_aff_list::~union_pw_aff_list() { if (ptr) - isl_union_pw_multi_aff_list_free(ptr); + isl_union_pw_aff_list_free(ptr); } -__isl_give isl_union_pw_multi_aff_list *union_pw_multi_aff_list::copy() const & { - return isl_union_pw_multi_aff_list_copy(ptr); +__isl_give isl_union_pw_aff_list *union_pw_aff_list::copy() const & { + return isl_union_pw_aff_list_copy(ptr); } -__isl_keep isl_union_pw_multi_aff_list *union_pw_multi_aff_list::get() const { +__isl_keep isl_union_pw_aff_list *union_pw_aff_list::get() const { return ptr; } -__isl_give isl_union_pw_multi_aff_list *union_pw_multi_aff_list::release() { - isl_union_pw_multi_aff_list *tmp = ptr; +__isl_give isl_union_pw_aff_list *union_pw_aff_list::release() { + isl_union_pw_aff_list *tmp = ptr; ptr = nullptr; return tmp; } -bool union_pw_multi_aff_list::is_null() const { +bool union_pw_aff_list::is_null() const { return ptr == nullptr; } - -isl::ctx union_pw_multi_aff_list::ctx() const { - return isl::ctx(isl_union_pw_multi_aff_list_get_ctx(ptr)); +isl::ctx union_pw_aff_list::ctx() const { + return isl::ctx(isl_union_pw_aff_list_get_ctx(ptr)); } -void union_pw_multi_aff_list::dump() const { - isl_union_pw_multi_aff_list_dump(get()); +isl::union_pw_aff_list union_pw_aff_list::add(isl::union_pw_aff el) const +{ + auto res = isl_union_pw_aff_list_add(copy(), el.release()); + return manage(res); } - -isl::union_pw_multi_aff_list union_pw_multi_aff_list::add(isl::union_pw_multi_aff el) const +isl::union_pw_aff union_pw_aff_list::at(int index) const { - auto res = isl_union_pw_multi_aff_list_add(copy(), el.release()); + auto res = isl_union_pw_aff_list_get_at(get(), index); return manage(res); } -isl::union_pw_multi_aff_list union_pw_multi_aff_list::alloc(isl::ctx ctx, int n) +isl::union_pw_aff union_pw_aff_list::get_at(int index) const { - auto res = isl_union_pw_multi_aff_list_alloc(ctx.release(), n); - return manage(res); + return at(index); } -isl::union_pw_multi_aff_list union_pw_multi_aff_list::clear() const +isl::union_pw_aff_list union_pw_aff_list::clear() const { - auto res = isl_union_pw_multi_aff_list_clear(copy()); + auto res = isl_union_pw_aff_list_clear(copy()); return manage(res); } -isl::union_pw_multi_aff_list union_pw_multi_aff_list::concat(isl::union_pw_multi_aff_list list2) const +isl::union_pw_aff_list union_pw_aff_list::concat(isl::union_pw_aff_list list2) const { - auto res = isl_union_pw_multi_aff_list_concat(copy(), list2.release()); + auto res = isl_union_pw_aff_list_concat(copy(), list2.release()); return manage(res); } -isl::union_pw_multi_aff_list union_pw_multi_aff_list::drop(unsigned int first, unsigned int n) const +isl::union_pw_aff_list union_pw_aff_list::drop(unsigned int first, unsigned int n) const { - auto res = isl_union_pw_multi_aff_list_drop(copy(), first, n); + auto res = isl_union_pw_aff_list_drop(copy(), first, n); return manage(res); } -stat union_pw_multi_aff_list::foreach(const std::function &fn) const +void union_pw_aff_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_union_pw_multi_aff *arg_0, void *arg_1) -> isl_stat { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_union_pw_aff *arg_0, void *arg_1) -> isl_stat { auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); + auto res = isl_union_pw_aff_list_foreach(get(), fn_lambda, &fn_data); + return; } -isl::union_pw_multi_aff_list union_pw_multi_aff_list::from_union_pw_multi_aff(isl::union_pw_multi_aff el) +isl::union_pw_aff_list union_pw_aff_list::insert(unsigned int pos, isl::union_pw_aff el) const { - auto res = isl_union_pw_multi_aff_list_from_union_pw_multi_aff(el.release()); + auto res = isl_union_pw_aff_list_insert(copy(), pos, el.release()); return manage(res); } -isl::union_pw_multi_aff union_pw_multi_aff_list::get_at(int index) const +isl_size union_pw_aff_list::size() const { - auto res = isl_union_pw_multi_aff_list_get_at(get(), index); - return manage(res); + auto res = isl_union_pw_aff_list_size(get()); + return res; } -isl::union_pw_multi_aff union_pw_multi_aff_list::get_union_pw_multi_aff(int index) const +inline std::ostream &operator<<(std::ostream &os, const union_pw_aff_list &obj) { - auto res = isl_union_pw_multi_aff_list_get_union_pw_multi_aff(get(), index); - return manage(res); + char *str = isl_union_pw_aff_list_to_str(obj.get()); + os << str; + free(str); + return os; } -isl::union_pw_multi_aff_list union_pw_multi_aff_list::insert(unsigned int pos, isl::union_pw_multi_aff el) const -{ - auto res = isl_union_pw_multi_aff_list_insert(copy(), pos, el.release()); - return manage(res); +// implementations for isl::union_pw_multi_aff +union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr) { + return union_pw_multi_aff(ptr); } - -isl_size union_pw_multi_aff_list::n_union_pw_multi_aff() const -{ - auto res = isl_union_pw_multi_aff_list_n_union_pw_multi_aff(get()); - return res; +union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr) { + ptr = isl_union_pw_multi_aff_copy(ptr); + return union_pw_multi_aff(ptr); } -isl::union_pw_multi_aff_list union_pw_multi_aff_list::reverse() const +union_pw_multi_aff::union_pw_multi_aff() + : ptr(nullptr) {} + +union_pw_multi_aff::union_pw_multi_aff(const union_pw_multi_aff &obj) + : ptr(nullptr) { - auto res = isl_union_pw_multi_aff_list_reverse(copy()); - return manage(res); + ptr = obj.copy(); } -isl::union_pw_multi_aff_list union_pw_multi_aff_list::set_union_pw_multi_aff(int index, isl::union_pw_multi_aff el) const +union_pw_multi_aff::union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr) + : ptr(ptr) {} + +union_pw_multi_aff::union_pw_multi_aff(isl::union_set uset) { - auto res = isl_union_pw_multi_aff_list_set_union_pw_multi_aff(copy(), index, el.release()); - return manage(res); + auto res = isl_union_pw_multi_aff_from_domain(uset.release()); + ptr = res; } -isl_size union_pw_multi_aff_list::size() const +union_pw_multi_aff::union_pw_multi_aff(isl::multi_aff ma) { - auto res = isl_union_pw_multi_aff_list_size(get()); - return res; + auto res = isl_union_pw_multi_aff_from_multi_aff(ma.release()); + ptr = res; } -isl::union_pw_multi_aff_list union_pw_multi_aff_list::swap(unsigned int pos1, unsigned int pos2) const +union_pw_multi_aff::union_pw_multi_aff(isl::pw_multi_aff pma) { - auto res = isl_union_pw_multi_aff_list_swap(copy(), pos1, pos2); - return manage(res); + auto res = isl_union_pw_multi_aff_from_pw_multi_aff(pma.release()); + ptr = res; } -// implementations for isl::union_pw_qpolynomial -union_pw_qpolynomial manage(__isl_take isl_union_pw_qpolynomial *ptr) { - return union_pw_qpolynomial(ptr); -} -union_pw_qpolynomial manage_copy(__isl_keep isl_union_pw_qpolynomial *ptr) { - ptr = isl_union_pw_qpolynomial_copy(ptr); - return union_pw_qpolynomial(ptr); +union_pw_multi_aff::union_pw_multi_aff(isl::union_map umap) +{ + auto res = isl_union_pw_multi_aff_from_union_map(umap.release()); + ptr = res; } -union_pw_qpolynomial::union_pw_qpolynomial() - : ptr(nullptr) {} - -union_pw_qpolynomial::union_pw_qpolynomial(const union_pw_qpolynomial &obj) - : ptr(nullptr) +union_pw_multi_aff::union_pw_multi_aff(isl::union_pw_aff upa) { - ptr = obj.copy(); + auto res = isl_union_pw_multi_aff_from_union_pw_aff(upa.release()); + ptr = res; } - -union_pw_qpolynomial::union_pw_qpolynomial(__isl_take isl_union_pw_qpolynomial *ptr) - : ptr(ptr) {} - -union_pw_qpolynomial::union_pw_qpolynomial(isl::ctx ctx, const std::string &str) +union_pw_multi_aff::union_pw_multi_aff(isl::ctx ctx, const std::string &str) { - auto res = isl_union_pw_qpolynomial_read_from_str(ctx.release(), str.c_str()); + auto res = isl_union_pw_multi_aff_read_from_str(ctx.release(), str.c_str()); ptr = res; } -union_pw_qpolynomial &union_pw_qpolynomial::operator=(union_pw_qpolynomial obj) { +union_pw_multi_aff &union_pw_multi_aff::operator=(union_pw_multi_aff obj) { std::swap(this->ptr, obj.ptr); return *this; } -union_pw_qpolynomial::~union_pw_qpolynomial() { +union_pw_multi_aff::~union_pw_multi_aff() { if (ptr) - isl_union_pw_qpolynomial_free(ptr); + isl_union_pw_multi_aff_free(ptr); } -__isl_give isl_union_pw_qpolynomial *union_pw_qpolynomial::copy() const & { - return isl_union_pw_qpolynomial_copy(ptr); +__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::copy() const & { + return isl_union_pw_multi_aff_copy(ptr); } -__isl_keep isl_union_pw_qpolynomial *union_pw_qpolynomial::get() const { +__isl_keep isl_union_pw_multi_aff *union_pw_multi_aff::get() const { return ptr; } -__isl_give isl_union_pw_qpolynomial *union_pw_qpolynomial::release() { - isl_union_pw_qpolynomial *tmp = ptr; +__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::release() { + isl_union_pw_multi_aff *tmp = ptr; ptr = nullptr; return tmp; } -bool union_pw_qpolynomial::is_null() const { +bool union_pw_multi_aff::is_null() const { return ptr == nullptr; } - -isl::ctx union_pw_qpolynomial::ctx() const { - return isl::ctx(isl_union_pw_qpolynomial_get_ctx(ptr)); -} - - -isl::union_pw_qpolynomial union_pw_qpolynomial::add(isl::union_pw_qpolynomial upwqp2) const -{ - auto res = isl_union_pw_qpolynomial_add(copy(), upwqp2.release()); - return manage(res); -} - -isl::union_pw_qpolynomial union_pw_qpolynomial::add_pw_qpolynomial(isl::pw_qpolynomial pwqp) const -{ - auto res = isl_union_pw_qpolynomial_add_pw_qpolynomial(copy(), pwqp.release()); - return manage(res); +isl::ctx union_pw_multi_aff::ctx() const { + return isl::ctx(isl_union_pw_multi_aff_get_ctx(ptr)); } -isl::union_pw_qpolynomial union_pw_qpolynomial::align_params(isl::space model) const +isl::union_pw_multi_aff union_pw_multi_aff::add(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_align_params(copy(), model.release()); + auto res = isl_union_pw_multi_aff_add(copy(), upma2.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::coalesce() const +isl::union_pw_multi_aff union_pw_multi_aff::add_pw_multi_aff(isl::pw_multi_aff pma) const { - auto res = isl_union_pw_qpolynomial_coalesce(copy()); + auto res = isl_union_pw_multi_aff_add_pw_multi_aff(copy(), pma.release()); return manage(res); } -isl_size union_pw_qpolynomial::dim(isl::dim type) const -{ - auto res = isl_union_pw_qpolynomial_dim(get(), static_cast(type)); - return res; -} - -isl::union_set union_pw_qpolynomial::domain() const +isl::union_pw_multi_aff union_pw_multi_aff::apply(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_domain(copy()); + auto res = isl_union_pw_multi_aff_apply_union_pw_multi_aff(copy(), upma2.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::multi_union_pw_aff union_pw_multi_aff::as_multi_union_pw_aff() const { - auto res = isl_union_pw_qpolynomial_drop_dims(copy(), static_cast(type), first, n); + auto res = isl_union_pw_multi_aff_as_multi_union_pw_aff(copy()); return manage(res); } -isl::val union_pw_qpolynomial::eval(isl::point pnt) const +isl::pw_multi_aff union_pw_multi_aff::as_pw_multi_aff() const { - auto res = isl_union_pw_qpolynomial_eval(copy(), pnt.release()); + auto res = isl_union_pw_multi_aff_as_pw_multi_aff(copy()); return manage(res); } -isl::pw_qpolynomial union_pw_qpolynomial::extract_pw_qpolynomial(isl::space space) const +isl::union_map union_pw_multi_aff::as_union_map() const { - auto res = isl_union_pw_qpolynomial_extract_pw_qpolynomial(get(), space.release()); + auto res = isl_union_pw_multi_aff_as_union_map(copy()); return manage(res); } -int union_pw_qpolynomial::find_dim_by_name(isl::dim type, const std::string &name) const -{ - auto res = isl_union_pw_qpolynomial_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; -} - -stat union_pw_qpolynomial::foreach_pw_qpolynomial(const std::function &fn) const +isl::union_pw_multi_aff union_pw_multi_aff::coalesce() const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_pw_qpolynomial *arg_0, void *arg_1) -> isl_stat { - auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); - }; - auto res = isl_union_pw_qpolynomial_foreach_pw_qpolynomial(get(), fn_lambda, &fn_data); + auto res = isl_union_pw_multi_aff_coalesce(copy()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::from_pw_qpolynomial(isl::pw_qpolynomial pwqp) +isl::union_set union_pw_multi_aff::domain() const { - auto res = isl_union_pw_qpolynomial_from_pw_qpolynomial(pwqp.release()); + auto res = isl_union_pw_multi_aff_domain(copy()); return manage(res); } -isl::pw_qpolynomial_list union_pw_qpolynomial::get_pw_qpolynomial_list() const +isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::space space) { - auto res = isl_union_pw_qpolynomial_get_pw_qpolynomial_list(get()); + auto res = isl_union_pw_multi_aff_empty(space.release()); return manage(res); } -isl::space union_pw_qpolynomial::get_space() const +isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::ctx ctx) { - auto res = isl_union_pw_qpolynomial_get_space(get()); + auto res = isl_union_pw_multi_aff_empty_ctx(ctx.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::gist(isl::union_set context) const +isl::pw_multi_aff union_pw_multi_aff::extract_pw_multi_aff(isl::space space) const { - auto res = isl_union_pw_qpolynomial_gist(copy(), context.release()); + auto res = isl_union_pw_multi_aff_extract_pw_multi_aff(get(), space.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::gist_params(isl::set context) const +isl::union_pw_multi_aff union_pw_multi_aff::flat_range_product(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_gist_params(copy(), context.release()); + auto res = isl_union_pw_multi_aff_flat_range_product(copy(), upma2.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::intersect_domain(isl::union_set uset) const +isl::union_pw_multi_aff union_pw_multi_aff::gist(isl::union_set context) const { - auto res = isl_union_pw_qpolynomial_intersect_domain(copy(), uset.release()); + auto res = isl_union_pw_multi_aff_gist(copy(), context.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::intersect_domain_space(isl::space space) const +isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::space space) const { - auto res = isl_union_pw_qpolynomial_intersect_domain_space(copy(), space.release()); + auto res = isl_union_pw_multi_aff_intersect_domain_space(copy(), space.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::intersect_domain_union_set(isl::union_set uset) const +isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::union_set uset) const { - auto res = isl_union_pw_qpolynomial_intersect_domain_union_set(copy(), uset.release()); + auto res = isl_union_pw_multi_aff_intersect_domain_union_set(copy(), uset.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::intersect_domain_wrapped_domain(isl::union_set uset) const +isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_domain(isl::union_set uset) const { - auto res = isl_union_pw_qpolynomial_intersect_domain_wrapped_domain(copy(), uset.release()); + auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_domain(copy(), uset.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::intersect_domain_wrapped_range(isl::union_set uset) const +isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_range(isl::union_set uset) const { - auto res = isl_union_pw_qpolynomial_intersect_domain_wrapped_range(copy(), uset.release()); + auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_range(copy(), uset.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::intersect_params(isl::set set) const +isl::union_pw_multi_aff union_pw_multi_aff::intersect_params(isl::set set) const { - auto res = isl_union_pw_qpolynomial_intersect_params(copy(), set.release()); + auto res = isl_union_pw_multi_aff_intersect_params(copy(), set.release()); return manage(res); } -boolean union_pw_qpolynomial::involves_nan() const +bool union_pw_multi_aff::involves_locals() const { - auto res = isl_union_pw_qpolynomial_involves_nan(get()); - return manage(res); + auto res = isl_union_pw_multi_aff_involves_locals(get()); + return res; } -isl::union_pw_qpolynomial union_pw_qpolynomial::mul(isl::union_pw_qpolynomial upwqp2) const +bool union_pw_multi_aff::isa_pw_multi_aff() const { - auto res = isl_union_pw_qpolynomial_mul(copy(), upwqp2.release()); - return manage(res); + auto res = isl_union_pw_multi_aff_isa_pw_multi_aff(get()); + return res; } -isl_size union_pw_qpolynomial::n_pw_qpolynomial() const +bool union_pw_multi_aff::plain_is_empty() const { - auto res = isl_union_pw_qpolynomial_n_pw_qpolynomial(get()); + auto res = isl_union_pw_multi_aff_plain_is_empty(get()); return res; } -isl::union_pw_qpolynomial union_pw_qpolynomial::neg() const +isl::union_pw_multi_aff union_pw_multi_aff::preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_neg(copy()); + auto res = isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(copy(), upma2.release()); return manage(res); } -boolean union_pw_qpolynomial::plain_is_equal(const isl::union_pw_qpolynomial &upwqp2) const +isl::union_pw_multi_aff union_pw_multi_aff::pullback(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_plain_is_equal(get(), upwqp2.get()); + auto res = isl_union_pw_multi_aff_pullback_union_pw_multi_aff(copy(), upma2.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::reset_user() const +isl::pw_multi_aff_list union_pw_multi_aff::pw_multi_aff_list() const { - auto res = isl_union_pw_qpolynomial_reset_user(copy()); + auto res = isl_union_pw_multi_aff_get_pw_multi_aff_list(get()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::scale_down_val(isl::val v) const +isl::pw_multi_aff_list union_pw_multi_aff::get_pw_multi_aff_list() const { - auto res = isl_union_pw_qpolynomial_scale_down_val(copy(), v.release()); - return manage(res); + return pw_multi_aff_list(); } -isl::union_pw_qpolynomial union_pw_qpolynomial::scale_val(isl::val v) const +isl::union_pw_multi_aff union_pw_multi_aff::range_factor_domain() const { - auto res = isl_union_pw_qpolynomial_scale_val(copy(), v.release()); + auto res = isl_union_pw_multi_aff_range_factor_domain(copy()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::sub(isl::union_pw_qpolynomial upwqp2) const +isl::union_pw_multi_aff union_pw_multi_aff::range_factor_range() const { - auto res = isl_union_pw_qpolynomial_sub(copy(), upwqp2.release()); + auto res = isl_union_pw_multi_aff_range_factor_range(copy()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::subtract_domain(isl::union_set uset) const +isl::union_pw_multi_aff union_pw_multi_aff::range_product(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_subtract_domain(copy(), uset.release()); + auto res = isl_union_pw_multi_aff_range_product(copy(), upma2.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::subtract_domain_space(isl::space space) const +isl::space union_pw_multi_aff::space() const { - auto res = isl_union_pw_qpolynomial_subtract_domain_space(copy(), space.release()); + auto res = isl_union_pw_multi_aff_get_space(get()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::subtract_domain_union_set(isl::union_set uset) const +isl::space union_pw_multi_aff::get_space() const { - auto res = isl_union_pw_qpolynomial_subtract_domain_union_set(copy(), uset.release()); - return manage(res); + return space(); } -isl::union_pw_qpolynomial union_pw_qpolynomial::to_polynomial(int sign) const +isl::union_pw_multi_aff union_pw_multi_aff::sub(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_to_polynomial(copy(), sign); + auto res = isl_union_pw_multi_aff_sub(copy(), upma2.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::zero(isl::space space) +isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::space space) const { - auto res = isl_union_pw_qpolynomial_zero(space.release()); + auto res = isl_union_pw_multi_aff_subtract_domain_space(copy(), space.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::zero_ctx(isl::ctx ctx) +isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::union_set uset) const { - auto res = isl_union_pw_qpolynomial_zero_ctx(ctx.release()); + auto res = isl_union_pw_multi_aff_subtract_domain_union_set(copy(), uset.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::zero_space(isl::space space) +isl::union_pw_multi_aff union_pw_multi_aff::union_add(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_zero_space(space.release()); + auto res = isl_union_pw_multi_aff_union_add(copy(), upma2.release()); return manage(res); } +inline std::ostream &operator<<(std::ostream &os, const union_pw_multi_aff &obj) +{ + char *str = isl_union_pw_multi_aff_to_str(obj.get()); + os << str; + free(str); + return os; +} + // implementations for isl::union_set union_set manage(__isl_take isl_union_set *ptr) { return union_set(ptr); @@ -19648,7 +21759,6 @@ ptr = obj.copy(); } - union_set::union_set(__isl_take isl_union_set *ptr) : ptr(ptr) {} @@ -19657,16 +21767,19 @@ auto res = isl_union_set_from_basic_set(bset.release()); ptr = res; } + union_set::union_set(isl::point pnt) { auto res = isl_union_set_from_point(pnt.release()); ptr = res; } + union_set::union_set(isl::set set) { auto res = isl_union_set_from_set(set.release()); ptr = res; } + union_set::union_set(isl::ctx ctx, const std::string &str) { auto res = isl_union_set_read_from_str(ctx.release(), str.c_str()); @@ -19701,56 +21814,44 @@ return ptr == nullptr; } - isl::ctx union_set::ctx() const { return isl::ctx(isl_union_set_get_ctx(ptr)); } -void union_set::dump() const { - isl_union_set_dump(get()); -} - - isl::union_set union_set::affine_hull() const { auto res = isl_union_set_affine_hull(copy()); return manage(res); } -isl::union_set union_set::align_params(isl::space model) const -{ - auto res = isl_union_set_align_params(copy(), model.release()); - return manage(res); -} - isl::union_set union_set::apply(isl::union_map umap) const { auto res = isl_union_set_apply(copy(), umap.release()); return manage(res); } -isl::union_set union_set::coalesce() const +isl::set union_set::as_set() const { - auto res = isl_union_set_coalesce(copy()); + auto res = isl_union_set_as_set(copy()); return manage(res); } -isl::union_set union_set::coefficients() const +isl::union_set union_set::coalesce() const { - auto res = isl_union_set_coefficients(copy()); + auto res = isl_union_set_coalesce(copy()); return manage(res); } -isl::schedule union_set::compute_schedule(isl::union_map validity, isl::union_map proximity) const +isl::union_set union_set::compute_divs() const { - auto res = isl_union_set_compute_schedule(copy(), validity.release(), proximity.release()); + auto res = isl_union_set_compute_divs(copy()); return manage(res); } -boolean union_set::contains(const isl::space &space) const +bool union_set::contains(const isl::space &space) const { auto res = isl_union_set_contains(get(), space.get()); - return manage(res); + return res; } isl::union_set union_set::detect_equalities() const @@ -19759,74 +21860,76 @@ return manage(res); } -isl_size union_set::dim(isl::dim type) const -{ - auto res = isl_union_set_dim(get(), static_cast(type)); - return res; -} - isl::union_set union_set::empty(isl::ctx ctx) { auto res = isl_union_set_empty_ctx(ctx.release()); return manage(res); } +bool union_set::every_set(const std::function &test) const +{ + struct test_data { + std::function func; + std::exception_ptr eptr; + } test_data = { test }; + auto test_lambda = [](isl_set *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(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_set_every_set(get(), test_lambda, &test_data); + return res; +} + isl::set union_set::extract_set(isl::space space) const { auto res = isl_union_set_extract_set(get(), space.release()); return manage(res); } -stat union_set::foreach_point(const std::function &fn) const +void union_set::foreach_point(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat { auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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_set_foreach_point(get(), fn_lambda, &fn_data); - return manage(res); + return; } -stat union_set::foreach_set(const std::function &fn) const +void union_set::foreach_set(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat { auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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_set_foreach_set(get(), fn_lambda, &fn_data); - return manage(res); -} - -isl::basic_set_list union_set::get_basic_set_list() const -{ - auto res = isl_union_set_get_basic_set_list(get()); - return manage(res); -} - -uint32_t union_set::get_hash() const -{ - auto res = isl_union_set_get_hash(get()); - return res; -} - -isl::set_list union_set::get_set_list() const -{ - auto res = isl_union_set_get_set_list(get()); - return manage(res); -} - -isl::space union_set::get_space() const -{ - auto res = isl_union_set_get_space(get()); - return manage(res); + return; } isl::union_set union_set::gist(isl::union_set context) const @@ -19865,70 +21968,40 @@ return manage(res); } -boolean union_set::is_disjoint(const isl::union_set &uset2) const +bool union_set::is_disjoint(const isl::union_set &uset2) const { auto res = isl_union_set_is_disjoint(get(), uset2.get()); - return manage(res); + return res; } -boolean union_set::is_empty() const +bool union_set::is_empty() const { auto res = isl_union_set_is_empty(get()); - return manage(res); + return res; } -boolean union_set::is_equal(const isl::union_set &uset2) const +bool union_set::is_equal(const isl::union_set &uset2) const { auto res = isl_union_set_is_equal(get(), uset2.get()); - return manage(res); -} - -boolean union_set::is_params() const -{ - auto res = isl_union_set_is_params(get()); - return manage(res); + return res; } -boolean union_set::is_strict_subset(const isl::union_set &uset2) const +bool union_set::is_strict_subset(const isl::union_set &uset2) const { auto res = isl_union_set_is_strict_subset(get(), uset2.get()); - return manage(res); + return res; } -boolean union_set::is_subset(const isl::union_set &uset2) const +bool union_set::is_subset(const isl::union_set &uset2) const { auto res = isl_union_set_is_subset(get(), uset2.get()); - return manage(res); + return res; } -boolean union_set::isa_set() const +bool union_set::isa_set() const { auto res = isl_union_set_isa_set(get()); - return manage(res); -} - -isl::union_map union_set::lex_ge_union_set(isl::union_set uset2) const -{ - auto res = isl_union_set_lex_ge_union_set(copy(), uset2.release()); - return manage(res); -} - -isl::union_map union_set::lex_gt_union_set(isl::union_set uset2) const -{ - auto res = isl_union_set_lex_gt_union_set(copy(), uset2.release()); - return manage(res); -} - -isl::union_map union_set::lex_le_union_set(isl::union_set uset2) const -{ - auto res = isl_union_set_lex_le_union_set(copy(), uset2.release()); - return manage(res); -} - -isl::union_map union_set::lex_lt_union_set(isl::union_set uset2) const -{ - auto res = isl_union_set_lex_lt_union_set(copy(), uset2.release()); - return manage(res); + return res; } isl::union_set union_set::lexmax() const @@ -19943,18 +22016,6 @@ return manage(res); } -isl::multi_val union_set::min_multi_union_pw_aff(const isl::multi_union_pw_aff &obj) const -{ - auto res = isl_union_set_min_multi_union_pw_aff(get(), obj.get()); - return manage(res); -} - -isl_size union_set::n_set() const -{ - auto res = isl_union_set_n_set(get()); - return res; -} - isl::set union_set::params() const { auto res = isl_union_set_params(copy()); @@ -19985,69 +22046,43 @@ return manage(res); } -isl::union_set union_set::product(isl::union_set uset2) const -{ - auto res = isl_union_set_product(copy(), uset2.release()); - return manage(res); -} - -isl::union_set union_set::project_out(isl::dim type, unsigned int first, unsigned int n) const -{ - auto res = isl_union_set_project_out(copy(), static_cast(type), first, n); - return manage(res); -} - -isl::union_set union_set::project_out_all_params() const -{ - auto res = isl_union_set_project_out_all_params(copy()); - return manage(res); -} - -isl::union_set union_set::remove_divs() const -{ - auto res = isl_union_set_remove_divs(copy()); - return manage(res); -} - -isl::union_set union_set::remove_redundancies() const +isl::point union_set::sample_point() const { - auto res = isl_union_set_remove_redundancies(copy()); + auto res = isl_union_set_sample_point(copy()); return manage(res); } -isl::union_set union_set::reset_user() const +isl::set_list union_set::set_list() const { - auto res = isl_union_set_reset_user(copy()); + auto res = isl_union_set_get_set_list(get()); return manage(res); } -isl::basic_set union_set::sample() const +isl::set_list union_set::get_set_list() const { - auto res = isl_union_set_sample(copy()); - return manage(res); + return set_list(); } -isl::point union_set::sample_point() const +isl::space union_set::space() const { - auto res = isl_union_set_sample_point(copy()); + auto res = isl_union_set_get_space(get()); return manage(res); } -isl::union_set union_set::simple_hull() const +isl::space union_set::get_space() const { - auto res = isl_union_set_simple_hull(copy()); - return manage(res); + return space(); } -isl::union_set union_set::solutions() const +isl::union_set union_set::subtract(isl::union_set uset2) const { - auto res = isl_union_set_solutions(copy()); + auto res = isl_union_set_subtract(copy(), uset2.release()); return manage(res); } -isl::union_set union_set::subtract(isl::union_set uset2) const +isl::union_set_list union_set::to_list() const { - auto res = isl_union_set_subtract(copy(), uset2.release()); + auto res = isl_union_set_to_list(copy()); return manage(res); } @@ -20069,10 +22104,12 @@ return manage(res); } -isl::union_map union_set::wrapped_domain_map() const +inline std::ostream &operator<<(std::ostream &os, const union_set &obj) { - auto res = isl_union_set_wrapped_domain_map(copy()); - return manage(res); + char *str = isl_union_set_to_str(obj.get()); + os << str; + free(str); + return os; } // implementations for isl::union_set_list @@ -20093,10 +22130,26 @@ ptr = obj.copy(); } - union_set_list::union_set_list(__isl_take isl_union_set_list *ptr) : ptr(ptr) {} +union_set_list::union_set_list(isl::ctx ctx, int n) +{ + auto res = isl_union_set_list_alloc(ctx.release(), n); + ptr = res; +} + +union_set_list::union_set_list(isl::union_set el) +{ + auto res = isl_union_set_list_from_union_set(el.release()); + ptr = res; +} + +union_set_list::union_set_list(isl::ctx ctx, const std::string &str) +{ + auto res = isl_union_set_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} union_set_list &union_set_list::operator=(union_set_list obj) { std::swap(this->ptr, obj.ptr); @@ -20126,28 +22179,27 @@ return ptr == nullptr; } - isl::ctx union_set_list::ctx() const { return isl::ctx(isl_union_set_list_get_ctx(ptr)); } -void union_set_list::dump() const { - isl_union_set_list_dump(get()); -} - - isl::union_set_list union_set_list::add(isl::union_set el) const { auto res = isl_union_set_list_add(copy(), el.release()); return manage(res); } -isl::union_set_list union_set_list::alloc(isl::ctx ctx, int n) +isl::union_set union_set_list::at(int index) const { - auto res = isl_union_set_list_alloc(ctx.release(), n); + auto res = isl_union_set_list_get_at(get(), index); 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 { auto res = isl_union_set_list_clear(copy()); @@ -20166,36 +22218,24 @@ return manage(res); } -stat union_set_list::foreach(const std::function &fn) const +void union_set_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; auto fn_lambda = [](isl_union_set *arg_0, void *arg_1) -> isl_stat { auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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_set_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); -} - -isl::union_set_list union_set_list::from_union_set(isl::union_set el) -{ - auto res = isl_union_set_list_from_union_set(el.release()); - return manage(res); -} - -isl::union_set union_set_list::get_at(int index) const -{ - auto res = isl_union_set_list_get_at(get(), index); - return manage(res); -} - -isl::union_set union_set_list::get_union_set(int index) const -{ - auto res = isl_union_set_list_get_union_set(get(), index); - return manage(res); + return; } isl::union_set_list union_set_list::insert(unsigned int pos, isl::union_set el) const @@ -20204,40 +22244,18 @@ return manage(res); } -isl_size union_set_list::n_union_set() const -{ - auto res = isl_union_set_list_n_union_set(get()); - return res; -} - -isl::union_set_list union_set_list::reverse() const -{ - auto res = isl_union_set_list_reverse(copy()); - return manage(res); -} - -isl::union_set_list union_set_list::set_union_set(int index, isl::union_set el) const -{ - auto res = isl_union_set_list_set_union_set(copy(), index, el.release()); - return manage(res); -} - isl_size union_set_list::size() const { auto res = isl_union_set_list_size(get()); return res; } -isl::union_set_list union_set_list::swap(unsigned int pos1, unsigned int pos2) const -{ - auto res = isl_union_set_list_swap(copy(), pos1, pos2); - return manage(res); -} - -isl::union_set union_set_list::unite() const +inline std::ostream &operator<<(std::ostream &os, const union_set_list &obj) { - auto res = isl_union_set_list_union(copy()); - return manage(res); + char *str = isl_union_set_list_to_str(obj.get()); + os << str; + free(str); + return os; } // implementations for isl::val @@ -20258,7 +22276,6 @@ ptr = obj.copy(); } - val::val(__isl_take isl_val *ptr) : ptr(ptr) {} @@ -20267,6 +22284,7 @@ auto res = isl_val_int_from_si(ctx.release(), i); ptr = res; } + val::val(isl::ctx ctx, const std::string &str) { auto res = isl_val_read_from_str(ctx.release(), str.c_str()); @@ -20301,26 +22319,25 @@ return ptr == nullptr; } - isl::ctx val::ctx() const { return isl::ctx(isl_val_get_ctx(ptr)); } -void val::dump() const { - isl_val_dump(get()); -} - - isl::val val::abs() const { auto res = isl_val_abs(copy()); return manage(res); } -boolean val::abs_eq(const isl::val &v2) const +bool val::abs_eq(const isl::val &v2) const { auto res = isl_val_abs_eq(get(), v2.get()); - return manage(res); + return res; +} + +bool val::abs_eq(long v2) const +{ + return this->abs_eq(isl::val(ctx(), v2)); } isl::val val::add(isl::val v2) const @@ -20329,10 +22346,9 @@ return manage(res); } -isl::val val::add_ui(unsigned long v2) const +isl::val val::add(long v2) const { - auto res = isl_val_add_ui(copy(), v2); - return manage(res); + return this->add(isl::val(ctx(), v2)); } isl::val val::ceil() const @@ -20347,28 +22363,37 @@ return res; } +long val::den_si() const +{ + 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 { auto res = isl_val_div(copy(), v2.release()); return manage(res); } -isl::val val::div_ui(unsigned long v2) const +isl::val val::div(long v2) const { - auto res = isl_val_div_ui(copy(), v2); - return manage(res); + return this->div(isl::val(ctx(), v2)); } -boolean val::eq(const isl::val &v2) const +bool val::eq(const isl::val &v2) const { auto res = isl_val_eq(get(), v2.get()); - return manage(res); + return res; } -boolean val::eq_si(long i) const +bool val::eq(long v2) const { - auto res = isl_val_eq_si(get(), i); - return manage(res); + return this->eq(isl::val(ctx(), v2)); } isl::val val::floor() const @@ -20383,34 +22408,31 @@ return manage(res); } -boolean val::ge(const isl::val &v2) const +isl::val val::gcd(long v2) const { - auto res = isl_val_ge(get(), v2.get()); - return manage(res); + return this->gcd(isl::val(ctx(), v2)); } -uint32_t val::get_hash() const +bool val::ge(const isl::val &v2) const { - auto res = isl_val_get_hash(get()); + auto res = isl_val_ge(get(), v2.get()); return res; } -long val::get_num_si() const +bool val::ge(long v2) const { - auto res = isl_val_get_num_si(get()); - return res; + return this->ge(isl::val(ctx(), v2)); } -boolean val::gt(const isl::val &v2) const +bool val::gt(const isl::val &v2) const { auto res = isl_val_gt(get(), v2.get()); - return manage(res); + return res; } -boolean val::gt_si(long i) const +bool val::gt(long v2) const { - auto res = isl_val_gt_si(get(), i); - return manage(res); + return this->gt(isl::val(ctx(), v2)); } isl::val val::infty(isl::ctx ctx) @@ -20431,94 +22453,109 @@ return manage(res); } -boolean val::is_divisible_by(const isl::val &v2) const +bool val::is_divisible_by(const isl::val &v2) const { auto res = isl_val_is_divisible_by(get(), v2.get()); - return manage(res); + return res; +} + +bool val::is_divisible_by(long v2) const +{ + return this->is_divisible_by(isl::val(ctx(), v2)); } -boolean val::is_infty() const +bool val::is_infty() const { auto res = isl_val_is_infty(get()); - return manage(res); + return res; } -boolean val::is_int() const +bool val::is_int() const { auto res = isl_val_is_int(get()); - return manage(res); + return res; } -boolean val::is_nan() const +bool val::is_nan() const { auto res = isl_val_is_nan(get()); - return manage(res); + return res; } -boolean val::is_neg() const +bool val::is_neg() const { auto res = isl_val_is_neg(get()); - return manage(res); + return res; } -boolean val::is_neginfty() const +bool val::is_neginfty() const { auto res = isl_val_is_neginfty(get()); - return manage(res); + return res; } -boolean val::is_negone() const +bool val::is_negone() const { auto res = isl_val_is_negone(get()); - return manage(res); + return res; } -boolean val::is_nonneg() const +bool val::is_nonneg() const { auto res = isl_val_is_nonneg(get()); - return manage(res); + return res; } -boolean val::is_nonpos() const +bool val::is_nonpos() const { auto res = isl_val_is_nonpos(get()); - return manage(res); + return res; } -boolean val::is_one() const +bool val::is_one() const { auto res = isl_val_is_one(get()); - return manage(res); + return res; } -boolean val::is_pos() const +bool val::is_pos() const { auto res = isl_val_is_pos(get()); - return manage(res); + return res; } -boolean val::is_rat() const +bool val::is_rat() const { auto res = isl_val_is_rat(get()); - return manage(res); + return res; } -boolean val::is_zero() const +bool val::is_zero() const { auto res = isl_val_is_zero(get()); - return manage(res); + return res; } -boolean val::le(const isl::val &v2) const +bool val::le(const isl::val &v2) const { auto res = isl_val_le(get(), v2.get()); - return manage(res); + return res; +} + +bool val::le(long v2) const +{ + return this->le(isl::val(ctx(), v2)); } -boolean val::lt(const isl::val &v2) const +bool val::lt(const isl::val &v2) const { auto res = isl_val_lt(get(), v2.get()); - return manage(res); + return res; +} + +bool val::lt(long v2) const +{ + return this->lt(isl::val(ctx(), v2)); } isl::val val::max(isl::val v2) const @@ -20527,34 +22564,42 @@ return manage(res); } +isl::val val::max(long v2) const +{ + return this->max(isl::val(ctx(), v2)); +} + isl::val val::min(isl::val v2) const { auto res = isl_val_min(copy(), v2.release()); return manage(res); } +isl::val val::min(long v2) const +{ + return this->min(isl::val(ctx(), v2)); +} + isl::val val::mod(isl::val v2) const { auto res = isl_val_mod(copy(), v2.release()); return manage(res); } -isl::val val::mul(isl::val v2) const +isl::val val::mod(long v2) const { - auto res = isl_val_mul(copy(), v2.release()); - return manage(res); + return this->mod(isl::val(ctx(), v2)); } -isl::val val::mul_ui(unsigned long v2) const +isl::val val::mul(isl::val v2) const { - auto res = isl_val_mul_ui(copy(), v2); + auto res = isl_val_mul(copy(), v2.release()); return manage(res); } -isl_size val::n_abs_num_chunks(size_t size) const +isl::val val::mul(long v2) const { - auto res = isl_val_n_abs_num_chunks(get(), size); - return res; + return this->mul(isl::val(ctx(), v2)); } isl::val val::nan(isl::ctx ctx) @@ -20563,10 +22608,15 @@ return manage(res); } -boolean val::ne(const isl::val &v2) const +bool val::ne(const isl::val &v2) const { auto res = isl_val_ne(get(), v2.get()); - return manage(res); + return res; +} + +bool val::ne(long v2) const +{ + return this->ne(isl::val(ctx(), v2)); } isl::val val::neg() const @@ -20587,6 +22637,17 @@ return manage(res); } +long val::num_si() const +{ + 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 res = isl_val_one(ctx.release()); @@ -20599,12 +22660,6 @@ return manage(res); } -isl::val val::set_si(long i) const -{ - auto res = isl_val_set_si(copy(), i); - return manage(res); -} - int val::sgn() const { auto res = isl_val_sgn(get()); @@ -20617,12 +22672,23 @@ return manage(res); } +isl::val val::sub(long v2) const +{ + return this->sub(isl::val(ctx(), v2)); +} + isl::val val::sub_ui(unsigned long v2) const { auto res = isl_val_sub_ui(copy(), v2); return manage(res); } +isl::val_list val::to_list() const +{ + auto res = isl_val_to_list(copy()); + return manage(res); +} + isl::val val::trunc() const { auto res = isl_val_trunc(copy()); @@ -20635,6 +22701,14 @@ return manage(res); } +inline std::ostream &operator<<(std::ostream &os, const val &obj) +{ + char *str = isl_val_to_str(obj.get()); + os << str; + free(str); + return os; +} + // implementations for isl::val_list val_list manage(__isl_take isl_val_list *ptr) { return val_list(ptr); @@ -20653,10 +22727,26 @@ ptr = obj.copy(); } - val_list::val_list(__isl_take isl_val_list *ptr) : ptr(ptr) {} +val_list::val_list(isl::ctx ctx, int n) +{ + auto res = isl_val_list_alloc(ctx.release(), n); + ptr = res; +} + +val_list::val_list(isl::val el) +{ + auto res = isl_val_list_from_val(el.release()); + ptr = res; +} + +val_list::val_list(isl::ctx ctx, const std::string &str) +{ + auto res = isl_val_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} val_list &val_list::operator=(val_list obj) { std::swap(this->ptr, obj.ptr); @@ -20686,28 +22776,32 @@ return ptr == nullptr; } - isl::ctx val_list::ctx() const { return isl::ctx(isl_val_list_get_ctx(ptr)); } -void val_list::dump() const { - isl_val_list_dump(get()); -} - - isl::val_list val_list::add(isl::val el) const { auto res = isl_val_list_add(copy(), el.release()); return manage(res); } -isl::val_list val_list::alloc(isl::ctx ctx, int n) +isl::val_list val_list::add(long el) const { - auto res = isl_val_list_alloc(ctx.release(), n); + return this->add(isl::val(ctx(), el)); +} + +isl::val val_list::at(int index) const +{ + auto res = isl_val_list_get_at(get(), index); return manage(res); } +isl::val val_list::get_at(int index) const +{ + return at(index); +} + isl::val_list val_list::clear() const { auto res = isl_val_list_clear(copy()); @@ -20726,36 +22820,24 @@ return manage(res); } -stat val_list::foreach(const std::function &fn) const +void val_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; auto fn_lambda = [](isl_val *arg_0, void *arg_1) -> isl_stat { auto *data = static_cast(arg_1); - stat ret = (*data->func)(manage(arg_0)); - return ret.release(); + 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_val_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); -} - -isl::val_list val_list::from_val(isl::val el) -{ - auto res = isl_val_list_from_val(el.release()); - return manage(res); -} - -isl::val val_list::get_at(int index) const -{ - auto res = isl_val_list_get_at(get(), index); - return manage(res); -} - -isl::val val_list::get_val(int index) const -{ - auto res = isl_val_list_get_val(get(), index); - return manage(res); + return; } isl::val_list val_list::insert(unsigned int pos, isl::val el) const @@ -20764,22 +22846,9 @@ return manage(res); } -isl_size val_list::n_val() const -{ - auto res = isl_val_list_n_val(get()); - return res; -} - -isl::val_list val_list::reverse() const -{ - auto res = isl_val_list_reverse(copy()); - return manage(res); -} - -isl::val_list val_list::set_val(int index, isl::val el) const +isl::val_list val_list::insert(unsigned int pos, long el) const { - auto res = isl_val_list_set_val(copy(), index, el.release()); - return manage(res); + return this->insert(pos, isl::val(ctx(), el)); } isl_size val_list::size() const @@ -20788,217 +22857,13 @@ return res; } -isl::val_list val_list::swap(unsigned int pos1, unsigned int pos2) const -{ - auto res = isl_val_list_swap(copy(), pos1, pos2); - return manage(res); -} - -// implementations for isl::vec -vec manage(__isl_take isl_vec *ptr) { - return vec(ptr); -} -vec manage_copy(__isl_keep isl_vec *ptr) { - ptr = isl_vec_copy(ptr); - return vec(ptr); -} - -vec::vec() - : ptr(nullptr) {} - -vec::vec(const vec &obj) - : ptr(nullptr) -{ - ptr = obj.copy(); -} - - -vec::vec(__isl_take isl_vec *ptr) - : ptr(ptr) {} - - -vec &vec::operator=(vec obj) { - std::swap(this->ptr, obj.ptr); - return *this; -} - -vec::~vec() { - if (ptr) - isl_vec_free(ptr); -} - -__isl_give isl_vec *vec::copy() const & { - return isl_vec_copy(ptr); -} - -__isl_keep isl_vec *vec::get() const { - return ptr; -} - -__isl_give isl_vec *vec::release() { - isl_vec *tmp = ptr; - ptr = nullptr; - return tmp; -} - -bool vec::is_null() const { - return ptr == nullptr; -} - - -isl::ctx vec::ctx() const { - return isl::ctx(isl_vec_get_ctx(ptr)); -} - -void vec::dump() const { - isl_vec_dump(get()); -} - - -isl::vec vec::add(isl::vec vec2) const -{ - auto res = isl_vec_add(copy(), vec2.release()); - return manage(res); -} - -isl::vec vec::add_els(unsigned int n) const -{ - auto res = isl_vec_add_els(copy(), n); - return manage(res); -} - -isl::vec vec::alloc(isl::ctx ctx, unsigned int size) -{ - auto res = isl_vec_alloc(ctx.release(), size); - return manage(res); -} - -isl::vec vec::ceil() const -{ - auto res = isl_vec_ceil(copy()); - return manage(res); -} - -isl::vec vec::clr() const -{ - auto res = isl_vec_clr(copy()); - return manage(res); -} - -int vec::cmp_element(const isl::vec &vec2, int pos) const -{ - auto res = isl_vec_cmp_element(get(), vec2.get(), pos); - return res; -} - -isl::vec vec::concat(isl::vec vec2) const -{ - auto res = isl_vec_concat(copy(), vec2.release()); - return manage(res); -} - -isl::vec vec::drop_els(unsigned int pos, unsigned int n) const -{ - auto res = isl_vec_drop_els(copy(), pos, n); - return manage(res); -} - -isl::vec vec::extend(unsigned int size) const -{ - auto res = isl_vec_extend(copy(), size); - return manage(res); -} - -isl::val vec::get_element_val(int pos) const -{ - auto res = isl_vec_get_element_val(get(), pos); - return manage(res); -} - -isl::vec vec::insert_els(unsigned int pos, unsigned int n) const -{ - auto res = isl_vec_insert_els(copy(), pos, n); - return manage(res); -} - -isl::vec vec::insert_zero_els(unsigned int pos, unsigned int n) const -{ - auto res = isl_vec_insert_zero_els(copy(), pos, n); - return manage(res); -} - -boolean vec::is_equal(const isl::vec &vec2) const -{ - auto res = isl_vec_is_equal(get(), vec2.get()); - return manage(res); -} - -isl::vec vec::mat_product(isl::mat mat) const -{ - auto res = isl_vec_mat_product(copy(), mat.release()); - return manage(res); -} - -isl::vec vec::move_els(unsigned int dst_col, unsigned int src_col, unsigned int n) const -{ - auto res = isl_vec_move_els(copy(), dst_col, src_col, n); - return manage(res); -} - -isl::vec vec::neg() const -{ - auto res = isl_vec_neg(copy()); - return manage(res); -} - -isl::vec vec::set_element_si(int pos, int v) const -{ - auto res = isl_vec_set_element_si(copy(), pos, v); - return manage(res); -} - -isl::vec vec::set_element_val(int pos, isl::val v) const -{ - auto res = isl_vec_set_element_val(copy(), pos, v.release()); - return manage(res); -} - -isl::vec vec::set_si(int v) const -{ - auto res = isl_vec_set_si(copy(), v); - return manage(res); -} - -isl::vec vec::set_val(isl::val v) const -{ - auto res = isl_vec_set_val(copy(), v.release()); - return manage(res); -} - -isl_size vec::size() const -{ - auto res = isl_vec_size(get()); - return res; -} - -isl::vec vec::sort() const -{ - auto res = isl_vec_sort(copy()); - return manage(res); -} - -isl::vec vec::zero(isl::ctx ctx, unsigned int size) -{ - auto res = isl_vec_zero(ctx.release(), size); - return manage(res); -} - -isl::vec vec::zero_extend(unsigned int size) const +inline std::ostream &operator<<(std::ostream &os, const val_list &obj) { - auto res = isl_vec_zero_extend(copy(), size); - return manage(res); + char *str = isl_val_list_to_str(obj.get()); + os << str; + free(str); + return os; } -} // namespace noexceptions } // namespace isl -#endif /* ISL_CPP_CHECKED */ +#endif /* ISL_CPP */ diff --git a/polly/lib/Support/GICHelper.cpp b/polly/lib/Support/GICHelper.cpp --- a/polly/lib/Support/GICHelper.cpp +++ b/polly/lib/Support/GICHelper.cpp @@ -199,49 +199,43 @@ /// not know that it is never called, and therefore must ensure the existence of /// the dump functions. void neverCalled() { - isl::aff().dump(); - isl::aff_list().dump(); - isl::ast_expr().dump(); - isl::ast_expr_list().dump(); - isl::ast_node().dump(); - isl::ast_node_list().dump(); - isl::basic_map().dump(); - isl::basic_map_list().dump(); - isl::basic_set().dump(); - isl::basic_set_list().dump(); - isl::constraint().dump(); - isl::constraint_list().dump(); - isl::id().dump(); - isl::id_list().dump(); - isl::id_to_ast_expr().dump(); - isl::local_space().dump(); - isl::map().dump(); - isl::map_list().dump(); - isl::multi_aff().dump(); - isl::multi_pw_aff().dump(); - isl::multi_union_pw_aff().dump(); - isl::multi_val().dump(); - isl::point().dump(); - isl::pw_aff().dump(); - isl::pw_aff_list().dump(); - isl::pw_multi_aff().dump(); - isl::pw_qpolynomial().dump(); - isl::qpolynomial().dump(); - isl::schedule().dump(); - isl::schedule_constraints().dump(); - isl::schedule_node().dump(); - isl::set().dump(); - isl::set_list().dump(); - isl::space().dump(); - isl::union_map().dump(); - isl::union_map_list().dump(); - isl::union_pw_aff().dump(); - isl::union_pw_aff_list().dump(); - isl::union_pw_multi_aff().dump(); - isl::union_pw_multi_aff_list().dump(); - isl::union_set().dump(); - isl::union_set_list().dump(); - isl::val().dump(); - isl::val_list().dump(); + polly::dumpIslObj(isl::aff()); + polly::dumpIslObj(isl::aff_list()); + polly::dumpIslObj(isl::ast_expr()); + polly::dumpIslObj(isl::ast_node()); + polly::dumpIslObj(isl::ast_node_list()); + polly::dumpIslObj(isl::basic_map()); + polly::dumpIslObj(isl::basic_map_list()); + polly::dumpIslObj(isl::basic_set()); + polly::dumpIslObj(isl::basic_set_list()); + polly::dumpIslObj(isl::constraint()); + polly::dumpIslObj(isl::id()); + polly::dumpIslObj(isl::id_list()); + polly::dumpIslObj(isl::id_to_ast_expr()); + polly::dumpIslObj(isl::local_space()); + polly::dumpIslObj(isl::map()); + polly::dumpIslObj(isl::map_list()); + polly::dumpIslObj(isl::multi_aff()); + polly::dumpIslObj(isl::multi_pw_aff()); + polly::dumpIslObj(isl::multi_union_pw_aff()); + polly::dumpIslObj(isl::multi_val()); + polly::dumpIslObj(isl::point()); + polly::dumpIslObj(isl::pw_aff()); + polly::dumpIslObj(isl::pw_aff_list()); + polly::dumpIslObj(isl::pw_multi_aff()); + polly::dumpIslObj(isl::schedule()); + polly::dumpIslObj(isl::schedule_constraints()); + polly::dumpIslObj(isl::schedule_node()); + polly::dumpIslObj(isl::set()); + polly::dumpIslObj(isl::set_list()); + polly::dumpIslObj(isl::space()); + polly::dumpIslObj(isl::union_map()); + polly::dumpIslObj(isl::union_pw_aff()); + polly::dumpIslObj(isl::union_pw_aff_list()); + polly::dumpIslObj(isl::union_pw_multi_aff()); + polly::dumpIslObj(isl::union_set()); + polly::dumpIslObj(isl::union_set_list()); + polly::dumpIslObj(isl::val()); + polly::dumpIslObj(isl::val_list()); } #endif diff --git a/polly/lib/Support/ISLTools.cpp b/polly/lib/Support/ISLTools.cpp --- a/polly/lib/Support/ISLTools.cpp +++ b/polly/lib/Support/ISLTools.cpp @@ -36,7 +36,7 @@ auto Identity = isl::multi_aff::identity(Space); if (Amount == 0) return Identity; - auto ShiftAff = Identity.get_aff(Pos); + auto ShiftAff = Identity.at(Pos); ShiftAff = ShiftAff.set_constant_si(Amount); return Identity.set_aff(Pos, ShiftAff); } @@ -540,44 +540,39 @@ isl::val polly::getConstant(isl::pw_aff PwAff, bool Max, bool Min) { assert(!Max || !Min); // Cannot return min and max at the same time. isl::val Result; - isl::stat Stat = PwAff.foreach_piece( - [=, &Result](isl::set Set, isl::aff Aff) -> isl::stat { - if (!Result.is_null() && Result.is_nan()) - return isl::stat::ok(); - - // TODO: If Min/Max, we can also determine a minimum/maximum value if - // Set is constant-bounded. - if (!Aff.is_cst()) { - Result = isl::val::nan(Aff.ctx()); - return isl::stat::error(); - } - - isl::val ThisVal = Aff.get_constant_val(); - if (Result.is_null()) { - Result = ThisVal; - return isl::stat::ok(); - } - - if (Result.eq(ThisVal)) - return isl::stat::ok(); - - if (Max && ThisVal.gt(Result)) { - Result = ThisVal; - return isl::stat::ok(); - } - - if (Min && ThisVal.lt(Result)) { - Result = ThisVal; - return isl::stat::ok(); - } - - // Not compatible - Result = isl::val::nan(Aff.ctx()); - return isl::stat::error(); - }); - - if (Stat.is_error()) - return {}; + PwAff.foreach_piece([=, &Result](isl::set Set, isl::aff Aff) { + if (!Result.is_null() && Result.is_nan()) + return; + + // TODO: If Min/Max, we can also determine a minimum/maximum value if + // Set is constant-bounded. + if (!Aff.is_cst()) { + Result = isl::val::nan(Aff.ctx()); + return; + } + + isl::val ThisVal = Aff.get_constant_val(); + if (Result.is_null()) { + Result = ThisVal; + return; + } + + if (Result.eq(ThisVal)) + return; + + if (Max && ThisVal.gt(Result)) { + Result = ThisVal; + return; + } + + if (Min && ThisVal.lt(Result)) { + Result = ThisVal; + return; + } + + // Not compatible + Result = isl::val::nan(Aff.ctx()); + }); return Result; } @@ -585,10 +580,7 @@ #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) static void foreachPoint(const isl::set &Set, const std::function &F) { - Set.foreach_point([&](isl::point P) -> isl::stat { - F(P); - return isl::stat::ok(); - }); + Set.foreach_point([&](isl::point P) { F(P); }); } static void foreachPoint(isl::basic_set BSet, diff --git a/polly/lib/Transform/DeLICM.cpp b/polly/lib/Transform/DeLICM.cpp --- a/polly/lib/Transform/DeLICM.cpp +++ b/polly/lib/Transform/DeLICM.cpp @@ -254,8 +254,8 @@ assert(Occupied.is_disjoint(Unused)); auto Universe = Occupied.unite(Unused); - assert(!Known.domain().is_subset(Universe).is_false()); - assert(!Written.domain().is_subset(Universe).is_false()); + assert(Known.domain().is_subset(Universe)); + assert(Written.domain().is_subset(Universe)); #endif } @@ -1300,7 +1300,7 @@ // array is accesses with memset, memcpy or memmove which take i8* // arguments. isl::union_map AccRel = MA->getLatestAccessRelation(); - if (!AccRel.is_single_valued().is_true()) { + if (!AccRel.is_single_valued()) { LLVM_DEBUG(dbgs() << "Access " << MA << " is incompatible because it writes multiple " "elements per instance\n"); diff --git a/polly/lib/Transform/FlattenAlgo.cpp b/polly/lib/Transform/FlattenAlgo.cpp --- a/polly/lib/Transform/FlattenAlgo.cpp +++ b/polly/lib/Transform/FlattenAlgo.cpp @@ -74,16 +74,12 @@ return UPwAff; auto Result = isl::union_pw_aff::empty(UPwAff.get_space()); - isl::stat Stat = - UPwAff.foreach_pw_aff([=, &Result](isl::pw_aff PwAff) -> isl::stat { - auto ValAff = - isl::pw_aff(isl::set::universe(PwAff.get_space().domain()), Val); - auto Subtracted = PwAff.sub(ValAff); - Result = Result.union_add(isl::union_pw_aff(Subtracted)); - return isl::stat::ok(); - }); - if (Stat.is_error()) - return {}; + UPwAff.foreach_pw_aff([=, &Result](isl::pw_aff PwAff) { + auto ValAff = + isl::pw_aff(isl::set::universe(PwAff.get_space().domain()), Val); + auto Subtracted = PwAff.sub(ValAff); + Result = Result.union_add(isl::union_pw_aff(Subtracted)); + }); return Result; } @@ -93,16 +89,12 @@ return UPwAff; auto Result = isl::union_pw_aff::empty(UPwAff.get_space()); - isl::stat Stat = - UPwAff.foreach_pw_aff([=, &Result](isl::pw_aff PwAff) -> isl::stat { - auto ValAff = - isl::pw_aff(isl::set::universe(PwAff.get_space().domain()), Val); - auto Multiplied = PwAff.mul(ValAff); - Result = Result.union_add(Multiplied); - return isl::stat::ok(); - }); - if (Stat.is_error()) - return {}; + UPwAff.foreach_pw_aff([=, &Result](isl::pw_aff PwAff) { + auto ValAff = + isl::pw_aff(isl::set::universe(PwAff.get_space().domain()), Val); + auto Multiplied = PwAff.mul(ValAff); + Result = Result.union_add(Multiplied); + }); return Result; } @@ -152,7 +144,7 @@ auto UAff = isl::union_pw_multi_aff(SingleUMap); auto FirstMAff = isl::multi_union_pw_aff(UAff); - return FirstMAff.get_union_pw_aff(0); + return FirstMAff.at(0); } /// Flatten a sequence-like first dimension. @@ -238,8 +230,10 @@ auto FirstScheduleAffWithOffset = FirstScheduleAffNormalized.add(AllCounter); - auto ScheduleWithOffset = isl::union_map(FirstScheduleAffWithOffset) - .flat_range_product(RemainingSubSchedule); + auto ScheduleWithOffset = + isl::union_map::from( + isl::union_pw_multi_aff(FirstScheduleAffWithOffset)) + .flat_range_product(RemainingSubSchedule); NewSchedule = NewSchedule.unite(ScheduleWithOffset); ScatterSet = ScatterSet.subtract(ScatterFirst); @@ -294,15 +288,15 @@ auto FirstSubScheduleAff = scheduleExtractDimAff(SubSchedule, 0); auto RemainingSubSchedule = scheduleProjectOut(std::move(SubSchedule), 0, 1); - auto LenVal = MaxVal.sub(MinVal).add_ui(1); + auto LenVal = MaxVal.sub(MinVal).add(1); auto FirstSubScheduleNormalized = subtract(FirstSubScheduleAff, MinVal); // TODO: Normalize FirstAff to zero (convert to isl_map, determine minimum, // subtract it) auto FirstAff = scheduleExtractDimAff(Schedule, 0); auto Offset = multiply(FirstAff, LenVal); - auto Index = FirstSubScheduleNormalized.add(Offset); - auto IndexMap = isl::union_map(Index); + isl::union_pw_multi_aff Index = FirstSubScheduleNormalized.add(Offset); + auto IndexMap = isl::union_map::from(Index); auto Result = IndexMap.flat_range_product(RemainingSubSchedule); LLVM_DEBUG(dbgs() << "Loop-flatten result is:\n " << Result << "\n"); diff --git a/polly/lib/Transform/ForwardOpTree.cpp b/polly/lib/Transform/ForwardOpTree.cpp --- a/polly/lib/Transform/ForwardOpTree.cpp +++ b/polly/lib/Transform/ForwardOpTree.cpp @@ -258,7 +258,7 @@ /// For each statement instance, the array elements that contain the /// same ValInst. isl::union_map findSameContentElements(isl::union_map ValInst) { - assert(!ValInst.is_single_valued().is_false()); + assert(ValInst.is_single_valued()); // { Domain[] } isl::union_set Domain = ValInst.domain(); @@ -324,7 +324,7 @@ // Determine whether this map contains all wanted values. isl::set MapDom = Map.domain(); - if (!Domain.is_subset(MapDom).is_true()) + if (!Domain.is_subset(MapDom)) continue; // There might be multiple array elements that contain the same value, but @@ -510,8 +510,7 @@ // { DomainDef[] -> ValInst[] } isl::map ExpectedVal = makeValInst(Inst, UseStmt, UseLoop); - assert(!isNormalized(ExpectedVal).is_false() && - "LoadInsts are always normalized"); + assert(isNormalized(ExpectedVal) && "LoadInsts are always normalized"); // { DomainUse[] -> DomainTarget[] } isl::map UseToTarget = getDefToTarget(UseStmt, TargetStmt); @@ -549,7 +548,7 @@ // TODO: 'Translator' could also be used to map PHINodes to their incoming // ValInsts. isl::map LocalTranslator; - if (!ValInstSpace.is_wrapping().is_false()) { + if (ValInstSpace.is_wrapping()) { // { DefDomain[] -> Value[] } isl::map ValInsts = ExpectedVal.range().unwrap(); diff --git a/polly/lib/Transform/MatmulOptimizer.cpp b/polly/lib/Transform/MatmulOptimizer.cpp --- a/polly/lib/Transform/MatmulOptimizer.cpp +++ b/polly/lib/Transform/MatmulOptimizer.cpp @@ -445,8 +445,8 @@ std::max(FirstDim, SecondDim)); auto PartialSchedule = isl::manage(isl_schedule_node_band_get_partial_schedule(Node.get())); - auto PartialScheduleFirstDim = PartialSchedule.get_union_pw_aff(FirstDim); - auto PartialScheduleSecondDim = PartialSchedule.get_union_pw_aff(SecondDim); + auto PartialScheduleFirstDim = PartialSchedule.at(FirstDim); + auto PartialScheduleSecondDim = PartialSchedule.at(SecondDim); PartialSchedule = PartialSchedule.set_union_pw_aff(SecondDim, PartialScheduleFirstDim); PartialSchedule = @@ -492,7 +492,7 @@ Node = permuteBandNodeDimensions(Node, DimOutNum - 3, DimOutNum - 1); // Mark the outermost loop as parallelizable. - Node = Node.band_member_set_coincident(0, true); + Node = Node.as().member_set_coincident(0, true); return Node.child(0).child(0); } @@ -893,7 +893,7 @@ static isl::schedule_node isolateAndUnrollMatMulInnerLoops(isl::schedule_node Node, struct MicroKernelParamsTy MicroKernelParams) { - isl::schedule_node Child = Node.get_child(0); + isl::schedule_node Child = Node.child(0); isl::union_map UnMapOldIndVar = Child.get_prefix_schedule_relation(); isl::set Prefix = isl::map::from_union_map(UnMapOldIndVar).range(); isl_size Dims = Prefix.tuple_dim(); @@ -906,11 +906,11 @@ isl::ctx Ctx = Node.ctx(); auto Options = IsolateOption.unite(getDimOptions(Ctx, "unroll")); Options = Options.unite(getUnrollIsolatedSetOptions(Ctx)); - Node = Node.band_set_ast_build_options(Options); + Node = Node.as().set_ast_build_options(Options); Node = Node.parent().parent().parent(); IsolateOption = getIsolateOptions(Prefix, 3); Options = IsolateOption.unite(getDimOptions(Ctx, "separate")); - Node = Node.band_set_ast_build_options(Options); + Node = Node.as().set_ast_build_options(Options); Node = Node.child(0).child(0).child(0); return Node; } diff --git a/polly/lib/Transform/ScheduleOptimizer.cpp b/polly/lib/Transform/ScheduleOptimizer.cpp --- a/polly/lib/Transform/ScheduleOptimizer.cpp +++ b/polly/lib/Transform/ScheduleOptimizer.cpp @@ -366,8 +366,9 @@ isl::union_set IsolateOption = getIsolateOptions(IsolateDomain, 1); Node = Node.parent().parent(); isl::union_set Options = IsolateOption.unite(AtomicOption); - Node = Node.band_set_ast_build_options(Options); - return Node; + isl::schedule_node_band Result = + Node.as().set_ast_build_options(Options); + return Result; } isl::schedule_node ScheduleTreeOptimizer::prevectSchedBand( @@ -394,9 +395,10 @@ Node = Node.child(0); // Make sure the "trivially vectorizable loop" is not unrolled. Otherwise, // we will have troubles to match it in the backend. - Node = Node.band_set_ast_build_options( - isl::union_set(Node.ctx(), "{ unroll[x]: 1 = 0 }")); - Node = isl::manage(isl_schedule_node_band_sink(Node.release())); + isl::schedule_node_band NodeBand = + Node.as().set_ast_build_options( + isl::union_set(Node.ctx(), "{ unroll[x]: 1 = 0 }")); + Node = isl::manage(isl_schedule_node_band_sink(NodeBand.release())); Node = Node.child(0); if (isl_schedule_node_get_type(Node.get()) == isl_schedule_node_leaf) Node = Node.parent(); @@ -477,7 +479,7 @@ auto Dims = Space.dim(isl::dim::set); for (int i = Dims - 1; i >= 0; i--) - if (Node.band_member_get_coincident(i)) { + if (Node.as().member_get_coincident(i)) { Node = prevectSchedBand(Node, i, PrevectorWidth); break; } @@ -615,7 +617,7 @@ int CountMembers = isl_schedule_node_band_n_member(Node.get()); NumBandMembers[Version] += CountMembers; for (int i = 0; i < CountMembers; i += 1) { - if (Node.band_member_get_coincident(i)) + if (Node.as().member_get_coincident(i)) NumCoincident[Version]++; } break; diff --git a/polly/lib/Transform/ScheduleTreeTransform.cpp b/polly/lib/Transform/ScheduleTreeTransform.cpp --- a/polly/lib/Transform/ScheduleTreeTransform.cpp +++ b/polly/lib/Transform/ScheduleTreeTransform.cpp @@ -80,7 +80,7 @@ isl::schedule NewChild = getDerived().visit(Band.child(0), std::forward(args)...); isl::schedule_node NewNode = - NewChild.insert_partial_schedule(PartialSched).get_root().get_child(0); + NewChild.insert_partial_schedule(PartialSched).get_root().child(0); // Reapply permutability and coincidence attributes. NewNode = isl::manage(isl_schedule_node_band_set_permutable( @@ -123,7 +123,8 @@ } isl::schedule visitMark(const isl::schedule_node &Mark, Args... args) { - isl::id TheMark = Mark.mark_get_id(); + + isl::id TheMark = Mark.as().get_id(); isl::schedule_node NewChild = getDerived() .visit(Mark.first_child(), std::forward(args)...) @@ -134,7 +135,8 @@ isl::schedule visitExtension(const isl::schedule_node &Extension, Args... args) { - isl::union_map TheExtension = Extension.extension_get_extension(); + isl::union_map TheExtension = + Extension.as().get_extension(); isl::schedule_node NewChild = getDerived() .visit(Extension.child(0), args...) .get_root() @@ -145,7 +147,8 @@ } isl::schedule visitFilter(const isl::schedule_node &Filter, Args... args) { - isl::union_set FilterDomain = Filter.filter_get_filter(); + isl::union_set FilterDomain = + Filter.as().get_filter(); isl::schedule NewSchedule = getDerived().visit(Filter.child(0), std::forward(args)...); return NewSchedule.intersect_domain(FilterDomain); @@ -256,7 +259,7 @@ isl::schedule_node NewNode = NewChild.insert_partial_schedule(NewPartialSchedAsAsMultiUnionPwAff) .get_root() - .get_child(0); + .child(0); // Reapply permutability and coincidence attributes. NewNode = isl::manage(isl_schedule_node_band_set_permutable( @@ -274,7 +277,8 @@ isl::schedule visitFilter(const isl::schedule_node &Filter, const isl::union_set &Domain, isl::union_map &Extensions) { - isl::union_set FilterDomain = Filter.filter_get_filter(); + isl::union_set FilterDomain = + Filter.as().get_filter(); isl::union_set NewDomain = Domain.intersect(FilterDomain); // A filter is added implicitly if necessary when joining schedule trees. @@ -284,7 +288,8 @@ isl::schedule visitExtension(const isl::schedule_node &Extension, const isl::union_set &Domain, isl::union_map &Extensions) { - isl::union_map ExtDomain = Extension.extension_get_extension(); + isl::union_map ExtDomain = + Extension.as().get_extension(); isl::union_set NewDomain = Domain.unite(ExtDomain.range()); isl::union_map ChildExtensions; isl::schedule NewChild = @@ -340,7 +345,8 @@ isl::schedule_node visitBand(const isl::schedule_node &Band) { isl::schedule_node Result = - Band.band_set_ast_build_options(ASTBuildOptions[Pos]); + Band.as().set_ast_build_options( + ASTBuildOptions[Pos]); Pos += 1; return getBase().visitBand(Result); } @@ -412,7 +418,7 @@ /// start with either the mark or the band. static isl::schedule_node moveToBandMark(isl::schedule_node BandOrMark) { if (isBandMark(BandOrMark)) { - assert(isBandWithSingleLoop(BandOrMark.get_child(0))); + assert(isBandWithSingleLoop(BandOrMark.child(0))); return BandOrMark; } assert(isBandWithSingleLoop(BandOrMark)); @@ -431,7 +437,7 @@ isl::schedule_node Band; if (isMark(MarkOrBand)) { - Attr = getLoopAttr(MarkOrBand.mark_get_id()); + Attr = getLoopAttr(MarkOrBand.as().get_id()); Band = isl::manage(isl_schedule_node_delete(MarkOrBand.release())); } else { Attr = nullptr; @@ -453,7 +459,7 @@ assert(moveToBandMark(Band).is_equal(Band) && "Don't add a two marks for a band"); - return Band.insert_mark(Mark).get_child(0); + return Band.insert_mark(Mark).child(0); } /// Return the (one-dimensional) set of numbers that are divisible by @p Factor @@ -499,7 +505,8 @@ } // namespace bool polly::isBandMark(const isl::schedule_node &Node) { - return isMark(Node) && isLoopAttr(Node.mark_get_id()); + return isMark(Node) && + isLoopAttr(Node.as().get_id()); } BandAttr *polly::getBandAttr(isl::schedule_node MarkOrBand) { @@ -507,7 +514,7 @@ if (!isMark(MarkOrBand)) return nullptr; - return getLoopAttr(MarkOrBand.mark_get_id()); + return getLoopAttr(MarkOrBand.as().get_id()); } isl::schedule polly::hoistExtensionNodes(isl::schedule Sched) { @@ -545,11 +552,12 @@ isl_schedule_node_band_get_partial_schedule(BandToUnroll.get())); assert(PartialSched.dim(isl::dim::out) == 1 && "Can only unroll a single dimension"); - isl::union_pw_aff PartialSchedUAff = PartialSched.get_union_pw_aff(0); + isl::union_pw_aff PartialSchedUAff = PartialSched.at(0); isl::union_set Domain = BandToUnroll.get_domain(); PartialSchedUAff = PartialSchedUAff.intersect_domain(Domain); - isl::union_map PartialSchedUMap = isl::union_map(PartialSchedUAff); + isl::union_map PartialSchedUMap = + isl::union_map::from(isl::union_pw_multi_aff(PartialSchedUAff)); // Enumerator only the scatter elements. isl::union_set ScatterList = PartialSchedUMap.range(); @@ -557,10 +565,7 @@ // Enumerate all loop iterations. // TODO: Diagnose if not enumerable or depends on a parameter. SmallVector Elts; - ScatterList.foreach_point([&Elts](isl::point P) -> isl::stat { - Elts.push_back(P); - return isl::stat::ok(); - }); + ScatterList.foreach_point([&Elts](isl::point P) { Elts.push_back(P); }); // Don't assume that foreach_point returns in execution order. llvm::sort(Elts, [](isl::point P1, isl::point P2) -> bool { @@ -570,7 +575,7 @@ }); // Convert the points to a sequence of filters. - isl::union_set_list List = isl::union_set_list::alloc(Ctx, Elts.size()); + isl::union_set_list List = isl::union_set_list(Ctx, Elts.size()); for (isl::point P : Elts) { // Determine the domains that map this scatter element. isl::union_set DomainFilter = PartialSchedUMap.intersect_range(P).domain(); @@ -599,7 +604,7 @@ isl_schedule_node_band_get_partial_schedule(BandToUnroll.get())); // { Stmt[] -> [x] } - isl::union_pw_aff PartialSchedUAff = PartialSched.get_union_pw_aff(0); + isl::union_pw_aff PartialSchedUAff = PartialSched.at(0); // Here we assume the schedule stride is one and starts with 0, which is not // necessarily the case. @@ -607,19 +612,19 @@ isl::union_pw_aff::empty(PartialSchedUAff.get_space()); isl::val ValFactor{Ctx, Factor}; PartialSchedUAff.foreach_pw_aff([&StridedPartialSchedUAff, - &ValFactor](isl::pw_aff PwAff) -> isl::stat { + &ValFactor](isl::pw_aff PwAff) { isl::space Space = PwAff.get_space(); isl::set Universe = isl::set::universe(Space.domain()); isl::pw_aff AffFactor{Universe, ValFactor}; isl::pw_aff DivSchedAff = PwAff.div(AffFactor).floor().mul(AffFactor); StridedPartialSchedUAff = StridedPartialSchedUAff.union_add(DivSchedAff); - return isl::stat::ok(); }); - isl::union_set_list List = isl::union_set_list::alloc(Ctx, Factor); + isl::union_set_list List = isl::union_set_list(Ctx, Factor); for (auto i : seq(0, Factor)) { // { Stmt[] -> [x] } - isl::union_map UMap{PartialSchedUAff}; + isl::union_map UMap = + isl::union_map::from(isl::union_pw_multi_aff(PartialSchedUAff)); // { [x] } isl::basic_set Divisible = isDivisibleBySet(Ctx, Factor, i); @@ -717,5 +722,6 @@ int DefaultTileSize) { Node = tileNode(Node, "Register tiling", TileSizes, DefaultTileSize); auto Ctx = Node.ctx(); - return Node.band_set_ast_build_options(isl::union_set(Ctx, "{unroll[x]}")); + return Node.as().set_ast_build_options( + isl::union_set(Ctx, "{unroll[x]}")); } diff --git a/polly/lib/Transform/Simplify.cpp b/polly/lib/Transform/Simplify.cpp --- a/polly/lib/Transform/Simplify.cpp +++ b/polly/lib/Transform/Simplify.cpp @@ -404,7 +404,7 @@ // The filter only guaranteed that some of OtherMA's accessed // elements are allowed. Verify that it only accesses allowed // elements. Otherwise, continue with the next candidate. - if (!OtherAccRel.is_subset(AllowedAccesses).is_true()) + if (!OtherAccRel.is_subset(AllowedAccesses)) continue; // The combined access relation. @@ -590,7 +590,7 @@ continue; isl::map AccRel = MA->getAccessRelation(); - if (!AccRel.is_empty().is_true()) + if (!AccRel.is_empty()) continue; LLVM_DEBUG( diff --git a/polly/lib/Transform/ZoneAlgo.cpp b/polly/lib/Transform/ZoneAlgo.cpp --- a/polly/lib/Transform/ZoneAlgo.cpp +++ b/polly/lib/Transform/ZoneAlgo.cpp @@ -245,8 +245,8 @@ /// @param { [] -> ValInst[] } static bool isMapToUnknown(const isl::map &Map) { isl::space Space = Map.get_space().range(); - return Space.has_tuple_id(isl::dim::set).is_false() && - Space.is_wrapping().is_false() && Space.dim(isl::dim::set) == 0; + return !Space.has_tuple_id(isl::dim::set) && !Space.is_wrapping() && + Space.dim(isl::dim::set) == 0; } isl::union_map polly::filterKnownValInst(const isl::union_map &UMap) { @@ -425,7 +425,7 @@ : Stmt->getSurroundingLoop(); if (AccVal && AccVal->getType() == MA->getLatestScopArrayInfo()->getElementType() && - AccRel.is_single_valued().is_true()) + AccRel.is_single_valued()) return makeNormalizedValInst(AccVal, Stmt, L); // memset(_, '0', ) is equivalent to writing the null value to all touched @@ -579,8 +579,8 @@ // { DomainPHIRead[] -> DomainPHIWrite[] } isl::union_map Result = isl::union_map(LastPerPHIWrites).apply_range(PHIWriteScatter.reverse()); - assert(!Result.is_single_valued().is_false()); - assert(!Result.is_injective().is_false()); + assert(Result.is_single_valued()); + assert(Result.is_injective()); PerPHIMaps.insert({PHI, Result}); return Result; @@ -921,25 +921,25 @@ return true; } -isl::boolean ZoneAlgorithm::isNormalized(isl::map Map) { +bool ZoneAlgorithm::isNormalized(isl::map Map) { isl::space Space = Map.get_space(); isl::space RangeSpace = Space.range(); - isl::boolean IsWrapping = RangeSpace.is_wrapping(); - if (!IsWrapping.is_true()) + bool IsWrapping = RangeSpace.is_wrapping(); + if (!IsWrapping) return !IsWrapping; isl::space Unwrapped = RangeSpace.unwrap(); isl::id OutTupleId = Unwrapped.get_tuple_id(isl::dim::out); if (OutTupleId.is_null()) - return isl::boolean(); + return false; auto *PHI = dyn_cast(static_cast(OutTupleId.get_user())); if (!PHI) return true; isl::id InTupleId = Unwrapped.get_tuple_id(isl::dim::in); if (OutTupleId.is_null()) - return isl::boolean(); + return false; auto *IncomingStmt = static_cast(InTupleId.get_user()); MemoryAccess *PHIRead = IncomingStmt->lookupPHIReadOf(PHI); if (!isNormalizable(PHIRead)) @@ -948,11 +948,11 @@ return false; } -isl::boolean ZoneAlgorithm::isNormalized(isl::union_map UMap) { - isl::boolean Result = true; +bool ZoneAlgorithm::isNormalized(isl::union_map UMap) { + bool Result = true; for (isl::map Map : UMap.get_map_list()) { Result = isNormalized(Map); - if (Result.is_true()) + if (Result) continue; break; } @@ -960,6 +960,7 @@ } void ZoneAlgorithm::computeCommon() { + AllReads = makeEmptyUnionMap(); AllMayWrites = makeEmptyUnionMap(); AllMustWrites = makeEmptyUnionMap(); @@ -1063,7 +1064,7 @@ // { PHIValInst[] -> IncomingValInst[] } isl::union_map PHIMap = PerPHI.apply_domain(PHIValInst).apply_range(IncomingValInsts); - assert(!PHIMap.is_single_valued().is_false()); + assert(PHIMap.is_single_valued()); // Resolve transitiveness: The incoming value of the newly discovered PHI // may reference a previously normalized PHI. At the same time, already diff --git a/polly/unittests/Isl/IslTest.cpp b/polly/unittests/Isl/IslTest.cpp --- a/polly/unittests/Isl/IslTest.cpp +++ b/polly/unittests/Isl/IslTest.cpp @@ -402,98 +402,77 @@ { auto NumBMaps = 0; - isl::stat Stat = - TestMap.foreach_basic_map([&](isl::basic_map BMap) -> isl::stat { - EXPECT_EQ(BMap, TestBMap); - NumBMaps++; - return isl::stat::ok(); - }); - - EXPECT_TRUE(Stat.is_ok()); + TestMap.foreach_basic_map([&](isl::basic_map BMap) { + EXPECT_EQ(BMap, TestBMap); + NumBMaps++; + }); + EXPECT_EQ(1, NumBMaps); } { auto NumBSets = 0; - isl::stat Stat = - TestSet.foreach_basic_set([&](isl::basic_set BSet) -> isl::stat { - EXPECT_EQ(BSet, TestBSet); - NumBSets++; - return isl::stat::ok(); - }); - EXPECT_TRUE(Stat.is_ok()); + TestSet.foreach_basic_set([&](isl::basic_set BSet) { + EXPECT_EQ(BSet, TestBSet); + NumBSets++; + }); EXPECT_EQ(1, NumBSets); } { auto NumMaps = 0; - isl::stat Stat = TestUMap.foreach_map([&](isl::map Map) -> isl::stat { + TestUMap.foreach_map([&](isl::map Map) { EXPECT_EQ(Map, TestMap); NumMaps++; - return isl::stat::ok(); }); - EXPECT_TRUE(Stat.is_ok()); EXPECT_EQ(1, NumMaps); } { auto NumSets = 0; - isl::stat Stat = TestUSet.foreach_set([&](isl::set Set) -> isl::stat { + TestUSet.foreach_set([&](isl::set Set) { EXPECT_EQ(Set, TestSet); NumSets++; - return isl::stat::ok(); }); - EXPECT_TRUE(Stat.is_ok()); EXPECT_EQ(1, NumSets); } { auto UPwAff = isl::union_pw_aff(TestUSet, isl::val::zero(Ctx.get())); auto NumPwAffs = 0; - isl::stat Stat = UPwAff.foreach_pw_aff([&](isl::pw_aff PwAff) -> isl::stat { + UPwAff.foreach_pw_aff([&](isl::pw_aff PwAff) { EXPECT_TRUE(PwAff.is_cst()); NumPwAffs++; - return isl::stat::ok(); }); - EXPECT_TRUE(Stat.is_ok()); EXPECT_EQ(1, NumPwAffs); } { auto NumBMaps = 0; - EXPECT_TRUE(TestMap - .foreach_basic_map([&](isl::basic_map BMap) -> isl::stat { - EXPECT_EQ(BMap, TestBMap); - NumBMaps++; - return isl::stat::error(); - }) - .is_error()); + TestMap.foreach_basic_map([&](isl::basic_map BMap) { + EXPECT_EQ(BMap, TestBMap); + NumBMaps++; + }); EXPECT_EQ(1, NumBMaps); } { auto NumMaps = 0; - EXPECT_TRUE(TestUMap - .foreach_map([&](isl::map Map) -> isl::stat { - EXPECT_EQ(Map, TestMap); - NumMaps++; - return isl::stat::error(); - }) - .is_error()); + TestUMap.foreach_map([&](isl::map Map) { + EXPECT_EQ(Map, TestMap); + NumMaps++; + }); EXPECT_EQ(1, NumMaps); } { auto TestPwAff = isl::pw_aff(TestSet, isl::val::zero(Ctx.get())); auto NumPieces = 0; - isl::stat Stat = TestPwAff.foreach_piece( - [&](isl::set Domain, isl::aff Aff) -> isl::stat { - EXPECT_EQ(Domain, TestSet); - EXPECT_TRUE(Aff.is_cst()); - NumPieces++; - return isl::stat::error(); - }); - EXPECT_TRUE(Stat.is_error()); + TestPwAff.foreach_piece([&](isl::set Domain, isl::aff Aff) { + EXPECT_EQ(Domain, TestSet); + EXPECT_TRUE(Aff.is_cst()); + NumPieces++; + }); EXPECT_EQ(1, NumPieces); } }