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/ScheduleTreeTransform.h b/polly/include/polly/ScheduleTreeTransform.h --- a/polly/include/polly/ScheduleTreeTransform.h +++ b/polly/include/polly/ScheduleTreeTransform.h @@ -13,6 +13,7 @@ #ifndef POLLY_SCHEDULETREETRANSFORM_H #define POLLY_SCHEDULETREETRANSFORM_H +#include "polly/Support/ISLTools.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/Support/ErrorHandling.h" #include "isl/isl-noexceptions.h" @@ -134,8 +135,9 @@ /// By default, recursively visit the child nodes. RetTy visitNode(const isl::schedule_node &Node, Args... args) { - isl_size NumChildren = Node.n_children(); - for (isl_size i = 0; i < NumChildren; i += 1) + isl::size NumChildren = Node.n_children(); + IslAssertNoError(NumChildren); + for (unsigned i = 0; i < static_cast(NumChildren); i += 1) getDerived().visit(Node.child(i), std::forward(args)...); return RetTy(); } diff --git a/polly/include/polly/ScopInfo.h b/polly/include/polly/ScopInfo.h --- a/polly/include/polly/ScopInfo.h +++ b/polly/include/polly/ScopInfo.h @@ -81,7 +81,7 @@ // The maximal number of basic sets we allow during domain construction to // be created. More complex scops will result in very high compile time and // are also unlikely to result in good code. -extern int const MaxDisjunctsInDomain; +extern unsigned const MaxDisjunctsInDomain; /// The different memory kinds used in Polly. /// 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_*_dump() functions. +//@{ +#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/Support/ISLTools.h b/polly/include/polly/Support/ISLTools.h --- a/polly/include/polly/Support/ISLTools.h +++ b/polly/include/polly/Support/ISLTools.h @@ -14,8 +14,26 @@ #ifndef POLLY_ISLTOOLS_H #define POLLY_ISLTOOLS_H +#include "llvm/ADT/Sequence.h" #include "llvm/ADT/iterator.h" #include "isl/isl-noexceptions.h" +#include + +namespace polly { + +/// In debug builds assert that the @p Size is valid, in non-debug builds +/// disable the mandatory state checking but do not enforce the error checking. +inline void IslAssertNoError(const isl::size &Size) { +#ifdef NDEBUG + // Don't force error checking in non-debug builds. + Size.is_error(); +#else + // Assert on error in debug builds. + assert(!Size.is_error()); +#endif +} + +} // namespace polly namespace isl { inline namespace noexceptions { @@ -32,7 +50,7 @@ using ElementT = list_element_type; explicit isl_iterator(const ListT &List) - : List(&List), Position(std::max(List.size(), 0)) {} + : List(&List), Position(std::max(List.size().release(), 0)) {} isl_iterator(const ListT &List, int Position) : List(&List), Position(Position) {} @@ -65,11 +83,22 @@ return isl_iterator(t); } +inline bool operator==(const isl::size &A, const isl::size &B) { + polly::IslAssertNoError(A); + polly::IslAssertNoError(B); + return static_cast(A) == static_cast(B); +} + +inline bool operator!=(const isl::size &A, const isl::size &B) { + polly::IslAssertNoError(A); + polly::IslAssertNoError(B); + return static_cast(A) != static_cast(B); +} + } // namespace noexceptions } // namespace isl namespace polly { - /// Return the range elements that are lexicographically smaller. /// /// @param Map { Space[] -> Scatter[] } @@ -160,7 +189,7 @@ /// The implementation currently returns the maximum number of dimensions it /// encounters, if different, and 0 if none is encountered. However, most other /// code will most likely fail if one of these happen. -isl_size getNumScatterDims(const isl::union_map &Schedule); +unsigned getNumScatterDims(const isl::union_map &Schedule); /// Return the scatter space of a @p Schedule. /// @@ -604,6 +633,14 @@ void dumpExpanded(__isl_keep isl_union_set *USet); void dumpExpanded(__isl_keep isl_union_map *UMap); /// @} + +/// Check that @p End is valid and return an iterator from @p Begin to @p End +/// +/// Use case example: +/// for (unsigned i : rangeIslSize(0, Map.domain_tuple_dim())) +/// // do stuff +llvm::iota_range rangeIslSize(unsigned Begin, isl::size End); + } // namespace polly #endif /* POLLY_ISLTOOLS_H */ diff --git a/polly/lib/Analysis/DependenceInfo.cpp b/polly/lib/Analysis/DependenceInfo.cpp --- a/polly/lib/Analysis/DependenceInfo.cpp +++ b/polly/lib/Analysis/DependenceInfo.cpp @@ -190,7 +190,9 @@ /// Fix all dimension of @p Zero to 0 and add it to @p user static void fixSetToZero(isl::set Zero, isl::union_set *User) { - for (auto i : seq(0, Zero.tuple_dim())) + isl::size Size = Zero.tuple_dim(); + IslAssertNoError(Size); + for (auto i : seq(0, static_cast(Size))) Zero = Zero.fix_si(isl::dim::set, i, 0); *User = User->unite(Zero); } @@ -667,7 +669,9 @@ Dependences = Dependences.apply_range(Schedule); isl::set Zero = isl::set::universe(ScheduleSpace); - for (auto i : seq(0, Zero.tuple_dim())) + isl::size ZeroDim = Zero.tuple_dim(); + IslAssertNoError(ZeroDim); + for (auto i : seq(0, static_cast(ZeroDim))) Zero = Zero.fix_si(isl::dim::set, i, 0); isl::union_set UDeltas = Dependences.deltas(); 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 @@ -107,7 +107,7 @@ cl::desc("The maximal number of arrays to compare in each alias group."), cl::Hidden, cl::ZeroOrMore, cl::init(20), cl::cat(PollyCategory)); -static cl::opt RunTimeChecksMaxAccessDisjuncts( +static cl::opt RunTimeChecksMaxAccessDisjuncts( "polly-rtc-max-array-disjuncts", cl::desc("The maximal number of disjunts allowed in memory accesses to " "to build RTCs."), @@ -202,8 +202,8 @@ static isl::map createNextIterationMap(isl::space SetSpace, unsigned Dim) { isl::space MapSpace = SetSpace.map_from_set(); isl::map NextIterationMap = isl::map::universe(MapSpace); - for (auto u : seq(0, NextIterationMap.domain_tuple_dim())) - if (u != (isl_size)Dim) + for (auto u : rangeIslSize(0, NextIterationMap.domain_tuple_dim())) + if (u != Dim) NextIterationMap = NextIterationMap.equate(isl::dim::in, u, isl::dim::out, u); isl::constraint C = @@ -230,10 +230,12 @@ /// both with regards to the dimension @p Dim. static std::pair partitionSetParts(isl::set S, unsigned Dim) { - for (unsigned u = 0, e = S.tuple_dim(); u < e; u++) + for (unsigned u : rangeIslSize(0, S.tuple_dim())) S = S.lower_bound_si(isl::dim::set, u, 0); - unsigned NumDimsS = S.tuple_dim(); + isl::size SDim = S.tuple_dim(); + IslAssertNoError(SDim); + unsigned NumDimsS = static_cast(SDim); isl::set OnlyDimS = S; // Remove dimensions that are greater than Dim as they are not interesting. @@ -328,7 +330,7 @@ } else { assert(OldDepth > NewDepth); int Diff = OldDepth - NewDepth; - int NumDim = Dom.tuple_dim(); + int NumDim = Dom.tuple_dim().release(); assert(NumDim >= Diff); Dom = Dom.project_out(isl::dim::set, NumDim - Diff, Diff); } @@ -541,13 +543,13 @@ isl_set *AlternativeCondSet = nullptr; bool TooComplex = - isl_set_n_basic_set(ConsequenceCondSet) >= MaxDisjunctsInDomain; + isl_set_n_basic_set(ConsequenceCondSet) >= (isl_size)MaxDisjunctsInDomain; if (!TooComplex) { AlternativeCondSet = isl_set_subtract(isl_set_copy(Domain), isl_set_copy(ConsequenceCondSet)); - TooComplex = - isl_set_n_basic_set(AlternativeCondSet) >= MaxDisjunctsInDomain; + TooComplex = isl_set_n_basic_set(AlternativeCondSet) >= + (isl_size)MaxDisjunctsInDomain; } if (TooComplex) { @@ -838,7 +840,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) @@ -909,7 +911,9 @@ continue; isl::set Domain = scop->getDomainConditions(BB); - scop->updateMaxLoopDepth(Domain.tuple_dim()); + isl::size DomainDim = Domain.tuple_dim(); + IslAssertNoError(DomainDim); + scop->updateMaxLoopDepth(static_cast(DomainDim)); auto *BBLoop = getRegionNodeLoop(RN, LI); // Propagate the domain from BB directly to blocks that have a superset @@ -981,9 +985,11 @@ SuccDomain = SuccDomain.detect_equalities(); + isl::size SuccDomainSize = SuccDomain.n_basic_set(); + IslAssertNoError(SuccDomainSize); // Check if the maximal number of domain disjunctions was reached. // In case this happens we will clean up and bail. - if (SuccDomain.n_basic_set() < MaxDisjunctsInDomain) + if (static_cast(SuccDomainSize) < MaxDisjunctsInDomain) continue; scop->invalidate(COMPLEXITY, DebugLoc()); @@ -1061,9 +1067,11 @@ InvalidDomainMap[SuccBB] = SuccInvalidDomain; + isl::size SuccInvalidDomainSize = SuccInvalidDomain.n_basic_set(); + IslAssertNoError(SuccInvalidDomainSize); // Check if the maximal number of domain disjunctions was reached. // In case this happens we will bail. - if (SuccInvalidDomain.n_basic_set() < MaxDisjunctsInDomain) + if (static_cast(SuccInvalidDomainSize) < MaxDisjunctsInDomain) continue; InvalidDomainMap.erase(BB); @@ -1162,7 +1170,8 @@ auto Result = isl::union_pw_multi_aff::empty(USet.get_space()); for (isl::set S : USet.get_set_list()) { - int Dim = S.tuple_dim(); + int Dim = S.tuple_dim().release(); + assert(Dim >= N); auto PMA = isl::pw_multi_aff::project_out_map(S.get_space(), isl::dim::set, N, Dim - N); if (N > 1) @@ -1307,10 +1316,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); } @@ -2405,8 +2412,10 @@ isl::map Transform = isl::map::universe(Array->getSpace().map_from_set()); std::vector Int; - int Dims = Elements.tuple_dim(); - for (int i = 0; i < Dims; i++) { + isl::size Size = Elements.tuple_dim(); + IslAssertNoError(Size); + unsigned Dims = static_cast(Size); + for (unsigned i = 0; i < Dims; i++) { isl::set DimOnly = isl::set(Elements).project_out(isl::dim::set, 0, i); DimOnly = DimOnly.project_out(isl::dim::set, 1, Dims - i - 1); DimOnly = DimOnly.lower_bound_si(isl::dim::set, 0, 0); @@ -2419,7 +2428,7 @@ continue; } - if (DimHull.dim(isl::dim::div) == 1) { + if (DimHull.dim(isl::dim::div).release() == 1) { isl::aff Diff = DimHull.get_div(0); isl::val Val = Diff.get_denominator_val(); @@ -2839,8 +2848,13 @@ int NumTotalDims = 0; for (isl::basic_set BSet : AccessRange.get_basic_set_list()) { - NumTotalDims += BSet.dim(isl::dim::div); - NumTotalDims += BSet.dim(isl::dim::set); + isl::size Dim = BSet.dim(isl::dim::div); + IslAssertNoError(Dim); + NumTotalDims += static_cast(Dim); + + Dim = BSet.dim(isl::dim::set); + IslAssertNoError(Dim); + NumTotalDims += static_cast(Dim); } if (NumTotalDims > MaxDimensionsInAccessRange) @@ -2878,7 +2892,7 @@ return; } - for (auto i : seq(0, Space.dim(isl::dim::param))) { + for (auto i : rangeIslSize(0, Space.dim(isl::dim::param))) { std::string NameContext = scop->getContext().get_dim_name(isl::dim::param, i); std::string NameUserContext = UserContext.get_dim_name(isl::dim::param, i); @@ -2962,7 +2976,10 @@ return WrittenCtx; WrittenCtx = WrittenCtx.remove_divs(); - bool TooComplex = WrittenCtx.n_basic_set() >= MaxDisjunctsInDomain; + isl::size Disjuncts = WrittenCtx.n_basic_set(); + if (Disjuncts.is_error()) + return {}; + bool TooComplex = static_cast(Disjuncts) >= MaxDisjunctsInDomain; if (TooComplex || !isRequiredInvariantLoad(LI)) return {}; @@ -3028,7 +3045,9 @@ isl::set DomainCtx = Stmt.getDomain().params(); DomainCtx = DomainCtx.subtract(StmtInvalidCtx); - if (DomainCtx.n_basic_set() >= MaxDisjunctsInDomain) { + isl::size DomainCtxSize = DomainCtx.n_basic_set(); + if (DomainCtxSize.is_error() || + static_cast(DomainCtxSize) >= MaxDisjunctsInDomain) { auto *AccInst = InvMAs.front().MA->getAccessInstruction(); scop->invalidate(COMPLEXITY, AccInst->getDebugLoc(), AccInst->getParent()); return; @@ -3304,7 +3323,9 @@ Set = Set.remove_divs(); polly::simplify(Set); - if (Set.n_basic_set() > RunTimeChecksMaxAccessDisjuncts) + isl::size SetSize = Set.n_basic_set(); + if (SetSize.is_error() || + static_cast(SetSize) > RunTimeChecksMaxAccessDisjuncts) Set = Set.simple_hull(); // Restrict the number of parameters involved in the access as the lexmin/ @@ -3338,15 +3359,20 @@ MinPMA = MinPMA.coalesce(); MaxPMA = MaxPMA.coalesce(); + if (MaxPMA.is_null()) + return false; + // Adjust the last dimension of the maximal access by one as we want to // enclose the accessed memory region by MinPMA and MaxPMA. The pointer // we test during code generation might now point after the end of the // allocated array but we will never dereference it anyway. - assert((MaxPMA.is_null() || MaxPMA.dim(isl::dim::out)) && + isl::size Dims = MaxPMA.dim(isl::dim::out); + assert((!Dims.is_error() && static_cast(Dims) > 0) && "Assumed at least one output dimension"); + IslAssertNoError(Dims); - Pos = MaxPMA.dim(isl::dim::out) - 1; - LastDimAff = MaxPMA.get_pw_aff(Pos); + Pos = static_cast(Dims) - 1; + LastDimAff = MaxPMA.at(Pos); OneAff = isl::aff(isl::local_space(LastDimAff.get_domain_space())); OneAff = OneAff.add_constant_si(1); LastDimAff = LastDimAff.add(OneAff); @@ -3386,7 +3412,9 @@ static isl::set getAccessDomain(MemoryAccess *MA) { isl::set Domain = MA->getStatement()->getDomain(); - Domain = Domain.project_out(isl::dim::set, 0, Domain.tuple_dim()); + isl::size Dim = Domain.tuple_dim(); + IslAssertNoError(Dim); + Domain = Domain.project_out(isl::dim::set, 0, static_cast(Dim)); return Domain.reset_tuple_id(); } 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 @@ -112,7 +112,7 @@ STATISTIC(NumSingletonWritesInLoops, "Number of singleton writes nested in affine loops after ScopInfo"); -int const polly::MaxDisjunctsInDomain = 20; +unsigned const polly::MaxDisjunctsInDomain = 20; // The number of disjunct in the context after which we stop to add more // disjuncts. This parameter is there to avoid exponential growth in the @@ -185,7 +185,9 @@ if (Range.isFullSet()) return S; - if (S.n_basic_set() > MaxDisjunctsInContext) + isl::size Size = S.n_basic_set(); + IslAssertNoError(Size); + if (static_cast(Size) > MaxDisjunctsInContext) return S; // In case of signed wrapping, we can refine the set of valid values by @@ -473,8 +475,13 @@ isl::space AccessSpace = AccessRelation.get_space().range(); isl::ctx Ctx = ArraySpace.ctx(); - auto DimsArray = ArraySpace.dim(isl::dim::set); - auto DimsAccess = AccessSpace.dim(isl::dim::set); + isl::size Size = ArraySpace.dim(isl::dim::set); + IslAssertNoError(Size); + auto DimsArray = static_cast(Size); + Size = AccessSpace.dim(isl::dim::set); + IslAssertNoError(Size); + auto DimsAccess = static_cast(Size); + assert(DimsArray >= DimsAccess); auto DimsMissing = DimsArray - DimsAccess; auto *BB = getStatement()->getEntryBlock(); @@ -671,14 +678,14 @@ auto *SAI = getScopArrayInfo(); isl::space Space = getOriginalAccessRelationSpace().range(); isl::set Outside = isl::set::empty(Space); - for (int i = 1, Size = Space.dim(isl::dim::set); i < Size; ++i) { + for (unsigned i : rangeIslSize(1, Space.dim(isl::dim::set))) { isl::local_space LS(Space); isl::pw_aff Var = isl::pw_aff::var_on_domain(LS, isl::dim::set, i); isl::pw_aff Zero = isl::pw_aff(LS); isl::set DimOutside = Var.lt_set(Zero); isl::pw_aff SizeE = SAI->getDimensionSizePw(i); - SizeE = SizeE.add_dims(isl::dim::in, Space.dim(isl::dim::set)); + SizeE = SizeE.add_dims(isl::dim::in, Space.dim(isl::dim::set).release()); SizeE = SizeE.set_tuple_id(isl::dim::in, Space.get_tuple_id(isl::dim::set)); DimOutside = DimOutside.unite(SizeE.le_set(Var)); @@ -830,8 +837,8 @@ // Access dimension folding might in certain cases increase the number of // disjuncts in the memory access, which can possibly complicate the generated // run-time checks and can lead to costly compilation. - if (!PollyPreciseFoldAccesses && - NewAccessRelation.n_basic_map() > AccessRelation.n_basic_map()) { + if (!PollyPreciseFoldAccesses && NewAccessRelation.n_basic_map().release() > + AccessRelation.n_basic_map().release()) { } else { AccessRelation = NewAccessRelation; } @@ -1006,7 +1013,10 @@ static isl::map getEqualAndLarger(isl::space SetDomain) { isl::space Space = SetDomain.map_from_set(); isl::map Map = isl::map::universe(Space); - unsigned lastDimension = Map.domain_tuple_dim() - 1; + isl::size DomainDim = Map.domain_tuple_dim(); + IslAssertNoError(DomainDim); + assert(static_cast(DomainDim) > 0); + unsigned lastDimension = static_cast(DomainDim) - 1; // Set all but the last dimension to be equal for the input and output // @@ -1046,9 +1056,13 @@ Stride = getStride(Schedule); StrideX = isl::set::universe(Stride.get_space()); - for (auto i : seq(0, StrideX.tuple_dim() - 1)) + isl::size Dim = StrideX.tuple_dim(); + IslAssertNoError(Dim); + unsigned UDim = static_cast(Dim); + assert(UDim > 0); + for (auto i : seq(0, UDim - 1)) StrideX = StrideX.fix_si(isl::dim::set, i, 0); - StrideX = StrideX.fix_si(isl::dim::set, StrideX.tuple_dim() - 1, StrideWidth); + StrideX = StrideX.fix_si(isl::dim::set, UDim - 1, StrideWidth); IsStrideX = Stride.is_subset(StrideX); return IsStrideX; @@ -1108,7 +1122,7 @@ // Check whether access dimensions correspond to number of dimensions of the // accesses array. isl_size Dims = SAI->getNumberOfDimensions(); - assert(NewAccessSpace.dim(isl::dim::set) == Dims && + assert(NewAccessSpace.dim(isl::dim::set).release() == Dims && "Access dims must match array dims"); #endif @@ -2140,10 +2154,10 @@ // Limit the complexity of the context. If complexity is exceeded, simplify // the set and check again. - if (DefinedBehaviorContext.n_basic_set() > + if (DefinedBehaviorContext.n_basic_set().release() > MaxDisjunktsInDefinedBehaviourContext) { simplify(DefinedBehaviorContext); - if (DefinedBehaviorContext.n_basic_set() > + if (DefinedBehaviorContext.n_basic_set().release() > MaxDisjunktsInDefinedBehaviourContext) DefinedBehaviorContext = {}; } 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 @@ -17,6 +17,7 @@ #include "polly/CodeGen/RuntimeDebugBuilder.h" #include "polly/Options.h" #include "polly/ScopInfo.h" +#include "polly/Support/ISLTools.h" #include "polly/Support/ScopHelper.h" #include "polly/Support/VirtualInstruction.h" #include "llvm/Analysis/LoopInfo.h" @@ -688,13 +689,11 @@ Values.push_back(RuntimeDebugBuilder::getPrintableString(Builder, "(")); // Add the coordinate of the statement instance. - int DomDims = ScheduleMultiPwAff.dim(isl::dim::out); - for (int i = 0; i < DomDims; i += 1) { + for (unsigned i : rangeIslSize(0, ScheduleMultiPwAff.dim(isl::dim::out))) { 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 @@ -22,6 +22,7 @@ #include "polly/Options.h" #include "polly/ScopDetection.h" #include "polly/ScopInfo.h" +#include "polly/Support/ISLTools.h" #include "polly/Support/SCEVValidator.h" #include "llvm/ADT/PostOrderIterator.h" #include "llvm/Analysis/TargetTransformInfo.h" @@ -1124,11 +1125,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); } @@ -1151,8 +1152,9 @@ isl::set ZeroSet = isl::set::universe(Min.get_space()); - for (long i = 0, n = Min.tuple_dim(); i < n; i++) - ZeroSet = ZeroSet.fix_si(isl::dim::set, i, 0); + for (long i = 0, n = Min.tuple_dim().release(); i < n; i++) + for (unsigned i : rangeIslSize(0, Min.tuple_dim())) + ZeroSet = ZeroSet.fix_si(isl::dim::set, i, 0); if (Min.is_subset(ZeroSet)) { return nullptr; @@ -1160,7 +1162,7 @@ isl::ast_expr Result = isl::ast_expr::from_val(isl::val(Min.ctx(), 0)); - for (long i = 0, n = Min.tuple_dim(); i < n; i++) { + for (unsigned i : rangeIslSize(0, Min.tuple_dim())) { if (i > 0) { isl::pw_aff Bound_I = isl::manage(isl_multi_pw_aff_get_pw_aff(Array->bound, i - 1)); @@ -1307,7 +1309,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 +1598,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()); @@ -2885,8 +2887,11 @@ isl::pw_aff Val = isl::aff::var_on_domain(LS, isl::dim::set, 0); isl::pw_aff OuterMin = AccessSet.dim_min(0); isl::pw_aff OuterMax = AccessSet.dim_max(0); - OuterMin = OuterMin.add_dims(isl::dim::in, Val.dim(isl::dim::in)); - OuterMax = OuterMax.add_dims(isl::dim::in, Val.dim(isl::dim::in)); + isl::size Dim = Val.dim(isl::dim::in); + IslAssertNoError(Dim); + unsigned UDim = static_cast(Dim); + OuterMin = OuterMin.add_dims(isl::dim::in, UDim); + OuterMax = OuterMax.add_dims(isl::dim::in, UDim); OuterMin = OuterMin.set_tuple_id(isl::dim::in, Array->getBasePtrId()); OuterMax = OuterMax.set_tuple_id(isl::dim::in, Array->getBasePtrId()); @@ -2910,7 +2915,9 @@ isl::pw_aff Val = isl::aff::var_on_domain( isl::local_space(Array->getSpace()), isl::dim::set, i); - PwAff = PwAff.add_dims(isl::dim::in, Val.dim(isl::dim::in)); + Dim = Val.dim(isl::dim::in); + IslAssertNoError(Dim); + PwAff = PwAff.add_dims(isl::dim::in, static_cast(Dim)); PwAff = PwAff.set_tuple_id(isl::dim::in, Val.get_tuple_id(isl::dim::in)); isl::set Set = PwAff.gt_set(Val); Extent = Set.intersect(Extent); diff --git a/polly/lib/Exchange/JSONExporter.cpp b/polly/lib/Exchange/JSONExporter.cpp --- a/polly/lib/Exchange/JSONExporter.cpp +++ b/polly/lib/Exchange/JSONExporter.cpp @@ -16,6 +16,7 @@ #include "polly/Options.h" #include "polly/ScopInfo.h" #include "polly/ScopPass.h" +#include "polly/Support/ISLTools.h" #include "polly/Support/ScopLocation.h" #include "llvm/ADT/Statistic.h" #include "llvm/IR/Module.h" @@ -230,18 +231,18 @@ return false; } - unsigned OldContextDim = OldContext.dim(isl::dim::param); - unsigned NewContextDim = NewContext.dim(isl::dim::param); + isl::size OldContextDim = OldContext.dim(isl::dim::param); + isl::size NewContextDim = NewContext.dim(isl::dim::param); // Check if the imported context has the right number of parameters. if (OldContextDim != NewContextDim) { errs() << "Imported context has the wrong number of parameters : " - << "Found " << NewContextDim << " Expected " << OldContextDim - << "\n"; + << "Found " << static_cast(NewContextDim) << " Expected " + << static_cast(OldContextDim) << "\n"; return false; } - for (unsigned i = 0; i < OldContextDim; i++) { + for (unsigned i : rangeIslSize(0, OldContextDim)) { isl::id Id = OldContext.get_dim_id(isl::dim::param, i); NewContext = NewContext.set_dim_id(isl::dim::param, i, Id); } 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 @@ -10,34 +10,17 @@ #ifndef ISL_CPP_CHECKED #define ISL_CPP_CHECKED -#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 namespace isl { -inline namespace noexceptions { #define ISLPP_STRINGIZE_(X) #X #define ISLPP_STRINGIZE(X) ISLPP_STRINGIZE_(X) @@ -52,37 +35,60 @@ abort(); \ } while (0) +/* Class used to check that isl::checked::boolean, + * isl::checked::stat and isl::checked::size values are checked for errors. + */ +struct checker { + bool checked = false; + ~checker() { + //ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state"); + } +}; + class boolean { private: - mutable bool checked = false; + mutable std::shared_ptr check = std::make_shared(); isl_bool val; friend boolean manage(isl_bool val); boolean(isl_bool val): val(val) {} public: + static boolean error() { + return boolean(isl_bool_error); + } 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) {} - 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; } + isl_bool release() { + auto tmp = val; + val = isl_bool_error; + check->checked = true; + return tmp; + } + + bool is_error() const { check->checked = true; return val == isl_bool_error; } + bool is_false() const { check->checked = true; return val == isl_bool_false; } + bool is_true() const { check->checked = true; return val == isl_bool_true; } operator bool() const { - // ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked error state"); + //ISLPP_ASSERT(check->checked, "IMPLEMENTATION ERROR: Unchecked error state"); ISLPP_ASSERT(!is_error(), "IMPLEMENTATION ERROR: Unhandled error state"); return is_true(); } + boolean negate() { + if (val == isl_bool_true) + val = isl_bool_false; + else if (val == isl_bool_false) + val = isl_bool_true; + return *this; + } + boolean operator!() const { - if (is_error()) - return *this; - return !is_true(); + return boolean(*this).negate(); } }; @@ -109,12 +115,12 @@ */ class stat { private: - mutable bool checked = false; + mutable std::shared_ptr check = std::make_shared(); isl_stat val; friend stat manage(isl_stat val); + stat(isl_stat val) : val(val) {} public: - constexpr stat(isl_stat val) : val(val) {} static stat ok() { return stat(isl_stat_ok); } @@ -122,31 +128,65 @@ return stat(isl_stat_error); } stat() : val(isl_stat_error) {} - ~stat() { - // ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state"); - } isl_stat release() { - checked = true; + check->checked = true; return val; } bool is_error() const { - checked = true; + check->checked = true; return val == isl_stat_error; } bool is_ok() const { - checked = true; + check->checked = true; return val == isl_stat_ok; } }; - inline stat manage(isl_stat val) { return stat(val); } +/* Class encapsulating an isl_size value. + */ +class size { +private: + mutable std::shared_ptr check = std::make_shared(); + isl_size val; + + friend size manage(isl_size val); + size(isl_size val) : val(val) {} +public: + size() : val(isl_size_error) {} + + isl_size release() { + auto tmp = val; + val = isl_size_error; + check->checked = true; + return tmp; + } + + bool is_error() const { + check->checked = true; + return val == isl_size_error; + } + + explicit operator unsigned() const { + ISLPP_ASSERT(check->checked, + "IMPLEMENTATION ERROR: Unchecked error state"); + ISLPP_ASSERT(!is_error(), + "IMPLEMENTATION ERROR: Unhandled error state"); + return val; + } +}; + +inline size manage(isl_size val) +{ + return size(val); +} + enum class dim { cst = isl_dim_cst, param = isl_dim_param, @@ -157,27 +197,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 +270,6 @@ class local_space; class map; class map_list; -class mat; class multi_aff; class multi_id; class multi_pw_aff; @@ -196,32 +280,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 +316,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 +335,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_size dim(isl::dim type) 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 class 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 stat foreach_piece(const std::function &fn) const; + inline stat foreach_piece(const std::function &fn) const; + inline stat 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 isl::set gt_set(const isl::pw_aff &pwaff2) const; + inline boolean 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 boolean involves_locals() const; + inline boolean involves_nan() const; + inline boolean involves_param(const isl::id &id) const; + inline boolean involves_param(const std::string &id) const; + inline boolean involves_param(const isl::id_list &list) const; inline boolean is_cst() const; - inline boolean is_nan() const; - inline isl::basic_set le_basic_set(isl::aff aff2) const; + inline boolean is_equal(const isl::pw_aff &pa2) const; + inline boolean isa_aff() const; + inline boolean isa_multi_aff() const; + inline boolean 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 class 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 boolean plain_is_empty() const; + inline boolean plain_is_equal(const isl::multi_aff &multi2) const; + inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const; + inline boolean 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 class 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 +522,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 +530,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 +541,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 stat 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; + inline class size size() const; }; // declarations for isl::ast_build @@ -377,6 +561,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 +579,28 @@ 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::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 +611,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 +626,8255 @@ 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 boolean isa_type(T subtype) const; +public: + template inline boolean 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); - -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); +// declarations for isl::ast_expr_id - isl_ast_expr_list *ptr = nullptr; +class ast_expr_id : public ast_expr { + template + friend boolean ast_expr::isa() const; + friend ast_expr_id ast_expr::as() const; + static const auto type = isl_ast_expr_id; - 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 boolean 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 boolean 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 boolean isa_type(T subtype) const; +public: + template inline boolean 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 class size n_arg() const; + inline class 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean 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); +// declarations for isl::ast_expr_op_eq -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); +class ast_expr_op_eq : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_eq ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_eq; - isl_id_list *ptr = nullptr; +protected: + inline explicit ast_expr_op_eq(__isl_take isl_ast_expr *ptr); - inline explicit id_list(__isl_take isl_id_list *ptr); +public: + 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; + +}; + +// declarations for isl::ast_expr_op_fdiv_q + +class ast_expr_op_fdiv_q : public ast_expr_op { + template + friend boolean 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; + +protected: + inline explicit ast_expr_op_fdiv_q(__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_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; - 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); +// declarations for isl::ast_expr_op_ge -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); +class ast_expr_op_ge : public ast_expr_op { + template + friend boolean 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_id_to_ast_expr *ptr = nullptr; +protected: + inline explicit ast_expr_op_ge(__isl_take isl_ast_expr *ptr); - inline explicit id_to_ast_expr(__isl_take isl_id_to_ast_expr *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 boolean 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 */ 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_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; - 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_le -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_le : public ast_expr_op { + template + friend boolean 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_local_space *ptr = nullptr; +protected: + inline explicit ast_expr_op_le(__isl_take isl_ast_expr *ptr); - inline explicit local_space(__isl_take isl_local_space *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 boolean 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 */ 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_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::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_max -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_max : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_max ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_max; - isl_map *ptr = nullptr; +protected: + inline explicit ast_expr_op_max(__isl_take isl_ast_expr *ptr); - inline explicit map(__isl_take isl_map *ptr); +public: + 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; + +}; + +// declarations for isl::ast_expr_op_member + +class ast_expr_op_member : public ast_expr_op { + template + friend boolean 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 */ 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_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; - 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_min - isl_map_list *ptr = nullptr; +class ast_expr_op_min : public ast_expr_op { + template + friend boolean 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 map_list(__isl_take isl_map_list *ptr); +protected: + inline explicit ast_expr_op_min(__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_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::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_minus -class mat { - friend inline mat manage(__isl_take isl_mat *ptr); - friend inline mat manage_copy(__isl_keep isl_mat *ptr); +class ast_expr_op_minus : public ast_expr_op { + template + friend boolean 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_mat *ptr = nullptr; - - inline explicit mat(__isl_take isl_mat *ptr); +protected: + inline explicit ast_expr_op_minus(__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_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; - 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); +}; -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); +// declarations for isl::ast_expr_op_mul - isl_multi_aff *ptr = nullptr; +class ast_expr_op_mul : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_mul ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_mul; - inline explicit multi_aff(__isl_take isl_multi_aff *ptr); +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); - -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); +// declarations for isl::ast_expr_op_or - isl_multi_id *ptr = nullptr; +class ast_expr_op_or : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_or ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_or; - inline explicit multi_id(__isl_take isl_multi_id *ptr); +protected: + inline explicit ast_expr_op_or(__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(); + 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; - 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_or_else -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_or_else : public ast_expr_op { + template + friend boolean 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; - isl_multi_pw_aff *ptr = nullptr; +protected: + inline explicit ast_expr_op_or_else(__isl_take isl_ast_expr *ptr); - inline explicit multi_pw_aff(__isl_take isl_multi_pw_aff *ptr); +public: + 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; + +}; + +// declarations for isl::ast_expr_op_pdiv_q + +class ast_expr_op_pdiv_q : public ast_expr_op { + template + friend boolean 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; + +protected: + inline explicit ast_expr_op_pdiv_q(__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_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; - 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); +// declarations for isl::ast_expr_op_pdiv_r -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); +class ast_expr_op_pdiv_r : public ast_expr_op { + template + friend boolean 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; - isl_multi_union_pw_aff *ptr = nullptr; +protected: + inline explicit ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr); - inline explicit multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr); +public: + 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; + +}; + +// declarations for isl::ast_expr_op_select + +class ast_expr_op_select : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_select ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_select; + +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 boolean 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 boolean 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 boolean isa_type(T subtype) const; +public: + template inline boolean 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean 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_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); - - isl_pw_qpolynomial *ptr = nullptr; - - inline explicit pw_qpolynomial(__isl_take isl_pw_qpolynomial *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 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::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 stat foreach(const std::function &fn) const; + inline isl::ast_node_list insert(unsigned int pos, isl::ast_node el) const; + inline class size size() 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); - -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); +// declarations for isl::ast_node_mark - isl_pw_qpolynomial_fold_list *ptr = nullptr; +class ast_node_mark : public ast_node { + template + friend boolean ast_node::isa() const; + friend ast_node_mark ast_node::as() const; + static const auto type = isl_ast_node_mark; - inline explicit pw_qpolynomial_fold_list(__isl_take isl_pw_qpolynomial_fold_list *ptr); +protected: + inline explicit ast_node_mark(__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_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::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_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); +// declarations for isl::ast_node_user -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); +class ast_node_user : public ast_node { + template + friend boolean ast_node::isa() const; + friend ast_node_user ast_node::as() const; + static const auto type = isl_ast_node_user; - isl_pw_qpolynomial_list *ptr = nullptr; - - inline explicit pw_qpolynomial_list(__isl_take isl_pw_qpolynomial_list *ptr); +protected: + inline explicit ast_node_user(__isl_take isl_ast_node *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 /* 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; - - 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; -}; - -// declarations for isl::qpolynomial -inline qpolynomial manage(__isl_take isl_qpolynomial *ptr); -inline qpolynomial manage_copy(__isl_keep isl_qpolynomial *ptr); - -class qpolynomial { - friend inline qpolynomial manage(__isl_take isl_qpolynomial *ptr); - friend inline qpolynomial manage_copy(__isl_keep isl_qpolynomial *ptr); - - isl_qpolynomial *ptr = nullptr; - inline explicit qpolynomial(__isl_take isl_qpolynomial *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 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_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); + inline isl::ast_expr expr() const; + inline isl::ast_expr get_expr() const; }; -// 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); +// 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_list { - friend inline qpolynomial_list manage(__isl_take isl_qpolynomial_list *ptr); - friend inline qpolynomial_list manage_copy(__isl_keep isl_qpolynomial_list *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_list *ptr = nullptr; +protected: + isl_basic_map *ptr = nullptr; - inline explicit qpolynomial_list(__isl_take isl_qpolynomial_list *ptr); + inline explicit basic_map(__isl_take isl_basic_map *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 /* 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_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; + 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 boolean 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 class 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::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 class 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 boolean 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 stat foreach_basic_map(const std::function &fn) const; + inline stat 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 boolean has_domain_tuple_id() const; + inline boolean has_equal_space(const isl::map &map2) const; + inline boolean has_range_tuple_id() const; + inline boolean has_tuple_id(isl::dim type) const; + inline boolean 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 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_disjoint(const isl::union_map &umap2) const; + inline boolean is_empty() const; + inline boolean is_equal(const isl::basic_map &bmap2) const; + inline boolean is_equal(const isl::map &map2) const; + inline boolean is_equal(const isl::union_map &umap2) const; + inline boolean is_injective() const; + inline boolean is_single_valued() const; + inline boolean is_strict_subset(const isl::map &map2) const; + inline boolean is_strict_subset(const isl::union_map &umap2) const; + inline boolean is_subset(const isl::basic_map &bmap2) const; + inline boolean is_subset(const isl::map &map2) const; + inline boolean is_subset(const isl::union_map &umap2) const; + inline boolean 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 class 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 class 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_constraints -inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr); -inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *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_constraints { - friend inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr); - friend inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *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_constraints *ptr = nullptr; +protected: + isl_basic_map_list *ptr = nullptr; - inline explicit schedule_constraints(__isl_take isl_schedule_constraints *ptr); + inline explicit basic_map_list(__isl_take isl_basic_map_list *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 /* 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_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::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 stat foreach(const std::function &fn) const; + inline isl::basic_map_list insert(unsigned int pos, isl::basic_map el) const; + inline class size size() 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_set +inline basic_set manage(__isl_take isl_basic_set *ptr); +inline basic_set manage_copy(__isl_keep isl_basic_set *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_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_schedule_node *ptr = nullptr; +protected: + isl_basic_set *ptr = nullptr; - inline explicit schedule_node(__isl_take isl_schedule_node *ptr); + inline explicit basic_set(__isl_take isl_basic_set *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_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::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; -}; - -// 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); - - 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 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 boolean 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_size dim(isl::dim type) const; + inline isl::basic_set detect_equalities() const; + inline class 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 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 boolean 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 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 stat foreach_basic_set(const std::function &fn) const; + inline stat foreach_point(const std::function &fn) const; + inline stat 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 boolean has_equal_space(const isl::set &set2) const; - inline boolean has_tuple_id() const; - inline boolean has_tuple_name() 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 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 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_disjoint(const isl::union_set &uset2) const; inline boolean is_empty() const; + inline boolean is_equal(const isl::basic_set &bset2) const; inline boolean is_equal(const isl::set &set2) const; + inline boolean is_equal(const isl::union_set &uset2) const; + inline boolean is_equal(const isl::point &bset2) const; inline boolean is_params() const; inline boolean is_singleton() const; inline boolean is_strict_subset(const isl::set &set2) const; + inline boolean is_strict_subset(const isl::union_set &uset2) const; + inline boolean is_subset(const isl::basic_set &bset2) const; inline boolean is_subset(const isl::set &set2) const; + inline boolean is_subset(const isl::union_set &uset2) const; + inline boolean is_subset(const isl::point &bset2) 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 boolean 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 class 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 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 class 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(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_size size() const; - inline isl::set_list swap(unsigned int pos1, unsigned int pos2) const; - inline isl::set unite() 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 stat foreach(const std::function &fn) const; + inline isl::basic_set_list insert(unsigned int pos, isl::basic_set el) const; + inline class size size() 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::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); + +protected: + isl_fixed_box *ptr = nullptr; + + inline explicit fixed_box(__isl_take isl_fixed_box *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 isl::ctx ctx() const; + + inline boolean 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::term -inline term manage(__isl_take isl_term *ptr); -inline term manage_copy(__isl_keep isl_term *ptr); +// 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); + +protected: + isl_id *ptr = nullptr; + + inline explicit id(__isl_take isl_id *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 isl::ctx ctx() 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::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); + +protected: + isl_id_list *ptr = nullptr; + + inline explicit id_list(__isl_take isl_id_list *ptr); + +public: + 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::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 stat 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 class size size() 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); + +protected: + isl_id_to_ast_expr *ptr = nullptr; + + inline explicit id_to_ast_expr(__isl_take isl_id_to_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 isl::ctx ctx() 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::local_space +inline local_space manage(__isl_take isl_local_space *ptr); +inline local_space manage_copy(__isl_keep isl_local_space *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); + +protected: + isl_local_space *ptr = nullptr; + + inline explicit local_space(__isl_take isl_local_space *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 isl::ctx ctx() const; + +}; + +// declarations for isl::map +inline map manage(__isl_take isl_map *ptr); +inline map manage_copy(__isl_keep isl_map *ptr); + +class map { + friend inline map manage(__isl_take isl_map *ptr); + friend inline map manage_copy(__isl_keep isl_map *ptr); + +protected: + isl_map *ptr = nullptr; + + inline explicit map(__isl_take isl_map *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 isl::ctx ctx() 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 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 boolean 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 class 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 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 class 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 boolean 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 stat foreach_basic_map(const std::function &fn) const; + inline stat 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 boolean has_domain_tuple_id() const; + inline boolean has_equal_space(const isl::map &map2) const; + inline boolean has_range_tuple_id() 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 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 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_disjoint(const isl::union_map &umap2) const; + inline boolean is_disjoint(const isl::basic_map &map2) const; + inline boolean is_empty() const; + inline boolean is_equal(const isl::map &map2) const; + inline boolean is_equal(const isl::union_map &umap2) const; + inline boolean is_equal(const isl::basic_map &map2) const; + inline boolean is_injective() const; + inline boolean is_single_valued() const; + inline boolean is_strict_subset(const isl::map &map2) const; + inline boolean is_strict_subset(const isl::union_map &umap2) const; + inline boolean is_strict_subset(const isl::basic_map &map2) const; + inline boolean is_subset(const isl::map &map2) const; + inline boolean is_subset(const isl::union_map &umap2) const; + inline boolean is_subset(const isl::basic_map &map2) const; + inline boolean 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 class 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 class 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::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::map_list +inline map_list manage(__isl_take isl_map_list *ptr); +inline map_list manage_copy(__isl_keep isl_map_list *ptr); + +class map_list { + friend inline map_list manage(__isl_take isl_map_list *ptr); + friend inline map_list manage_copy(__isl_keep isl_map_list *ptr); + +protected: + isl_map_list *ptr = nullptr; + + inline explicit map_list(__isl_take isl_map_list *ptr); + +public: + inline /* implicit */ map_list(); + inline /* implicit */ map_list(const map_list &obj); + inline explicit map_list(isl::ctx ctx, int n); + inline explicit map_list(isl::map el); + inline explicit map_list(isl::ctx ctx, const std::string &str); + inline map_list &operator=(map_list obj); + inline ~map_list(); + inline __isl_give isl_map_list *copy() const &; + inline __isl_give isl_map_list *copy() && = delete; + inline __isl_keep isl_map_list *get() const; + inline __isl_give isl_map_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::map_list add(isl::map el) const; + inline isl::map at(int index) const; + inline isl::map get_at(int index) const; + inline isl::map_list clear() const; + inline isl::map_list concat(isl::map_list list2) const; + inline isl::map_list drop(unsigned int first, unsigned int n) const; + inline stat foreach(const std::function &fn) const; + inline isl::map_list insert(unsigned int pos, isl::map el) const; + inline class size size() const; +}; + +// declarations for isl::multi_aff +inline multi_aff manage(__isl_take isl_multi_aff *ptr); +inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr); + +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); + +protected: + isl_multi_aff *ptr = nullptr; + + inline explicit multi_aff(__isl_take isl_multi_aff *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 isl::ctx ctx() const; + + inline isl::multi_aff add(isl::multi_aff multi2) const; + inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const; + inline isl::multi_aff add(const isl::aff &multi2) const; + inline isl::multi_aff add_constant(isl::multi_val mv) const; + inline isl::multi_aff add_constant(isl::val v) const; + inline isl::multi_aff add_constant(long v) const; + inline isl::union_pw_multi_aff 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 class size dim(isl::dim type) 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 stat 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 boolean 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 boolean involves_locals() const; + inline boolean involves_nan() const; + inline boolean involves_param(const isl::id &id) const; + inline boolean involves_param(const std::string &id) const; + inline boolean involves_param(const isl::id_list &list) const; + inline boolean isa_multi_aff() const; + inline boolean 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 class size n_piece() const; + inline isl::multi_aff neg() const; + inline boolean plain_is_empty() const; + inline boolean plain_is_equal(const isl::multi_aff &multi2) const; + inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const; + inline boolean 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 class size size() const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::multi_aff sub(isl::multi_aff multi2) const; + inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const; + inline isl::multi_aff sub(const isl::aff &multi2) const; + inline isl::pw_multi_aff subtract_domain(const isl::set &set) const; + inline isl::union_pw_multi_aff subtract_domain(const isl::space &space) const; + inline isl::union_pw_multi_aff subtract_domain(const isl::union_set &uset) const; + inline isl::pw_multi_aff_list to_list() const; + inline isl::multi_pw_aff to_multi_pw_aff() const; + inline isl::multi_union_pw_aff to_multi_union_pw_aff() const; + inline isl::pw_multi_aff to_pw_multi_aff() const; + inline isl::union_pw_multi_aff to_union_pw_multi_aff() const; + inline isl::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::multi_id +inline multi_id manage(__isl_take isl_multi_id *ptr); +inline multi_id manage_copy(__isl_keep isl_multi_id *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); + +protected: + isl_multi_id *ptr = nullptr; + + inline explicit multi_id(__isl_take isl_multi_id *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 isl::ctx ctx() 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 boolean 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 class size size() const; + inline isl::space space() const; + inline isl::space get_space() 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); + +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); + +protected: + isl_multi_pw_aff *ptr = nullptr; + + 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 class 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 boolean 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 boolean involves_nan() const; + inline boolean involves_param(const isl::id &id) const; + inline boolean involves_param(const std::string &id) const; + inline boolean involves_param(const isl::id_list &list) const; + inline boolean 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 boolean plain_is_equal(const isl::multi_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::aff &multi2) const; + inline boolean plain_is_equal(const isl::multi_aff &multi2) const; + inline boolean plain_is_equal(const isl::pw_aff &multi2) const; + inline boolean 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 class 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 class 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 boolean 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 boolean 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 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; + 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 class 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 class size dim(isl::dim type) const; + inline isl::multi_val flat_range_product(isl::multi_val multi2) const; + inline boolean has_range_tuple_id() const; + inline boolean 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 boolean 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 class 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 boolean 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 class size dim(isl::dim type) const; + inline boolean 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 boolean 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 stat foreach_basic_set(const std::function &fn) const; + inline stat foreach_point(const std::function &fn) const; + inline stat 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 boolean 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 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_disjoint(const isl::set &set2) const; + inline boolean is_disjoint(const isl::union_set &uset2) const; + inline boolean is_empty() const; + inline boolean is_equal(const isl::basic_set &bset2) const; + inline boolean is_equal(const isl::set &set2) const; + inline boolean is_equal(const isl::union_set &uset2) const; + inline boolean is_params() const; + inline boolean is_singleton() const; + inline boolean is_strict_subset(const isl::set &set2) const; + inline boolean is_strict_subset(const isl::union_set &uset2) const; + inline boolean is_subset(const isl::basic_set &bset2) const; + inline boolean is_subset(const isl::set &set2) const; + inline boolean is_subset(const isl::union_set &uset2) const; + inline boolean is_wrapping() const; + inline boolean 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 class 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 class 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 class 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 stat foreach_piece(const std::function &fn) const; + inline stat foreach_piece(const std::function &fn) const; + inline stat 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 boolean 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 boolean involves_locals() const; + inline boolean involves_nan() const; + inline boolean involves_param(const isl::id &id) const; + inline boolean involves_param(const std::string &id) const; + inline boolean involves_param(const isl::id_list &list) const; + inline boolean is_cst() const; + inline boolean is_equal(const isl::pw_aff &pa2) const; + inline boolean isa_aff() const; + inline boolean isa_multi_aff() const; + inline boolean 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 class 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 boolean plain_is_empty() const; + inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const; + inline boolean 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 class 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 stat foreach(const std::function &fn) const; + inline isl::pw_aff_list insert(unsigned int pos, isl::pw_aff el) const; + inline class 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 class 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 stat 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 boolean 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 boolean involves_locals() const; + inline boolean involves_nan() const; + inline boolean involves_param(const isl::id &id) const; + inline boolean involves_param(const std::string &id) const; + inline boolean involves_param(const isl::id_list &list) const; + inline boolean isa_multi_aff() const; + inline boolean 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 class size n_piece() const; + inline isl::multi_pw_aff neg() const; + inline boolean plain_is_empty() const; + inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const; + inline boolean 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 class 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 stat foreach(const std::function &fn) const; + inline isl::pw_multi_aff_list insert(unsigned int pos, isl::pw_multi_aff el) const; + inline class 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 boolean isa_type(T subtype) const; +public: + template inline boolean isa() const; + template inline T as() const; + inline isl::ctx ctx() const; + + inline isl::schedule_node ancestor(int generation) const; + inline class size ancestor_child_position(const isl::schedule_node &ancestor) const; + inline class size get_ancestor_child_position(const isl::schedule_node &ancestor) const; + inline isl::schedule_node child(int pos) const; + inline class size child_position() const; + inline class size get_child_position() const; + inline isl::union_set domain() const; + inline isl::union_set get_domain() const; + inline boolean every_descendant(const std::function &test) const; + inline isl::schedule_node first_child() const; + inline stat foreach_ancestor_top_down(const std::function &fn) const; + inline stat 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 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_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 boolean is_equal(const isl::schedule_node &node2) const; + inline boolean is_subtree_anchored() const; + inline isl::schedule_node map_descendant_bottom_up(const std::function &fn) const; + inline class 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 class size schedule_depth() const; + inline class 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 class size tree_depth() const; + inline class 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 boolean 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 boolean 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 class size n_member() const; + inline isl::multi_union_pw_aff partial_schedule() const; + inline isl::multi_union_pw_aff get_partial_schedule() const; + inline boolean permutable() const; + inline boolean 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean 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 boolean contains(const isl::space &space) const; + inline isl::basic_set convex_hull() const; + inline isl::set detect_equalities() const; + inline class size dim(isl::dim type) const; + inline boolean 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 boolean 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 stat foreach_basic_set(const std::function &fn) const; + inline stat foreach_point(const std::function &fn) const; + inline stat 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 boolean 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 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_disjoint(const isl::set &set2) const; + inline boolean is_disjoint(const isl::union_set &uset2) const; + inline boolean is_disjoint(const isl::basic_set &set2) const; + inline boolean is_disjoint(const isl::point &set2) const; + inline boolean is_empty() const; + inline boolean is_equal(const isl::set &set2) const; + inline boolean is_equal(const isl::union_set &uset2) const; + inline boolean is_equal(const isl::basic_set &set2) const; + inline boolean is_equal(const isl::point &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_strict_subset(const isl::union_set &uset2) const; + inline boolean is_strict_subset(const isl::basic_set &set2) const; + inline boolean is_strict_subset(const isl::point &set2) const; + inline boolean is_subset(const isl::set &set2) const; + inline boolean is_subset(const isl::union_set &uset2) const; + inline boolean is_subset(const isl::basic_set &set2) const; + inline boolean is_subset(const isl::point &set2) const; + inline boolean is_wrapping() const; + inline boolean 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 class 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 class 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 stat foreach(const std::function &fn) const; + inline isl::set_list insert(unsigned int pos, isl::set el) const; + inline class 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 class 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 boolean has_domain_tuple_id() const; + inline boolean has_equal_tuples(const isl::space &space2) const; + inline boolean has_range_tuple_id() const; + inline boolean has_tuple_id(isl::dim type) const; + inline boolean 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 boolean is_equal(const isl::space &space2) const; + inline boolean is_params() const; + inline boolean is_set() const; + inline boolean 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 boolean 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 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(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 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_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 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 class 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 stat foreach_pw_aff(const std::function &fn) const; + inline isl::union_pw_aff gist(isl::union_set context) const; + inline boolean 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 boolean involves_locals() const; + inline boolean involves_nan() const; + inline boolean isa_pw_multi_aff() const; + inline isl::union_pw_aff_list list() const; + inline isl::multi_union_pw_aff neg() const; + inline boolean plain_is_empty() const; + inline boolean 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 class 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 stat foreach(const std::function &fn) const; + inline isl::union_pw_aff_list insert(unsigned int pos, isl::union_pw_aff el) const; + inline class 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 boolean involves_locals() const; + inline boolean isa_pw_multi_aff() const; + inline boolean 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 boolean contains(const isl::space &space) const; + inline isl::union_set detect_equalities() const; + static inline isl::union_set empty(isl::ctx ctx); + inline boolean every_set(const std::function &test) const; + 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::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_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_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 stat foreach(const std::function &fn) const; + inline isl::union_set_list insert(unsigned int pos, isl::union_set el) const; + inline class 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 boolean abs_eq(const isl::val &v2) const; + inline boolean 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 boolean eq(const isl::val &v2) const; + inline boolean 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 boolean ge(const isl::val &v2) const; + inline boolean ge(long v2) const; + inline boolean gt(const isl::val &v2) const; + inline boolean 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 boolean is_divisible_by(const isl::val &v2) const; + inline boolean is_divisible_by(long 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 le(long v2) const; + inline boolean lt(const isl::val &v2) const; + inline boolean 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 boolean ne(const isl::val &v2) const; + inline boolean 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 stat 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 class 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(); +} + +class 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); +} + +stat aff::foreach_piece(const std::function &fn) const +{ + return isl::pw_aff(*this).foreach_piece(fn); +} + +stat aff::foreach_piece(const std::function &fn) const +{ + return isl::pw_aff(*this).foreach_piece(fn); +} + +stat 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); +} + +boolean 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); +} + +boolean aff::involves_locals() const +{ + return isl::multi_aff(*this).involves_locals(); +} + +boolean aff::involves_nan() const +{ + return isl::multi_aff(*this).involves_nan(); +} + +boolean aff::involves_param(const isl::id &id) const +{ + return isl::pw_aff(*this).involves_param(id); +} + +boolean aff::involves_param(const std::string &id) const +{ + return this->involves_param(isl::id(ctx(), id)); +} + +boolean aff::involves_param(const isl::id_list &list) const +{ + return isl::pw_aff(*this).involves_param(list); +} + +boolean aff::is_cst() const +{ + auto res = isl_aff_is_cst(get()); + return manage(res); +} + +boolean aff::is_equal(const isl::pw_aff &pa2) const +{ + return isl::pw_aff(*this).is_equal(pa2); +} + +boolean aff::isa_aff() const +{ + return isl::pw_aff(*this).isa_aff(); +} + +boolean aff::isa_multi_aff() const +{ + return isl::pw_aff(*this).isa_multi_aff(); +} + +boolean 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); +} + +class 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); +} + +boolean aff::plain_is_empty() const +{ + return isl::pw_aff(*this).plain_is_empty(); +} + +boolean aff::plain_is_equal(const isl::multi_aff &multi2) const +{ + return isl::multi_aff(*this).plain_is_equal(multi2); +} + +boolean aff::plain_is_equal(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_aff(*this).plain_is_equal(multi2); +} + +boolean 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); +} + +class 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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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); +} + +stat aff_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); +} -class term { - friend inline term manage(__isl_take isl_term *ptr); - friend inline term manage_copy(__isl_keep isl_term *ptr); +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_term *ptr = nullptr; +class size aff_list::size() const +{ + auto res = isl_aff_list_size(get()); + return manage(res); +} - inline explicit term(__isl_take isl_term *ptr); +inline std::ostream &operator<<(std::ostream &os, const aff_list &obj) +{ + char *str = isl_aff_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} -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 bool is_null() const; - inline isl::ctx ctx() const; +// 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); +} - 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; -}; +ast_build::ast_build() + : ptr(nullptr) {} -// 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); +ast_build::ast_build(const ast_build &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); + copy_callbacks(obj); +} -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); +ast_build::ast_build(__isl_take isl_ast_build *ptr) + : ptr(ptr) {} - isl_union_access_info *ptr = nullptr; +ast_build::ast_build(isl::ctx ctx) +{ + auto res = isl_ast_build_alloc(ctx.release()); + ptr = res; +} - inline explicit union_access_info(__isl_take isl_union_access_info *ptr); +ast_build &ast_build::operator=(ast_build obj) { + std::swap(this->ptr, obj.ptr); + copy_callbacks(obj); + return *this; +} -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; +ast_build::~ast_build() { + if (ptr) + isl_ast_build_free(ptr); +} - 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; -}; +__isl_give isl_ast_build *ast_build::copy() const & { + return isl_ast_build_copy(ptr); +} -// 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); +__isl_keep isl_ast_build *ast_build::get() const { + return 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); +__isl_give isl_ast_build *ast_build::release() { + if (at_each_domain_data) + isl_die(ctx().get(), isl_error_invalid, "cannot release object with persistent callbacks", return nullptr); + isl_ast_build *tmp = ptr; + ptr = nullptr; + return tmp; +} - isl_union_flow *ptr = nullptr; +bool ast_build::is_null() const { + return ptr == nullptr; +} - inline explicit union_flow(__isl_take isl_union_flow *ptr); +isl::ctx ast_build::ctx() const { + return isl::ctx(isl_ast_build_get_ctx(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; +ast_build &ast_build::copy_callbacks(const ast_build &obj) +{ + at_each_domain_data = obj.at_each_domain_data; + return *this; +} - 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; -}; +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); + auto ret = (data->func)(manage(arg_0), manage_copy(arg_1)); + return ret.release(); +} -// 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); +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()); +} -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::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_union_map *ptr = nullptr; +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); +} - inline explicit union_map(__isl_take isl_union_map *ptr); +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); +} -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; +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); +} - 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; -}; +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); +} -// 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); +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); +} -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::ast_expr ast_build::expr_from(isl::set set) const +{ + auto res = isl_ast_build_expr_from_set(get(), set.release()); + return manage(res); +} - isl_union_map_list *ptr = nullptr; +isl::ast_build ast_build::from_context(isl::set set) +{ + auto res = isl_ast_build_from_context(set.release()); + return manage(res); +} - inline explicit union_map_list(__isl_take isl_union_map_list *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); +} -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; -}; +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); +} -// 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); +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); +} -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); +isl::union_map ast_build::schedule() const +{ + auto res = isl_ast_build_get_schedule(get()); + return manage(res); +} - isl_union_pw_aff *ptr = nullptr; +isl::union_map ast_build::get_schedule() const +{ + return schedule(); +} - inline explicit union_pw_aff(__isl_take isl_union_pw_aff *ptr); +// 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); +} -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 void dump() const; +ast_expr::ast_expr() + : ptr(nullptr) {} - 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; -}; +ast_expr::ast_expr(const ast_expr &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} -// 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); +ast_expr::ast_expr(__isl_take isl_ast_expr *ptr) + : ptr(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); +ast_expr &ast_expr::operator=(ast_expr obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} - isl_union_pw_aff_list *ptr = nullptr; +ast_expr::~ast_expr() { + if (ptr) + isl_ast_expr_free(ptr); +} - inline explicit union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr); +__isl_give isl_ast_expr *ast_expr::copy() const & { + return isl_ast_expr_copy(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 bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; +__isl_keep isl_ast_expr *ast_expr::get() const { + return ptr; +} - 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; -}; +__isl_give isl_ast_expr *ast_expr::release() { + isl_ast_expr *tmp = ptr; + ptr = nullptr; + return tmp; +} -// 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); +bool ast_expr::is_null() const { + return ptr == nullptr; +} -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); +template +boolean ast_expr::isa_type(T subtype) const +{ + if (is_null()) + return boolean(); + return isl_ast_expr_get_type(get()) == subtype; +} +template +boolean ast_expr::isa() const +{ + return isa_type(T::type); +} +template +T ast_expr::as() const +{ + if (isa().is_false()) + isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T()); + return T(copy()); +} - isl_union_pw_multi_aff *ptr = nullptr; +isl::ctx ast_expr::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} - inline explicit union_pw_multi_aff(__isl_take isl_union_pw_multi_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); +} -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 bool is_null() const; - inline isl::ctx ctx() const; - inline void dump() const; +isl::ast_expr ast_expr::address_of() const +{ + auto res = isl_ast_expr_address_of(copy()); + return manage(res); +} - 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::pw_multi_aff as_pw_multi_aff() const; - inline isl::union_pw_multi_aff coalesce() 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::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; -}; +isl::ast_expr ast_expr::eq(isl::ast_expr expr2) const +{ + auto res = isl_ast_expr_eq(copy(), expr2.release()); + return manage(res); +} + +isl::ast_expr ast_expr::from_val(isl::val v) +{ + 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); +} + +isl::id ast_expr::get_id() const +{ + return id(); +} + +isl::ast_expr ast_expr::le(isl::ast_expr expr2) const +{ + auto res = isl_ast_expr_le(copy(), expr2.release()); + return manage(res); +} + +isl::ast_expr ast_expr::mul(isl::ast_expr expr2) const +{ + auto res = isl_ast_expr_mul(copy(), expr2.release()); + return manage(res); +} -// 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); +isl::ast_expr ast_expr::op_arg(int pos) const +{ + auto res = isl_ast_expr_get_op_arg(get(), pos); + return manage(res); +} -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); +isl::ast_expr ast_expr::get_op_arg(int pos) const +{ + return op_arg(pos); +} - isl_union_pw_multi_aff_list *ptr = nullptr; +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; +} - inline explicit union_pw_multi_aff_list(__isl_take isl_union_pw_multi_aff_list *ptr); +isl::val ast_expr::val() const +{ + auto res = isl_ast_expr_get_val(get()); + return manage(res); +} -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 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_size size() const; - inline isl::union_pw_multi_aff_list swap(unsigned int pos1, unsigned int pos2) const; -}; +isl::val ast_expr::get_val() const +{ + return val(); +} -// 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); +inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} -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); +// implementations for isl::ast_expr_id +ast_expr_id::ast_expr_id() + : ast_expr() {} - isl_union_pw_qpolynomial *ptr = nullptr; +ast_expr_id::ast_expr_id(const ast_expr_id &obj) + : ast_expr(obj) +{ +} - inline explicit union_pw_qpolynomial(__isl_take isl_union_pw_qpolynomial *ptr); +ast_expr_id::ast_expr_id(__isl_take isl_ast_expr *ptr) + : ast_expr(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 bool is_null() const; - inline isl::ctx ctx() const; +ast_expr_id &ast_expr_id::operator=(ast_expr_id obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} - 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_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::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); -}; +isl::ctx ast_expr_id::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} -// 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); +isl::id ast_expr_id::id() const +{ + auto res = isl_ast_expr_id_get_id(get()); + return manage(res); +} -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); +isl::id ast_expr_id::get_id() const +{ + return id(); +} - isl_union_set *ptr = nullptr; +inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} - inline explicit union_set(__isl_take isl_union_set *ptr); +// implementations for isl::ast_expr_int +ast_expr_int::ast_expr_int() + : ast_expr() {} -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 void dump() const; +ast_expr_int::ast_expr_int(const ast_expr_int &obj) + : ast_expr(obj) +{ +} - 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::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; -}; +ast_expr_int::ast_expr_int(__isl_take isl_ast_expr *ptr) + : ast_expr(ptr) {} -// 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); +ast_expr_int &ast_expr_int::operator=(ast_expr_int obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} -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); +isl::ctx ast_expr_int::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} - isl_union_set_list *ptr = nullptr; +isl::val ast_expr_int::val() const +{ + auto res = isl_ast_expr_int_get_val(get()); + return manage(res); +} - inline explicit union_set_list(__isl_take isl_union_set_list *ptr); +isl::val ast_expr_int::get_val() const +{ + return val(); +} -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; +inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} - 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; -}; +// implementations for isl::ast_expr_op +ast_expr_op::ast_expr_op() + : ast_expr() {} -// declarations for isl::val -inline val manage(__isl_take isl_val *ptr); -inline val manage_copy(__isl_keep isl_val *ptr); +ast_expr_op::ast_expr_op(const ast_expr_op &obj) + : ast_expr(obj) +{ +} -class val { - friend inline val manage(__isl_take isl_val *ptr); - friend inline val manage_copy(__isl_keep isl_val *ptr); +ast_expr_op::ast_expr_op(__isl_take isl_ast_expr *ptr) + : ast_expr(ptr) {} - isl_val *ptr = nullptr; +ast_expr_op &ast_expr_op::operator=(ast_expr_op obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} - inline explicit val(__isl_take isl_val *ptr); +template +boolean ast_expr_op::isa_type(T subtype) const +{ + if (is_null()) + return boolean(); + return isl_ast_expr_op_get_type(get()) == subtype; +} +template +boolean ast_expr_op::isa() const +{ + return isa_type(T::type); +} +template +T ast_expr_op::as() const +{ + if (isa().is_false()) + isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T()); + return T(copy()); +} -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::ctx ast_expr_op::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} - 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); -}; +isl::ast_expr ast_expr_op::arg(int pos) const +{ + auto res = isl_ast_expr_op_get_arg(get(), pos); + return manage(res); +} -// 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); +isl::ast_expr ast_expr_op::get_arg(int pos) const +{ + return arg(pos); +} + +class size ast_expr_op::n_arg() const +{ + auto res = isl_ast_expr_op_get_n_arg(get()); + return manage(res); +} + +class size ast_expr_op::get_n_arg() const +{ + return n_arg(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} -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); +// implementations for isl::ast_expr_op_access +ast_expr_op_access::ast_expr_op_access() + : ast_expr_op() {} - isl_val_list *ptr = nullptr; +ast_expr_op_access::ast_expr_op_access(const ast_expr_op_access &obj) + : ast_expr_op(obj) +{ +} - inline explicit val_list(__isl_take isl_val_list *ptr); +ast_expr_op_access::ast_expr_op_access(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} -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_op_access &ast_expr_op_access::operator=(ast_expr_op_access obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} - 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::ctx ast_expr_op_access::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} -// declarations for isl::vec -inline vec manage(__isl_take isl_vec *ptr); -inline vec manage_copy(__isl_keep isl_vec *ptr); +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} -class vec { - friend inline vec manage(__isl_take isl_vec *ptr); - friend inline vec manage_copy(__isl_keep isl_vec *ptr); +// implementations for isl::ast_expr_op_add +ast_expr_op_add::ast_expr_op_add() + : ast_expr_op() {} - isl_vec *ptr = nullptr; +ast_expr_op_add::ast_expr_op_add(const ast_expr_op_add &obj) + : ast_expr_op(obj) +{ +} - inline explicit vec(__isl_take isl_vec *ptr); +ast_expr_op_add::ast_expr_op_add(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} -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; -}; +ast_expr_op_add &ast_expr_op_add::operator=(ast_expr_op_add obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} -// implementations for isl::aff -aff manage(__isl_take isl_aff *ptr) { - return aff(ptr); +isl::ctx ast_expr_op_add::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -aff manage_copy(__isl_keep isl_aff *ptr) { - ptr = isl_aff_copy(ptr); - return aff(ptr); + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -aff::aff() - : ptr(nullptr) {} +// implementations for isl::ast_expr_op_address_of +ast_expr_op_address_of::ast_expr_op_address_of() + : ast_expr_op() {} -aff::aff(const aff &obj) - : ptr(nullptr) +ast_expr_op_address_of::ast_expr_op_address_of(const ast_expr_op_address_of &obj) + : ast_expr_op(obj) { - ptr = obj.copy(); } +ast_expr_op_address_of::ast_expr_op_address_of(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} -aff::aff(__isl_take isl_aff *ptr) - : ptr(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; +} -aff::aff(isl::ctx ctx, const std::string &str) -{ - auto res = isl_aff_read_from_str(ctx.release(), str.c_str()); - ptr = res; +isl::ctx ast_expr_op_address_of::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -aff::aff(isl::local_space ls, isl::val val) + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj) { - auto res = isl_aff_val_on_domain(ls.release(), val.release()); - ptr = res; + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -aff::aff(isl::local_space ls) + +// 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_zero_on_domain(ls.release()); - ptr = res; } -aff &aff::operator=(aff obj) { +ast_expr_op_and::ast_expr_op_and(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_and &ast_expr_op_and::operator=(ast_expr_op_and obj) { std::swap(this->ptr, obj.ptr); return *this; } -aff::~aff() { - if (ptr) - isl_aff_free(ptr); +isl::ctx ast_expr_op_and::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -__isl_give isl_aff *aff::copy() const & { - return isl_aff_copy(ptr); +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -__isl_keep isl_aff *aff::get() const { - return ptr; +// 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) +{ } -__isl_give isl_aff *aff::release() { - isl_aff *tmp = ptr; - ptr = nullptr; - return tmp; +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; } -bool aff::is_null() const { - return ptr == nullptr; +isl::ctx ast_expr_op_and_then::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } +// implementations for isl::ast_expr_op_call +ast_expr_op_call::ast_expr_op_call() + : ast_expr_op() {} -isl::ctx aff::ctx() const { - return isl::ctx(isl_aff_get_ctx(ptr)); +ast_expr_op_call::ast_expr_op_call(const ast_expr_op_call &obj) + : ast_expr_op(obj) +{ } -void aff::dump() const { - isl_aff_dump(get()); +ast_expr_op_call::ast_expr_op_call(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_call &ast_expr_op_call::operator=(ast_expr_op_call obj) { + std::swap(this->ptr, obj.ptr); + return *this; } +isl::ctx ast_expr_op_call::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} -isl::aff aff::add(isl::aff aff2) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj) { - auto res = isl_aff_add(copy(), aff2.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::aff aff::add_coefficient_si(isl::dim type, int pos, int v) 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_add_coefficient_si(copy(), static_cast(type), pos, v); - return manage(res); } -isl::aff aff::add_coefficient_val(isl::dim type, int pos, isl::val v) const -{ - auto res = isl_aff_add_coefficient_val(copy(), static_cast(type), pos, v.release()); - 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::add_constant(isl::val v) const -{ - auto res = isl_aff_add_constant_val(copy(), v.release()); - return manage(res); +isl::ctx ast_expr_op_cond::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::add_constant_num_si(int v) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj) { - auto res = isl_aff_add_constant_num_si(copy(), v); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::aff aff::add_constant_si(int v) const +// 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_add_constant_si(copy(), v); - return manage(res); } -isl::aff aff::add_dims(isl::dim type, unsigned int n) const -{ - auto res = isl_aff_add_dims(copy(), static_cast(type), n); - 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::align_params(isl::space model) const -{ - auto res = isl_aff_align_params(copy(), model.release()); - return manage(res); +isl::ctx ast_expr_op_div::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::basic_set aff::bind(isl::id id) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj) { - auto res = isl_aff_bind_id(copy(), id.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::aff aff::ceil() const +// 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_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_eq::ast_expr_op_eq(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_eq &ast_expr_op_eq::operator=(ast_expr_op_eq obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl_size aff::dim(isl::dim type) const -{ - auto res = isl_aff_dim(get(), static_cast(type)); - return res; +isl::ctx ast_expr_op_eq::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::div(isl::aff aff2) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj) { - auto res = isl_aff_div(copy(), aff2.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::aff aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) 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_drop_dims(copy(), static_cast(type), first, n); - return manage(res); } -isl::basic_set aff::eq_basic_set(isl::aff aff2) const -{ - auto res = isl_aff_eq_basic_set(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::set aff::eq_set(isl::aff aff2) const -{ - auto res = isl_aff_eq_set(copy(), aff2.release()); - return manage(res); +isl::ctx ast_expr_op_fdiv_q::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::val aff::eval(isl::point pnt) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj) { - auto res = isl_aff_eval(copy(), pnt.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -int aff::find_dim_by_name(isl::dim type, const std::string &name) 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_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; } -isl::aff aff::floor() const -{ - auto res = isl_aff_floor(copy()); - 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::from_range() const -{ - auto res = isl_aff_from_range(copy()); - return manage(res); +isl::ctx ast_expr_op_ge::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::basic_set aff::ge_basic_set(isl::aff aff2) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj) { - auto res = isl_aff_ge_basic_set(copy(), aff2.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::set aff::ge_set(isl::aff aff2) 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_ge_set(copy(), aff2.release()); - return manage(res); } -isl::val aff::get_coefficient_val(isl::dim type, int pos) const +ast_expr_op_gt::ast_expr_op_gt(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_gt &ast_expr_op_gt::operator=(ast_expr_op_gt obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_gt::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj) { - auto res = isl_aff_get_coefficient_val(get(), static_cast(type), pos); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::val aff::get_constant_val() 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_get_constant_val(get()); - return manage(res); } -isl::val aff::get_denominator_val() const +ast_expr_op_le::ast_expr_op_le(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_le &ast_expr_op_le::operator=(ast_expr_op_le obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_le::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj) { - auto res = isl_aff_get_denominator_val(get()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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_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_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; } -isl::aff aff::get_div(int pos) const +ast_expr_op_lt::ast_expr_op_lt(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_lt &ast_expr_op_lt::operator=(ast_expr_op_lt obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_lt::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj) { - auto res = isl_aff_get_div(get(), pos); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::local_space aff::get_domain_local_space() const +// implementations for isl::ast_expr_op_max +ast_expr_op_max::ast_expr_op_max() + : ast_expr_op() {} + +ast_expr_op_max::ast_expr_op_max(const ast_expr_op_max &obj) + : ast_expr_op(obj) { - auto res = isl_aff_get_domain_local_space(get()); - return manage(res); } -isl::space aff::get_domain_space() const +ast_expr_op_max::ast_expr_op_max(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_max &ast_expr_op_max::operator=(ast_expr_op_max obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_max::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj) { - auto res = isl_aff_get_domain_space(get()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -uint32_t aff::get_hash() const +// implementations for isl::ast_expr_op_member +ast_expr_op_member::ast_expr_op_member() + : ast_expr_op() {} + +ast_expr_op_member::ast_expr_op_member(const ast_expr_op_member &obj) + : ast_expr_op(obj) { - 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_member::ast_expr_op_member(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_member &ast_expr_op_member::operator=(ast_expr_op_member obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_member::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::space aff::get_space() const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj) { - auto res = isl_aff_get_space(get()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::aff aff::gist(isl::set context) const -{ - auto res = isl_aff_gist(copy(), context.release()); - return manage(res); -} +// implementations for isl::ast_expr_op_min +ast_expr_op_min::ast_expr_op_min() + : ast_expr_op() {} -isl::aff aff::gist_params(isl::set context) const +ast_expr_op_min::ast_expr_op_min(const ast_expr_op_min &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_min::ast_expr_op_min(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} -isl::set aff::gt_set(isl::aff aff2) const -{ - auto res = isl_aff_gt_set(copy(), aff2.release()); - return manage(res); +ast_expr_op_min &ast_expr_op_min::operator=(ast_expr_op_min obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl::aff aff::insert_dims(isl::dim type, unsigned int first, unsigned int n) const -{ - auto res = isl_aff_insert_dims(copy(), static_cast(type), first, n); - return manage(res); +isl::ctx ast_expr_op_min::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -boolean aff::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj) { - auto res = isl_aff_involves_dims(get(), static_cast(type), first, n); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -boolean aff::involves_locals() 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_involves_locals(get()); - return manage(res); } -boolean aff::is_cst() const -{ - auto res = isl_aff_is_cst(get()); - 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; } -boolean aff::is_nan() const -{ - auto res = isl_aff_is_nan(get()); - return manage(res); +isl::ctx ast_expr_op_minus::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::basic_set aff::le_basic_set(isl::aff aff2) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj) { - auto res = isl_aff_le_basic_set(copy(), aff2.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::set aff::le_set(isl::aff aff2) 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_le_set(copy(), aff2.release()); - return manage(res); } -isl::basic_set aff::lt_basic_set(isl::aff aff2) const -{ - auto res = isl_aff_lt_basic_set(copy(), aff2.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::set aff::lt_set(isl::aff aff2) const -{ - auto res = isl_aff_lt_set(copy(), aff2.release()); - return manage(res); +isl::ctx ast_expr_op_mul::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::mod(isl::val mod) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj) { - auto res = isl_aff_mod_val(copy(), mod.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -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 +// 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_move_dims(copy(), static_cast(dst_type), dst_pos, static_cast(src_type), src_pos, n); - return manage(res); } -isl::aff aff::mul(isl::aff aff2) const -{ - auto res = isl_aff_mul(copy(), aff2.release()); - return manage(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::aff aff::nan_on_domain(isl::local_space ls) -{ - auto res = isl_aff_nan_on_domain(ls.release()); - return manage(res); +isl::ctx ast_expr_op_or::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::nan_on_domain_space(isl::space space) +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj) { - auto res = isl_aff_nan_on_domain_space(space.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::set aff::ne_set(isl::aff aff2) const +// 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) { - auto res = isl_aff_ne_set(copy(), aff2.release()); - return manage(res); } -isl::aff aff::neg() const -{ - auto res = isl_aff_neg(copy()); - return manage(res); +ast_expr_op_or_else::ast_expr_op_or_else(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_or_else &ast_expr_op_or_else::operator=(ast_expr_op_or_else obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl::basic_set aff::neg_basic_set() const -{ - auto res = isl_aff_neg_basic_set(copy()); - return manage(res); +isl::ctx ast_expr_op_or_else::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::param_on_domain_space_id(isl::space space, isl::id id) +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj) { - auto res = isl_aff_param_on_domain_space_id(space.release(), id.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -boolean aff::plain_is_equal(const isl::aff &aff2) const +// implementations for isl::ast_expr_op_pdiv_q +ast_expr_op_pdiv_q::ast_expr_op_pdiv_q() + : ast_expr_op() {} + +ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj) + : ast_expr_op(obj) { - auto res = isl_aff_plain_is_equal(get(), aff2.get()); - return manage(res); } -boolean aff::plain_is_zero() const -{ - auto res = isl_aff_plain_is_zero(get()); - return manage(res); +ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_pdiv_q &ast_expr_op_pdiv_q::operator=(ast_expr_op_pdiv_q obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl::aff aff::project_domain_on_params() const -{ - auto res = isl_aff_project_domain_on_params(copy()); - return manage(res); +isl::ctx ast_expr_op_pdiv_q::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::pullback(isl::multi_aff ma) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj) { - auto res = isl_aff_pullback_multi_aff(copy(), ma.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::aff aff::pullback_aff(isl::aff aff2) const +// implementations for isl::ast_expr_op_pdiv_r +ast_expr_op_pdiv_r::ast_expr_op_pdiv_r() + : ast_expr_op() {} + +ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj) + : ast_expr_op(obj) { - auto res = isl_aff_pullback_aff(copy(), aff2.release()); - return manage(res); } -isl::aff aff::scale(isl::val v) const -{ - auto res = isl_aff_scale_val(copy(), v.release()); - return manage(res); +ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_pdiv_r &ast_expr_op_pdiv_r::operator=(ast_expr_op_pdiv_r obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl::aff aff::scale_down(isl::val v) const -{ - auto res = isl_aff_scale_down_val(copy(), v.release()); - return manage(res); +isl::ctx ast_expr_op_pdiv_r::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::scale_down_ui(unsigned int f) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj) { - auto res = isl_aff_scale_down_ui(copy(), f); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::aff aff::set_coefficient_si(isl::dim type, int pos, int v) 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_aff_set_coefficient_si(copy(), static_cast(type), pos, v); - return manage(res); } -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); +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::aff aff::set_constant_si(int v) const -{ - auto res = isl_aff_set_constant_si(copy(), v); - return manage(res); +isl::ctx ast_expr_op_select::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::set_constant_val(isl::val v) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj) { - auto res = isl_aff_set_constant_val(copy(), v.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::aff aff::set_dim_id(isl::dim type, unsigned int pos, isl::id id) 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_aff_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); } -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); +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::aff aff::sub(isl::aff aff2) const -{ - auto res = isl_aff_sub(copy(), aff2.release()); - return manage(res); +isl::ctx ast_expr_op_sub::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::unbind_params_insert_domain(isl::multi_id domain) const +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj) { - auto res = isl_aff_unbind_params_insert_domain(copy(), domain.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::aff aff::val_on_domain_space(isl::space space, isl::val val) +// 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_aff_val_on_domain_space(space.release(), val.release()); - return manage(res); } -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); +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::basic_set aff::zero_basic_set() const -{ - auto res = isl_aff_zero_basic_set(copy()); - return manage(res); +isl::ctx ast_expr_op_zdiv_r::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); } -isl::aff aff::zero_on_domain(isl::space space) +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj) { - auto res = isl_aff_zero_on_domain_space(space.release()); - return manage(res); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -// implementations for isl::aff_list -aff_list manage(__isl_take isl_aff_list *ptr) { - return aff_list(ptr); +// implementations for isl::ast_node +ast_node manage(__isl_take isl_ast_node *ptr) { + return ast_node(ptr); } -aff_list manage_copy(__isl_keep isl_aff_list *ptr) { - ptr = isl_aff_list_copy(ptr); - return aff_list(ptr); +ast_node manage_copy(__isl_keep isl_ast_node *ptr) { + ptr = isl_ast_node_copy(ptr); + return ast_node(ptr); } -aff_list::aff_list() +ast_node::ast_node() : ptr(nullptr) {} -aff_list::aff_list(const aff_list &obj) +ast_node::ast_node(const ast_node &obj) : ptr(nullptr) { ptr = obj.copy(); } - -aff_list::aff_list(__isl_take isl_aff_list *ptr) +ast_node::ast_node(__isl_take isl_ast_node *ptr) : ptr(ptr) {} - -aff_list &aff_list::operator=(aff_list obj) { +ast_node &ast_node::operator=(ast_node obj) { std::swap(this->ptr, obj.ptr); return *this; } -aff_list::~aff_list() { +ast_node::~ast_node() { if (ptr) - isl_aff_list_free(ptr); + isl_ast_node_free(ptr); } -__isl_give isl_aff_list *aff_list::copy() const & { - return isl_aff_list_copy(ptr); +__isl_give isl_ast_node *ast_node::copy() const & { + return isl_ast_node_copy(ptr); } -__isl_keep isl_aff_list *aff_list::get() const { +__isl_keep isl_ast_node *ast_node::get() const { return ptr; } -__isl_give isl_aff_list *aff_list::release() { - isl_aff_list *tmp = ptr; +__isl_give isl_ast_node *ast_node::release() { + isl_ast_node *tmp = ptr; ptr = nullptr; return tmp; } -bool aff_list::is_null() const { +bool ast_node::is_null() const { return ptr == nullptr; } - -isl::ctx aff_list::ctx() const { - return isl::ctx(isl_aff_list_get_ctx(ptr)); -} - -void aff_list::dump() const { - isl_aff_list_dump(get()); -} - - -isl::aff_list aff_list::add(isl::aff el) const -{ - 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); -} - -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); -} - -stat aff_list::foreach(const std::function &fn) const +template +boolean ast_node::isa_type(T subtype) 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); + if (is_null()) + return boolean(); + return isl_ast_node_get_type(get()) == subtype; } - -isl::aff_list aff_list::from_aff(isl::aff el) +template +boolean ast_node::isa() const { - auto res = isl_aff_list_from_aff(el.release()); - return manage(res); + return isa_type(T::type); } - -isl::aff aff_list::get_aff(int index) const +template +T ast_node::as() const { - auto res = isl_aff_list_get_aff(get(), index); - return manage(res); + if (isa().is_false()) + isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T()); + return T(copy()); } -isl::aff aff_list::get_at(int index) const -{ - auto res = isl_aff_list_get_at(get(), index); - return manage(res); +isl::ctx ast_node::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); } -isl::aff_list aff_list::insert(unsigned int pos, isl::aff el) const +isl::id ast_node::annotation() const { - auto res = isl_aff_list_insert(copy(), pos, el.release()); + auto res = isl_ast_node_get_annotation(get()); return manage(res); } -isl_size aff_list::n_aff() const +isl::id ast_node::get_annotation() const { - auto res = isl_aff_list_n_aff(get()); - return res; + return annotation(); } -isl::aff_list aff_list::reverse() const +std::string ast_node::to_C_str() const { - auto res = isl_aff_list_reverse(copy()); - return manage(res); + auto res = isl_ast_node_to_C_str(get()); + std::string tmp(res); + free(res); + return tmp; } -isl::aff_list aff_list::set_aff(int index, isl::aff el) const +isl::ast_node_list ast_node::to_list() const { - auto res = isl_aff_list_set_aff(copy(), index, el.release()); + auto res = isl_ast_node_to_list(copy()); return manage(res); } -isl_size aff_list::size() const +inline std::ostream &operator<<(std::ostream &os, const ast_node &obj) { - auto res = isl_aff_list_size(get()); - return res; + char *str = isl_ast_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::aff_list aff_list::swap(unsigned int pos1, unsigned int pos2) 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_aff_list_swap(copy(), pos1, pos2); - return manage(res); } -// implementations for isl::ast_build -ast_build manage(__isl_take isl_ast_build *ptr) { - return ast_build(ptr); +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; } -ast_build manage_copy(__isl_keep isl_ast_build *ptr) { - ptr = isl_ast_build_copy(ptr); - return ast_build(ptr); + +isl::ctx ast_node_block::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); } -ast_build::ast_build() - : ptr(nullptr) {} +isl::ast_node_list ast_node_block::children() const +{ + auto res = isl_ast_node_block_get_children(get()); + return manage(res); +} -ast_build::ast_build(const ast_build &obj) - : ptr(nullptr) +isl::ast_node_list ast_node_block::get_children() const { - ptr = obj.copy(); + return children(); } +inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj) +{ + char *str = isl_ast_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} -ast_build::ast_build(__isl_take isl_ast_build *ptr) - : ptr(ptr) {} +// implementations for isl::ast_node_for +ast_node_for::ast_node_for() + : ast_node() {} -ast_build::ast_build(isl::ctx ctx) +ast_node_for::ast_node_for(const ast_node_for &obj) + : ast_node(obj) { - auto res = isl_ast_build_alloc(ctx.release()); - ptr = res; } -ast_build &ast_build::operator=(ast_build obj) { +ast_node_for::ast_node_for(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_for &ast_node_for::operator=(ast_node_for obj) { std::swap(this->ptr, obj.ptr); return *this; } -ast_build::~ast_build() { - if (ptr) - isl_ast_build_free(ptr); +isl::ctx ast_node_for::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); } -__isl_give isl_ast_build *ast_build::copy() const & { - return isl_ast_build_copy(ptr); +isl::ast_node ast_node_for::body() const +{ + auto res = isl_ast_node_for_get_body(get()); + return manage(res); } -__isl_keep isl_ast_build *ast_build::get() const { - return ptr; +isl::ast_node ast_node_for::get_body() const +{ + return body(); } -__isl_give isl_ast_build *ast_build::release() { - isl_ast_build *tmp = ptr; - ptr = nullptr; - return tmp; +isl::ast_expr ast_node_for::cond() const +{ + auto res = isl_ast_node_for_get_cond(get()); + return manage(res); } -bool ast_build::is_null() const { - return ptr == nullptr; +isl::ast_expr ast_node_for::get_cond() const +{ + return cond(); } - -isl::ctx ast_build::ctx() const { - return isl::ctx(isl_ast_build_get_ctx(ptr)); +isl::ast_expr ast_node_for::inc() const +{ + auto res = isl_ast_node_for_get_inc(get()); + return manage(res); } +isl::ast_expr ast_node_for::get_inc() const +{ + return inc(); +} -isl::ast_expr ast_build::access_from(isl::multi_pw_aff mpa) const +isl::ast_expr ast_node_for::init() const { - auto res = isl_ast_build_access_from_multi_pw_aff(get(), mpa.release()); + auto res = isl_ast_node_for_get_init(get()); return manage(res); } -isl::ast_expr ast_build::access_from(isl::pw_multi_aff pma) const +isl::ast_expr ast_node_for::get_init() const { - auto res = isl_ast_build_access_from_pw_multi_aff(get(), pma.release()); - return manage(res); + return init(); } -isl::ast_node ast_build::ast_from_schedule(isl::union_map schedule) const +boolean ast_node_for::is_degenerate() const { - auto res = isl_ast_build_ast_from_schedule(get(), schedule.release()); + auto res = isl_ast_node_for_is_degenerate(get()); return manage(res); } -isl::ast_expr ast_build::call_from(isl::multi_pw_aff mpa) const +isl::ast_expr ast_node_for::iterator() const { - auto res = isl_ast_build_call_from_multi_pw_aff(get(), mpa.release()); + auto res = isl_ast_node_for_get_iterator(get()); return manage(res); } -isl::ast_expr ast_build::call_from(isl::pw_multi_aff pma) const +isl::ast_expr ast_node_for::get_iterator() const { - auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release()); - return manage(res); + return iterator(); } -isl::ast_expr ast_build::expr_from(isl::pw_aff pa) const +inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj) { - auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release()); - return manage(res); + char *str = isl_ast_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::ast_expr ast_build::expr_from(isl::set set) 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_build_expr_from_set(get(), set.release()); - return manage(res); } -isl::ast_build ast_build::from_context(isl::set set) +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_build_from_context(set.release()); + auto res = isl_ast_node_if_get_cond(get()); return manage(res); } -isl::union_map ast_build::get_schedule() const +isl::ast_expr ast_node_if::get_cond() const { - auto res = isl_ast_build_get_schedule(get()); - return manage(res); + return cond(); } -isl::space ast_build::get_schedule_space() const +isl::ast_node ast_node_if::else_node() const { - auto res = isl_ast_build_get_schedule_space(get()); + auto res = isl_ast_node_if_get_else_node(get()); return manage(res); } -isl::ast_node ast_build::node_from(isl::schedule schedule) const +isl::ast_node ast_node_if::get_else_node() const { - auto res = isl_ast_build_node_from_schedule(get(), schedule.release()); - return manage(res); + return else_node(); } -isl::ast_node ast_build::node_from_schedule_map(isl::union_map schedule) const +boolean ast_node_if::has_else_node() const { - auto res = isl_ast_build_node_from_schedule_map(get(), schedule.release()); + auto res = isl_ast_node_if_has_else_node(get()); return manage(res); } -isl::ast_build ast_build::restrict(isl::set set) const +isl::ast_node ast_node_if::then_node() const { - auto res = isl_ast_build_restrict(copy(), set.release()); + auto res = isl_ast_node_if_get_then_node(get()); return manage(res); } -// implementations for isl::ast_expr -ast_expr manage(__isl_take isl_ast_expr *ptr) { - return ast_expr(ptr); +isl::ast_node ast_node_if::get_then_node() const +{ + return then_node(); } -ast_expr manage_copy(__isl_keep isl_ast_expr *ptr) { - ptr = isl_ast_expr_copy(ptr); - return ast_expr(ptr); + +inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj) +{ + char *str = isl_ast_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -ast_expr::ast_expr() +// implementations for isl::ast_node_list +ast_node_list manage(__isl_take isl_ast_node_list *ptr) { + return ast_node_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_node_list::ast_node_list() : ptr(nullptr) {} -ast_expr::ast_expr(const ast_expr &obj) +ast_node_list::ast_node_list(const ast_node_list &obj) : ptr(nullptr) { ptr = obj.copy(); } - -ast_expr::ast_expr(__isl_take isl_ast_expr *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 &ast_expr::operator=(ast_expr obj) { +ast_node_list &ast_node_list::operator=(ast_node_list obj) { std::swap(this->ptr, obj.ptr); return *this; } -ast_expr::~ast_expr() { +ast_node_list::~ast_node_list() { if (ptr) - isl_ast_expr_free(ptr); + isl_ast_node_list_free(ptr); } -__isl_give isl_ast_expr *ast_expr::copy() const & { - return isl_ast_expr_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 *ast_expr::get() const { +__isl_keep isl_ast_node_list *ast_node_list::get() const { return ptr; } -__isl_give isl_ast_expr *ast_expr::release() { - isl_ast_expr *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::is_null() const { +bool ast_node_list::is_null() const { return ptr == nullptr; } - -isl::ctx ast_expr::ctx() const { - return isl::ctx(isl_ast_expr_get_ctx(ptr)); -} - -void ast_expr::dump() const { - isl_ast_expr_dump(get()); -} - - -isl::ast_expr ast_expr::access(isl::ast_expr_list indices) const -{ - auto res = isl_ast_expr_access(copy(), indices.release()); - return manage(res); -} - -isl::ast_expr ast_expr::add(isl::ast_expr expr2) const -{ - auto res = isl_ast_expr_add(copy(), expr2.release()); - return manage(res); -} - -isl::ast_expr ast_expr::address_of() const -{ - auto res = isl_ast_expr_address_of(copy()); - return manage(res); +isl::ctx ast_node_list::ctx() const { + return isl::ctx(isl_ast_node_list_get_ctx(ptr)); } -isl::ast_expr ast_expr::call(isl::ast_expr_list arguments) const +isl::ast_node_list ast_node_list::add(isl::ast_node el) const { - auto res = isl_ast_expr_call(copy(), arguments.release()); + auto res = isl_ast_node_list_add(copy(), el.release()); return manage(res); } -isl::ast_expr ast_expr::div(isl::ast_expr expr2) const +isl::ast_node ast_node_list::at(int index) const { - auto res = isl_ast_expr_div(copy(), expr2.release()); + auto res = isl_ast_node_list_get_at(get(), index); return manage(res); } -isl::ast_expr ast_expr::eq(isl::ast_expr expr2) const +isl::ast_node ast_node_list::get_at(int index) const { - auto res = isl_ast_expr_eq(copy(), expr2.release()); - return manage(res); + return at(index); } -isl::ast_expr ast_expr::from_id(isl::id id) +isl::ast_node_list ast_node_list::clear() const { - auto res = isl_ast_expr_from_id(id.release()); + auto res = isl_ast_node_list_clear(copy()); return manage(res); } -isl::ast_expr ast_expr::from_val(isl::val v) +isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const { - auto res = isl_ast_expr_from_val(v.release()); + auto res = isl_ast_node_list_concat(copy(), list2.release()); return manage(res); } -isl::ast_expr ast_expr::ge(isl::ast_expr expr2) const +isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const { - auto res = isl_ast_expr_ge(copy(), expr2.release()); + auto res = isl_ast_node_list_drop(copy(), first, n); return manage(res); } -isl::id ast_expr::get_id() const +stat ast_node_list::foreach(const std::function &fn) const { - auto res = isl_ast_expr_get_id(get()); + struct fn_data { + 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); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data); return manage(res); } -isl::ast_expr ast_expr::get_op_arg(int pos) const +isl::ast_node_list ast_node_list::insert(unsigned int pos, isl::ast_node el) const { - auto res = isl_ast_expr_get_op_arg(get(), pos); + auto res = isl_ast_node_list_insert(copy(), pos, el.release()); return manage(res); } -isl_size ast_expr::get_op_n_arg() const -{ - auto res = isl_ast_expr_get_op_n_arg(get()); - return res; -} - -isl::val ast_expr::get_val() const +class size ast_node_list::size() const { - auto res = isl_ast_expr_get_val(get()); + auto res = isl_ast_node_list_size(get()); return manage(res); } -isl::ast_expr ast_expr::gt(isl::ast_expr expr2) const +inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj) { - auto res = isl_ast_expr_gt(copy(), expr2.release()); - return manage(res); + char *str = isl_ast_node_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::id ast_expr::id_get_id() const -{ - auto res = isl_ast_expr_id_get_id(get()); - return manage(res); -} +// implementations for isl::ast_node_mark +ast_node_mark::ast_node_mark() + : ast_node() {} -isl::val ast_expr::int_get_val() const +ast_node_mark::ast_node_mark(const ast_node_mark &obj) + : ast_node(obj) { - auto res = isl_ast_expr_int_get_val(get()); - return manage(res); } -boolean ast_expr::is_equal(const isl::ast_expr &expr2) const -{ - auto res = isl_ast_expr_is_equal(get(), expr2.get()); - return manage(res); -} +ast_node_mark::ast_node_mark(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} -isl::ast_expr ast_expr::le(isl::ast_expr expr2) const -{ - auto res = isl_ast_expr_le(copy(), expr2.release()); - return manage(res); +ast_node_mark &ast_node_mark::operator=(ast_node_mark obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl::ast_expr ast_expr::lt(isl::ast_expr expr2) const -{ - auto res = isl_ast_expr_lt(copy(), expr2.release()); - return manage(res); +isl::ctx ast_node_mark::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); } -isl::ast_expr ast_expr::mul(isl::ast_expr expr2) const +isl::id ast_node_mark::id() const { - auto res = isl_ast_expr_mul(copy(), expr2.release()); + auto res = isl_ast_node_mark_get_id(get()); return manage(res); } -isl::ast_expr ast_expr::neg() const +isl::id ast_node_mark::get_id() const { - auto res = isl_ast_expr_neg(copy()); - return manage(res); + return id(); } -isl::ast_expr ast_expr::op_get_arg(int pos) const +isl::ast_node ast_node_mark::node() const { - auto res = isl_ast_expr_op_get_arg(get(), pos); + auto res = isl_ast_node_mark_get_node(get()); return manage(res); } -isl_size ast_expr::op_get_n_arg() const +isl::ast_node ast_node_mark::get_node() const { - auto res = isl_ast_expr_op_get_n_arg(get()); - return res; + return node(); } -isl::ast_expr ast_expr::pdiv_q(isl::ast_expr expr2) const +inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj) { - auto res = isl_ast_expr_pdiv_q(copy(), expr2.release()); - return manage(res); + char *str = isl_ast_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::ast_expr ast_expr::pdiv_r(isl::ast_expr expr2) const +// 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) { - auto res = isl_ast_expr_pdiv_r(copy(), expr2.release()); - return manage(res); } -isl::ast_expr ast_expr::set_op_arg(int pos, isl::ast_expr arg) const -{ - auto res = isl_ast_expr_set_op_arg(copy(), pos, arg.release()); - return manage(res); +ast_node_user::ast_node_user(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_user &ast_node_user::operator=(ast_node_user obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_node_user::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); } -isl::ast_expr ast_expr::sub(isl::ast_expr expr2) const +isl::ast_expr ast_node_user::expr() const { - auto res = isl_ast_expr_sub(copy(), expr2.release()); + auto res = isl_ast_node_user_get_expr(get()); return manage(res); } -isl::ast_expr ast_expr::substitute_ids(isl::id_to_ast_expr id2expr) const +isl::ast_expr ast_node_user::get_expr() const { - auto res = isl_ast_expr_substitute_ids(copy(), id2expr.release()); - return manage(res); + return expr(); } -std::string ast_expr::to_C_str() const +inline std::ostream &operator<<(std::ostream &os, const ast_node_user &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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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::basic_map +basic_map manage(__isl_take isl_basic_map *ptr) { + return basic_map(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); +basic_map manage_copy(__isl_keep isl_basic_map *ptr) { + ptr = isl_basic_map_copy(ptr); + return basic_map(ptr); } -ast_expr_list::ast_expr_list() +basic_map::basic_map() : ptr(nullptr) {} -ast_expr_list::ast_expr_list(const ast_expr_list &obj) +basic_map::basic_map(const basic_map &obj) : ptr(nullptr) { ptr = obj.copy(); } - -ast_expr_list::ast_expr_list(__isl_take isl_ast_expr_list *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_expr_list &ast_expr_list::operator=(ast_expr_list obj) { +basic_map &basic_map::operator=(basic_map obj) { std::swap(this->ptr, obj.ptr); return *this; } -ast_expr_list::~ast_expr_list() { +basic_map::~basic_map() { if (ptr) - isl_ast_expr_list_free(ptr); + isl_basic_map_free(ptr); } -__isl_give isl_ast_expr_list *ast_expr_list::copy() const & { - return isl_ast_expr_list_copy(ptr); +__isl_give isl_basic_map *basic_map::copy() const & { + return isl_basic_map_copy(ptr); } -__isl_keep isl_ast_expr_list *ast_expr_list::get() const { +__isl_keep isl_basic_map *basic_map::get() const { return ptr; } -__isl_give isl_ast_expr_list *ast_expr_list::release() { - isl_ast_expr_list *tmp = ptr; +__isl_give isl_basic_map *basic_map::release() { + isl_basic_map *tmp = ptr; ptr = nullptr; return tmp; } -bool ast_expr_list::is_null() const { +bool basic_map::is_null() const { return ptr == nullptr; } - -isl::ctx ast_expr_list::ctx() const { - return isl::ctx(isl_ast_expr_list_get_ctx(ptr)); -} - -void ast_expr_list::dump() const { - isl_ast_expr_list_dump(get()); +isl::ctx basic_map::ctx() const { + return isl::ctx(isl_basic_map_get_ctx(ptr)); } - -isl::ast_expr_list ast_expr_list::add(isl::ast_expr el) const +isl::map basic_map::add_constraint(const isl::constraint &constraint) const { - auto res = isl_ast_expr_list_add(copy(), el.release()); - return manage(res); + return isl::map(*this).add_constraint(constraint); } -isl::ast_expr_list ast_expr_list::alloc(isl::ctx ctx, int n) +isl::map basic_map::add_dims(isl::dim type, unsigned int n) const { - auto res = isl_ast_expr_list_alloc(ctx.release(), n); - return manage(res); + return isl::map(*this).add_dims(type, n); } -isl::ast_expr_list ast_expr_list::clear() const +isl::basic_map basic_map::affine_hull() const { - auto res = isl_ast_expr_list_clear(copy()); + auto res = isl_basic_map_affine_hull(copy()); return manage(res); } -isl::ast_expr_list ast_expr_list::concat(isl::ast_expr_list list2) const +isl::map basic_map::align_params(const isl::space &model) const { - auto res = isl_ast_expr_list_concat(copy(), list2.release()); - return manage(res); + return isl::map(*this).align_params(model); } -isl::ast_expr_list ast_expr_list::drop(unsigned int first, unsigned int n) const +isl::basic_map basic_map::apply_domain(isl::basic_map bmap2) const { - auto res = isl_ast_expr_list_drop(copy(), first, n); + auto res = isl_basic_map_apply_domain(copy(), bmap2.release()); return manage(res); } -stat ast_expr_list::foreach(const std::function &fn) const +isl::map basic_map::apply_domain(const isl::map &map2) const { - struct fn_data { - const std::function *func; - } fn_data = { &fn }; - auto fn_lambda = [](isl_ast_expr *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_expr_list_foreach(get(), fn_lambda, &fn_data); - return manage(res); + return isl::map(*this).apply_domain(map2); } -isl::ast_expr_list ast_expr_list::from_ast_expr(isl::ast_expr el) +isl::union_map basic_map::apply_domain(const isl::union_map &umap2) const { - auto res = isl_ast_expr_list_from_ast_expr(el.release()); - return manage(res); + return isl::map(*this).apply_domain(umap2); } -isl::ast_expr ast_expr_list::get_ast_expr(int index) const +isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const { - auto res = isl_ast_expr_list_get_ast_expr(get(), index); + auto res = isl_basic_map_apply_range(copy(), bmap2.release()); return manage(res); } -isl::ast_expr ast_expr_list::get_at(int index) const +isl::map basic_map::apply_range(const isl::map &map2) const { - auto res = isl_ast_expr_list_get_at(get(), index); - return manage(res); + return isl::map(*this).apply_range(map2); } -isl::ast_expr_list ast_expr_list::insert(unsigned int pos, isl::ast_expr el) const +isl::union_map basic_map::apply_range(const isl::union_map &umap2) const { - auto res = isl_ast_expr_list_insert(copy(), pos, el.release()); - return manage(res); + return isl::map(*this).apply_range(umap2); } -isl_size ast_expr_list::n_ast_expr() const +isl::map basic_map::as_map() const { - auto res = isl_ast_expr_list_n_ast_expr(get()); - return res; + return isl::map(*this).as_map(); } -isl::ast_expr_list ast_expr_list::reverse() const +isl::multi_union_pw_aff basic_map::as_multi_union_pw_aff() const { - auto res = isl_ast_expr_list_reverse(copy()); - return manage(res); + return isl::map(*this).as_multi_union_pw_aff(); } -isl::ast_expr_list ast_expr_list::set_ast_expr(int index, isl::ast_expr el) const +isl::pw_multi_aff basic_map::as_pw_multi_aff() const { - auto res = isl_ast_expr_list_set_ast_expr(copy(), index, el.release()); - return manage(res); + return isl::map(*this).as_pw_multi_aff(); } -isl_size ast_expr_list::size() const +isl::union_pw_multi_aff basic_map::as_union_pw_multi_aff() const { - auto res = isl_ast_expr_list_size(get()); - return res; + return isl::map(*this).as_union_pw_multi_aff(); } -isl::ast_expr_list ast_expr_list::swap(unsigned int pos1, unsigned int pos2) const +isl::basic_map_list basic_map::basic_map_list() const { - auto res = isl_ast_expr_list_swap(copy(), pos1, pos2); - return manage(res); -} - -// implementations for isl::ast_node -ast_node manage(__isl_take isl_ast_node *ptr) { - return ast_node(ptr); -} -ast_node manage_copy(__isl_keep isl_ast_node *ptr) { - ptr = isl_ast_node_copy(ptr); - return ast_node(ptr); + return isl::map(*this).basic_map_list(); } -ast_node::ast_node() - : ptr(nullptr) {} - -ast_node::ast_node(const ast_node &obj) - : ptr(nullptr) +isl::set basic_map::bind_domain(const isl::multi_id &tuple) const { - ptr = obj.copy(); -} - - -ast_node::ast_node(__isl_take isl_ast_node *ptr) - : ptr(ptr) {} - - -ast_node &ast_node::operator=(ast_node obj) { - std::swap(this->ptr, obj.ptr); - return *this; -} - -ast_node::~ast_node() { - if (ptr) - isl_ast_node_free(ptr); -} - -__isl_give isl_ast_node *ast_node::copy() const & { - return isl_ast_node_copy(ptr); + return isl::map(*this).bind_domain(tuple); } -__isl_keep isl_ast_node *ast_node::get() const { - return ptr; +isl::set basic_map::bind_range(const isl::multi_id &tuple) const +{ + return isl::map(*this).bind_range(tuple); } -__isl_give isl_ast_node *ast_node::release() { - isl_ast_node *tmp = ptr; - ptr = nullptr; - return tmp; +boolean basic_map::can_curry() const +{ + return isl::map(*this).can_curry(); } -bool ast_node::is_null() const { - return ptr == nullptr; +isl::map basic_map::coalesce() const +{ + return isl::map(*this).coalesce(); } - -isl::ctx ast_node::ctx() const { - return isl::ctx(isl_ast_node_get_ctx(ptr)); +isl::map basic_map::complement() const +{ + return isl::map(*this).complement(); } -void ast_node::dump() const { - isl_ast_node_dump(get()); +isl::union_map basic_map::compute_divs() const +{ + return isl::map(*this).compute_divs(); } - -isl::ast_node ast_node::alloc_user(isl::ast_expr expr) +isl::map basic_map::curry() const { - auto res = isl_ast_node_alloc_user(expr.release()); - return manage(res); + return isl::map(*this).curry(); } -isl::ast_node_list ast_node::block_get_children() const +isl::basic_set basic_map::deltas() const { - auto res = isl_ast_node_block_get_children(get()); + auto res = isl_basic_map_deltas(copy()); return manage(res); } -isl::ast_node ast_node::for_get_body() const +isl::basic_map basic_map::detect_equalities() const { - auto res = isl_ast_node_for_get_body(get()); + auto res = isl_basic_map_detect_equalities(copy()); return manage(res); } -isl::ast_expr ast_node::for_get_cond() const +class size basic_map::dim(isl::dim type) const { - auto res = isl_ast_node_for_get_cond(get()); - return manage(res); + return isl::map(*this).dim(type); } -isl::ast_expr ast_node::for_get_inc() const +isl::pw_aff basic_map::dim_max(int pos) const { - auto res = isl_ast_node_for_get_inc(get()); - return manage(res); + return isl::map(*this).dim_max(pos); } -isl::ast_expr ast_node::for_get_init() const +isl::pw_aff basic_map::dim_min(int pos) const { - auto res = isl_ast_node_for_get_init(get()); - return manage(res); + return isl::map(*this).dim_min(pos); } -isl::ast_expr ast_node::for_get_iterator() const +isl::basic_set basic_map::domain() const { - auto res = isl_ast_node_for_get_iterator(get()); + auto res = isl_basic_map_domain(copy()); return manage(res); } -boolean ast_node::for_is_degenerate() const +isl::map basic_map::domain_factor_domain() const { - auto res = isl_ast_node_for_is_degenerate(get()); - return manage(res); + return isl::map(*this).domain_factor_domain(); } -isl::id ast_node::get_annotation() const +isl::map basic_map::domain_factor_range() const { - auto res = isl_ast_node_get_annotation(get()); - return manage(res); + return isl::map(*this).domain_factor_range(); } -isl::ast_expr ast_node::if_get_cond() const +isl::map basic_map::domain_map() const { - auto res = isl_ast_node_if_get_cond(get()); - return manage(res); + return isl::map(*this).domain_map(); } -isl::ast_node ast_node::if_get_else() const +isl::union_pw_multi_aff basic_map::domain_map_union_pw_multi_aff() const { - auto res = isl_ast_node_if_get_else(get()); - return manage(res); + return isl::map(*this).domain_map_union_pw_multi_aff(); } -isl::ast_node ast_node::if_get_else_node() const +isl::map basic_map::domain_product(const isl::map &map2) const { - auto res = isl_ast_node_if_get_else_node(get()); - return manage(res); + return isl::map(*this).domain_product(map2); } -isl::ast_node ast_node::if_get_then() const +isl::union_map basic_map::domain_product(const isl::union_map &umap2) const { - auto res = isl_ast_node_if_get_then(get()); - return manage(res); + return isl::map(*this).domain_product(umap2); } -isl::ast_node ast_node::if_get_then_node() const +class size basic_map::domain_tuple_dim() const { - auto res = isl_ast_node_if_get_then_node(get()); - return manage(res); + return isl::map(*this).domain_tuple_dim(); } -boolean ast_node::if_has_else() const +isl::id basic_map::domain_tuple_id() const { - auto res = isl_ast_node_if_has_else(get()); - return manage(res); + return isl::map(*this).domain_tuple_id(); } -boolean ast_node::if_has_else_node() const +isl::map basic_map::eq_at(const isl::multi_pw_aff &mpa) const { - auto res = isl_ast_node_if_has_else_node(get()); - return manage(res); + return isl::map(*this).eq_at(mpa); } -isl::id ast_node::mark_get_id() const +isl::union_map basic_map::eq_at(const isl::multi_union_pw_aff &mupa) const { - auto res = isl_ast_node_mark_get_id(get()); - return manage(res); + return isl::map(*this).eq_at(mupa); } -isl::ast_node ast_node::mark_get_node() const +isl::basic_map basic_map::equal(isl::space space, unsigned int n_equal) { - auto res = isl_ast_node_mark_get_node(get()); + auto res = isl_basic_map_equal(space.release(), n_equal); return manage(res); } -isl::ast_node ast_node::set_annotation(isl::id annotation) const +isl::basic_map basic_map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const { - auto res = isl_ast_node_set_annotation(copy(), annotation.release()); + auto res = isl_basic_map_equate(copy(), static_cast(type1), pos1, static_cast(type2), pos2); return manage(res); } -std::string ast_node::to_C_str() const +boolean basic_map::every_map(const std::function &test) const { - auto res = isl_ast_node_to_C_str(get()); - std::string tmp(res); - free(res); - return tmp; + return isl::map(*this).every_map(test); } -isl::ast_expr ast_node::user_get_expr() const +isl::map basic_map::extract_map(const isl::space &space) const { - auto res = isl_ast_node_user_get_expr(get()); - return manage(res); -} - -// implementations for isl::ast_node_list -ast_node_list manage(__isl_take isl_ast_node_list *ptr) { - return ast_node_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); + return isl::map(*this).extract_map(space); } -ast_node_list::ast_node_list() - : ptr(nullptr) {} - -ast_node_list::ast_node_list(const ast_node_list &obj) - : ptr(nullptr) +isl::map basic_map::factor_domain() const { - ptr = obj.copy(); -} - - -ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr) - : ptr(ptr) {} - - -ast_node_list &ast_node_list::operator=(ast_node_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; -} - -ast_node_list::~ast_node_list() { - if (ptr) - isl_ast_node_list_free(ptr); -} - -__isl_give isl_ast_node_list *ast_node_list::copy() const & { - return isl_ast_node_list_copy(ptr); + return isl::map(*this).factor_domain(); } -__isl_keep isl_ast_node_list *ast_node_list::get() const { - return ptr; +isl::map basic_map::factor_range() const +{ + return isl::map(*this).factor_range(); } -__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::fix_si(isl::dim type, unsigned int pos, int value) const +{ + auto res = isl_basic_map_fix_si(copy(), static_cast(type), pos, value); + return manage(res); } -bool ast_node_list::is_null() const { - return ptr == nullptr; +isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, isl::val v) const +{ + auto res = isl_basic_map_fix_val(copy(), static_cast(type), pos, v.release()); + return manage(res); } - -isl::ctx ast_node_list::ctx() const { - return isl::ctx(isl_ast_node_list_get_ctx(ptr)); +isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, long v) const +{ + return this->fix_val(type, pos, isl::val(ctx(), v)); } -void ast_node_list::dump() const { - isl_ast_node_list_dump(get()); +isl::union_map basic_map::fixed_power(const isl::val &exp) const +{ + return isl::map(*this).fixed_power(exp); } - -isl::ast_node_list ast_node_list::add(isl::ast_node el) const +isl::union_map basic_map::fixed_power(long exp) const { - auto res = isl_ast_node_list_add(copy(), el.release()); - return manage(res); + return this->fixed_power(isl::val(ctx(), exp)); } -isl::ast_node_list ast_node_list::alloc(isl::ctx ctx, int n) +isl::map basic_map::flat_range_product(const isl::map &map2) const { - auto res = isl_ast_node_list_alloc(ctx.release(), n); - return manage(res); + return isl::map(*this).flat_range_product(map2); } -isl::ast_node_list ast_node_list::clear() const +isl::union_map basic_map::flat_range_product(const isl::union_map &umap2) const { - auto res = isl_ast_node_list_clear(copy()); - return manage(res); + return isl::map(*this).flat_range_product(umap2); } -isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const +isl::basic_map basic_map::flatten() const { - auto res = isl_ast_node_list_concat(copy(), list2.release()); + auto res = isl_basic_map_flatten(copy()); return manage(res); } -isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const +isl::basic_map basic_map::flatten_domain() const { - auto res = isl_ast_node_list_drop(copy(), first, n); + auto res = isl_basic_map_flatten_domain(copy()); return manage(res); } -stat ast_node_list::foreach(const std::function &fn) const +isl::basic_map basic_map::flatten_range() 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); + auto res = isl_basic_map_flatten_range(copy()); return manage(res); } -isl::ast_node_list ast_node_list::from_ast_node(isl::ast_node el) +isl::map basic_map::floordiv_val(const isl::val &d) const { - auto res = isl_ast_node_list_from_ast_node(el.release()); - return manage(res); + return isl::map(*this).floordiv_val(d); } -isl::ast_node ast_node_list::get_ast_node(int index) const +isl::map basic_map::floordiv_val(long d) const { - auto res = isl_ast_node_list_get_ast_node(get(), index); - return manage(res); + return this->floordiv_val(isl::val(ctx(), d)); } -isl::ast_node ast_node_list::get_at(int index) const +stat basic_map::foreach_basic_map(const std::function &fn) const { - auto res = isl_ast_node_list_get_at(get(), index); - return manage(res); + return isl::map(*this).foreach_basic_map(fn); } -isl::ast_node_list ast_node_list::insert(unsigned int pos, isl::ast_node el) const +stat basic_map::foreach_map(const std::function &fn) const { - auto res = isl_ast_node_list_insert(copy(), pos, el.release()); - return manage(res); + return isl::map(*this).foreach_map(fn); } -isl_size ast_node_list::n_ast_node() const +isl::basic_map basic_map::from_aff(isl::aff aff) { - auto res = isl_ast_node_list_n_ast_node(get()); - return res; + auto res = isl_basic_map_from_aff(aff.release()); + return manage(res); } -isl::ast_node_list ast_node_list::reverse() const +isl::basic_map basic_map::from_domain_and_range(isl::basic_set domain, isl::basic_set range) { - auto res = isl_ast_node_list_reverse(copy()); + auto res = isl_basic_map_from_domain_and_range(domain.release(), range.release()); return manage(res); } -isl::ast_node_list ast_node_list::set_ast_node(int index, isl::ast_node el) const +isl::basic_map basic_map::gist(isl::basic_map context) const { - auto res = isl_ast_node_list_set_ast_node(copy(), index, el.release()); + auto res = isl_basic_map_gist(copy(), context.release()); return manage(res); } -isl_size ast_node_list::size() const +isl::map basic_map::gist(const isl::map &context) const { - auto res = isl_ast_node_list_size(get()); - return res; + return isl::map(*this).gist(context); } -isl::ast_node_list ast_node_list::swap(unsigned int pos1, unsigned int pos2) const +isl::union_map basic_map::gist(const isl::union_map &context) const { - auto res = isl_ast_node_list_swap(copy(), pos1, pos2); - return manage(res); + return isl::map(*this).gist(context); } -// 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::map basic_map::gist_domain(const isl::set &context) const +{ + return isl::map(*this).gist_domain(context); } -basic_map::basic_map() - : ptr(nullptr) {} - -basic_map::basic_map(const basic_map &obj) - : ptr(nullptr) +isl::union_map basic_map::gist_domain(const isl::union_set &uset) const { - ptr = obj.copy(); + return isl::map(*this).gist_domain(uset); } - -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_params(const isl::set &context) const { - auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str()); - ptr = res; + return isl::map(*this).gist_params(context); } -basic_map &basic_map::operator=(basic_map obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::union_map basic_map::gist_range(const isl::union_set &uset) const +{ + return isl::map(*this).gist_range(uset); } -basic_map::~basic_map() { - if (ptr) - isl_basic_map_free(ptr); +boolean basic_map::has_domain_tuple_id() const +{ + return isl::map(*this).has_domain_tuple_id(); } -__isl_give isl_basic_map *basic_map::copy() const & { - return isl_basic_map_copy(ptr); +boolean basic_map::has_equal_space(const isl::map &map2) const +{ + return isl::map(*this).has_equal_space(map2); } -__isl_keep isl_basic_map *basic_map::get() const { - return ptr; +boolean basic_map::has_range_tuple_id() const +{ + return isl::map(*this).has_range_tuple_id(); } -__isl_give isl_basic_map *basic_map::release() { - isl_basic_map *tmp = ptr; - ptr = nullptr; - return tmp; +boolean basic_map::has_tuple_id(isl::dim type) const +{ + return isl::map(*this).has_tuple_id(type); } -bool basic_map::is_null() const { - return ptr == nullptr; +boolean basic_map::has_tuple_name(isl::dim type) const +{ + return isl::map(*this).has_tuple_name(type); } - -isl::ctx basic_map::ctx() const { - return isl::ctx(isl_basic_map_get_ctx(ptr)); +isl::basic_map basic_map::intersect(isl::basic_map bmap2) const +{ + auto res = isl_basic_map_intersect(copy(), bmap2.release()); + return manage(res); } -void basic_map::dump() const { - isl_basic_map_dump(get()); +isl::map basic_map::intersect(const isl::map &map2) const +{ + return isl::map(*this).intersect(map2); } +isl::union_map basic_map::intersect(const isl::union_map &umap2) const +{ + return isl::map(*this).intersect(umap2); +} -isl::basic_map basic_map::add_constraint(isl::constraint constraint) const +isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const { - auto res = isl_basic_map_add_constraint(copy(), constraint.release()); + auto res = isl_basic_map_intersect_domain(copy(), bset.release()); return manage(res); } -isl::basic_map basic_map::add_dims(isl::dim type, unsigned int n) const +isl::map basic_map::intersect_domain(const isl::set &set) const { - auto res = isl_basic_map_add_dims(copy(), static_cast(type), n); - return manage(res); + return isl::map(*this).intersect_domain(set); } -isl::basic_map basic_map::affine_hull() const +isl::union_map basic_map::intersect_domain(const isl::space &space) const { - auto res = isl_basic_map_affine_hull(copy()); - return manage(res); + return isl::map(*this).intersect_domain(space); } -isl::basic_map basic_map::align_params(isl::space model) const +isl::union_map basic_map::intersect_domain(const isl::union_set &uset) const { - auto res = isl_basic_map_align_params(copy(), model.release()); - return manage(res); + return isl::map(*this).intersect_domain(uset); } -isl::basic_map basic_map::apply_domain(isl::basic_map bmap2) const +isl::basic_map basic_map::intersect_domain(const isl::point &bset) const { - auto res = isl_basic_map_apply_domain(copy(), bmap2.release()); - return manage(res); + return this->intersect_domain(isl::basic_set(bset)); } -isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const +isl::map basic_map::intersect_domain_factor_domain(const isl::map &factor) const { - auto res = isl_basic_map_apply_range(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).intersect_domain_factor_domain(factor); } -boolean basic_map::can_curry() const +isl::union_map basic_map::intersect_domain_factor_domain(const isl::union_map &factor) const { - auto res = isl_basic_map_can_curry(get()); - return manage(res); + return isl::map(*this).intersect_domain_factor_domain(factor); } -boolean basic_map::can_uncurry() const +isl::map basic_map::intersect_domain_factor_range(const isl::map &factor) const { - auto res = isl_basic_map_can_uncurry(get()); - return manage(res); + return isl::map(*this).intersect_domain_factor_range(factor); } -boolean basic_map::can_zip() const +isl::union_map basic_map::intersect_domain_factor_range(const isl::union_map &factor) const { - auto res = isl_basic_map_can_zip(get()); - return manage(res); + return isl::map(*this).intersect_domain_factor_range(factor); } -isl::basic_map basic_map::curry() const +isl::map basic_map::intersect_params(const isl::set ¶ms) const { - auto res = isl_basic_map_curry(copy()); - return manage(res); + return isl::map(*this).intersect_params(params); } -isl::basic_set basic_map::deltas() const +isl::basic_map basic_map::intersect_range(isl::basic_set bset) const { - auto res = isl_basic_map_deltas(copy()); + auto res = isl_basic_map_intersect_range(copy(), bset.release()); return manage(res); } -isl::basic_map basic_map::deltas_map() const +isl::map basic_map::intersect_range(const isl::set &set) const { - auto res = isl_basic_map_deltas_map(copy()); - return manage(res); + return isl::map(*this).intersect_range(set); } -isl::basic_map basic_map::detect_equalities() const +isl::union_map basic_map::intersect_range(const isl::space &space) const { - auto res = isl_basic_map_detect_equalities(copy()); - return manage(res); + return isl::map(*this).intersect_range(space); } -isl_size basic_map::dim(isl::dim type) const +isl::union_map basic_map::intersect_range(const isl::union_set &uset) const { - auto res = isl_basic_map_dim(get(), static_cast(type)); - return res; + return isl::map(*this).intersect_range(uset); } -isl::basic_set basic_map::domain() const +isl::basic_map basic_map::intersect_range(const isl::point &bset) const { - auto res = isl_basic_map_domain(copy()); - return manage(res); + return this->intersect_range(isl::basic_set(bset)); } -isl::basic_map basic_map::domain_map() const +isl::map basic_map::intersect_range_factor_domain(const isl::map &factor) const { - auto res = isl_basic_map_domain_map(copy()); - return manage(res); + return isl::map(*this).intersect_range_factor_domain(factor); } -isl::basic_map basic_map::domain_product(isl::basic_map bmap2) const +isl::union_map basic_map::intersect_range_factor_domain(const isl::union_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::map basic_map::intersect_range_factor_range(const isl::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_range(factor); } -isl::basic_map basic_map::drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_map basic_map::intersect_range_factor_range(const isl::union_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 +boolean basic_map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_map_drop_unused_params(copy()); - return manage(res); + return isl::map(*this).involves_dims(type, first, n); } -isl::basic_map basic_map::eliminate(isl::dim type, unsigned int first, unsigned int n) const +boolean basic_map::is_bijective() const { - auto res = isl_basic_map_eliminate(copy(), static_cast(type), first, n); - return manage(res); + return isl::map(*this).is_bijective(); } -isl::basic_map basic_map::empty(isl::space space) +boolean basic_map::is_disjoint(const isl::map &map2) const { - auto res = isl_basic_map_empty(space.release()); - return manage(res); + return isl::map(*this).is_disjoint(map2); } -isl::basic_map basic_map::equal(isl::space space, unsigned int n_equal) +boolean basic_map::is_disjoint(const isl::union_map &umap2) const { - auto res = isl_basic_map_equal(space.release(), n_equal); - return manage(res); + return isl::map(*this).is_disjoint(umap2); } -isl::mat basic_map::equalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4, isl::dim c5) const +boolean basic_map::is_empty() const { - auto res = isl_basic_map_equalities_matrix(get(), static_cast(c1), static_cast(c2), static_cast(c3), static_cast(c4), static_cast(c5)); + auto res = isl_basic_map_is_empty(get()); return manage(res); } -isl::basic_map basic_map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const +boolean basic_map::is_equal(const isl::basic_map &bmap2) const { - auto res = isl_basic_map_equate(copy(), static_cast(type1), pos1, static_cast(type2), pos2); + auto res = isl_basic_map_is_equal(get(), bmap2.get()); return manage(res); } -int basic_map::find_dim_by_name(isl::dim type, const std::string &name) const +boolean basic_map::is_equal(const isl::map &map2) const { - auto res = isl_basic_map_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + return isl::map(*this).is_equal(map2); } -isl::basic_map basic_map::fix_si(isl::dim type, unsigned int pos, int value) const +boolean basic_map::is_equal(const isl::union_map &umap2) const { - auto res = isl_basic_map_fix_si(copy(), static_cast(type), pos, value); - return manage(res); + return isl::map(*this).is_equal(umap2); } -isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, isl::val v) const +boolean basic_map::is_injective() const { - auto res = isl_basic_map_fix_val(copy(), static_cast(type), pos, v.release()); - return manage(res); + return isl::map(*this).is_injective(); } -isl::basic_map basic_map::flat_product(isl::basic_map bmap2) const +boolean basic_map::is_single_valued() const { - auto res = isl_basic_map_flat_product(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).is_single_valued(); } -isl::basic_map basic_map::flat_range_product(isl::basic_map bmap2) const +boolean basic_map::is_strict_subset(const isl::map &map2) const { - auto res = isl_basic_map_flat_range_product(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).is_strict_subset(map2); } -isl::basic_map basic_map::flatten() const +boolean basic_map::is_strict_subset(const isl::union_map &umap2) const { - auto res = isl_basic_map_flatten(copy()); - return manage(res); + return isl::map(*this).is_strict_subset(umap2); } -isl::basic_map basic_map::flatten_domain() const +boolean basic_map::is_subset(const isl::basic_map &bmap2) const { - auto res = isl_basic_map_flatten_domain(copy()); + auto res = isl_basic_map_is_subset(get(), bmap2.get()); return manage(res); } -isl::basic_map basic_map::flatten_range() const +boolean basic_map::is_subset(const isl::map &map2) const { - auto res = isl_basic_map_flatten_range(copy()); - return manage(res); + return isl::map(*this).is_subset(map2); } -stat basic_map::foreach_constraint(const std::function &fn) const +boolean basic_map::is_subset(const isl::union_map &umap2) 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(umap2); } -isl::basic_map basic_map::from_aff(isl::aff aff) +boolean basic_map::isa_map() const { - auto res = isl_basic_map_from_aff(aff.release()); - return manage(res); + return isl::map(*this).isa_map(); } -isl::basic_map basic_map::from_aff_list(isl::space domain_space, isl::aff_list list) +isl::map basic_map::lex_ge_at(const isl::multi_pw_aff &mpa) const { - auto res = isl_basic_map_from_aff_list(domain_space.release(), list.release()); - return manage(res); + return isl::map(*this).lex_ge_at(mpa); } -isl::basic_map basic_map::from_constraint(isl::constraint constraint) +isl::map basic_map::lex_gt_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_gt_at(mpa); } -isl::basic_map basic_map::from_domain(isl::basic_set bset) +isl::map basic_map::lex_le_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_le_at(mpa); } -isl::basic_map basic_map::from_domain_and_range(isl::basic_set domain, isl::basic_set range) +isl::map basic_map::lex_lt_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_lt_at(mpa); } -isl::basic_map basic_map::from_multi_aff(isl::multi_aff maff) +isl::map basic_map::lexmax() const { - auto res = isl_basic_map_from_multi_aff(maff.release()); + auto res = isl_basic_map_lexmax(copy()); return manage(res); } -isl::basic_map basic_map::from_qpolynomial(isl::qpolynomial qp) +isl::pw_multi_aff basic_map::lexmax_pw_multi_aff() const { - auto res = isl_basic_map_from_qpolynomial(qp.release()); - return manage(res); + return isl::map(*this).lexmax_pw_multi_aff(); } -isl::basic_map basic_map::from_range(isl::basic_set bset) +isl::map basic_map::lexmin() const { - auto res = isl_basic_map_from_range(bset.release()); + auto res = isl_basic_map_lexmin(copy()); return manage(res); } -isl::constraint_list basic_map::get_constraint_list() const +isl::pw_multi_aff basic_map::lexmin_pw_multi_aff() const { - auto res = isl_basic_map_get_constraint_list(get()); - return manage(res); + return isl::map(*this).lexmin_pw_multi_aff(); } -std::string basic_map::get_dim_name(isl::dim type, unsigned int pos) const +isl::map basic_map::lower_bound(const isl::multi_pw_aff &lower) const { - auto res = isl_basic_map_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + return isl::map(*this).lower_bound(lower); } -isl::aff basic_map::get_div(int pos) const +isl::map basic_map::lower_bound_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_basic_map_get_div(get(), pos); - return manage(res); + return isl::map(*this).lower_bound_si(type, pos, value); } -isl::local_space basic_map::get_local_space() const +isl::map_list basic_map::map_list() const { - auto res = isl_basic_map_get_local_space(get()); - return manage(res); + return isl::map(*this).map_list(); } -isl::space basic_map::get_space() const +isl::multi_pw_aff basic_map::max_multi_pw_aff() const { - auto res = isl_basic_map_get_space(get()); - return manage(res); + return isl::map(*this).max_multi_pw_aff(); } -std::string basic_map::get_tuple_name(isl::dim type) const +isl::multi_pw_aff basic_map::min_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).min_multi_pw_aff(); } -isl::basic_map basic_map::gist(isl::basic_map 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(copy(), context.release()); - return manage(res); + return isl::map(*this).move_dims(dst_type, dst_pos, src_type, src_pos, n); } -isl::basic_map basic_map::gist_domain(isl::basic_set context) const +class size basic_map::n_basic_map() const { - auto res = isl_basic_map_gist_domain(copy(), context.release()); - return manage(res); + return isl::map(*this).n_basic_map(); } -boolean basic_map::has_dim_id(isl::dim type, unsigned int pos) const +isl::map basic_map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const { - auto res = isl_basic_map_has_dim_id(get(), static_cast(type), pos); - return manage(res); + return isl::map(*this).order_lt(type1, pos1, type2, pos2); } -isl::basic_map basic_map::identity(isl::space space) +isl::set basic_map::params() const { - auto res = isl_basic_map_identity(space.release()); - return manage(res); + return isl::map(*this).params(); } -boolean basic_map::image_is_bounded() const +isl::val basic_map::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const { - auto res = isl_basic_map_image_is_bounded(get()); + auto res = isl_basic_map_plain_get_val_if_fixed(get(), static_cast(type), pos); return manage(res); } -isl::mat basic_map::inequalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4, isl::dim c5) const +isl::basic_map basic_map::polyhedral_hull() const { - auto res = isl_basic_map_inequalities_matrix(get(), static_cast(c1), static_cast(c2), static_cast(c3), static_cast(c4), static_cast(c5)); - return manage(res); + return isl::map(*this).polyhedral_hull(); } -isl::basic_map basic_map::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const +isl::map basic_map::preimage_domain(const isl::multi_aff &ma) const { - auto res = isl_basic_map_insert_dims(copy(), static_cast(type), pos, n); - return manage(res); + return isl::map(*this).preimage_domain(ma); } -isl::basic_map basic_map::intersect(isl::basic_map bmap2) const +isl::map basic_map::preimage_domain(const isl::multi_pw_aff &mpa) const { - auto res = isl_basic_map_intersect(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).preimage_domain(mpa); } -isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const +isl::map basic_map::preimage_domain(const isl::pw_multi_aff &pma) const { - auto res = isl_basic_map_intersect_domain(copy(), bset.release()); - return manage(res); + return isl::map(*this).preimage_domain(pma); } -isl::basic_map basic_map::intersect_range(isl::basic_set bset) const +isl::union_map basic_map::preimage_domain(const isl::union_pw_multi_aff &upma) const { - auto res = isl_basic_map_intersect_range(copy(), bset.release()); - return manage(res); + return isl::map(*this).preimage_domain(upma); } -boolean basic_map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::map basic_map::preimage_range(const isl::multi_aff &ma) const { - auto res = isl_basic_map_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return isl::map(*this).preimage_range(ma); } -boolean basic_map::is_disjoint(const isl::basic_map &bmap2) const +isl::map basic_map::preimage_range(const isl::pw_multi_aff &pma) const { - auto res = isl_basic_map_is_disjoint(get(), bmap2.get()); - return manage(res); + return isl::map(*this).preimage_range(pma); } -boolean basic_map::is_empty() const +isl::union_map basic_map::preimage_range(const isl::union_pw_multi_aff &upma) const { - auto res = isl_basic_map_is_empty(get()); - return manage(res); + return isl::map(*this).preimage_range(upma); } -boolean basic_map::is_equal(const isl::basic_map &bmap2) const +isl::map basic_map::product(const isl::map &map2) const { - auto res = isl_basic_map_is_equal(get(), bmap2.get()); - return manage(res); + return isl::map(*this).product(map2); } -boolean basic_map::is_rational() const +isl::union_map basic_map::product(const isl::union_map &umap2) const { - auto res = isl_basic_map_is_rational(get()); - return manage(res); + return isl::map(*this).product(umap2); } -boolean basic_map::is_single_valued() const +isl::map basic_map::project_out(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_map_is_single_valued(get()); - return manage(res); + return isl::map(*this).project_out(type, first, n); } -boolean basic_map::is_strict_subset(const isl::basic_map &bmap2) const +isl::map basic_map::project_out_all_params() const { - auto res = isl_basic_map_is_strict_subset(get(), bmap2.get()); - return manage(res); + return isl::map(*this).project_out_all_params(); } -boolean basic_map::is_subset(const isl::basic_map &bmap2) const +isl::set basic_map::range() const { - auto res = isl_basic_map_is_subset(get(), bmap2.get()); - return manage(res); + return isl::map(*this).range(); } -boolean basic_map::is_universe() const +isl::map basic_map::range_factor_domain() const { - auto res = isl_basic_map_is_universe(get()); - return manage(res); + return isl::map(*this).range_factor_domain(); } -isl::basic_map basic_map::less_at(isl::space space, unsigned int pos) +isl::map basic_map::range_factor_range() const { - auto res = isl_basic_map_less_at(space.release(), pos); - return manage(res); + return isl::map(*this).range_factor_range(); } -isl::map basic_map::lexmax() const +isl::fixed_box basic_map::range_lattice_tile() const { - auto res = isl_basic_map_lexmax(copy()); - return manage(res); + return isl::map(*this).range_lattice_tile(); } -isl::map basic_map::lexmin() const +isl::map basic_map::range_map() const { - auto res = isl_basic_map_lexmin(copy()); - return manage(res); + return isl::map(*this).range_map(); } -isl::pw_multi_aff basic_map::lexmin_pw_multi_aff() const +isl::map basic_map::range_product(const isl::map &map2) const { - auto res = isl_basic_map_lexmin_pw_multi_aff(copy()); - return manage(res); + return isl::map(*this).range_product(map2); } -isl::basic_map basic_map::lower_bound_si(isl::dim type, unsigned int pos, int value) const +isl::union_map basic_map::range_product(const isl::union_map &umap2) const { - auto res = isl_basic_map_lower_bound_si(copy(), static_cast(type), pos, value); - return manage(res); + return isl::map(*this).range_product(umap2); } -isl::basic_map basic_map::more_at(isl::space space, unsigned int pos) +isl::map basic_map::range_reverse() const { - auto res = isl_basic_map_more_at(space.release(), pos); - return manage(res); + return isl::map(*this).range_reverse(); } -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::fixed_box basic_map::range_simple_fixed_box_hull() 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_simple_fixed_box_hull(); } -isl_size basic_map::n_constraint() const +class size basic_map::range_tuple_dim() const { - auto res = isl_basic_map_n_constraint(get()); - return res; + return isl::map(*this).range_tuple_dim(); } -isl::basic_map basic_map::nat_universe(isl::space space) +isl::id basic_map::range_tuple_id() const { - auto res = isl_basic_map_nat_universe(space.release()); - return manage(res); + return isl::map(*this).range_tuple_id(); } -isl::basic_map basic_map::neg() const +isl::basic_map basic_map::reverse() const { - auto res = isl_basic_map_neg(copy()); + auto res = isl_basic_map_reverse(copy()); return manage(res); } -isl::basic_map basic_map::order_ge(isl::dim type1, int pos1, isl::dim type2, int pos2) const +isl::basic_map basic_map::sample() const { - auto res = isl_basic_map_order_ge(copy(), static_cast(type1), pos1, static_cast(type2), pos2); + auto res = isl_basic_map_sample(copy()); return manage(res); } -isl::basic_map basic_map::order_gt(isl::dim type1, int pos1, isl::dim type2, int pos2) const +isl::map basic_map::set_domain_tuple(const isl::id &id) const { - auto res = isl_basic_map_order_gt(copy(), static_cast(type1), pos1, static_cast(type2), pos2); - return manage(res); + return isl::map(*this).set_domain_tuple(id); } -isl::val basic_map::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const +isl::map basic_map::set_domain_tuple(const std::string &id) const { - auto res = isl_basic_map_plain_get_val_if_fixed(get(), static_cast(type), pos); - return manage(res); + return this->set_domain_tuple(isl::id(ctx(), id)); } -boolean basic_map::plain_is_empty() const +isl::map basic_map::set_range_tuple(const isl::id &id) const { - auto res = isl_basic_map_plain_is_empty(get()); - return manage(res); + return isl::map(*this).set_range_tuple(id); } -boolean basic_map::plain_is_universe() const +isl::map basic_map::set_range_tuple(const std::string &id) const { - auto res = isl_basic_map_plain_is_universe(get()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } -isl::basic_map basic_map::preimage_domain_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_domain_multi_aff(copy(), ma.release()); - return manage(res); + return isl::map(*this).set_tuple_id(type, 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 std::string &id) const { - auto res = isl_basic_map_preimage_range_multi_aff(copy(), ma.release()); - return manage(res); + return this->set_tuple_id(type, isl::id(ctx(), id)); } -isl::basic_map basic_map::product(isl::basic_map bmap2) const +isl::space basic_map::space() const { - auto res = isl_basic_map_product(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).space(); } -isl::basic_map basic_map::project_out(isl::dim type, unsigned int first, unsigned int n) const +isl::map basic_map::subtract(const isl::map &map2) const { - auto res = isl_basic_map_project_out(copy(), static_cast(type), first, n); - return manage(res); + return isl::map(*this).subtract(map2); } -isl::basic_set basic_map::range() const +isl::union_map basic_map::subtract(const isl::union_map &umap2) const { - auto res = isl_basic_map_range(copy()); - return manage(res); + return isl::map(*this).subtract(umap2); } -isl::basic_map basic_map::range_map() const +isl::union_map basic_map::subtract_domain(const isl::union_set &dom) const { - auto res = isl_basic_map_range_map(copy()); - return manage(res); + return isl::map(*this).subtract_domain(dom); } -isl::basic_map basic_map::range_product(isl::basic_map bmap2) const +isl::union_map basic_map::subtract_range(const isl::union_set &dom) const { - auto res = isl_basic_map_range_product(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).subtract_range(dom); } -isl::basic_map basic_map::remove_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::map basic_map::sum(const isl::map &map2) const { - auto res = isl_basic_map_remove_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::map(*this).sum(map2); } -isl::basic_map basic_map::remove_divs() const +isl::basic_map_list basic_map::to_list() const { - auto res = isl_basic_map_remove_divs(copy()); + auto res = isl_basic_map_to_list(copy()); return manage(res); } -isl::basic_map basic_map::remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_map basic_map::to_union_map() const { - auto res = isl_basic_map_remove_divs_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::map(*this).to_union_map(); } -isl::basic_map basic_map::remove_redundancies() const +isl::id basic_map::tuple_id(isl::dim type) const { - auto res = isl_basic_map_remove_redundancies(copy()); - return manage(res); + return isl::map(*this).tuple_id(type); } -isl::basic_map basic_map::reverse() const +isl::map basic_map::uncurry() const { - auto res = isl_basic_map_reverse(copy()); - return manage(res); + return isl::map(*this).uncurry(); } -isl::basic_map basic_map::sample() const +isl::map basic_map::unite(isl::basic_map bmap2) const { - auto res = isl_basic_map_sample(copy()); + auto res = isl_basic_map_union(copy(), bmap2.release()); return manage(res); } -isl::basic_map basic_map::set_tuple_id(isl::dim type, isl::id id) const +isl::map basic_map::unite(const isl::map &map2) const { - auto res = isl_basic_map_set_tuple_id(copy(), static_cast(type), id.release()); - return manage(res); + return isl::map(*this).unite(map2); } -isl::basic_map basic_map::set_tuple_name(isl::dim type, const std::string &s) const +isl::union_map basic_map::unite(const isl::union_map &umap2) const { - auto res = isl_basic_map_set_tuple_name(copy(), static_cast(type), s.c_str()); - return manage(res); + return isl::map(*this).unite(umap2); } -isl::basic_map basic_map::sum(isl::basic_map bmap2) const +isl::basic_map basic_map::universe(isl::space space) { - auto res = isl_basic_map_sum(copy(), bmap2.release()); + auto res = isl_basic_map_universe(space.release()); return manage(res); } -isl::basic_map basic_map::uncurry() const +isl::basic_map basic_map::unshifted_simple_hull() const { - auto res = isl_basic_map_uncurry(copy()); - return manage(res); + return isl::map(*this).unshifted_simple_hull(); } -isl::map basic_map::unite(isl::basic_map bmap2) const +isl::map basic_map::upper_bound(const isl::multi_pw_aff &upper) const { - auto res = isl_basic_map_union(copy(), bmap2.release()); - return manage(res); + return isl::map(*this).upper_bound(upper); } -isl::basic_map basic_map::universe(isl::space space) +isl::map basic_map::upper_bound_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_basic_map_universe(space.release()); - return manage(res); + return isl::map(*this).upper_bound_si(type, pos, value); } -isl::basic_map basic_map::upper_bound_si(isl::dim type, unsigned int pos, int value) const +isl::set basic_map::wrap() const { - auto res = isl_basic_map_upper_bound_si(copy(), static_cast(type), pos, value); - return manage(res); + return isl::map(*this).wrap(); } -isl::basic_set basic_map::wrap() const +isl::map basic_map::zip() const { - auto res = isl_basic_map_wrap(copy()); - return manage(res); + return isl::map(*this).zip(); } -isl::basic_map basic_map::zip() const +inline std::ostream &operator<<(std::ostream &os, const basic_map &obj) { - auto res = isl_basic_map_zip(copy()); - return manage(res); + char *str = isl_basic_map_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } // implementations for isl::basic_map_list @@ -6258,10 +8895,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 +8938,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,72 +8977,42 @@ return manage(res); } -stat basic_map_list::foreach(const std::function &fn) const +stat basic_map_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function func; + } 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; 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); -} - isl::basic_map_list basic_map_list::insert(unsigned int pos, isl::basic_map el) const { auto res = isl_basic_map_list_insert(copy(), pos, el.release()); 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 +class size basic_map_list::size() const { auto res = isl_basic_map_list_size(get()); - return res; + return manage(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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } // implementations for isl::basic_set @@ -6417,7 +9033,6 @@ ptr = obj.copy(); } - basic_set::basic_set(__isl_take isl_basic_set *ptr) : ptr(ptr) {} @@ -6426,6 +9041,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 +9076,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 +9096,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,960 +9107,968 @@ 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::basic_set basic_set::detect_equalities() const +isl::pw_multi_aff basic_set::as_pw_multi_aff() const { - auto res = isl_basic_set_detect_equalities(copy()); - return manage(res); + return isl::set(*this).as_pw_multi_aff(); } -isl_size basic_set::dim(isl::dim type) const +isl::set basic_set::as_set() const { - auto res = isl_basic_set_dim(get(), static_cast(type)); - return res; + return isl::set(*this).as_set(); } -isl::val basic_set::dim_max_val(int pos) const +isl::basic_set_list basic_set::basic_set_list() const { - auto res = isl_basic_set_dim_max_val(copy(), pos); - return manage(res); + return isl::set(*this).basic_set_list(); } -isl::basic_set basic_set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::set basic_set::bind(const isl::multi_id &tuple) const { - auto res = isl_basic_set_drop_constraints_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::set(*this).bind(tuple); } -isl::basic_set basic_set::drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::set basic_set::coalesce() const { - auto res = isl_basic_set_drop_constraints_not_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::set(*this).coalesce(); } -isl::basic_set basic_set::drop_unused_params() const +isl::set basic_set::complement() const { - auto res = isl_basic_set_drop_unused_params(copy()); - return manage(res); + return isl::set(*this).complement(); } -isl::basic_set basic_set::eliminate(isl::dim type, unsigned int first, unsigned int n) const +isl::union_set basic_set::compute_divs() const { - auto res = isl_basic_set_eliminate(copy(), static_cast(type), first, n); - return manage(res); + return isl::set(*this).compute_divs(); } -isl::basic_set basic_set::empty(isl::space space) +boolean basic_set::contains(const isl::space &space) const { - auto res = isl_basic_set_empty(space.release()); - return manage(res); + return isl::set(*this).contains(space); } -isl::mat basic_set::equalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4) const +isl::basic_set basic_set::convex_hull() 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).convex_hull(); } -isl::basic_set basic_set::fix_si(isl::dim type, unsigned int pos, int value) const +isl::basic_set basic_set::detect_equalities() const { - auto res = isl_basic_set_fix_si(copy(), static_cast(type), pos, value); + auto res = isl_basic_set_detect_equalities(copy()); return manage(res); } -isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, isl::val v) const +class size basic_set::dim(isl::dim type) const { - auto res = isl_basic_set_fix_val(copy(), static_cast(type), pos, v.release()); + auto res = isl_basic_set_dim(get(), static_cast(type)); return manage(res); } -isl::basic_set basic_set::flat_product(isl::basic_set bset2) const +boolean basic_set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const { - auto res = isl_basic_set_flat_product(copy(), bset2.release()); - return manage(res); + return isl::set(*this).dim_has_any_lower_bound(type, pos); } -isl::basic_set basic_set::flatten() const +isl::id basic_set::dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_basic_set_flatten(copy()); - return manage(res); + return isl::set(*this).dim_id(type, pos); } -stat basic_set::foreach_bound_pair(isl::dim type, unsigned int pos, const std::function &fn) const +isl::pw_aff basic_set::dim_max(int pos) 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 isl::set(*this).dim_max(pos); } -stat basic_set::foreach_constraint(const std::function &fn) const +isl::val basic_set::dim_max_val(int pos) 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_dim_max_val(copy(), pos); return manage(res); } -isl::basic_set basic_set::from_constraint(isl::constraint constraint) +isl::pw_aff basic_set::dim_min(int pos) const { - auto res = isl_basic_set_from_constraint(constraint.release()); - return manage(res); + return isl::set(*this).dim_min(pos); } -isl::basic_set basic_set::from_multi_aff(isl::multi_aff ma) +isl::val basic_set::dim_min_val(int pos) const { - auto res = isl_basic_set_from_multi_aff(ma.release()); - return manage(res); + return isl::set(*this).dim_min_val(pos); } -isl::basic_set basic_set::from_params() const +std::string basic_set::dim_name(isl::dim type, unsigned int pos) const { - auto res = isl_basic_set_from_params(copy()); - return manage(res); + return isl::set(*this).dim_name(type, pos); } -isl::constraint_list basic_set::get_constraint_list() const +isl::aff basic_set::div(int pos) const { - auto res = isl_basic_set_get_constraint_list(get()); + auto res = isl_basic_set_get_div(get(), pos); return manage(res); } -isl::id basic_set::get_dim_id(isl::dim type, unsigned int pos) const +isl::aff basic_set::get_div(int pos) const { - auto res = isl_basic_set_get_dim_id(get(), static_cast(type), pos); - return manage(res); + return div(pos); } -std::string basic_set::get_dim_name(isl::dim type, unsigned int pos) const +isl::set basic_set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_set_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + return isl::set(*this).drop_constraints_involving_dims(type, first, n); } -isl::aff basic_set::get_div(int pos) const +isl::set basic_set::eliminate(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_set_get_div(get(), pos); - return manage(res); + return isl::set(*this).eliminate(type, first, n); } -isl::local_space basic_set::get_local_space() const +boolean basic_set::every_set(const std::function &test) const { - auto res = isl_basic_set_get_local_space(get()); - return manage(res); + return isl::set(*this).every_set(test); } -isl::space basic_set::get_space() const +isl::set basic_set::extract_set(const isl::space &space) const { - auto res = isl_basic_set_get_space(get()); - return manage(res); + return isl::set(*this).extract_set(space); } -std::string basic_set::get_tuple_name() const +int basic_set::find_dim_by_id(isl::dim type, const isl::id &id) const { - auto res = isl_basic_set_get_tuple_name(get()); - std::string tmp(res); - return tmp; + return isl::set(*this).find_dim_by_id(type, id); } -isl::basic_set basic_set::gist(isl::basic_set context) const +int basic_set::find_dim_by_id(isl::dim type, const std::string &id) const { - auto res = isl_basic_set_gist(copy(), context.release()); - return manage(res); + return this->find_dim_by_id(type, isl::id(ctx(), id)); } -isl::mat basic_set::inequalities_matrix(isl::dim c1, isl::dim c2, isl::dim c3, isl::dim c4) const +isl::basic_set basic_set::fix_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_basic_set_inequalities_matrix(get(), static_cast(c1), static_cast(c2), static_cast(c3), static_cast(c4)); + auto res = isl_basic_set_fix_si(copy(), static_cast(type), pos, value); return manage(res); } -isl::basic_set basic_set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const +isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, isl::val v) const { - auto res = isl_basic_set_insert_dims(copy(), static_cast(type), pos, n); + auto res = isl_basic_set_fix_val(copy(), static_cast(type), pos, v.release()); return manage(res); } -isl::basic_set basic_set::intersect(isl::basic_set bset2) const +isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, long v) const { - auto res = isl_basic_set_intersect(copy(), bset2.release()); - return manage(res); + return this->fix_val(type, pos, isl::val(ctx(), v)); } -isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const +isl::basic_set basic_set::flatten() const { - auto res = isl_basic_set_intersect_params(copy(), bset2.release()); + auto res = isl_basic_set_flatten(copy()); return manage(res); } -boolean basic_set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +stat basic_set::foreach_basic_set(const std::function &fn) const { - auto res = isl_basic_set_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return isl::set(*this).foreach_basic_set(fn); } -boolean basic_set::is_bounded() const +stat basic_set::foreach_point(const std::function &fn) const { - auto res = isl_basic_set_is_bounded(get()); - return manage(res); + return isl::set(*this).foreach_point(fn); } -boolean basic_set::is_disjoint(const isl::basic_set &bset2) const +stat basic_set::foreach_set(const std::function &fn) const { - auto res = isl_basic_set_is_disjoint(get(), bset2.get()); - return manage(res); + return isl::set(*this).foreach_set(fn); } -boolean basic_set::is_empty() const +isl::basic_set basic_set::gist(isl::basic_set context) const { - auto res = isl_basic_set_is_empty(get()); + auto res = isl_basic_set_gist(copy(), context.release()); return manage(res); } -boolean basic_set::is_equal(const isl::basic_set &bset2) const +isl::set basic_set::gist(const isl::set &context) const { - auto res = isl_basic_set_is_equal(get(), bset2.get()); - return manage(res); + return isl::set(*this).gist(context); } -int basic_set::is_rational() const +isl::union_set basic_set::gist(const isl::union_set &context) const { - auto res = isl_basic_set_is_rational(get()); - return res; + return isl::set(*this).gist(context); } -boolean basic_set::is_subset(const isl::basic_set &bset2) const +isl::basic_set basic_set::gist(const isl::point &context) const { - auto res = isl_basic_set_is_subset(get(), bset2.get()); - return manage(res); + return this->gist(isl::basic_set(context)); } -boolean basic_set::is_universe() const +isl::set basic_set::gist_params(const isl::set &context) const { - auto res = isl_basic_set_is_universe(get()); - return manage(res); + return isl::set(*this).gist_params(context); } -boolean basic_set::is_wrapping() const +boolean basic_set::has_equal_space(const isl::set &set2) const { - auto res = isl_basic_set_is_wrapping(get()); - return manage(res); + return isl::set(*this).has_equal_space(set2); } -isl::set basic_set::lexmax() const +isl::map basic_set::identity() const { - auto res = isl_basic_set_lexmax(copy()); - return manage(res); + return isl::set(*this).identity(); } -isl::set basic_set::lexmin() const +isl::union_pw_multi_aff basic_set::identity_union_pw_multi_aff() const { - auto res = isl_basic_set_lexmin(copy()); - return manage(res); + return isl::set(*this).identity_union_pw_multi_aff(); } -isl::basic_set basic_set::lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const +isl::pw_aff basic_set::indicator_function() const { - auto res = isl_basic_set_lower_bound_val(copy(), static_cast(type), pos, value.release()); - return manage(res); + return isl::set(*this).indicator_function(); } -isl::val basic_set::max_val(const isl::aff &obj) const +isl::set basic_set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const { - auto res = isl_basic_set_max_val(get(), obj.get()); - return manage(res); + return isl::set(*this).insert_dims(type, pos, n); } -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 +isl::map basic_set::insert_domain(const isl::space &domain) 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).insert_domain(domain); } -isl_size basic_set::n_constraint() const +isl::basic_set basic_set::intersect(isl::basic_set bset2) const { - auto res = isl_basic_set_n_constraint(get()); - return res; + auto res = isl_basic_set_intersect(copy(), bset2.release()); + return manage(res); } -isl_size basic_set::n_dim() const +isl::set basic_set::intersect(const isl::set &set2) const { - auto res = isl_basic_set_n_dim(get()); - return res; + return isl::set(*this).intersect(set2); } -isl::basic_set basic_set::nat_universe(isl::space space) +isl::union_set basic_set::intersect(const isl::union_set &uset2) const { - auto res = isl_basic_set_nat_universe(space.release()); - return manage(res); + return isl::set(*this).intersect(uset2); } -isl::basic_set basic_set::neg() const +isl::basic_set basic_set::intersect(const isl::point &bset2) const { - auto res = isl_basic_set_neg(copy()); - return manage(res); + return this->intersect(isl::basic_set(bset2)); } -isl::basic_set basic_set::params() const +isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const { - auto res = isl_basic_set_params(copy()); + auto res = isl_basic_set_intersect_params(copy(), bset2.release()); return manage(res); } -boolean basic_set::plain_is_empty() const +isl::set basic_set::intersect_params(const isl::set ¶ms) const { - auto res = isl_basic_set_plain_is_empty(get()); - return manage(res); + return isl::set(*this).intersect_params(params); } -boolean basic_set::plain_is_equal(const isl::basic_set &bset2) const +isl::basic_set basic_set::intersect_params(const isl::point &bset2) const { - auto res = isl_basic_set_plain_is_equal(get(), bset2.get()); - return manage(res); + return this->intersect_params(isl::basic_set(bset2)); } -boolean basic_set::plain_is_universe() const +boolean basic_set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_set_plain_is_universe(get()); - return manage(res); + return isl::set(*this).involves_dims(type, first, n); } -isl::basic_set basic_set::positive_orthant(isl::space space) +boolean basic_set::involves_locals() const { - auto res = isl_basic_set_positive_orthant(space.release()); - return manage(res); + return isl::set(*this).involves_locals(); } -isl::basic_set basic_set::preimage_multi_aff(isl::multi_aff ma) const +boolean basic_set::is_bounded() const { - auto res = isl_basic_set_preimage_multi_aff(copy(), ma.release()); + auto res = isl_basic_set_is_bounded(get()); return manage(res); } -isl::basic_set basic_set::project_out(isl::dim type, unsigned int first, unsigned int n) const +boolean basic_set::is_disjoint(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_disjoint(set2); } -isl::mat basic_set::reduced_basis() const +boolean basic_set::is_disjoint(const isl::union_set &uset2) const { - auto res = isl_basic_set_reduced_basis(get()); - return manage(res); + return isl::set(*this).is_disjoint(uset2); } -isl::basic_set basic_set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const +boolean basic_set::is_empty() const { - auto res = isl_basic_set_remove_dims(copy(), static_cast(type), first, n); + auto res = isl_basic_set_is_empty(get()); return manage(res); } -isl::basic_set basic_set::remove_divs() const +boolean basic_set::is_equal(const isl::basic_set &bset2) const { - auto res = isl_basic_set_remove_divs(copy()); + auto res = isl_basic_set_is_equal(get(), bset2.get()); return manage(res); } -isl::basic_set basic_set::remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +boolean basic_set::is_equal(const isl::set &set2) const { - auto res = isl_basic_set_remove_divs_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::set(*this).is_equal(set2); } -isl::basic_set basic_set::remove_redundancies() const +boolean basic_set::is_equal(const isl::union_set &uset2) const { - auto res = isl_basic_set_remove_redundancies(copy()); - return manage(res); + return isl::set(*this).is_equal(uset2); } -isl::basic_set basic_set::remove_unknown_divs() const +boolean basic_set::is_equal(const isl::point &bset2) const { - auto res = isl_basic_set_remove_unknown_divs(copy()); - return manage(res); + return this->is_equal(isl::basic_set(bset2)); } -isl::basic_set basic_set::sample() const +boolean basic_set::is_params() const { - auto res = isl_basic_set_sample(copy()); - return manage(res); + return isl::set(*this).is_params(); } -isl::point basic_set::sample_point() const +boolean basic_set::is_singleton() const { - auto res = isl_basic_set_sample_point(copy()); - return manage(res); + return isl::set(*this).is_singleton(); } -isl::basic_set basic_set::set_tuple_id(isl::id id) const +boolean basic_set::is_strict_subset(const isl::set &set2) const { - auto res = isl_basic_set_set_tuple_id(copy(), id.release()); - return manage(res); + return isl::set(*this).is_strict_subset(set2); } -isl::basic_set basic_set::set_tuple_name(const std::string &s) const +boolean basic_set::is_strict_subset(const isl::union_set &uset2) const { - auto res = isl_basic_set_set_tuple_name(copy(), s.c_str()); - return manage(res); + return isl::set(*this).is_strict_subset(uset2); } -isl::basic_set basic_set::solutions() const +boolean basic_set::is_subset(const isl::basic_set &bset2) const { - auto res = isl_basic_set_solutions(copy()); + auto res = isl_basic_set_is_subset(get(), bset2.get()); return manage(res); } -isl::set basic_set::unite(isl::basic_set bset2) const +boolean basic_set::is_subset(const isl::set &set2) const { - auto res = isl_basic_set_union(copy(), bset2.release()); - return manage(res); + return isl::set(*this).is_subset(set2); } -isl::basic_set basic_set::universe(isl::space space) +boolean basic_set::is_subset(const isl::union_set &uset2) const { - auto res = isl_basic_set_universe(space.release()); - return manage(res); + return isl::set(*this).is_subset(uset2); } -isl::basic_map basic_set::unwrap() const +boolean basic_set::is_subset(const isl::point &bset2) const { - auto res = isl_basic_set_unwrap(copy()); - return manage(res); + return this->is_subset(isl::basic_set(bset2)); } -isl::basic_set basic_set::upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const +boolean basic_set::is_wrapping() const { - auto res = isl_basic_set_upper_bound_val(copy(), static_cast(type), pos, value.release()); + auto res = isl_basic_set_is_wrapping(get()); return manage(res); } -// 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); +boolean basic_set::isa_set() const +{ + return isl::set(*this).isa_set(); } -basic_set_list::basic_set_list() - : ptr(nullptr) {} - -basic_set_list::basic_set_list(const basic_set_list &obj) - : ptr(nullptr) +isl::set basic_set::lexmax() const { - ptr = obj.copy(); + auto res = isl_basic_set_lexmax(copy()); + return manage(res); } +isl::pw_multi_aff basic_set::lexmax_pw_multi_aff() const +{ + return isl::set(*this).lexmax_pw_multi_aff(); +} -basic_set_list::basic_set_list(__isl_take isl_basic_set_list *ptr) - : ptr(ptr) {} - +isl::set basic_set::lexmin() const +{ + auto res = isl_basic_set_lexmin(copy()); + return manage(res); +} -basic_set_list &basic_set_list::operator=(basic_set_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::pw_multi_aff basic_set::lexmin_pw_multi_aff() const +{ + return isl::set(*this).lexmin_pw_multi_aff(); } -basic_set_list::~basic_set_list() { - if (ptr) - isl_basic_set_list_free(ptr); +isl::set basic_set::lower_bound(const isl::multi_pw_aff &lower) const +{ + return isl::set(*this).lower_bound(lower); } -__isl_give isl_basic_set_list *basic_set_list::copy() const & { - return isl_basic_set_list_copy(ptr); +isl::set basic_set::lower_bound(const isl::multi_val &lower) const +{ + return isl::set(*this).lower_bound(lower); } -__isl_keep isl_basic_set_list *basic_set_list::get() const { - return ptr; +isl::set basic_set::lower_bound_si(isl::dim type, unsigned int pos, int value) const +{ + return isl::set(*this).lower_bound_si(type, pos, value); } -__isl_give isl_basic_set_list *basic_set_list::release() { - isl_basic_set_list *tmp = ptr; - ptr = nullptr; - return tmp; +isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const +{ + return isl::set(*this).lower_bound_val(type, pos, value); +} + +isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, long value) const +{ + return this->lower_bound_val(type, pos, isl::val(ctx(), value)); } -bool basic_set_list::is_null() const { - return ptr == nullptr; +isl::multi_pw_aff basic_set::max_multi_pw_aff() const +{ + return isl::set(*this).max_multi_pw_aff(); } +isl::val basic_set::max_val(const isl::aff &obj) const +{ + return isl::set(*this).max_val(obj); +} -isl::ctx basic_set_list::ctx() const { - return isl::ctx(isl_basic_set_list_get_ctx(ptr)); +isl::multi_pw_aff basic_set::min_multi_pw_aff() const +{ + return isl::set(*this).min_multi_pw_aff(); } -void basic_set_list::dump() const { - isl_basic_set_list_dump(get()); +isl::val basic_set::min_val(const isl::aff &obj) const +{ + return isl::set(*this).min_val(obj); } +class size basic_set::n_basic_set() const +{ + return isl::set(*this).n_basic_set(); +} -isl::basic_set_list basic_set_list::add(isl::basic_set el) const +isl::basic_set basic_set::params() const { - auto res = isl_basic_set_list_add(copy(), el.release()); + auto res = isl_basic_set_params(copy()); return manage(res); } -isl::basic_set_list basic_set_list::alloc(isl::ctx ctx, int n) +isl::val basic_set::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const { - auto res = isl_basic_set_list_alloc(ctx.release(), n); - return manage(res); + return isl::set(*this).plain_get_val_if_fixed(type, pos); } -isl::basic_set_list basic_set_list::clear() const +isl::multi_val basic_set::plain_multi_val_if_fixed() const { - auto res = isl_basic_set_list_clear(copy()); - return manage(res); + return isl::set(*this).plain_multi_val_if_fixed(); } -isl::basic_set_list basic_set_list::coefficients() const +isl::basic_set basic_set::polyhedral_hull() const { - auto res = isl_basic_set_list_coefficients(copy()); - return manage(res); + return isl::set(*this).polyhedral_hull(); } -isl::basic_set_list basic_set_list::concat(isl::basic_set_list list2) const +isl::set basic_set::preimage(const isl::multi_aff &ma) const { - auto res = isl_basic_set_list_concat(copy(), list2.release()); - return manage(res); + return isl::set(*this).preimage(ma); } -isl::basic_set_list basic_set_list::drop(unsigned int first, unsigned int n) const +isl::set basic_set::preimage(const isl::multi_pw_aff &mpa) const { - auto res = isl_basic_set_list_drop(copy(), first, n); - return manage(res); + return isl::set(*this).preimage(mpa); } -stat basic_set_list::foreach(const std::function &fn) const +isl::set basic_set::preimage(const isl::pw_multi_aff &pma) 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).preimage(pma); } -isl::basic_set_list basic_set_list::from_basic_set(isl::basic_set el) +isl::union_set basic_set::preimage(const isl::union_pw_multi_aff &upma) const { - auto res = isl_basic_set_list_from_basic_set(el.release()); - return manage(res); + return isl::set(*this).preimage(upma); } -isl::basic_set basic_set_list::get_at(int index) const +isl::set basic_set::product(const isl::set &set2) const { - auto res = isl_basic_set_list_get_at(get(), index); - return manage(res); + return isl::set(*this).product(set2); } -isl::basic_set basic_set_list::get_basic_set(int index) const +isl::basic_set basic_set::project_out(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_set_list_get_basic_set(get(), index); + auto res = isl_basic_set_project_out(copy(), static_cast(type), first, n); return manage(res); } -isl::basic_set_list basic_set_list::insert(unsigned int pos, isl::basic_set el) const +isl::set basic_set::project_out_all_params() const { - auto res = isl_basic_set_list_insert(copy(), pos, el.release()); - return manage(res); + return isl::set(*this).project_out_all_params(); } -isl_size basic_set_list::n_basic_set() const +isl::set basic_set::project_out_param(const isl::id &id) const { - auto res = isl_basic_set_list_n_basic_set(get()); - return res; + return isl::set(*this).project_out_param(id); } -isl::basic_set_list basic_set_list::reverse() const +isl::set basic_set::project_out_param(const std::string &id) const { - auto res = isl_basic_set_list_reverse(copy()); - return manage(res); + return this->project_out_param(isl::id(ctx(), id)); } -isl::basic_set_list basic_set_list::set_basic_set(int index, isl::basic_set el) const +isl::set basic_set::project_out_param(const isl::id_list &list) const { - auto res = isl_basic_set_list_set_basic_set(copy(), index, el.release()); - return manage(res); + return isl::set(*this).project_out_param(list); } -isl_size basic_set_list::size() const +isl::pw_multi_aff basic_set::pw_multi_aff_on_domain(const isl::multi_val &mv) const { - auto res = isl_basic_set_list_size(get()); - return res; + return isl::set(*this).pw_multi_aff_on_domain(mv); } -isl::basic_set_list basic_set_list::swap(unsigned int pos1, unsigned int pos2) const +isl::set basic_set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_basic_set_list_swap(copy(), pos1, pos2); - return manage(res); + return isl::set(*this).remove_dims(type, first, n); } -// implementations for isl::constraint -constraint manage(__isl_take isl_constraint *ptr) { - return constraint(ptr); +isl::set basic_set::remove_divs() const +{ + return isl::set(*this).remove_divs(); } -constraint manage_copy(__isl_keep isl_constraint *ptr) { - ptr = isl_constraint_copy(ptr); - return constraint(ptr); + +isl::set basic_set::remove_redundancies() const +{ + return isl::set(*this).remove_redundancies(); } -constraint::constraint() - : ptr(nullptr) {} +isl::set basic_set::reset_tuple_id() const +{ + return isl::set(*this).reset_tuple_id(); +} -constraint::constraint(const constraint &obj) - : ptr(nullptr) +isl::basic_set basic_set::sample() const { - ptr = obj.copy(); + auto res = isl_basic_set_sample(copy()); + return manage(res); } +isl::point basic_set::sample_point() const +{ + auto res = isl_basic_set_sample_point(copy()); + return manage(res); +} -constraint::constraint(__isl_take isl_constraint *ptr) - : ptr(ptr) {} +isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const +{ + return isl::set(*this).set_dim_id(type, pos, id); +} +isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const +{ + return this->set_dim_id(type, pos, isl::id(ctx(), id)); +} -constraint &constraint::operator=(constraint obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::set_list basic_set::set_list() const +{ + return isl::set(*this).set_list(); } -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 +class 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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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 +stat 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; + } 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; - auto res = isl_constraint_list_foreach(get(), fn_lambda, &fn_data); + auto res = isl_basic_set_list_foreach(get(), fn_lambda, &fn_data); return manage(res); } -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 +class size basic_set_list::size() const { - auto res = isl_constraint_list_get_at(get(), index); + auto res = isl_basic_set_list_size(get()); return manage(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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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); +} + +constraint::constraint() + : ptr(nullptr) {} + +constraint::constraint(const constraint &obj) + : ptr(nullptr) +{ + 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::ctx constraint::ctx() const { + return isl::ctx(isl_constraint_get_ctx(ptr)); } -isl::constraint_list constraint_list::insert(unsigned int pos, isl::constraint el) const +isl::constraint constraint::alloc_equality(isl::local_space ls) { - auto res = isl_constraint_list_insert(copy(), pos, el.release()); + auto res = isl_constraint_alloc_equality(ls.release()); return manage(res); } -isl_size constraint_list::n_constraint() const +isl::constraint constraint::alloc_inequality(isl::local_space ls) { - auto res = isl_constraint_list_n_constraint(get()); - return res; + auto res = isl_constraint_alloc_inequality(ls.release()); + return manage(res); } -isl::constraint_list constraint_list::reverse() const +isl::constraint constraint::set_coefficient_si(isl::dim type, int pos, int v) const { - auto res = isl_constraint_list_reverse(copy()); + auto res = isl_constraint_set_coefficient_si(copy(), static_cast(type), pos, v); return manage(res); } -isl::constraint_list constraint_list::set_constraint(int index, isl::constraint el) const +isl::constraint constraint::set_constant_si(int v) const { - auto res = isl_constraint_list_set_constraint(copy(), index, el.release()); + auto res = isl_constraint_set_constant_si(copy(), v); return manage(res); } -isl_size constraint_list::size() const +isl::constraint constraint::set_constant_val(isl::val v) const { - auto res = isl_constraint_list_size(get()); - return res; + auto res = isl_constraint_set_constant_val(copy(), v.release()); + return manage(res); } -isl::constraint_list constraint_list::swap(unsigned int pos1, unsigned int pos2) const +isl::constraint constraint::set_constant_val(long v) const { - auto res = isl_constraint_list_swap(copy(), pos1, pos2); - return manage(res); + return this->set_constant_val(isl::val(ctx(), v)); } // implementations for isl::fixed_box @@ -7462,11 +10089,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 +10120,59 @@ 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()); +boolean fixed_box::is_valid() const +{ + auto res = isl_fixed_box_is_valid(get()); + return manage(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 { - auto res = isl_fixed_box_is_valid(get()); - return manage(res); + return space(); +} + +inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj) +{ + char *str = isl_fixed_box_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } // implementations for isl::id @@ -7547,7 +10193,6 @@ ptr = obj.copy(); } - id::id(__isl_take isl_id *ptr) : ptr(ptr) {} @@ -7585,41 +10230,57 @@ 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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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 +10299,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 +10348,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,72 +10392,47 @@ return manage(res); } -stat id_list::foreach(const std::function &fn) const +stat id_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function func; + } 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; 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); -} - isl::id_list id_list::insert(unsigned int pos, isl::id el) const { auto res = isl_id_list_insert(copy(), pos, el.release()); 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 +class size id_list::size() const { auto res = isl_id_list_size(get()); - return res; + return manage(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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } // implementations for isl::id_to_ast_expr @@ -7797,11 +10453,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 +10484,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 +10523,6 @@ ptr = obj.copy(); } - local_space::local_space(__isl_take isl_local_space *ptr) : ptr(ptr) {} @@ -7917,182 +10537,31 @@ return *this; } -local_space::~local_space() { - if (ptr) - isl_local_space_free(ptr); -} - -__isl_give isl_local_space *local_space::copy() const & { - return isl_local_space_copy(ptr); -} - -__isl_keep isl_local_space *local_space::get() const { - return ptr; -} - -__isl_give isl_local_space *local_space::release() { - isl_local_space *tmp = ptr; - ptr = nullptr; - return tmp; -} - -bool local_space::is_null() const { - 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); +local_space::~local_space() { + if (ptr) + isl_local_space_free(ptr); } -isl::local_space local_space::range() const -{ - auto res = isl_local_space_range(copy()); - return manage(res); +__isl_give isl_local_space *local_space::copy() const & { + return isl_local_space_copy(ptr); } -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_keep isl_local_space *local_space::get() const { + return ptr; } -isl::local_space local_space::set_from_params() const -{ - auto res = isl_local_space_set_from_params(copy()); - return manage(res); +__isl_give isl_local_space *local_space::release() { + isl_local_space *tmp = ptr; + ptr = nullptr; + return tmp; } -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); +bool local_space::is_null() const { + return ptr == nullptr; } -isl::local_space local_space::wrap() const -{ - auto res = isl_local_space_wrap(copy()); - return manage(res); +isl::ctx local_space::ctx() const { + return isl::ctx(isl_local_space_get_ctx(ptr)); } // implementations for isl::map @@ -8113,7 +10582,6 @@ ptr = obj.copy(); } - map::map(__isl_take isl_map *ptr) : ptr(ptr) {} @@ -8122,6 +10590,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 +10625,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,45 +10659,79 @@ 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 this->apply_range(isl::map(map2)); +} + +isl::map map::as_map() const +{ + 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_curry() const +isl::union_pw_multi_aff map::as_union_pw_multi_aff() const { - auto res = isl_map_can_curry(get()); + return isl::union_map(*this).as_union_pw_multi_aff(); +} + +isl::basic_map_list map::basic_map_list() const +{ + auto res = isl_map_get_basic_map_list(get()); return manage(res); } -boolean map::can_range_curry() 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_range_curry(get()); + auto res = isl_map_bind_domain(copy(), tuple.release()); return manage(res); } -boolean map::can_uncurry() const +isl::set map::bind_range(isl::multi_id tuple) const { - auto res = isl_map_can_uncurry(get()); + auto res = isl_map_bind_range(copy(), tuple.release()); return manage(res); } -boolean map::can_zip() const +boolean map::can_curry() const { - auto res = isl_map_can_zip(get()); + auto res = isl_map_can_curry(get()); return manage(res); } @@ -8250,10 +10747,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,22 +10764,16 @@ 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()); return manage(res); } -isl_size map::dim(isl::dim type) const +class size map::dim(isl::dim type) const { auto res = isl_map_dim(get(), static_cast(type)); - return res; + return manage(res); } isl::pw_aff map::dim_max(int pos) const @@ -8316,16 +10806,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 +10823,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 +class size map::domain_tuple_dim() const { - auto res = isl_map_drop_constraints_not_involving_dims(copy(), static_cast(type), first, n); + auto res = isl_map_domain_tuple_dim(get()); return manage(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 +10862,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 +boolean 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::fixed_power_val(isl::val exp) const +isl::map map::extract_map(const isl::space &space) const +{ + return isl::union_map(*this).extract_map(space); +} + +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,20 +10971,30 @@ 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)); +} + +stat map::foreach_basic_map(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function func; + } 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; auto res = isl_map_foreach_basic_map(get(), fn_lambda, &fn_data); return manage(res); } +stat map::foreach_map(const std::function &fn) const +{ + return isl::union_map(*this).foreach_map(fn); +} + isl::map map::from_aff(isl::aff aff) { auto res = isl_map_from_aff(aff.release()); @@ -8504,24 +11019,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 +11037,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 +boolean map::has_domain_tuple_id() const { - auto res = isl_map_gist(copy(), context.release()); + auto res = isl_map_has_domain_tuple_id(get()); return manage(res); } -isl::map map::gist_basic_map(isl::basic_map context) const +boolean map::has_equal_space(const isl::map &map2) const { - auto res = isl_map_gist_basic_map(copy(), context.release()); + auto res = isl_map_has_equal_space(get(), map2.get()); return manage(res); } -isl::map map::gist_domain(isl::set context) const +boolean map::has_range_tuple_id() const { - auto res = isl_map_gist_domain(copy(), context.release()); + auto res = isl_map_has_range_tuple_id(get()); return manage(res); } -isl::map map::gist_params(isl::set context) const +boolean map::has_tuple_id(isl::dim type) const { - auto res = isl_map_gist_params(copy(), context.release()); + auto res = isl_map_has_tuple_id(get(), static_cast(type)); return manage(res); } -isl::map map::gist_range(isl::set context) const +boolean map::has_tuple_name(isl::dim type) const { - auto res = isl_map_gist_range(copy(), context.release()); + auto res = isl_map_has_tuple_name(get(), static_cast(type)); return manage(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 +11169,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,18 +11207,58 @@ 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); } +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)); +} + boolean 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); @@ -8722,6 +11277,16 @@ return manage(res); } +boolean map::is_disjoint(const isl::union_map &umap2) const +{ + return isl::union_map(*this).is_disjoint(umap2); +} + +boolean map::is_disjoint(const isl::basic_map &map2) const +{ + return this->is_disjoint(isl::map(map2)); +} + boolean map::is_empty() const { auto res = isl_map_is_empty(get()); @@ -8734,21 +11299,19 @@ return manage(res); } -boolean map::is_identity() const +boolean 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 +boolean 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 +boolean map::is_injective() const { - auto res = isl_map_is_product(get()); + auto res = isl_map_is_injective(get()); return manage(res); } @@ -8764,16 +11327,35 @@ return manage(res); } +boolean map::is_strict_subset(const isl::union_map &umap2) const +{ + return isl::union_map(*this).is_strict_subset(umap2); +} + +boolean map::is_strict_subset(const isl::basic_map &map2) const +{ + return this->is_strict_subset(isl::map(map2)); +} + boolean map::is_subset(const isl::map &map2) const { auto res = isl_map_is_subset(get(), map2.get()); return manage(res); } -int map::is_translation() const +boolean map::is_subset(const isl::union_map &umap2) const +{ + return isl::union_map(*this).is_subset(umap2); +} + +boolean map::is_subset(const isl::basic_map &map2) const +{ + return this->is_subset(isl::map(map2)); +} + +boolean map::isa_map() const { - auto res = isl_map_is_translation(get()); - return res; + return isl::union_map(*this).isa_map(); } isl::map map::lex_ge(isl::space set_space) @@ -8788,18 +11370,6 @@ return manage(res); } -isl::map map::lex_ge_first(isl::space space, unsigned int n) -{ - auto res = isl_map_lex_ge_first(space.release(), n); - return manage(res); -} - -isl::map map::lex_ge_map(isl::map map2) const -{ - auto res = isl_map_lex_ge_map(copy(), map2.release()); - return manage(res); -} - isl::map map::lex_gt(isl::space set_space) { auto res = isl_map_lex_gt(set_space.release()); @@ -8812,18 +11382,6 @@ return manage(res); } -isl::map map::lex_gt_first(isl::space space, unsigned int n) -{ - auto res = isl_map_lex_gt_first(space.release(), n); - return manage(res); -} - -isl::map map::lex_gt_map(isl::map map2) const -{ - auto res = isl_map_lex_gt_map(copy(), map2.release()); - return manage(res); -} - isl::map map::lex_le(isl::space set_space) { auto res = isl_map_lex_le(set_space.release()); @@ -8836,18 +11394,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 +11406,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 +11442,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 @@ -8932,310 +11465,291 @@ return manage(res); } -isl_size map::n_basic_map() const +class size map::n_basic_map() const { auto res = isl_map_n_basic_map(get()); - return res; + return manage(res); } -isl::map map::nat_universe(isl::space space) +isl::map map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const { - auto res = isl_map_nat_universe(space.release()); + auto res = isl_map_order_lt(copy(), static_cast(type1), pos1, static_cast(type2), pos2); return manage(res); } -isl::map map::neg() const +isl::set map::params() const { - auto res = isl_map_neg(copy()); - return manage(res); + return isl::union_map(*this).params(); } -isl::map map::oppose(isl::dim type1, int pos1, isl::dim type2, int pos2) const +isl::basic_map map::polyhedral_hull() const { - auto res = isl_map_oppose(copy(), static_cast(type1), pos1, static_cast(type2), pos2); + auto res = isl_map_polyhedral_hull(copy()); return manage(res); } -isl::map map::order_ge(isl::dim type1, int pos1, isl::dim type2, int pos2) const +isl::map map::preimage_domain(isl::multi_aff ma) const { - auto res = isl_map_order_ge(copy(), static_cast(type1), pos1, static_cast(type2), pos2); + auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release()); return manage(res); } -isl::map map::order_gt(isl::dim type1, int pos1, isl::dim type2, int pos2) const +isl::map map::preimage_domain(isl::multi_pw_aff mpa) const { - auto res = isl_map_order_gt(copy(), static_cast(type1), pos1, static_cast(type2), pos2); + auto res = isl_map_preimage_domain_multi_pw_aff(copy(), mpa.release()); return manage(res); } -isl::map map::order_le(isl::dim type1, int pos1, isl::dim type2, int pos2) const +isl::map map::preimage_domain(isl::pw_multi_aff pma) const { - auto res = isl_map_order_le(copy(), static_cast(type1), pos1, static_cast(type2), pos2); + auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release()); return manage(res); } -isl::map map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const +isl::union_map map::preimage_domain(const isl::union_pw_multi_aff &upma) const { - auto res = isl_map_order_lt(copy(), static_cast(type1), pos1, static_cast(type2), pos2); - return manage(res); + return isl::union_map(*this).preimage_domain(upma); } -isl::set map::params() const +isl::map map::preimage_range(isl::multi_aff ma) const { - auto res = isl_map_params(copy()); + auto res = isl_map_preimage_range_multi_aff(copy(), ma.release()); return manage(res); } -isl::val map::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const +isl::map map::preimage_range(isl::pw_multi_aff pma) const { - auto res = isl_map_plain_get_val_if_fixed(get(), static_cast(type), pos); + auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release()); return manage(res); } -boolean map::plain_is_empty() const +isl::union_map map::preimage_range(const isl::union_pw_multi_aff &upma) const { - auto res = isl_map_plain_is_empty(get()); - return manage(res); + return isl::union_map(*this).preimage_range(upma); } -boolean map::plain_is_equal(const isl::map &map2) const +isl::map map::product(isl::map map2) const { - auto res = isl_map_plain_is_equal(get(), map2.get()); + auto res = isl_map_product(copy(), map2.release()); return manage(res); } -boolean map::plain_is_injective() const +isl::union_map map::product(const isl::union_map &umap2) const { - auto res = isl_map_plain_is_injective(get()); - return manage(res); + return isl::union_map(*this).product(umap2); } -boolean map::plain_is_single_valued() const +isl::map map::product(const isl::basic_map &map2) const { - auto res = isl_map_plain_is_single_valued(get()); - return manage(res); + return this->product(isl::map(map2)); } -boolean map::plain_is_universe() const +isl::map map::project_out(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_map_plain_is_universe(get()); + auto res = isl_map_project_out(copy(), static_cast(type), first, n); return manage(res); } -isl::basic_map map::plain_unshifted_simple_hull() const +isl::map map::project_out_all_params() const { - auto res = isl_map_plain_unshifted_simple_hull(copy()); + auto res = isl_map_project_out_all_params(copy()); return manage(res); } -isl::basic_map map::polyhedral_hull() const +isl::set map::range() const { - auto res = isl_map_polyhedral_hull(copy()); + auto res = isl_map_range(copy()); return manage(res); } -isl::map map::preimage_domain(isl::multi_aff ma) const +isl::map map::range_factor_domain() const { - auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release()); + auto res = isl_map_range_factor_domain(copy()); return manage(res); } -isl::map map::preimage_domain(isl::multi_pw_aff mpa) const +isl::map map::range_factor_range() const { - auto res = isl_map_preimage_domain_multi_pw_aff(copy(), mpa.release()); + auto res = isl_map_range_factor_range(copy()); return manage(res); } -isl::map map::preimage_domain(isl::pw_multi_aff pma) const +isl::fixed_box map::range_lattice_tile() const { - auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release()); + auto res = isl_map_get_range_lattice_tile(get()); return manage(res); } -isl::map map::preimage_range(isl::multi_aff ma) const +isl::fixed_box map::get_range_lattice_tile() const { - auto res = isl_map_preimage_range_multi_aff(copy(), ma.release()); - return manage(res); + return range_lattice_tile(); } -isl::map map::preimage_range(isl::pw_multi_aff pma) const +isl::map map::range_map() const { - auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release()); + auto res = isl_map_range_map(copy()); return manage(res); } -isl::map map::product(isl::map map2) const +isl::map map::range_product(isl::map map2) const { - auto res = isl_map_product(copy(), map2.release()); + auto res = isl_map_range_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::range_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).range_product(umap2); } -isl::map map::project_out_all_params() const +isl::map map::range_product(const isl::basic_map &map2) const { - auto res = isl_map_project_out_all_params(copy()); - return manage(res); + return this->range_product(isl::map(map2)); } -isl::set map::range() const +isl::map map::range_reverse() const { - auto res = isl_map_range(copy()); + auto res = isl_map_range_reverse(copy()); return manage(res); } -isl::map map::range_curry() const +isl::fixed_box map::range_simple_fixed_box_hull() const { - auto res = isl_map_range_curry(copy()); + auto res = isl_map_get_range_simple_fixed_box_hull(get()); return manage(res); } -isl::map map::range_factor_domain() const +isl::fixed_box map::get_range_simple_fixed_box_hull() const { - auto res = isl_map_range_factor_domain(copy()); - return manage(res); + return range_simple_fixed_box_hull(); } -isl::map map::range_factor_range() const +class size map::range_tuple_dim() const { - auto res = isl_map_range_factor_range(copy()); + auto res = isl_map_range_tuple_dim(get()); return manage(res); } -boolean map::range_is_wrapping() const +isl::id map::range_tuple_id() const { - auto res = isl_map_range_is_wrapping(get()); + auto res = isl_map_get_range_tuple_id(get()); return manage(res); } -isl::map map::range_map() const +isl::id map::get_range_tuple_id() const { - auto res = isl_map_range_map(copy()); - return manage(res); + return range_tuple_id(); } -isl::map map::range_product(isl::map map2) const +isl::map map::reverse() const { - auto res = isl_map_range_product(copy(), map2.release()); + auto res = isl_map_reverse(copy()); return manage(res); } -isl::map map::range_reverse() const +isl::basic_map map::sample() const { - auto res = isl_map_range_reverse(copy()); + auto res = isl_map_sample(copy()); return manage(res); } -isl_size map::range_tuple_dim() const +isl::map map::set_domain_tuple(isl::id id) const { - auto res = isl_map_range_tuple_dim(get()); - return res; + auto res = isl_map_set_domain_tuple_id(copy(), id.release()); + return manage(res); } -isl::map map::remove_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::map map::set_domain_tuple(const std::string &id) const { - auto res = isl_map_remove_dims(copy(), static_cast(type), first, n); - return manage(res); + return this->set_domain_tuple(isl::id(ctx(), id)); } -isl::map map::remove_divs() const +isl::map map::set_range_tuple(isl::id id) const { - auto res = isl_map_remove_divs(copy()); + auto res = isl_map_set_range_tuple_id(copy(), id.release()); return manage(res); } -isl::map map::remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::map map::set_range_tuple(const std::string &id) const { - auto res = isl_map_remove_divs_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } -isl::map map::remove_redundancies() const +isl::map map::set_tuple_id(isl::dim type, isl::id id) const { - auto res = isl_map_remove_redundancies(copy()); + auto res = isl_map_set_tuple_id(copy(), static_cast(type), id.release()); return manage(res); } -isl::map map::remove_unknown_divs() const +isl::map map::set_tuple_id(isl::dim type, const std::string &id) const { - auto res = isl_map_remove_unknown_divs(copy()); - return manage(res); + return this->set_tuple_id(type, isl::id(ctx(), id)); } -isl::map map::reset_tuple_id(isl::dim type) const +isl::space map::space() const { - auto res = isl_map_reset_tuple_id(copy(), static_cast(type)); + auto res = isl_map_get_space(get()); return manage(res); } -isl::map map::reset_user() const +isl::space map::get_space() const { - auto res = isl_map_reset_user(copy()); - return manage(res); + return space(); } -isl::map map::reverse() const +isl::map map::subtract(isl::map map2) const { - auto res = isl_map_reverse(copy()); + auto res = isl_map_subtract(copy(), map2.release()); return manage(res); } -isl::basic_map map::sample() const +isl::union_map map::subtract(const isl::union_map &umap2) const { - auto res = isl_map_sample(copy()); - return manage(res); + return isl::union_map(*this).subtract(umap2); } -isl::map map::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::map map::subtract(const isl::basic_map &map2) const { - auto res = isl_map_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); + return this->subtract(isl::map(map2)); } -isl::map map::set_tuple_id(isl::dim type, isl::id id) const +isl::union_map map::subtract_domain(const isl::union_set &dom) const { - auto res = isl_map_set_tuple_id(copy(), static_cast(type), id.release()); - return manage(res); + return isl::union_map(*this).subtract_domain(dom); } -isl::map map::set_tuple_name(isl::dim type, const std::string &s) const +isl::union_map map::subtract_range(const isl::union_set &dom) const { - auto res = isl_map_set_tuple_name(copy(), static_cast(type), s.c_str()); - return manage(res); + return isl::union_map(*this).subtract_range(dom); } -isl::basic_map map::simple_hull() const +isl::map map::sum(isl::map map2) const { - auto res = isl_map_simple_hull(copy()); + auto res = isl_map_sum(copy(), map2.release()); return manage(res); } -isl::map map::subtract(isl::map map2) const +isl::map_list map::to_list() const { - auto res = isl_map_subtract(copy(), map2.release()); + auto res = isl_map_to_list(copy()); return manage(res); } -isl::map map::subtract_domain(isl::set dom) const +isl::union_map map::to_union_map() const { - auto res = isl_map_subtract_domain(copy(), dom.release()); + auto res = isl_map_to_union_map(copy()); return manage(res); } -isl::map map::subtract_range(isl::set dom) const +isl::id map::tuple_id(isl::dim type) const { - auto res = isl_map_subtract_range(copy(), dom.release()); + auto res = isl_map_get_tuple_id(get(), static_cast(type)); return manage(res); } -isl::map map::sum(isl::map map2) const +isl::id map::get_tuple_id(isl::dim type) const { - auto res = isl_map_sum(copy(), map2.release()); - return manage(res); + return tuple_id(type); } isl::map map::uncurry() const @@ -9250,6 +11764,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 +11786,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 +11798,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 +11810,18 @@ return manage(res); } +inline std::ostream &operator<<(std::ostream &os, const map &obj) +{ + char *str = isl_map_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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 +11840,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 +11889,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,894 +11928,845 @@ return manage(res); } -stat map_list::foreach(const std::function &fn) const +stat map_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; auto res = isl_map_list_foreach(get(), fn_lambda, &fn_data); return manage(res); } -isl::map_list map_list::from_map(isl::map el) +isl::map_list map_list::insert(unsigned int pos, isl::map el) const { - auto res = isl_map_list_from_map(el.release()); + auto res = isl_map_list_insert(copy(), pos, el.release()); return manage(res); } -isl::map map_list::get_at(int index) const +class size map_list::size() const { - auto res = isl_map_list_get_at(get(), index); + auto res = isl_map_list_size(get()); return manage(res); } -isl::map map_list::get_map(int index) const +inline std::ostream &operator<<(std::ostream &os, const map_list &obj) { - auto res = isl_map_list_get_map(get(), index); - return manage(res); + char *str = isl_map_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::map_list map_list::insert(unsigned int pos, isl::map el) const -{ - auto res = isl_map_list_insert(copy(), pos, el.release()); - return manage(res); +// implementations for isl::multi_aff +multi_aff manage(__isl_take isl_multi_aff *ptr) { + return multi_aff(ptr); } - -isl_size map_list::n_map() const -{ - auto res = isl_map_list_n_map(get()); - return res; +multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) { + ptr = isl_multi_aff_copy(ptr); + return multi_aff(ptr); } -isl::map_list map_list::reverse() const -{ - auto res = isl_map_list_reverse(copy()); - return manage(res); -} +multi_aff::multi_aff() + : ptr(nullptr) {} -isl::map_list map_list::set_map(int index, isl::map el) const +multi_aff::multi_aff(const multi_aff &obj) + : ptr(nullptr) { - auto res = isl_map_list_set_map(copy(), index, el.release()); - return manage(res); + ptr = obj.copy(); } -isl_size map_list::size() const -{ - auto res = isl_map_list_size(get()); - return res; -} +multi_aff::multi_aff(__isl_take isl_multi_aff *ptr) + : ptr(ptr) {} -isl::map_list map_list::swap(unsigned int pos1, unsigned int pos2) const +multi_aff::multi_aff(isl::aff aff) { - auto res = isl_map_list_swap(copy(), pos1, pos2); - return manage(res); + auto res = isl_multi_aff_from_aff(aff.release()); + ptr = res; } -// implementations for isl::mat -mat manage(__isl_take isl_mat *ptr) { - return mat(ptr); -} -mat manage_copy(__isl_keep isl_mat *ptr) { - ptr = isl_mat_copy(ptr); - return mat(ptr); +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; } -mat::mat() - : ptr(nullptr) {} - -mat::mat(const mat &obj) - : ptr(nullptr) +multi_aff::multi_aff(isl::ctx ctx, const std::string &str) { - ptr = obj.copy(); + auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; } - -mat::mat(__isl_take isl_mat *ptr) - : ptr(ptr) {} - - -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 +class size multi_aff::dim(isl::dim type) const { - auto res = isl_mat_normalize(copy()); + auto res = isl_multi_aff_dim(get(), static_cast(type)); return manage(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 +stat multi_aff::foreach_piece(const std::function &fn) const { - auto res = isl_mat_swap_rows(copy(), i, j); - return manage(res); + return isl::pw_multi_aff(*this).foreach_piece(fn); } -isl::mat mat::transpose() const +isl::multi_aff multi_aff::gist(isl::set context) const { - auto res = isl_mat_transpose(copy()); + auto res = isl_multi_aff_gist(copy(), context.release()); return manage(res); } -isl::mat mat::unimodular_complete(int row) const +isl::union_pw_multi_aff multi_aff::gist(const isl::union_set &context) const { - auto res = isl_mat_unimodular_complete(copy(), row); - return manage(res); + return isl::pw_multi_aff(*this).gist(context); } -isl::mat mat::vec_concat(isl::vec bot) const +isl::multi_aff multi_aff::gist(const isl::basic_set &context) const { - auto res = isl_mat_vec_concat(copy(), bot.release()); - return manage(res); + return this->gist(isl::set(context)); } -isl::vec mat::vec_inverse_product(isl::vec vec) const +isl::multi_aff multi_aff::gist(const isl::point &context) const { - auto res = isl_mat_vec_inverse_product(copy(), vec.release()); + return this->gist(isl::set(context)); +} + +boolean multi_aff::has_range_tuple_id() const +{ + auto res = isl_multi_aff_has_range_tuple_id(get()); return manage(res); } -isl::vec mat::vec_product(isl::vec vec) const +isl::multi_aff multi_aff::identity(isl::space space) { - auto res = isl_mat_vec_product(copy(), vec.release()); + auto res = isl_multi_aff_identity(space.release()); return manage(res); } -// implementations for isl::multi_aff -multi_aff manage(__isl_take isl_multi_aff *ptr) { - return multi_aff(ptr); +isl::multi_aff multi_aff::identity() const +{ + auto res = isl_multi_aff_identity_multi_aff(copy()); + return manage(res); } -multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) { - ptr = isl_multi_aff_copy(ptr); - return multi_aff(ptr); + +isl::multi_aff multi_aff::identity_on_domain(isl::space space) +{ + auto res = isl_multi_aff_identity_on_domain_space(space.release()); + return manage(res); } -multi_aff::multi_aff() - : ptr(nullptr) {} +isl::multi_aff multi_aff::insert_domain(isl::space domain) const +{ + auto res = isl_multi_aff_insert_domain(copy(), domain.release()); + return manage(res); +} -multi_aff::multi_aff(const multi_aff &obj) - : ptr(nullptr) +isl::pw_multi_aff multi_aff::intersect_domain(const isl::set &set) const { - ptr = obj.copy(); + return isl::pw_multi_aff(*this).intersect_domain(set); } +isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::space &space) const +{ + return isl::pw_multi_aff(*this).intersect_domain(space); +} -multi_aff::multi_aff(__isl_take isl_multi_aff *ptr) - : ptr(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(isl::aff aff) +isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_domain(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_domain(uset); } -multi_aff::multi_aff(isl::space space, isl::aff_list list) + +isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const { - auto res = isl_multi_aff_from_aff_list(space.release(), list.release()); - ptr = res; + return isl::pw_multi_aff(*this).intersect_domain_wrapped_range(uset); } -multi_aff::multi_aff(isl::ctx ctx, const std::string &str) + +isl::pw_multi_aff multi_aff::intersect_params(const isl::set &set) const { - auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str()); - ptr = res; + return isl::pw_multi_aff(*this).intersect_params(set); } -multi_aff &multi_aff::operator=(multi_aff obj) { - std::swap(this->ptr, obj.ptr); - return *this; +boolean multi_aff::involves_locals() const +{ + auto res = isl_multi_aff_involves_locals(get()); + return manage(res); } -multi_aff::~multi_aff() { - if (ptr) - isl_multi_aff_free(ptr); +boolean multi_aff::involves_nan() const +{ + auto res = isl_multi_aff_involves_nan(get()); + return manage(res); } -__isl_give isl_multi_aff *multi_aff::copy() const & { - return isl_multi_aff_copy(ptr); +boolean multi_aff::involves_param(const isl::id &id) const +{ + return isl::pw_multi_aff(*this).involves_param(id); } -__isl_keep isl_multi_aff *multi_aff::get() const { - return ptr; +boolean multi_aff::involves_param(const std::string &id) const +{ + return this->involves_param(isl::id(ctx(), id)); } -__isl_give isl_multi_aff *multi_aff::release() { - isl_multi_aff *tmp = ptr; - ptr = nullptr; - return tmp; +boolean multi_aff::involves_param(const isl::id_list &list) const +{ + return isl::pw_multi_aff(*this).involves_param(list); } -bool multi_aff::is_null() const { - return ptr == nullptr; +boolean multi_aff::isa_multi_aff() const +{ + return isl::pw_multi_aff(*this).isa_multi_aff(); } +boolean 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_pw_aff multi_aff::max(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_multi_aff(*this).max(multi2); +} -isl::multi_aff multi_aff::add(isl::multi_aff multi2) const +isl::multi_val multi_aff::max_multi_val() const { - auto res = isl_multi_aff_add(copy(), multi2.release()); - return manage(res); + return isl::pw_multi_aff(*this).max_multi_val(); } -isl::multi_aff multi_aff::add_constant(isl::multi_val mv) const +isl::multi_pw_aff multi_aff::min(const isl::multi_pw_aff &multi2) const { - auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release()); - return manage(res); + return isl::pw_multi_aff(*this).min(multi2); } -isl::multi_aff multi_aff::add_constant(isl::val v) const +isl::multi_val multi_aff::min_multi_val() const { - auto res = isl_multi_aff_add_constant_val(copy(), v.release()); - return manage(res); + return isl::pw_multi_aff(*this).min_multi_val(); } -isl::multi_aff multi_aff::add_dims(isl::dim type, unsigned int n) const +isl::multi_aff multi_aff::multi_val_on_domain(isl::space space, isl::multi_val mv) { - auto res = isl_multi_aff_add_dims(copy(), static_cast(type), n); + auto res = isl_multi_aff_multi_val_on_domain_space(space.release(), mv.release()); return manage(res); } -isl::multi_aff multi_aff::align_params(isl::space model) const +class size multi_aff::n_piece() const { - auto res = isl_multi_aff_align_params(copy(), model.release()); - return manage(res); + return isl::pw_multi_aff(*this).n_piece(); } -isl::basic_set multi_aff::bind(isl::multi_id tuple) const +isl::multi_aff multi_aff::neg() const { - auto res = isl_multi_aff_bind(copy(), tuple.release()); + auto res = isl_multi_aff_neg(copy()); return manage(res); } -isl::multi_aff multi_aff::bind_domain(isl::multi_id tuple) const +boolean multi_aff::plain_is_empty() const { - auto res = isl_multi_aff_bind_domain(copy(), tuple.release()); - return manage(res); + return isl::pw_multi_aff(*this).plain_is_empty(); } -isl::multi_aff multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const +boolean multi_aff::plain_is_equal(const isl::multi_aff &multi2) const { - auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release()); + auto res = isl_multi_aff_plain_is_equal(get(), multi2.get()); return manage(res); } -isl_size multi_aff::dim(isl::dim type) const +boolean multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const { - auto res = isl_multi_aff_dim(get(), static_cast(type)); - return res; + return isl::pw_multi_aff(*this).plain_is_equal(multi2); } -isl::multi_aff multi_aff::domain_map(isl::space space) +boolean multi_aff::plain_is_equal(const isl::multi_union_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 +boolean multi_aff::plain_is_equal(const isl::aff &multi2) const { - auto res = isl_multi_aff_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + return this->plain_is_equal(isl::multi_aff(multi2)); } -isl::multi_aff multi_aff::factor_range() const +isl::pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const { - auto res = isl_multi_aff_factor_range(copy()); - return manage(res); + return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2); } -int multi_aff::find_dim_by_id(isl::dim type, const isl::id &id) 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_id(get(), static_cast(type), id.get()); - return res; + return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2); } -int multi_aff::find_dim_by_name(isl::dim type, const std::string &name) const +isl::multi_aff multi_aff::product(isl::multi_aff multi2) const { - auto res = isl_multi_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + auto res = isl_multi_aff_product(copy(), multi2.release()); + return manage(res); } -isl::multi_aff multi_aff::flat_range_product(isl::multi_aff multi2) const +isl::multi_pw_aff multi_aff::product(const isl::multi_pw_aff &multi2) const { - auto res = isl_multi_aff_flat_range_product(copy(), multi2.release()); - return manage(res); + return isl::pw_multi_aff(*this).product(multi2); } -isl::multi_aff multi_aff::flatten_domain() const +isl::pw_multi_aff multi_aff::product(const isl::pw_multi_aff &pma2) const { - auto res = isl_multi_aff_flatten_domain(copy()); - return manage(res); + return isl::pw_multi_aff(*this).product(pma2); } -isl::multi_aff multi_aff::flatten_range() const +isl::multi_aff multi_aff::product(const isl::aff &multi2) const { - auto res = isl_multi_aff_flatten_range(copy()); - return manage(res); + return this->product(isl::multi_aff(multi2)); } -isl::multi_aff multi_aff::floor() const +isl::multi_aff multi_aff::pullback(isl::multi_aff ma2) const { - auto res = isl_multi_aff_floor(copy()); + auto res = isl_multi_aff_pullback_multi_aff(copy(), ma2.release()); return manage(res); } -isl::multi_aff multi_aff::from_range() const +isl::multi_pw_aff multi_aff::pullback(const isl::multi_pw_aff &mpa2) const { - auto res = isl_multi_aff_from_range(copy()); - return manage(res); + return isl::pw_multi_aff(*this).pullback(mpa2); } -isl::aff multi_aff::get_aff(int pos) const +isl::pw_multi_aff multi_aff::pullback(const isl::pw_multi_aff &pma2) const { - auto res = isl_multi_aff_get_aff(get(), pos); - return manage(res); + return isl::pw_multi_aff(*this).pullback(pma2); } -isl::aff multi_aff::get_at(int pos) const +isl::union_pw_multi_aff multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_multi_aff_get_at(get(), pos); - return manage(res); + return isl::pw_multi_aff(*this).pullback(upma2); } -isl::multi_val multi_aff::get_constant_multi_val() const +isl::multi_aff multi_aff::pullback(const isl::aff &ma2) const { - auto res = isl_multi_aff_get_constant_multi_val(get()); - return manage(res); + return this->pullback(isl::multi_aff(ma2)); } -isl::id multi_aff::get_dim_id(isl::dim type, unsigned int pos) const +isl::pw_multi_aff_list multi_aff::pw_multi_aff_list() const { - auto res = isl_multi_aff_get_dim_id(get(), static_cast(type), pos); - return manage(res); + return isl::pw_multi_aff(*this).pw_multi_aff_list(); } -isl::space multi_aff::get_domain_space() const +isl::pw_multi_aff multi_aff::range_factor_domain() const { - auto res = isl_multi_aff_get_domain_space(get()); - return manage(res); + return isl::pw_multi_aff(*this).range_factor_domain(); } -isl::aff_list multi_aff::get_list() const +isl::pw_multi_aff multi_aff::range_factor_range() const { - auto res = isl_multi_aff_get_list(get()); - return manage(res); + return isl::pw_multi_aff(*this).range_factor_range(); } -isl::space multi_aff::get_space() const +isl::multi_aff multi_aff::range_map(isl::space space) { - auto res = isl_multi_aff_get_space(get()); + 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) +class size multi_aff::size() const { - auto res = isl_multi_aff_project_out_map(space.release(), static_cast(type), first, n); + auto res = isl_multi_aff_size(get()); return manage(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 +12775,18 @@ return manage(res); } +inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj) +{ + char *str = isl_multi_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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 +12805,6 @@ ptr = obj.copy(); } - multi_id::multi_id(__isl_take isl_multi_id *ptr) : ptr(ptr) {} @@ -10312,6 +12813,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()); @@ -10346,26 +12848,19 @@ 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 +isl::id multi_id::at(int pos) const { - auto res = isl_multi_id_align_params(copy(), model.release()); + auto res = isl_multi_id_get_at(get(), pos); return manage(res); } -isl::multi_id multi_id::factor_range() const +isl::id multi_id::get_at(int pos) const { - auto res = isl_multi_id_factor_range(copy()); - return manage(res); + return at(pos); } isl::multi_id multi_id::flat_range_product(isl::multi_id multi2) const @@ -10374,46 +12869,15 @@ return manage(res); } -isl::multi_id multi_id::flatten_range() const -{ - auto res = isl_multi_id_flatten_range(copy()); - return manage(res); -} - -isl::multi_id multi_id::from_range() const -{ - auto res = isl_multi_id_from_range(copy()); - return manage(res); -} - -isl::id multi_id::get_at(int pos) const -{ - auto res = isl_multi_id_get_at(get(), pos); - return manage(res); -} - -isl::space multi_id::get_domain_space() const -{ - auto res = isl_multi_id_get_domain_space(get()); - return manage(res); -} - -isl::id multi_id::get_id(int pos) const -{ - auto res = isl_multi_id_get_id(get(), pos); - 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 @@ -10422,58 +12886,61 @@ return manage(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 +class size multi_id::size() const { - auto res = isl_multi_id_reset_user(copy()); + auto res = isl_multi_id_size(get()); return manage(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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } // implementations for isl::multi_pw_aff @@ -10494,7 +12961,6 @@ ptr = obj.copy(); } - multi_pw_aff::multi_pw_aff(__isl_take isl_multi_pw_aff *ptr) : ptr(ptr) {} @@ -10503,26 +12969,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,200 +13028,178 @@ 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 +class size multi_pw_aff::dim(isl::dim type) const { - auto res = isl_multi_pw_aff_from_range(copy()); + auto res = isl_multi_pw_aff_dim(get(), static_cast(type)); return manage(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 +boolean multi_pw_aff::has_range_tuple_id() const { - auto res = isl_multi_pw_aff_has_tuple_id(get(), static_cast(type)); + auto res = isl_multi_pw_aff_has_range_tuple_id(get()); return manage(res); } @@ -10772,12 +13221,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 +13233,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 +boolean multi_pw_aff::involves_nan() const { - auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get()); + auto res = isl_multi_pw_aff_involves_nan(get()); return manage(res); } -boolean multi_pw_aff::is_cst() const +boolean multi_pw_aff::involves_param(const isl::id &id) const { - auto res = isl_multi_pw_aff_is_cst(get()); + auto res = isl_multi_pw_aff_involves_param_id(get(), id.get()); return manage(res); } -boolean multi_pw_aff::is_equal(const isl::multi_pw_aff &mpa2) const +boolean 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 +boolean multi_pw_aff::involves_param(const isl::id_list &list) const { - auto res = isl_multi_pw_aff_lex_ge_map(copy(), mpa2.release()); + auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get()); return manage(res); } -isl::map multi_pw_aff::lex_gt_map(isl::multi_pw_aff mpa2) const +boolean multi_pw_aff::isa_multi_aff() const { - auto res = isl_multi_pw_aff_lex_gt_map(copy(), mpa2.release()); + auto res = isl_multi_pw_aff_isa_multi_aff(get()); return manage(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 +13318,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 +boolean 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); + auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::neg() const +boolean 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 +boolean 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 +boolean 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)); +} + +boolean multi_pw_aff::plain_is_equal(const isl::pw_aff &multi2) const +{ + return this->plain_is_equal(isl::multi_pw_aff(multi2)); +} + +boolean 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,33 +13379,56 @@ 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 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::id multi_pw_aff::range_tuple_id() const +{ + auto res = isl_multi_pw_aff_get_range_tuple_id(get()); return manage(res); } -isl::multi_pw_aff multi_pw_aff::range_splice(unsigned int pos, isl::multi_pw_aff multi2) const +isl::id multi_pw_aff::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::multi_pw_aff multi_pw_aff::reset_range_tuple_id() const { - auto res = isl_multi_pw_aff_range_splice(copy(), pos, multi2.release()); + auto res = isl_multi_pw_aff_reset_range_tuple_id(copy()); return manage(res); } @@ -10970,12 +13438,6 @@ return manage(res); } -isl::multi_pw_aff multi_pw_aff::reset_user() const -{ - auto res = isl_multi_pw_aff_reset_user(copy()); - return manage(res); -} - isl::multi_pw_aff multi_pw_aff::scale(isl::multi_val mv) const { auto res = isl_multi_pw_aff_scale_multi_val(copy(), mv.release()); @@ -10988,6 +13450,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,16 +13467,20 @@ 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 @@ -11018,36 +13489,70 @@ return manage(res); } -isl::multi_pw_aff multi_pw_aff::set_tuple_id(isl::dim type, isl::id id) const +isl::multi_pw_aff multi_pw_aff::set_range_tuple(isl::id id) const { - auto res = isl_multi_pw_aff_set_tuple_id(copy(), static_cast(type), id.release()); + auto res = isl_multi_pw_aff_set_range_tuple_id(copy(), id.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::set_range_tuple(const std::string &id) const { - auto res = isl_multi_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_size multi_pw_aff::size() const +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); +} + +class size multi_pw_aff::size() const { auto res = isl_multi_pw_aff_size(get()); - return res; + return manage(res); } -isl::multi_pw_aff multi_pw_aff::splice(unsigned int in_pos, unsigned int out_pos, isl::multi_pw_aff multi2) const +isl::space multi_pw_aff::space() const { - auto res = isl_multi_pw_aff_splice(copy(), in_pos, out_pos, multi2.release()); + 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::unbind_params_insert_domain(isl::multi_id domain) const { auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release()); @@ -11060,12 +13565,49 @@ return manage(res); } +isl::multi_union_pw_aff multi_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const +{ + return isl::multi_union_pw_aff(*this).union_add(mupa2); +} + +isl::multi_pw_aff multi_pw_aff::union_add(const isl::aff &mpa2) const +{ + return this->union_add(isl::multi_pw_aff(mpa2)); +} + +isl::multi_pw_aff multi_pw_aff::union_add(const isl::multi_aff &mpa2) const +{ + return this->union_add(isl::multi_pw_aff(mpa2)); +} + +isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_aff &mpa2) const +{ + return this->union_add(isl::multi_pw_aff(mpa2)); +} + +isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_multi_aff &mpa2) const +{ + return this->union_add(isl::multi_pw_aff(mpa2)); +} + isl::multi_pw_aff multi_pw_aff::zero(isl::space space) { auto res = isl_multi_pw_aff_zero(space.release()); 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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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 +13626,6 @@ ptr = obj.copy(); } - multi_union_pw_aff::multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr) : ptr(ptr) {} @@ -11093,21 +13634,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,3524 +13687,3393 @@ 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::union_pw_aff multi_union_pw_aff::at(int pos) const +{ + auto res = isl_multi_union_pw_aff_get_at(get(), pos); + return manage(res); } +isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const +{ + return at(pos); +} -isl::multi_union_pw_aff multi_union_pw_aff::add(isl::multi_union_pw_aff multi2) const +isl::union_set multi_union_pw_aff::bind(isl::multi_id tuple) const { - auto res = isl_multi_union_pw_aff_add(copy(), multi2.release()); + auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::align_params(isl::space model) const +isl::multi_union_pw_aff multi_union_pw_aff::coalesce() const { - auto res = isl_multi_union_pw_aff_align_params(copy(), model.release()); + auto res = isl_multi_union_pw_aff_coalesce(copy()); return manage(res); } -isl::union_pw_aff multi_union_pw_aff::apply_aff(isl::aff aff) const +class size multi_union_pw_aff::dim(isl::dim type) const { - auto res = isl_multi_union_pw_aff_apply_aff(copy(), aff.release()); + auto res = isl_multi_union_pw_aff_dim(get(), static_cast(type)); return manage(res); } -isl::union_pw_aff multi_union_pw_aff::apply_pw_aff(isl::pw_aff pa) const +isl::union_set multi_union_pw_aff::domain() const { - auto res = isl_multi_union_pw_aff_apply_pw_aff(copy(), pa.release()); + auto res = isl_multi_union_pw_aff_domain(copy()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::apply_pw_multi_aff(isl::pw_multi_aff pma) const +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_apply_pw_multi_aff(copy(), pma.release()); + auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release()); return manage(res); } -isl::union_set multi_union_pw_aff::bind(isl::multi_id tuple) const +isl::multi_union_pw_aff multi_union_pw_aff::from_union_map(isl::union_map umap) { - auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release()); + auto res = isl_multi_union_pw_aff_from_union_map(umap.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::coalesce() const +isl::multi_union_pw_aff multi_union_pw_aff::gist(isl::union_set context) const { - auto res = isl_multi_union_pw_aff_coalesce(copy()); + auto res = isl_multi_union_pw_aff_gist(copy(), context.release()); return manage(res); } -isl_size multi_union_pw_aff::dim(isl::dim type) const +boolean multi_union_pw_aff::has_range_tuple_id() const { - auto res = isl_multi_union_pw_aff_dim(get(), static_cast(type)); - return res; + auto res = isl_multi_union_pw_aff_has_range_tuple_id(get()); + return manage(res); } -isl::union_set multi_union_pw_aff::domain() const +isl::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::union_set uset) const { - auto res = isl_multi_union_pw_aff_domain(copy()); + auto res = isl_multi_union_pw_aff_intersect_domain(copy(), uset.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::set params) const { - auto res = isl_multi_union_pw_aff_drop_dims(copy(), static_cast(type), first, n); + auto res = isl_multi_union_pw_aff_intersect_params(copy(), params.release()); return manage(res); } -isl::multi_pw_aff multi_union_pw_aff::extract_multi_pw_aff(isl::space space) const +boolean multi_union_pw_aff::involves_nan() const { - auto res = isl_multi_union_pw_aff_extract_multi_pw_aff(get(), space.release()); + auto res = isl_multi_union_pw_aff_involves_nan(get()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::factor_range() const +isl::union_pw_aff_list multi_union_pw_aff::list() const { - auto res = isl_multi_union_pw_aff_factor_range(copy()); + auto res = isl_multi_union_pw_aff_get_list(get()); return manage(res); } -int multi_union_pw_aff::find_dim_by_id(isl::dim type, const isl::id &id) const +isl::union_pw_aff_list multi_union_pw_aff::get_list() const { - auto res = isl_multi_union_pw_aff_find_dim_by_id(get(), static_cast(type), id.get()); - return res; + return list(); } -int multi_union_pw_aff::find_dim_by_name(isl::dim type, const std::string &name) const +isl::multi_union_pw_aff multi_union_pw_aff::neg() const { - auto res = isl_multi_union_pw_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + auto res = isl_multi_union_pw_aff_neg(copy()); + return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::flat_range_product(isl::multi_union_pw_aff multi2) const +boolean multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release()); + auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::flatten_range() const +isl::multi_union_pw_aff multi_union_pw_aff::pullback(isl::union_pw_multi_aff upma) const { - auto res = isl_multi_union_pw_aff_flatten_range(copy()); + auto res = isl_multi_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::floor() 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_floor(copy()); + auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::from_multi_aff(isl::multi_aff ma) +isl::id multi_union_pw_aff::range_tuple_id() const { - auto res = isl_multi_union_pw_aff_from_multi_aff(ma.release()); + auto res = isl_multi_union_pw_aff_get_range_tuple_id(get()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::from_range() const +isl::id multi_union_pw_aff::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::multi_union_pw_aff multi_union_pw_aff::reset_range_tuple_id() const { - auto res = isl_multi_union_pw_aff_from_range(copy()); + auto res = isl_multi_union_pw_aff_reset_range_tuple_id(copy()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::from_union_map(isl::union_map umap) +isl::multi_union_pw_aff multi_union_pw_aff::reset_tuple_id(isl::dim type) const { - auto res = isl_multi_union_pw_aff_from_union_map(umap.release()); + auto res = isl_multi_union_pw_aff_reset_tuple_id(copy(), static_cast(type)); return manage(res); } -isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const +isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::multi_val mv) const { - auto res = isl_multi_union_pw_aff_get_at(get(), pos); + auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::val v) const +{ + auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release()); + 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()); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::val v) const +{ + auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release()); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const +{ + return this->scale_down(isl::val(ctx(), v)); +} + +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_at(copy(), pos, el.release()); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(isl::id id) const +{ + 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_range_tuple(const std::string &id) const +{ + 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 +{ + auto res = isl_multi_union_pw_aff_set_union_pw_aff(copy(), pos, el.release()); + return manage(res); +} + +class size multi_union_pw_aff::size() const +{ + auto res = isl_multi_union_pw_aff_size(get()); + return manage(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()); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::union_add(isl::multi_union_pw_aff mupa2) const +{ + auto res = isl_multi_union_pw_aff_union_add(copy(), mupa2.release()); return manage(res); } -isl::id multi_union_pw_aff::get_dim_id(isl::dim type, unsigned int pos) const +isl::multi_union_pw_aff multi_union_pw_aff::zero(isl::space space) { - auto res = isl_multi_union_pw_aff_get_dim_id(get(), static_cast(type), pos); + auto res = isl_multi_union_pw_aff_zero(space.release()); 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); +inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj) +{ + char *str = isl_multi_union_pw_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::multi_val +multi_val manage(__isl_take isl_multi_val *ptr) { + return multi_val(ptr); +} +multi_val manage_copy(__isl_keep isl_multi_val *ptr) { + ptr = isl_multi_val_copy(ptr); + return multi_val(ptr); +} + +multi_val::multi_val() + : ptr(nullptr) {} + +multi_val::multi_val(const multi_val &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +multi_val::multi_val(__isl_take isl_multi_val *ptr) + : ptr(ptr) {} + +multi_val::multi_val(isl::space space, isl::val_list list) +{ + 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; } -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); +bool multi_val::is_null() const { + return ptr == nullptr; } -isl::space multi_union_pw_aff::get_space() const -{ - auto res = isl_multi_union_pw_aff_get_space(get()); - return manage(res); +isl::ctx multi_val::ctx() const { + return isl::ctx(isl_multi_val_get_ctx(ptr)); } -isl::id multi_union_pw_aff::get_tuple_id(isl::dim type) const +isl::multi_val multi_val::add(isl::multi_val multi2) const { - auto res = isl_multi_union_pw_aff_get_tuple_id(get(), static_cast(type)); + auto res = isl_multi_val_add(copy(), multi2.release()); 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 +isl::multi_val multi_val::add(isl::val v) const { - auto res = isl_multi_union_pw_aff_get_union_pw_aff(get(), pos); + auto res = isl_multi_val_add_val(copy(), v.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::gist(isl::union_set context) const +isl::multi_val multi_val::add(long v) const { - auto res = isl_multi_union_pw_aff_gist(copy(), context.release()); - return manage(res); + return this->add(isl::val(ctx(), v)); } -isl::multi_union_pw_aff multi_union_pw_aff::gist_params(isl::set context) const +isl::val multi_val::at(int pos) const { - auto res = isl_multi_union_pw_aff_gist_params(copy(), context.release()); + auto res = isl_multi_val_get_at(get(), pos); return manage(res); } -boolean multi_union_pw_aff::has_tuple_id(isl::dim type) const +isl::val multi_val::get_at(int pos) const { - auto res = isl_multi_union_pw_aff_has_tuple_id(get(), static_cast(type)); - return manage(res); + return at(pos); } -isl::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::union_set uset) const +class size multi_val::dim(isl::dim type) const { - auto res = isl_multi_union_pw_aff_intersect_domain(copy(), uset.release()); + auto res = isl_multi_val_dim(get(), static_cast(type)); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::set params) const +isl::multi_val multi_val::flat_range_product(isl::multi_val multi2) const { - auto res = isl_multi_union_pw_aff_intersect_params(copy(), params.release()); + auto res = isl_multi_val_flat_range_product(copy(), multi2.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::intersect_range(isl::set set) const +boolean multi_val::has_range_tuple_id() const { - auto res = isl_multi_union_pw_aff_intersect_range(copy(), set.release()); + auto res = isl_multi_val_has_range_tuple_id(get()); return manage(res); } -boolean multi_union_pw_aff::involves_nan() const +boolean multi_val::involves_nan() const { - auto res = isl_multi_union_pw_aff_involves_nan(get()); + auto res = isl_multi_val_involves_nan(get()); return manage(res); } -isl::multi_val multi_union_pw_aff::max_multi_val() const +isl::val_list multi_val::list() const { - auto res = isl_multi_union_pw_aff_max_multi_val(copy()); + auto res = isl_multi_val_get_list(get()); return manage(res); } -isl::multi_val multi_union_pw_aff::min_multi_val() const +isl::val_list multi_val::get_list() const { - auto res = isl_multi_union_pw_aff_min_multi_val(copy()); - return manage(res); + return list(); } -isl::multi_union_pw_aff multi_union_pw_aff::mod_multi_val(isl::multi_val mv) const +isl::multi_val multi_val::max(isl::multi_val multi2) const { - auto res = isl_multi_union_pw_aff_mod_multi_val(copy(), mv.release()); + auto res = isl_multi_val_max(copy(), multi2.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::multi_aff_on_domain(isl::union_set domain, isl::multi_aff ma) +isl::multi_val multi_val::min(isl::multi_val multi2) const { - auto res = isl_multi_union_pw_aff_multi_aff_on_domain(domain.release(), ma.release()); + auto res = isl_multi_val_min(copy(), multi2.release()); 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::multi_val multi_val::neg() const { - auto res = isl_multi_union_pw_aff_multi_val_on_domain(domain.release(), mv.release()); + auto res = isl_multi_val_neg(copy()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::neg() const +boolean multi_val::plain_is_equal(const isl::multi_val &multi2) const { - auto res = isl_multi_union_pw_aff_neg(copy()); + auto res = isl_multi_val_plain_is_equal(get(), multi2.get()); return manage(res); } -boolean multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +isl::multi_val multi_val::product(isl::multi_val multi2) const { - auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get()); + auto res = isl_multi_val_product(copy(), multi2.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::pullback(isl::union_pw_multi_aff upma) const +isl::multi_val multi_val::range_product(isl::multi_val multi2) const { - auto res = isl_multi_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release()); + auto res = isl_multi_val_range_product(copy(), multi2.release()); 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) +isl::id multi_val::range_tuple_id() const { - auto res = isl_multi_union_pw_aff_pw_multi_aff_on_domain(domain.release(), pma.release()); + auto res = isl_multi_val_get_range_tuple_id(get()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::range_factor_domain() const +isl::id multi_val::get_range_tuple_id() const { - auto res = isl_multi_union_pw_aff_range_factor_domain(copy()); - return manage(res); + return range_tuple_id(); } -isl::multi_union_pw_aff multi_union_pw_aff::range_factor_range() const +isl::multi_val multi_val::reset_range_tuple_id() const { - auto res = isl_multi_union_pw_aff_range_factor_range(copy()); + auto res = isl_multi_val_reset_range_tuple_id(copy()); return manage(res); } -boolean multi_union_pw_aff::range_is_wrapping() const +isl::multi_val multi_val::reset_tuple_id(isl::dim type) const { - auto res = isl_multi_union_pw_aff_range_is_wrapping(get()); + auto res = isl_multi_val_reset_tuple_id(copy(), static_cast(type)); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::range_product(isl::multi_union_pw_aff multi2) const +isl::multi_val multi_val::scale(isl::multi_val mv) const { - auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release()); + auto res = isl_multi_val_scale_multi_val(copy(), mv.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::range_splice(unsigned int pos, isl::multi_union_pw_aff multi2) const +isl::multi_val multi_val::scale(isl::val v) const { - auto res = isl_multi_union_pw_aff_range_splice(copy(), pos, multi2.release()); + auto res = isl_multi_val_scale_val(copy(), v.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::reset_tuple_id(isl::dim type) const +isl::multi_val multi_val::scale(long v) const { - auto res = isl_multi_union_pw_aff_reset_tuple_id(copy(), static_cast(type)); - return manage(res); + return this->scale(isl::val(ctx(), v)); } -isl::multi_union_pw_aff multi_union_pw_aff::reset_user() const +isl::multi_val multi_val::scale_down(isl::multi_val mv) const { - auto res = isl_multi_union_pw_aff_reset_user(copy()); + auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::multi_val mv) const +isl::multi_val multi_val::scale_down(isl::val v) const { - auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release()); + auto res = isl_multi_val_scale_down_val(copy(), v.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::val v) const +isl::multi_val multi_val::scale_down(long v) const { - auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release()); - return manage(res); + return this->scale_down(isl::val(ctx(), v)); } -isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::multi_val mv) const +isl::multi_val multi_val::set_at(int pos, isl::val el) const { - auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release()); + auto res = isl_multi_val_set_at(copy(), pos, el.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::val v) const +isl::multi_val multi_val::set_at(int pos, long el) const { - auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release()); - return manage(res); + return this->set_at(pos, isl::val(ctx(), el)); } -isl::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::union_pw_aff el) const +isl::multi_val multi_val::set_range_tuple(isl::id id) const { - auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release()); + auto res = isl_multi_val_set_range_tuple_id(copy(), id.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::multi_val multi_val::set_range_tuple(const std::string &id) const { - auto res = isl_multi_union_pw_aff_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } -isl::multi_union_pw_aff multi_union_pw_aff::set_tuple_id(isl::dim type, isl::id id) const +isl::multi_val multi_val::set_val(int pos, isl::val el) const { - auto res = isl_multi_union_pw_aff_set_tuple_id(copy(), static_cast(type), id.release()); + auto res = isl_multi_val_set_val(copy(), pos, el.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_val multi_val::set_val(int pos, long el) const { - auto res = isl_multi_union_pw_aff_set_tuple_name(copy(), static_cast(type), s.c_str()); - return manage(res); + return this->set_val(pos, isl::val(ctx(), el)); } -isl::multi_union_pw_aff multi_union_pw_aff::set_union_pw_aff(int pos, isl::union_pw_aff el) const +class size multi_val::size() const { - auto res = isl_multi_union_pw_aff_set_union_pw_aff(copy(), pos, el.release()); + auto res = isl_multi_val_size(get()); return manage(res); } -isl_size multi_union_pw_aff::size() const +isl::space multi_val::space() const { - auto res = isl_multi_union_pw_aff_size(get()); - return res; + auto res = isl_multi_val_get_space(get()); + return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::sub(isl::multi_union_pw_aff multi2) const +isl::space multi_val::get_space() const { - auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release()); - return manage(res); + return space(); } -isl::multi_union_pw_aff multi_union_pw_aff::union_add(isl::multi_union_pw_aff mupa2) const +isl::multi_val multi_val::sub(isl::multi_val multi2) const { - auto res = isl_multi_union_pw_aff_union_add(copy(), mupa2.release()); + auto res = isl_multi_val_sub(copy(), multi2.release()); return manage(res); } -isl::multi_union_pw_aff multi_union_pw_aff::zero(isl::space space) +isl::multi_val multi_val::zero(isl::space space) { - auto res = isl_multi_union_pw_aff_zero(space.release()); + auto res = isl_multi_val_zero(space.release()); return manage(res); } -isl::union_set multi_union_pw_aff::zero_union_set() const +inline std::ostream &operator<<(std::ostream &os, const multi_val &obj) { - auto res = isl_multi_union_pw_aff_zero_union_set(copy()); - return manage(res); + char *str = isl_multi_val_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -// implementations for isl::multi_val -multi_val manage(__isl_take isl_multi_val *ptr) { - return multi_val(ptr); +// implementations for isl::point +point manage(__isl_take isl_point *ptr) { + return point(ptr); } -multi_val manage_copy(__isl_keep isl_multi_val *ptr) { - ptr = isl_multi_val_copy(ptr); - return multi_val(ptr); +point manage_copy(__isl_keep isl_point *ptr) { + ptr = isl_point_copy(ptr); + return point(ptr); } -multi_val::multi_val() +point::point() : ptr(nullptr) {} -multi_val::multi_val(const multi_val &obj) +point::point(const point &obj) : ptr(nullptr) { ptr = obj.copy(); } - -multi_val::multi_val(__isl_take isl_multi_val *ptr) +point::point(__isl_take isl_point *ptr) : ptr(ptr) {} -multi_val::multi_val(isl::space space, isl::val_list list) -{ - 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) +point::point(isl::space space) { - auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str()); + auto res = isl_point_zero(space.release()); ptr = res; } -multi_val &multi_val::operator=(multi_val obj) { +point &point::operator=(point obj) { std::swap(this->ptr, obj.ptr); return *this; } -multi_val::~multi_val() { +point::~point() { if (ptr) - isl_multi_val_free(ptr); + isl_point_free(ptr); } -__isl_give isl_multi_val *multi_val::copy() const & { - return isl_multi_val_copy(ptr); +__isl_give isl_point *point::copy() const & { + return isl_point_copy(ptr); } -__isl_keep isl_multi_val *multi_val::get() const { +__isl_keep isl_point *point::get() const { return ptr; } -__isl_give isl_multi_val *multi_val::release() { - isl_multi_val *tmp = ptr; +__isl_give isl_point *point::release() { + isl_point *tmp = ptr; ptr = nullptr; return tmp; } -bool multi_val::is_null() const { +bool point::is_null() const { return ptr == nullptr; } +isl::ctx point::ctx() const { + return isl::ctx(isl_point_get_ctx(ptr)); +} -isl::ctx multi_val::ctx() const { - return isl::ctx(isl_multi_val_get_ctx(ptr)); +isl::set point::add_constraint(const isl::constraint &constraint) const +{ + return isl::basic_set(*this).add_constraint(constraint); } -void multi_val::dump() const { - isl_multi_val_dump(get()); +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::multi_val multi_val::add(isl::multi_val multi2) const +isl::set point::align_params(const isl::space &model) const { - auto res = isl_multi_val_add(copy(), multi2.release()); - return manage(res); + return isl::basic_set(*this).align_params(model); } -isl::multi_val multi_val::add(isl::val v) const +isl::basic_set point::apply(const isl::basic_map &bmap) const { - auto res = isl_multi_val_add_val(copy(), v.release()); - return manage(res); + return isl::basic_set(*this).apply(bmap); } -isl::multi_val multi_val::add_dims(isl::dim type, unsigned int n) const +isl::set point::apply(const isl::map &map) const { - auto res = isl_multi_val_add_dims(copy(), static_cast(type), n); - return manage(res); + return isl::basic_set(*this).apply(map); } -isl::multi_val multi_val::align_params(isl::space model) const +isl::union_set point::apply(const isl::union_map &umap) const { - auto res = isl_multi_val_align_params(copy(), model.release()); - return manage(res); + return isl::basic_set(*this).apply(umap); } -isl_size multi_val::dim(isl::dim type) const +isl::pw_multi_aff point::as_pw_multi_aff() const { - auto res = isl_multi_val_dim(get(), static_cast(type)); - return res; + return isl::basic_set(*this).as_pw_multi_aff(); } -isl::multi_val multi_val::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::set point::as_set() const { - auto res = isl_multi_val_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::basic_set(*this).as_set(); } -isl::multi_val multi_val::factor_range() const +isl::basic_set_list point::basic_set_list() const { - auto res = isl_multi_val_factor_range(copy()); - return manage(res); + return isl::basic_set(*this).basic_set_list(); } -int multi_val::find_dim_by_id(isl::dim type, const isl::id &id) const +isl::set point::bind(const isl::multi_id &tuple) const { - auto res = isl_multi_val_find_dim_by_id(get(), static_cast(type), id.get()); - return res; + return isl::basic_set(*this).bind(tuple); } -int multi_val::find_dim_by_name(isl::dim type, const std::string &name) const +isl::set point::coalesce() const { - auto res = isl_multi_val_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + return isl::basic_set(*this).coalesce(); } -isl::multi_val multi_val::flat_range_product(isl::multi_val multi2) const +isl::set point::complement() const { - auto res = isl_multi_val_flat_range_product(copy(), multi2.release()); - return manage(res); + return isl::basic_set(*this).complement(); } -isl::multi_val multi_val::flatten_range() const +isl::union_set point::compute_divs() const { - auto res = isl_multi_val_flatten_range(copy()); - return manage(res); + return isl::basic_set(*this).compute_divs(); } -isl::multi_val multi_val::from_range() const +boolean point::contains(const isl::space &space) const { - auto res = isl_multi_val_from_range(copy()); - return manage(res); + return isl::basic_set(*this).contains(space); } -isl::val multi_val::get_at(int pos) const +isl::basic_set point::convex_hull() const { - auto res = isl_multi_val_get_at(get(), pos); - return manage(res); + return isl::basic_set(*this).convex_hull(); } -isl::id multi_val::get_dim_id(isl::dim type, unsigned int pos) const +isl::val point::coordinate_val(isl::dim type, int pos) const { - auto res = isl_multi_val_get_dim_id(get(), static_cast(type), pos); + auto res = isl_point_get_coordinate_val(get(), static_cast(type), pos); return manage(res); } -isl::space multi_val::get_domain_space() const +isl::val point::get_coordinate_val(isl::dim type, int pos) const { - auto res = isl_multi_val_get_domain_space(get()); - return manage(res); + return coordinate_val(type, pos); } -isl::val_list multi_val::get_list() const +isl::basic_set point::detect_equalities() const { - auto res = isl_multi_val_get_list(get()); - return manage(res); + return isl::basic_set(*this).detect_equalities(); } -isl::space multi_val::get_space() const +class size point::dim(isl::dim type) const { - auto res = isl_multi_val_get_space(get()); - return manage(res); + return isl::basic_set(*this).dim(type); } -isl::id multi_val::get_tuple_id(isl::dim type) const +boolean point::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const { - auto res = isl_multi_val_get_tuple_id(get(), static_cast(type)); - return manage(res); + return isl::basic_set(*this).dim_has_any_lower_bound(type, pos); } -std::string multi_val::get_tuple_name(isl::dim type) const +isl::id point::dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_multi_val_get_tuple_name(get(), static_cast(type)); - std::string tmp(res); - return tmp; + return isl::basic_set(*this).dim_id(type, pos); } -isl::val multi_val::get_val(int pos) const +isl::pw_aff point::dim_max(int pos) const { - auto res = isl_multi_val_get_val(get(), pos); - return manage(res); + return isl::basic_set(*this).dim_max(pos); } -boolean multi_val::has_tuple_id(isl::dim type) const +isl::val point::dim_max_val(int pos) const { - auto res = isl_multi_val_has_tuple_id(get(), static_cast(type)); - return manage(res); + return isl::basic_set(*this).dim_max_val(pos); } -isl::multi_val multi_val::insert_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::pw_aff point::dim_min(int pos) const { - auto res = isl_multi_val_insert_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::basic_set(*this).dim_min(pos); } -boolean multi_val::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::val point::dim_min_val(int pos) const { - auto res = isl_multi_val_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return isl::basic_set(*this).dim_min_val(pos); } -boolean multi_val::involves_nan() const +std::string point::dim_name(isl::dim type, unsigned int pos) const { - auto res = isl_multi_val_involves_nan(get()); - return manage(res); + return isl::basic_set(*this).dim_name(type, pos); } -boolean multi_val::is_zero() const +isl::aff point::div(int pos) const { - auto res = isl_multi_val_is_zero(get()); - return manage(res); + return isl::basic_set(*this).div(pos); } -isl::multi_val multi_val::max(isl::multi_val multi2) const +isl::set point::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_multi_val_max(copy(), multi2.release()); - return manage(res); + return isl::basic_set(*this).drop_constraints_involving_dims(type, first, n); } -isl::multi_val multi_val::min(isl::multi_val multi2) const +isl::set point::eliminate(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_multi_val_min(copy(), multi2.release()); - return manage(res); + return isl::basic_set(*this).eliminate(type, first, n); } -isl::multi_val multi_val::mod_multi_val(isl::multi_val mv) const +boolean point::every_set(const std::function &test) const { - auto res = isl_multi_val_mod_multi_val(copy(), mv.release()); - return manage(res); + return isl::basic_set(*this).every_set(test); } -isl::multi_val multi_val::mod_val(isl::val v) const +isl::set point::extract_set(const isl::space &space) const { - auto res = isl_multi_val_mod_val(copy(), v.release()); - return manage(res); + return isl::basic_set(*this).extract_set(space); } -isl::multi_val multi_val::neg() const +int point::find_dim_by_id(isl::dim type, const isl::id &id) const { - auto res = isl_multi_val_neg(copy()); - return manage(res); + return isl::basic_set(*this).find_dim_by_id(type, id); } -boolean multi_val::plain_is_equal(const isl::multi_val &multi2) const +int point::find_dim_by_id(isl::dim type, const std::string &id) const { - auto res = isl_multi_val_plain_is_equal(get(), multi2.get()); - return manage(res); + return this->find_dim_by_id(type, isl::id(ctx(), id)); } -isl::multi_val multi_val::product(isl::multi_val multi2) const +isl::basic_set point::fix_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_multi_val_product(copy(), multi2.release()); - return manage(res); + 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(); +} + +stat point::foreach_basic_set(const std::function &fn) const +{ + return isl::basic_set(*this).foreach_basic_set(fn); +} + +stat point::foreach_point(const std::function &fn) const +{ + return isl::basic_set(*this).foreach_point(fn); +} + +stat 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::multi_val multi_val::project_domain_on_params() const +isl::union_set point::gist(const isl::union_set &context) const { - auto res = isl_multi_val_project_domain_on_params(copy()); - return manage(res); + return isl::basic_set(*this).gist(context); } -isl::multi_val multi_val::range_factor_domain() const +isl::set point::gist_params(const isl::set &context) const { - auto res = isl_multi_val_range_factor_domain(copy()); - return manage(res); + return isl::basic_set(*this).gist_params(context); } -isl::multi_val multi_val::range_factor_range() const +boolean point::has_equal_space(const isl::set &set2) const { - auto res = isl_multi_val_range_factor_range(copy()); - return manage(res); + return isl::basic_set(*this).has_equal_space(set2); } -boolean multi_val::range_is_wrapping() const +isl::map point::identity() const { - auto res = isl_multi_val_range_is_wrapping(get()); - return manage(res); + return isl::basic_set(*this).identity(); } -isl::multi_val multi_val::range_product(isl::multi_val multi2) const +isl::union_pw_multi_aff point::identity_union_pw_multi_aff() const { - auto res = isl_multi_val_range_product(copy(), multi2.release()); - return manage(res); + return isl::basic_set(*this).identity_union_pw_multi_aff(); } -isl::multi_val multi_val::range_splice(unsigned int pos, isl::multi_val multi2) const +isl::pw_aff point::indicator_function() const { - auto res = isl_multi_val_range_splice(copy(), pos, multi2.release()); - return manage(res); + return isl::basic_set(*this).indicator_function(); } -isl::multi_val multi_val::reset_tuple_id(isl::dim type) const +isl::set point::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const { - auto res = isl_multi_val_reset_tuple_id(copy(), static_cast(type)); - return manage(res); + return isl::basic_set(*this).insert_dims(type, pos, n); } -isl::multi_val multi_val::reset_user() const +isl::map point::insert_domain(const isl::space &domain) const { - auto res = isl_multi_val_reset_user(copy()); - return manage(res); + return isl::basic_set(*this).insert_domain(domain); } -isl::multi_val multi_val::scale(isl::multi_val mv) const +isl::basic_set point::intersect(const isl::basic_set &bset2) const { - auto res = isl_multi_val_scale_multi_val(copy(), mv.release()); - return manage(res); + return isl::basic_set(*this).intersect(bset2); } -isl::multi_val multi_val::scale(isl::val v) const +isl::set point::intersect(const isl::set &set2) const { - auto res = isl_multi_val_scale_val(copy(), v.release()); - return manage(res); + return isl::basic_set(*this).intersect(set2); } -isl::multi_val multi_val::scale_down(isl::multi_val mv) const +isl::union_set point::intersect(const isl::union_set &uset2) const { - auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release()); - return manage(res); + return isl::basic_set(*this).intersect(uset2); } -isl::multi_val multi_val::scale_down(isl::val v) const +isl::basic_set point::intersect_params(const isl::basic_set &bset2) const { - auto res = isl_multi_val_scale_down_val(copy(), v.release()); - return manage(res); + return isl::basic_set(*this).intersect_params(bset2); } -isl::multi_val multi_val::set_at(int pos, isl::val el) const +isl::set point::intersect_params(const isl::set ¶ms) const { - auto res = isl_multi_val_set_at(copy(), pos, el.release()); - return manage(res); + return isl::basic_set(*this).intersect_params(params); } -isl::multi_val multi_val::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +boolean point::involves_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_multi_val_set_dim_id(copy(), static_cast(type), pos, id.release()); - return manage(res); + return isl::basic_set(*this).involves_dims(type, first, n); } -isl::multi_val multi_val::set_tuple_id(isl::dim type, isl::id id) const +boolean point::involves_locals() const { - auto res = isl_multi_val_set_tuple_id(copy(), static_cast(type), id.release()); - return manage(res); + return isl::basic_set(*this).involves_locals(); } -isl::multi_val multi_val::set_tuple_name(isl::dim type, const std::string &s) const +boolean point::is_bounded() const { - auto res = isl_multi_val_set_tuple_name(copy(), static_cast(type), s.c_str()); - return manage(res); + return isl::basic_set(*this).is_bounded(); } -isl::multi_val multi_val::set_val(int pos, isl::val el) const +boolean point::is_disjoint(const isl::set &set2) const { - auto res = isl_multi_val_set_val(copy(), pos, el.release()); - return manage(res); + return isl::basic_set(*this).is_disjoint(set2); } -isl_size multi_val::size() const +boolean point::is_disjoint(const isl::union_set &uset2) const { - auto res = isl_multi_val_size(get()); - return res; + return isl::basic_set(*this).is_disjoint(uset2); } -isl::multi_val multi_val::splice(unsigned int in_pos, unsigned int out_pos, isl::multi_val multi2) const +boolean point::is_empty() const { - auto res = isl_multi_val_splice(copy(), in_pos, out_pos, multi2.release()); - return manage(res); + return isl::basic_set(*this).is_empty(); } -isl::multi_val multi_val::sub(isl::multi_val multi2) const +boolean point::is_equal(const isl::basic_set &bset2) const { - auto res = isl_multi_val_sub(copy(), multi2.release()); - return manage(res); + return isl::basic_set(*this).is_equal(bset2); } -isl::multi_val multi_val::zero(isl::space space) +boolean point::is_equal(const isl::set &set2) const { - auto res = isl_multi_val_zero(space.release()); - return manage(res); + return isl::basic_set(*this).is_equal(set2); } -// implementations for isl::point -point manage(__isl_take isl_point *ptr) { - return point(ptr); -} -point manage_copy(__isl_keep isl_point *ptr) { - ptr = isl_point_copy(ptr); - return point(ptr); +boolean point::is_equal(const isl::union_set &uset2) const +{ + return isl::basic_set(*this).is_equal(uset2); } -point::point() - : ptr(nullptr) {} - -point::point(const point &obj) - : ptr(nullptr) +boolean point::is_params() const { - ptr = obj.copy(); + return isl::basic_set(*this).is_params(); } - -point::point(__isl_take isl_point *ptr) - : ptr(ptr) {} - -point::point(isl::space dim) +boolean point::is_singleton() const { - auto res = isl_point_zero(dim.release()); - ptr = res; + return isl::basic_set(*this).is_singleton(); } -point &point::operator=(point obj) { - std::swap(this->ptr, obj.ptr); - return *this; +boolean point::is_strict_subset(const isl::set &set2) const +{ + return isl::basic_set(*this).is_strict_subset(set2); } -point::~point() { - if (ptr) - isl_point_free(ptr); +boolean point::is_strict_subset(const isl::union_set &uset2) const +{ + return isl::basic_set(*this).is_strict_subset(uset2); } -__isl_give isl_point *point::copy() const & { - return isl_point_copy(ptr); +boolean point::is_subset(const isl::basic_set &bset2) const +{ + return isl::basic_set(*this).is_subset(bset2); } -__isl_keep isl_point *point::get() const { - return ptr; +boolean point::is_subset(const isl::set &set2) const +{ + return isl::basic_set(*this).is_subset(set2); } -__isl_give isl_point *point::release() { - isl_point *tmp = ptr; - ptr = nullptr; - return tmp; +boolean point::is_subset(const isl::union_set &uset2) const +{ + return isl::basic_set(*this).is_subset(uset2); } -bool point::is_null() const { - return ptr == nullptr; +boolean point::is_wrapping() const +{ + return isl::basic_set(*this).is_wrapping(); } - -isl::ctx point::ctx() const { - return isl::ctx(isl_point_get_ctx(ptr)); +boolean point::isa_set() const +{ + return isl::basic_set(*this).isa_set(); } -void point::dump() const { - isl_point_dump(get()); +isl::set point::lexmax() const +{ + return isl::basic_set(*this).lexmax(); } - -isl::point point::add_ui(isl::dim type, int pos, unsigned int val) const +isl::pw_multi_aff point::lexmax_pw_multi_aff() const { - auto res = isl_point_add_ui(copy(), static_cast(type), pos, val); - return manage(res); + return isl::basic_set(*this).lexmax_pw_multi_aff(); } -isl::val point::get_coordinate_val(isl::dim type, int pos) const +isl::set point::lexmin() const { - auto res = isl_point_get_coordinate_val(get(), static_cast(type), pos); - return manage(res); + return isl::basic_set(*this).lexmin(); } -isl::multi_val point::get_multi_val() const +isl::pw_multi_aff point::lexmin_pw_multi_aff() const { - auto res = isl_point_get_multi_val(get()); - return manage(res); + return isl::basic_set(*this).lexmin_pw_multi_aff(); } -isl::space point::get_space() const +isl::set point::lower_bound(const isl::multi_pw_aff &lower) const { - auto res = isl_point_get_space(get()); - return manage(res); + return isl::basic_set(*this).lower_bound(lower); } -isl::point point::set_coordinate_val(isl::dim type, int pos, isl::val v) const +isl::set point::lower_bound(const isl::multi_val &lower) const { - auto res = isl_point_set_coordinate_val(copy(), static_cast(type), pos, v.release()); - return manage(res); + return isl::basic_set(*this).lower_bound(lower); } -isl::point point::sub_ui(isl::dim type, int pos, unsigned int val) const +isl::set point::lower_bound_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_point_sub_ui(copy(), static_cast(type), pos, val); - return manage(res); + return isl::basic_set(*this).lower_bound_si(type, pos, value); } -// implementations for isl::pw_aff -pw_aff manage(__isl_take isl_pw_aff *ptr) { - return pw_aff(ptr); +isl::set point::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const +{ + return isl::basic_set(*this).lower_bound_val(type, pos, value); } -pw_aff manage_copy(__isl_keep isl_pw_aff *ptr) { - ptr = isl_pw_aff_copy(ptr); - return pw_aff(ptr); + +isl::set point::lower_bound_val(isl::dim type, unsigned int pos, long value) const +{ + return this->lower_bound_val(type, pos, isl::val(ctx(), value)); } -pw_aff::pw_aff() - : ptr(nullptr) {} +isl::multi_pw_aff point::max_multi_pw_aff() const +{ + return isl::basic_set(*this).max_multi_pw_aff(); +} -pw_aff::pw_aff(const pw_aff &obj) - : ptr(nullptr) +isl::val point::max_val(const isl::aff &obj) const { - ptr = obj.copy(); + return isl::basic_set(*this).max_val(obj); } +isl::multi_pw_aff point::min_multi_pw_aff() const +{ + return isl::basic_set(*this).min_multi_pw_aff(); +} -pw_aff::pw_aff(__isl_take isl_pw_aff *ptr) - : ptr(ptr) {} +isl::val point::min_val(const isl::aff &obj) const +{ + return isl::basic_set(*this).min_val(obj); +} -pw_aff::pw_aff(isl::aff aff) +isl::multi_val point::multi_val() const { - auto res = isl_pw_aff_from_aff(aff.release()); - ptr = res; + auto res = isl_point_get_multi_val(get()); + return manage(res); } -pw_aff::pw_aff(isl::ctx ctx, const std::string &str) + +isl::multi_val point::get_multi_val() const { - auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str()); - ptr = res; + return multi_val(); } -pw_aff::pw_aff(isl::set domain, isl::val v) + +class size point::n_basic_set() const { - auto res = isl_pw_aff_val_on_domain(domain.release(), v.release()); - ptr = res; + return isl::basic_set(*this).n_basic_set(); } -pw_aff::pw_aff(isl::local_space ls) + +isl::basic_set point::params() const { - auto res = isl_pw_aff_zero_on_domain(ls.release()); - ptr = res; + return isl::basic_set(*this).params(); } -pw_aff &pw_aff::operator=(pw_aff obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::val point::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const +{ + return isl::basic_set(*this).plain_get_val_if_fixed(type, pos); } -pw_aff::~pw_aff() { - if (ptr) - isl_pw_aff_free(ptr); +isl::multi_val point::plain_multi_val_if_fixed() const +{ + return isl::basic_set(*this).plain_multi_val_if_fixed(); } -__isl_give isl_pw_aff *pw_aff::copy() const & { - return isl_pw_aff_copy(ptr); +isl::basic_set point::polyhedral_hull() const +{ + return isl::basic_set(*this).polyhedral_hull(); } -__isl_keep isl_pw_aff *pw_aff::get() const { - return ptr; +isl::set point::preimage(const isl::multi_aff &ma) const +{ + return isl::basic_set(*this).preimage(ma); } -__isl_give isl_pw_aff *pw_aff::release() { - isl_pw_aff *tmp = ptr; - ptr = nullptr; - return tmp; +isl::set point::preimage(const isl::multi_pw_aff &mpa) const +{ + return isl::basic_set(*this).preimage(mpa); } -bool pw_aff::is_null() const { - return ptr == nullptr; +isl::set point::preimage(const isl::pw_multi_aff &pma) const +{ + return isl::basic_set(*this).preimage(pma); } +isl::union_set point::preimage(const isl::union_pw_multi_aff &upma) const +{ + return isl::basic_set(*this).preimage(upma); +} -isl::ctx pw_aff::ctx() const { - return isl::ctx(isl_pw_aff_get_ctx(ptr)); +isl::set point::product(const isl::set &set2) const +{ + return isl::basic_set(*this).product(set2); } -void pw_aff::dump() const { - isl_pw_aff_dump(get()); +isl::basic_set point::project_out(isl::dim type, unsigned int first, unsigned int n) const +{ + return isl::basic_set(*this).project_out(type, first, n); } +isl::set point::project_out_all_params() const +{ + return isl::basic_set(*this).project_out_all_params(); +} -isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const +isl::set point::project_out_param(const isl::id &id) const { - auto res = isl_pw_aff_add(copy(), pwaff2.release()); - return manage(res); + return isl::basic_set(*this).project_out_param(id); } -isl::pw_aff pw_aff::add_constant(isl::val v) const +isl::set point::project_out_param(const std::string &id) const { - auto res = isl_pw_aff_add_constant_val(copy(), v.release()); - return manage(res); + return this->project_out_param(isl::id(ctx(), id)); } -isl::pw_aff pw_aff::add_dims(isl::dim type, unsigned int n) const +isl::set point::project_out_param(const isl::id_list &list) const { - auto res = isl_pw_aff_add_dims(copy(), static_cast(type), n); - return manage(res); + return isl::basic_set(*this).project_out_param(list); } -isl::pw_aff pw_aff::align_params(isl::space model) const +isl::pw_multi_aff point::pw_multi_aff_on_domain(const isl::multi_val &mv) const { - auto res = isl_pw_aff_align_params(copy(), model.release()); - return manage(res); + return isl::basic_set(*this).pw_multi_aff_on_domain(mv); } -isl::pw_aff pw_aff::alloc(isl::set set, isl::aff aff) +isl::set point::remove_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_pw_aff_alloc(set.release(), aff.release()); - return manage(res); + return isl::basic_set(*this).remove_dims(type, first, n); } -isl::aff pw_aff::as_aff() const +isl::set point::remove_divs() const { - auto res = isl_pw_aff_as_aff(copy()); - return manage(res); + return isl::basic_set(*this).remove_divs(); } -isl::set pw_aff::bind(isl::id id) const +isl::set point::remove_redundancies() const { - auto res = isl_pw_aff_bind_id(copy(), id.release()); - return manage(res); + return isl::basic_set(*this).remove_redundancies(); } -isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const +isl::set point::reset_tuple_id() const { - auto res = isl_pw_aff_bind_domain(copy(), tuple.release()); - return manage(res); + return isl::basic_set(*this).reset_tuple_id(); } -isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const +isl::basic_set point::sample() const { - auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release()); - return manage(res); + return isl::basic_set(*this).sample(); } -isl::pw_aff pw_aff::ceil() const +isl::point point::sample_point() const { - auto res = isl_pw_aff_ceil(copy()); - return manage(res); + return isl::basic_set(*this).sample_point(); } -isl::pw_aff pw_aff::coalesce() const +isl::set point::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const { - auto res = isl_pw_aff_coalesce(copy()); - return manage(res); + return isl::basic_set(*this).set_dim_id(type, pos, id); } -isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const +isl::set point::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const { - auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release()); - return manage(res); + return this->set_dim_id(type, pos, isl::id(ctx(), id)); } -isl_size pw_aff::dim(isl::dim type) const +isl::set_list point::set_list() const { - auto res = isl_pw_aff_dim(get(), static_cast(type)); - return res; + return isl::basic_set(*this).set_list(); } -isl::pw_aff pw_aff::div(isl::pw_aff pa2) const +isl::set point::set_tuple_id(const isl::id &id) const { - auto res = isl_pw_aff_div(copy(), pa2.release()); - return manage(res); + return isl::basic_set(*this).set_tuple_id(id); } -isl::set pw_aff::domain() const +isl::set point::set_tuple_id(const std::string &id) const { - auto res = isl_pw_aff_domain(copy()); - return manage(res); + return this->set_tuple_id(isl::id(ctx(), id)); } -isl::pw_aff pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::fixed_box point::simple_fixed_box_hull() const { - auto res = isl_pw_aff_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::basic_set(*this).simple_fixed_box_hull(); } -isl::pw_aff pw_aff::drop_unused_params() const +isl::basic_set point::simple_hull() const { - auto res = isl_pw_aff_drop_unused_params(copy()); - return manage(res); + return isl::basic_set(*this).simple_hull(); } -isl::pw_aff pw_aff::empty(isl::space space) +isl::space point::space() const { - auto res = isl_pw_aff_empty(space.release()); - return manage(res); + return isl::basic_set(*this).space(); } -isl::map pw_aff::eq_map(isl::pw_aff pa2) const +isl::val point::stride(int pos) const { - auto res = isl_pw_aff_eq_map(copy(), pa2.release()); - return manage(res); + return isl::basic_set(*this).stride(pos); } -isl::set pw_aff::eq_set(isl::pw_aff pwaff2) const +isl::set point::subtract(const isl::set &set2) const { - auto res = isl_pw_aff_eq_set(copy(), pwaff2.release()); - return manage(res); + return isl::basic_set(*this).subtract(set2); } -isl::val pw_aff::eval(isl::point pnt) const +isl::union_set point::subtract(const isl::union_set &uset2) const { - auto res = isl_pw_aff_eval(copy(), pnt.release()); - return manage(res); + return isl::basic_set(*this).subtract(uset2); } -int pw_aff::find_dim_by_name(isl::dim type, const std::string &name) const +isl::basic_set_list point::to_list() const { - auto res = isl_pw_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + return isl::basic_set(*this).to_list(); } -isl::pw_aff pw_aff::floor() const +isl::set point::to_set() const { - auto res = isl_pw_aff_floor(copy()); + auto res = isl_point_to_set(copy()); return manage(res); } -stat pw_aff::foreach_piece(const std::function &fn) const +isl::union_set point::to_union_set() 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).to_union_set(); } -isl::pw_aff pw_aff::from_range() const +isl::map point::translation() const { - auto res = isl_pw_aff_from_range(copy()); - return manage(res); + return isl::basic_set(*this).translation(); } -isl::map pw_aff::ge_map(isl::pw_aff pa2) const +class size point::tuple_dim() const { - auto res = isl_pw_aff_ge_map(copy(), pa2.release()); - return manage(res); + return isl::basic_set(*this).tuple_dim(); } -isl::set pw_aff::ge_set(isl::pw_aff pwaff2) const +isl::id point::tuple_id() const { - auto res = isl_pw_aff_ge_set(copy(), pwaff2.release()); - return manage(res); + return isl::basic_set(*this).tuple_id(); } -isl::id pw_aff::get_dim_id(isl::dim type, unsigned int pos) const +std::string point::tuple_name() const { - auto res = isl_pw_aff_get_dim_id(get(), static_cast(type), pos); - return manage(res); + return isl::basic_set(*this).tuple_name(); } -std::string pw_aff::get_dim_name(isl::dim type, unsigned int pos) const +isl::set point::unbind_params(const isl::multi_id &tuple) 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).unbind_params(tuple); } -isl::space pw_aff::get_domain_space() const +isl::map point::unbind_params_insert_domain(const isl::multi_id &domain) const { - auto res = isl_pw_aff_get_domain_space(get()); - return manage(res); + return isl::basic_set(*this).unbind_params_insert_domain(domain); } -uint32_t pw_aff::get_hash() const +isl::set point::unite(const isl::basic_set &bset2) const { - auto res = isl_pw_aff_get_hash(get()); - return res; + return isl::basic_set(*this).unite(bset2); } -isl::space pw_aff::get_space() const +isl::set point::unite(const isl::set &set2) const { - auto res = isl_pw_aff_get_space(get()); - return manage(res); + return isl::basic_set(*this).unite(set2); } -isl::id pw_aff::get_tuple_id(isl::dim type) const +isl::union_set point::unite(const isl::union_set &uset2) const { - auto res = isl_pw_aff_get_tuple_id(get(), static_cast(type)); - return manage(res); + return isl::basic_set(*this).unite(uset2); } -isl::pw_aff pw_aff::gist(isl::set context) const +isl::basic_set point::unshifted_simple_hull() const { - auto res = isl_pw_aff_gist(copy(), context.release()); - return manage(res); + return isl::basic_set(*this).unshifted_simple_hull(); } -isl::pw_aff pw_aff::gist_params(isl::set context) const +isl::map point::unwrap() const { - auto res = isl_pw_aff_gist_params(copy(), context.release()); - return manage(res); + return isl::basic_set(*this).unwrap(); } -isl::map pw_aff::gt_map(isl::pw_aff pa2) const +isl::set point::upper_bound(const isl::multi_pw_aff &upper) const { - auto res = isl_pw_aff_gt_map(copy(), pa2.release()); - return manage(res); + return isl::basic_set(*this).upper_bound(upper); } -isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const +isl::set point::upper_bound(const isl::multi_val &upper) const { - auto res = isl_pw_aff_gt_set(copy(), pwaff2.release()); - return manage(res); + return isl::basic_set(*this).upper_bound(upper); } -boolean pw_aff::has_dim_id(isl::dim type, unsigned int pos) const +isl::set point::upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const { - auto res = isl_pw_aff_has_dim_id(get(), static_cast(type), pos); - return manage(res); + return isl::basic_set(*this).upper_bound_val(type, pos, value); } -boolean pw_aff::has_tuple_id(isl::dim type) const +isl::set point::upper_bound_val(isl::dim type, unsigned int pos, long value) const { - auto res = isl_pw_aff_has_tuple_id(get(), static_cast(type)); - return manage(res); + return this->upper_bound_val(type, pos, isl::val(ctx(), value)); } -isl::pw_aff pw_aff::insert_dims(isl::dim type, unsigned int first, unsigned int n) const +inline std::ostream &operator<<(std::ostream &os, const point &obj) { - auto res = isl_pw_aff_insert_dims(copy(), static_cast(type), first, n); - return manage(res); + char *str = isl_point_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::pw_aff pw_aff::insert_domain(isl::space domain) const -{ - auto res = isl_pw_aff_insert_domain(copy(), domain.release()); - 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::pw_aff pw_aff::intersect_domain(isl::set set) const +pw_aff::pw_aff() + : ptr(nullptr) {} + +pw_aff::pw_aff(const pw_aff &obj) + : ptr(nullptr) { - auto res = isl_pw_aff_intersect_domain(copy(), set.release()); - return manage(res); + ptr = obj.copy(); } -isl::pw_aff pw_aff::intersect_domain_wrapped_domain(isl::set 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_intersect_domain_wrapped_domain(copy(), set.release()); - return manage(res); + auto res = isl_pw_aff_from_aff(aff.release()); + ptr = res; } -isl::pw_aff pw_aff::intersect_domain_wrapped_range(isl::set set) const +pw_aff::pw_aff(isl::ctx ctx, const std::string &str) { - auto res = isl_pw_aff_intersect_domain_wrapped_range(copy(), set.release()); - return manage(res); + auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; } -isl::pw_aff pw_aff::intersect_params(isl::set set) const +pw_aff::pw_aff(isl::set domain, isl::val v) { - auto res = isl_pw_aff_intersect_params(copy(), set.release()); - return manage(res); + auto res = isl_pw_aff_val_on_domain(domain.release(), v.release()); + ptr = res; } -boolean pw_aff::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +pw_aff::pw_aff(isl::local_space ls) { - auto res = isl_pw_aff_involves_dims(get(), static_cast(type), first, n); - return manage(res); + auto res = isl_pw_aff_zero_on_domain(ls.release()); + ptr = res; } -boolean pw_aff::involves_nan() const -{ - auto res = isl_pw_aff_involves_nan(get()); - return manage(res); +pw_aff &pw_aff::operator=(pw_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -boolean pw_aff::involves_param_id(const isl::id &id) const -{ - auto res = isl_pw_aff_involves_param_id(get(), id.get()); - return manage(res); +pw_aff::~pw_aff() { + if (ptr) + isl_pw_aff_free(ptr); } -boolean pw_aff::is_cst() const -{ - auto res = isl_pw_aff_is_cst(get()); - return manage(res); +__isl_give isl_pw_aff *pw_aff::copy() const & { + return isl_pw_aff_copy(ptr); } -boolean pw_aff::is_empty() const -{ - auto res = isl_pw_aff_is_empty(get()); - return manage(res); +__isl_keep isl_pw_aff *pw_aff::get() const { + return ptr; } -boolean pw_aff::is_equal(const isl::pw_aff &pa2) const -{ - auto res = isl_pw_aff_is_equal(get(), pa2.get()); - return manage(res); +__isl_give isl_pw_aff *pw_aff::release() { + isl_pw_aff *tmp = ptr; + ptr = nullptr; + return tmp; } -boolean pw_aff::isa_aff() const -{ - auto res = isl_pw_aff_isa_aff(get()); - return manage(res); +bool pw_aff::is_null() const { + return ptr == nullptr; } -isl::map pw_aff::le_map(isl::pw_aff pa2) const -{ - auto res = isl_pw_aff_le_map(copy(), pa2.release()); - return manage(res); +isl::ctx pw_aff::ctx() const { + return isl::ctx(isl_pw_aff_get_ctx(ptr)); } -isl::set pw_aff::le_set(isl::pw_aff pwaff2) const +isl::multi_pw_aff pw_aff::add(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_aff_le_set(copy(), pwaff2.release()); - return manage(res); + return isl::pw_multi_aff(*this).add(multi2); } -isl::map pw_aff::lt_map(isl::pw_aff pa2) const +isl::multi_union_pw_aff pw_aff::add(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_pw_aff_lt_map(copy(), pa2.release()); - return manage(res); + return isl::union_pw_aff(*this).add(multi2); } -isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const +isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const { - auto res = isl_pw_aff_lt_set(copy(), pwaff2.release()); + auto res = isl_pw_aff_add(copy(), pwaff2.release()); return manage(res); } -isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const +isl::pw_multi_aff pw_aff::add(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_aff_max(copy(), pwaff2.release()); - return manage(res); + return isl::pw_multi_aff(*this).add(pma2); } -isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const +isl::union_pw_aff pw_aff::add(const isl::union_pw_aff &upa2) const { - auto res = isl_pw_aff_min(copy(), pwaff2.release()); - return manage(res); + return isl::union_pw_aff(*this).add(upa2); } -isl::pw_aff pw_aff::mod(isl::val mod) const +isl::union_pw_multi_aff pw_aff::add(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_aff_mod_val(copy(), mod.release()); - return manage(res); + return isl::union_pw_aff(*this).add(upma2); } -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::pw_aff pw_aff::add(const isl::aff &pwaff2) 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 this->add(isl::pw_aff(pwaff2)); } -isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const +isl::pw_aff pw_aff::add_constant(isl::val v) const { - auto res = isl_pw_aff_mul(copy(), pwaff2.release()); + auto res = isl_pw_aff_add_constant_val(copy(), v.release()); return manage(res); } -isl_size pw_aff::n_piece() const +isl::pw_aff pw_aff::add_constant(long v) const { - auto res = isl_pw_aff_n_piece(get()); - return res; + return this->add_constant(isl::val(ctx(), v)); } -isl::pw_aff pw_aff::nan_on_domain(isl::local_space ls) +isl::pw_multi_aff pw_aff::add_constant(const isl::multi_val &mv) const { - auto res = isl_pw_aff_nan_on_domain(ls.release()); - return manage(res); + return isl::pw_multi_aff(*this).add_constant(mv); } -isl::pw_aff pw_aff::nan_on_domain_space(isl::space space) +isl::pw_aff pw_aff::add_dims(isl::dim type, unsigned int n) const { - auto res = isl_pw_aff_nan_on_domain_space(space.release()); + auto res = isl_pw_aff_add_dims(copy(), static_cast(type), n); return manage(res); } -isl::set pw_aff::ne_set(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_ne_set(copy(), pwaff2.release()); - return manage(res); + return isl::union_pw_aff(*this).add_pw_multi_aff(pma); } -isl::pw_aff pw_aff::neg() const +isl::union_pw_multi_aff pw_aff::apply(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_aff_neg(copy()); - return manage(res); + return isl::union_pw_aff(*this).apply(upma2); } -isl::set pw_aff::non_zero_set() const +isl::aff pw_aff::as_aff() const { - auto res = isl_pw_aff_non_zero_set(copy()); + auto res = isl_pw_aff_as_aff(copy()); return manage(res); } -isl::set pw_aff::nonneg_set() const +isl::map pw_aff::as_map() const { - auto res = isl_pw_aff_nonneg_set(copy()); + auto res = isl_pw_aff_as_map(copy()); return manage(res); } -isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id) +isl::multi_aff pw_aff::as_multi_aff() const { - auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release()); - return manage(res); + return isl::pw_multi_aff(*this).as_multi_aff(); } -isl::set pw_aff::params() const +isl::multi_union_pw_aff pw_aff::as_multi_union_pw_aff() const { - auto res = isl_pw_aff_params(copy()); - return manage(res); + return isl::union_pw_aff(*this).as_multi_union_pw_aff(); } -int pw_aff::plain_cmp(const isl::pw_aff &pa2) const +isl::pw_multi_aff pw_aff::as_pw_multi_aff() const { - auto res = isl_pw_aff_plain_cmp(get(), pa2.get()); - return res; + return isl::union_pw_aff(*this).as_pw_multi_aff(); } -boolean pw_aff::plain_is_equal(const isl::pw_aff &pwaff2) const +isl::set pw_aff::as_set() const { - auto res = isl_pw_aff_plain_is_equal(get(), pwaff2.get()); - return manage(res); + return isl::pw_multi_aff(*this).as_set(); } -isl::set pw_aff::pos_set() const +isl::union_map pw_aff::as_union_map() const { - auto res = isl_pw_aff_pos_set(copy()); - return manage(res); + return isl::union_pw_aff(*this).as_union_map(); } -isl::pw_aff pw_aff::project_domain_on_params() const +isl::pw_aff pw_aff::at(int pos) const { - auto res = isl_pw_aff_project_domain_on_params(copy()); - return manage(res); + return isl::pw_multi_aff(*this).at(pos); } -isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const +isl::set pw_aff::bind(const isl::multi_id &tuple) const { - auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release()); - return manage(res); + return isl::multi_pw_aff(*this).bind(tuple); } -isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const +isl::set pw_aff::bind(isl::id id) const { - auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release()); + auto res = isl_pw_aff_bind_id(copy(), id.release()); return manage(res); } -isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const +isl::set pw_aff::bind(const std::string &id) const { - auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release()); - return manage(res); + return this->bind(isl::id(ctx(), id)); } -isl::pw_aff pw_aff::reset_tuple_id(isl::dim type) const +isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const { - auto res = isl_pw_aff_reset_tuple_id(copy(), static_cast(type)); + auto res = isl_pw_aff_bind_domain(copy(), tuple.release()); return manage(res); } -isl::pw_aff pw_aff::reset_user() const +isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const { - auto res = isl_pw_aff_reset_user(copy()); + auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release()); return manage(res); } -isl::pw_aff pw_aff::scale(isl::val v) const +isl::pw_aff pw_aff::ceil() const { - auto res = isl_pw_aff_scale_val(copy(), v.release()); + auto res = isl_pw_aff_ceil(copy()); return manage(res); } -isl::pw_aff pw_aff::scale_down(isl::val f) const +isl::pw_aff pw_aff::coalesce() const { - auto res = isl_pw_aff_scale_down_val(copy(), f.release()); + auto res = isl_pw_aff_coalesce(copy()); return manage(res); } -isl::pw_aff pw_aff::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const { - auto res = isl_pw_aff_set_dim_id(copy(), static_cast(type), pos, id.release()); + auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release()); return manage(res); } -isl::pw_aff pw_aff::set_tuple_id(isl::dim type, isl::id id) const +class size pw_aff::dim(isl::dim type) const { - auto res = isl_pw_aff_set_tuple_id(copy(), static_cast(type), id.release()); - return manage(res); + return isl::pw_multi_aff(*this).dim(type); } -isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const +isl::id pw_aff::dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_pw_aff_sub(copy(), pwaff2.release()); + auto res = isl_pw_aff_get_dim_id(get(), static_cast(type), pos); return manage(res); } -isl::pw_aff pw_aff::subtract_domain(isl::set set) const +isl::id pw_aff::get_dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_pw_aff_subtract_domain(copy(), set.release()); - return manage(res); + return dim_id(type, pos); } -isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const +isl::pw_aff pw_aff::div(isl::pw_aff pa2) const { - auto res = isl_pw_aff_tdiv_q(copy(), pa2.release()); + auto res = isl_pw_aff_div(copy(), pa2.release()); return manage(res); } -isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const +isl::set pw_aff::domain() const { - auto res = isl_pw_aff_tdiv_r(copy(), pa2.release()); + auto res = isl_pw_aff_domain(copy()); return manage(res); } -isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const +isl::space pw_aff::domain_space() const { - auto res = isl_pw_aff_union_add(copy(), pwaff2.release()); + auto res = isl_pw_aff_get_domain_space(get()); return manage(res); } -isl::pw_aff pw_aff::union_max(isl::pw_aff pwaff2) const +isl::space pw_aff::get_domain_space() const { - auto res = isl_pw_aff_union_max(copy(), pwaff2.release()); - return manage(res); + return domain_space(); } -isl::pw_aff pw_aff::union_min(isl::pw_aff pwaff2) const +isl::pw_multi_aff pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_pw_aff_union_min(copy(), pwaff2.release()); - return manage(res); + return isl::pw_multi_aff(*this).drop_dims(type, first, n); } -isl::pw_aff pw_aff::var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos) +isl::set pw_aff::eq_set(isl::pw_aff pwaff2) const { - auto res = isl_pw_aff_var_on_domain(ls.release(), static_cast(type), pos); + auto res = isl_pw_aff_eq_set(copy(), pwaff2.release()); return manage(res); } -isl::set pw_aff::zero_set() const +isl::val pw_aff::eval(isl::point pnt) const { - auto res = isl_pw_aff_zero_set(copy()); + auto res = isl_pw_aff_eval(copy(), pnt.release()); 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); +isl::pw_multi_aff pw_aff::extract_pw_multi_aff(const isl::space &space) const +{ + return isl::union_pw_aff(*this).extract_pw_multi_aff(space); } -pw_aff_list::pw_aff_list() - : ptr(nullptr) {} - -pw_aff_list::pw_aff_list(const pw_aff_list &obj) - : ptr(nullptr) +isl::multi_pw_aff pw_aff::flat_range_product(const isl::multi_pw_aff &multi2) const { - ptr = obj.copy(); + return isl::pw_multi_aff(*this).flat_range_product(multi2); } - -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; +isl::multi_union_pw_aff pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const +{ + return isl::union_pw_aff(*this).flat_range_product(multi2); } -pw_aff_list::~pw_aff_list() { - if (ptr) - isl_pw_aff_list_free(ptr); +isl::pw_multi_aff pw_aff::flat_range_product(const isl::pw_multi_aff &pma2) const +{ + return isl::pw_multi_aff(*this).flat_range_product(pma2); } -__isl_give isl_pw_aff_list *pw_aff_list::copy() const & { - return isl_pw_aff_list_copy(ptr); +isl::union_pw_multi_aff pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const +{ + return isl::union_pw_aff(*this).flat_range_product(upma2); } -__isl_keep isl_pw_aff_list *pw_aff_list::get() const { - return ptr; +isl::pw_aff pw_aff::floor() const +{ + auto res = isl_pw_aff_floor(copy()); + return manage(res); } -__isl_give isl_pw_aff_list *pw_aff_list::release() { - isl_pw_aff_list *tmp = ptr; - ptr = nullptr; - return tmp; +stat pw_aff::foreach_piece(const std::function &fn) const +{ + struct fn_data { + 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); + auto 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); } -bool pw_aff_list::is_null() const { - return ptr == nullptr; +stat pw_aff::foreach_piece(const std::function &fn) const +{ + return isl::pw_multi_aff(*this).foreach_piece(fn); } - -isl::ctx pw_aff_list::ctx() const { - return isl::ctx(isl_pw_aff_list_get_ctx(ptr)); +stat pw_aff::foreach_pw_aff(const std::function &fn) const +{ + return isl::union_pw_aff(*this).foreach_pw_aff(fn); } -void pw_aff_list::dump() const { - isl_pw_aff_list_dump(get()); +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::pw_aff_list pw_aff_list::add(isl::pw_aff el) const +isl::pw_aff pw_aff::gist(isl::set context) const { - auto res = isl_pw_aff_list_add(copy(), el.release()); + auto res = isl_pw_aff_gist(copy(), context.release()); return manage(res); } -isl::pw_aff_list pw_aff_list::alloc(isl::ctx ctx, int n) +isl::union_pw_aff pw_aff::gist(const isl::union_set &context) const { - auto res = isl_pw_aff_list_alloc(ctx.release(), n); - return manage(res); + return isl::union_pw_aff(*this).gist(context); } -isl::pw_aff_list pw_aff_list::clear() const +isl::pw_aff pw_aff::gist(const isl::basic_set &context) const { - auto res = isl_pw_aff_list_clear(copy()); - return manage(res); + return this->gist(isl::set(context)); } -isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const +isl::pw_aff pw_aff::gist(const isl::point &context) const { - auto res = isl_pw_aff_list_concat(copy(), list2.release()); + return this->gist(isl::set(context)); +} + +isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_gt_set(copy(), pwaff2.release()); return manage(res); } -isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const +boolean pw_aff::has_range_tuple_id() const { - auto res = isl_pw_aff_list_drop(copy(), first, n); - return manage(res); + return isl::pw_multi_aff(*this).has_range_tuple_id(); } -isl::set pw_aff_list::eq_set(isl::pw_aff_list list2) const +isl::multi_pw_aff pw_aff::identity() const { - auto res = isl_pw_aff_list_eq_set(copy(), list2.release()); - return manage(res); + return isl::pw_multi_aff(*this).identity(); } -stat pw_aff_list::foreach(const std::function &fn) const +isl::pw_aff pw_aff::insert_domain(isl::space domain) 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_insert_domain(copy(), domain.release()); return manage(res); } -isl::pw_aff_list pw_aff_list::from_pw_aff(isl::pw_aff el) +isl::pw_aff pw_aff::intersect_domain(isl::set set) const { - auto res = isl_pw_aff_list_from_pw_aff(el.release()); + auto res = isl_pw_aff_intersect_domain(copy(), set.release()); return manage(res); } -isl::set pw_aff_list::ge_set(isl::pw_aff_list list2) const +isl::union_pw_aff pw_aff::intersect_domain(const isl::space &space) const { - auto res = isl_pw_aff_list_ge_set(copy(), list2.release()); - return manage(res); + return isl::union_pw_aff(*this).intersect_domain(space); } -isl::pw_aff pw_aff_list::get_at(int index) const +isl::union_pw_aff pw_aff::intersect_domain(const isl::union_set &uset) const { - auto res = isl_pw_aff_list_get_at(get(), index); - return manage(res); + return isl::union_pw_aff(*this).intersect_domain(uset); } -isl::pw_aff pw_aff_list::get_pw_aff(int index) const +isl::pw_aff pw_aff::intersect_domain(const isl::basic_set &set) const { - auto res = isl_pw_aff_list_get_pw_aff(get(), index); - return manage(res); + return this->intersect_domain(isl::set(set)); } -isl::set pw_aff_list::gt_set(isl::pw_aff_list list2) const +isl::pw_aff pw_aff::intersect_domain(const isl::point &set) const { - auto res = isl_pw_aff_list_gt_set(copy(), list2.release()); - return manage(res); + return this->intersect_domain(isl::set(set)); } -isl::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::pw_aff el) const +isl::union_pw_aff pw_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const { - auto res = isl_pw_aff_list_insert(copy(), pos, el.release()); - return manage(res); + return isl::union_pw_aff(*this).intersect_domain_wrapped_domain(uset); } -isl::set pw_aff_list::le_set(isl::pw_aff_list list2) const +isl::union_pw_aff pw_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const { - auto res = isl_pw_aff_list_le_set(copy(), list2.release()); - return manage(res); + return isl::union_pw_aff(*this).intersect_domain_wrapped_range(uset); } -isl::set pw_aff_list::lt_set(isl::pw_aff_list list2) const +isl::pw_aff pw_aff::intersect_params(isl::set set) const { - auto res = isl_pw_aff_list_lt_set(copy(), list2.release()); + auto res = isl_pw_aff_intersect_params(copy(), set.release()); return manage(res); } -isl::pw_aff pw_aff_list::max() const +boolean pw_aff::involves_locals() const { - auto res = isl_pw_aff_list_max(copy()); - return manage(res); + return isl::pw_multi_aff(*this).involves_locals(); } -isl::pw_aff pw_aff_list::min() const +boolean pw_aff::involves_nan() const { - auto res = isl_pw_aff_list_min(copy()); - return manage(res); + return isl::multi_pw_aff(*this).involves_nan(); } -isl_size pw_aff_list::n_pw_aff() const +boolean pw_aff::involves_param(const isl::id &id) const { - auto res = isl_pw_aff_list_n_pw_aff(get()); - return res; + return isl::pw_multi_aff(*this).involves_param(id); } -isl::set pw_aff_list::ne_set(isl::pw_aff_list list2) const +boolean pw_aff::involves_param(const std::string &id) const { - auto res = isl_pw_aff_list_ne_set(copy(), list2.release()); - return manage(res); + return this->involves_param(isl::id(ctx(), id)); } -isl::pw_aff_list pw_aff_list::reverse() const +boolean pw_aff::involves_param(const isl::id_list &list) const { - auto res = isl_pw_aff_list_reverse(copy()); - return manage(res); + return isl::pw_multi_aff(*this).involves_param(list); } -isl::pw_aff_list pw_aff_list::set_pw_aff(int index, isl::pw_aff el) const +boolean pw_aff::is_cst() const { - auto res = isl_pw_aff_list_set_pw_aff(copy(), index, el.release()); + auto res = isl_pw_aff_is_cst(get()); return manage(res); } -isl_size pw_aff_list::size() const +boolean pw_aff::is_equal(const isl::pw_aff &pa2) const { - auto res = isl_pw_aff_list_size(get()); - return res; + auto res = isl_pw_aff_is_equal(get(), pa2.get()); + return manage(res); } -isl::pw_aff_list pw_aff_list::swap(unsigned int pos1, unsigned int pos2) const +boolean pw_aff::isa_aff() const { - auto res = isl_pw_aff_list_swap(copy(), pos1, pos2); + auto res = isl_pw_aff_isa_aff(get()); 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) +boolean pw_aff::isa_multi_aff() const { - ptr = obj.copy(); + return isl::pw_multi_aff(*this).isa_multi_aff(); } - -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) +boolean pw_aff::isa_pw_multi_aff() const { - auto res = isl_pw_multi_aff_from_multi_aff(ma.release()); - ptr = res; + return isl::union_pw_aff(*this).isa_pw_multi_aff(); } -pw_multi_aff::pw_multi_aff(isl::pw_aff pa) + +isl::set pw_aff::le_set(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_from_pw_aff(pa.release()); - ptr = res; + auto res = isl_pw_aff_le_set(copy(), pwaff2.release()); + return manage(res); } -pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str) + +isl::pw_aff_list pw_aff::list() const { - auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str()); - ptr = res; + return isl::multi_pw_aff(*this).list(); } -pw_multi_aff &pw_multi_aff::operator=(pw_multi_aff obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_lt_set(copy(), pwaff2.release()); + return manage(res); } -pw_multi_aff::~pw_multi_aff() { - if (ptr) - isl_pw_multi_aff_free(ptr); +isl::multi_pw_aff pw_aff::max(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_multi_aff(*this).max(multi2); } -__isl_give isl_pw_multi_aff *pw_multi_aff::copy() const & { - return isl_pw_multi_aff_copy(ptr); +isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_max(copy(), pwaff2.release()); + return manage(res); } -__isl_keep isl_pw_multi_aff *pw_multi_aff::get() const { - return ptr; +isl::pw_aff pw_aff::max(const isl::aff &pwaff2) const +{ + return this->max(isl::pw_aff(pwaff2)); } -__isl_give isl_pw_multi_aff *pw_multi_aff::release() { - isl_pw_multi_aff *tmp = ptr; - ptr = nullptr; - return tmp; +isl::multi_val pw_aff::max_multi_val() const +{ + return isl::pw_multi_aff(*this).max_multi_val(); } -bool pw_multi_aff::is_null() const { - return ptr == nullptr; +isl::multi_pw_aff pw_aff::min(const isl::multi_pw_aff &multi2) const +{ + return isl::pw_multi_aff(*this).min(multi2); } - -isl::ctx pw_multi_aff::ctx() const { - return isl::ctx(isl_pw_multi_aff_get_ctx(ptr)); +isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_min(copy(), pwaff2.release()); + return manage(res); } -void pw_multi_aff::dump() const { - isl_pw_multi_aff_dump(get()); +isl::pw_aff pw_aff::min(const isl::aff &pwaff2) const +{ + return this->min(isl::pw_aff(pwaff2)); } - -isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const +isl::multi_val pw_aff::min_multi_val() const { - auto res = isl_pw_multi_aff_add(copy(), pma2.release()); - return manage(res); + return isl::pw_multi_aff(*this).min_multi_val(); } -isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const +isl::pw_aff pw_aff::mod(isl::val mod) const { - auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release()); + auto res = isl_pw_aff_mod_val(copy(), mod.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const +isl::pw_aff pw_aff::mod(long mod) const { - auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release()); - return manage(res); + return this->mod(isl::val(ctx(), mod)); } -isl::pw_multi_aff pw_multi_aff::align_params(isl::space model) const +isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_align_params(copy(), model.release()); + auto res = isl_pw_aff_mul(copy(), pwaff2.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::alloc(isl::set set, isl::multi_aff maff) +class size pw_aff::n_piece() const { - auto res = isl_pw_multi_aff_alloc(set.release(), maff.release()); - return manage(res); + return isl::pw_multi_aff(*this).n_piece(); } -isl::multi_aff pw_multi_aff::as_multi_aff() const +isl::set pw_aff::ne_set(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_as_multi_aff(copy()); + auto res = isl_pw_aff_ne_set(copy(), pwaff2.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const +isl::pw_aff pw_aff::neg() const { - auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release()); + auto res = isl_pw_aff_neg(copy()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const +isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id) { - auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release()); + auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::coalesce() const +boolean pw_aff::plain_is_empty() const { - auto res = isl_pw_multi_aff_coalesce(copy()); - return manage(res); + return isl::union_pw_aff(*this).plain_is_empty(); } -isl_size pw_multi_aff::dim(isl::dim type) const +boolean pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_dim(get(), static_cast(type)); - return res; + return isl::pw_multi_aff(*this).plain_is_equal(multi2); } -isl::set pw_multi_aff::domain() const +boolean pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_domain(copy()); - return manage(res); + return isl::union_pw_aff(*this).plain_is_equal(multi2); } -isl::pw_multi_aff pw_multi_aff::domain_map(isl::space space) +isl::pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_multi_aff_domain_map(space.release()); - return manage(res); + return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2); } -isl::pw_multi_aff pw_multi_aff::drop_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_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::union_pw_aff(*this).preimage_domain_wrapped_domain(upma2); } -isl::pw_multi_aff pw_multi_aff::drop_unused_params() const +isl::multi_pw_aff pw_aff::product(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_drop_unused_params(copy()); - return manage(res); + return isl::pw_multi_aff(*this).product(multi2); } -isl::pw_multi_aff pw_multi_aff::empty(isl::space space) +isl::pw_multi_aff pw_aff::product(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_multi_aff_empty(space.release()); - return manage(res); + return isl::pw_multi_aff(*this).product(pma2); } -int pw_multi_aff::find_dim_by_name(isl::dim type, const std::string &name) const +isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const { - auto res = isl_pw_multi_aff_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release()); + return manage(res); } -isl::pw_multi_aff pw_multi_aff::fix_si(isl::dim type, unsigned int pos, int value) const +isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const { - auto res = isl_pw_multi_aff_fix_si(copy(), static_cast(type), pos, value); + auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const +isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const { - auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release()); + auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release()); return manage(res); } -stat pw_multi_aff::foreach_piece(const std::function &fn) const +isl::union_pw_aff pw_aff::pullback(const isl::union_pw_multi_aff &upma) 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).pullback(upma); } -isl::pw_multi_aff pw_multi_aff::from_domain(isl::set set) +isl::pw_multi_aff_list pw_aff::pw_multi_aff_list() const { - auto res = isl_pw_multi_aff_from_domain(set.release()); - return manage(res); + return isl::union_pw_aff(*this).pw_multi_aff_list(); } -isl::pw_multi_aff pw_multi_aff::from_map(isl::map map) +isl::pw_multi_aff pw_aff::range_factor_domain() const { - auto res = isl_pw_multi_aff_from_map(map.release()); - return manage(res); + return isl::pw_multi_aff(*this).range_factor_domain(); } -isl::pw_multi_aff pw_multi_aff::from_multi_pw_aff(isl::multi_pw_aff mpa) +isl::pw_multi_aff pw_aff::range_factor_range() const { - auto res = isl_pw_multi_aff_from_multi_pw_aff(mpa.release()); - return manage(res); + return isl::pw_multi_aff(*this).range_factor_range(); } -isl::pw_multi_aff pw_multi_aff::from_set(isl::set set) +isl::multi_pw_aff pw_aff::range_product(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).range_product(multi2); } -isl::id pw_multi_aff::get_dim_id(isl::dim type, unsigned int pos) const +isl::multi_union_pw_aff pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_get_dim_id(get(), static_cast(type), pos); - return manage(res); + return isl::union_pw_aff(*this).range_product(multi2); } -std::string pw_multi_aff::get_dim_name(isl::dim type, unsigned int pos) const +isl::pw_multi_aff pw_aff::range_product(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_multi_aff_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + return isl::pw_multi_aff(*this).range_product(pma2); } -isl::space pw_multi_aff::get_domain_space() const +isl::union_pw_multi_aff pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_multi_aff_get_domain_space(get()); - return manage(res); + return isl::union_pw_aff(*this).range_product(upma2); } -isl::pw_aff pw_multi_aff::get_pw_aff(int pos) const +isl::id pw_aff::range_tuple_id() const { - auto res = isl_pw_multi_aff_get_pw_aff(get(), pos); - return manage(res); + return isl::pw_multi_aff(*this).range_tuple_id(); } -isl::space pw_multi_aff::get_space() const +isl::multi_pw_aff pw_aff::reset_range_tuple_id() const { - auto res = isl_pw_multi_aff_get_space(get()); - return manage(res); + return isl::multi_pw_aff(*this).reset_range_tuple_id(); } -isl::id pw_multi_aff::get_tuple_id(isl::dim type) const +isl::multi_pw_aff pw_aff::reset_tuple_id(isl::dim type) const { - auto res = isl_pw_multi_aff_get_tuple_id(get(), static_cast(type)); - return manage(res); + return isl::multi_pw_aff(*this).reset_tuple_id(type); } -std::string pw_multi_aff::get_tuple_name(isl::dim type) const +isl::multi_pw_aff pw_aff::scale(const isl::multi_val &mv) const { - auto res = isl_pw_multi_aff_get_tuple_name(get(), static_cast(type)); - std::string tmp(res); - return tmp; + return isl::multi_pw_aff(*this).scale(mv); } -isl::pw_multi_aff pw_multi_aff::gist(isl::set set) const +isl::pw_aff pw_aff::scale(isl::val v) const { - auto res = isl_pw_multi_aff_gist(copy(), set.release()); + auto res = isl_pw_aff_scale_val(copy(), v.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::gist_params(isl::set set) const +isl::pw_aff pw_aff::scale(long v) const { - auto res = isl_pw_multi_aff_gist_params(copy(), set.release()); - return manage(res); + return this->scale(isl::val(ctx(), v)); } -boolean pw_multi_aff::has_tuple_id(isl::dim type) const +isl::multi_pw_aff pw_aff::scale_down(const isl::multi_val &mv) const { - auto res = isl_pw_multi_aff_has_tuple_id(get(), static_cast(type)); - return manage(res); + return isl::multi_pw_aff(*this).scale_down(mv); } -boolean pw_multi_aff::has_tuple_name(isl::dim type) const +isl::pw_aff pw_aff::scale_down(isl::val f) const { - auto res = isl_pw_multi_aff_has_tuple_name(get(), static_cast(type)); + auto res = isl_pw_aff_scale_down_val(copy(), f.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::identity(isl::space space) +isl::pw_aff pw_aff::scale_down(long f) const { - auto res = isl_pw_multi_aff_identity(space.release()); - return manage(res); + return this->scale_down(isl::val(ctx(), f)); } -isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space) +isl::multi_pw_aff pw_aff::set_at(int pos, const isl::pw_aff &el) const { - auto res = isl_pw_multi_aff_identity_on_domain_space(space.release()); - return manage(res); + return isl::pw_multi_aff(*this).set_at(pos, el); } -isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) 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_insert_domain(copy(), domain.release()); - return manage(res); + return isl::union_pw_aff(*this).set_at(pos, el); } -isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const +isl::multi_pw_aff pw_aff::set_pw_aff(int pos, const isl::pw_aff &el) const { - auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release()); - return manage(res); + return isl::pw_multi_aff(*this).set_pw_aff(pos, el); } -isl::pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(isl::set set) 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_intersect_domain_wrapped_domain(copy(), set.release()); - return manage(res); + return isl::pw_multi_aff(*this).set_pw_aff(pos, pa); } -isl::pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(isl::set set) const +isl::pw_multi_aff pw_aff::set_range_tuple(const isl::id &id) const { - auto res = isl_pw_multi_aff_intersect_domain_wrapped_range(copy(), set.release()); - return manage(res); + return isl::pw_multi_aff(*this).set_range_tuple(id); } -isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const +isl::pw_multi_aff pw_aff::set_range_tuple(const std::string &id) const { - auto res = isl_pw_multi_aff_intersect_params(copy(), set.release()); - return manage(res); + return this->set_range_tuple(isl::id(ctx(), id)); } -boolean pw_multi_aff::involves_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::pw_aff pw_aff::set_tuple_id(isl::dim type, isl::id id) const { - auto res = isl_pw_multi_aff_involves_dims(get(), static_cast(type), first, n); + auto res = isl_pw_aff_set_tuple_id(copy(), static_cast(type), id.release()); return manage(res); } -boolean pw_multi_aff::involves_locals() const +isl::pw_aff pw_aff::set_tuple_id(isl::dim type, const std::string &id) const { - auto res = isl_pw_multi_aff_involves_locals(get()); - return manage(res); + return this->set_tuple_id(type, isl::id(ctx(), id)); } -boolean pw_multi_aff::involves_nan() 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_involves_nan(get()); - return manage(res); + return isl::union_pw_aff(*this).set_union_pw_aff(pos, el); } -boolean pw_multi_aff::involves_param_id(const isl::id &id) const +class size pw_aff::size() const { - auto res = isl_pw_multi_aff_involves_param_id(get(), id.get()); - return manage(res); + return isl::multi_pw_aff(*this).size(); } -boolean pw_multi_aff::is_equal(const isl::pw_multi_aff &pma2) const +isl::space pw_aff::space() const { - auto res = isl_pw_multi_aff_is_equal(get(), pma2.get()); + auto res = isl_pw_aff_get_space(get()); return manage(res); } -boolean pw_multi_aff::isa_multi_aff() const +isl::space pw_aff::get_space() const { - auto res = isl_pw_multi_aff_isa_multi_aff(get()); - return manage(res); + return space(); } -isl::multi_val pw_multi_aff::max_multi_val() const +isl::multi_pw_aff pw_aff::sub(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_max_multi_val(copy()); - return manage(res); + return isl::pw_multi_aff(*this).sub(multi2); } -isl::multi_val pw_multi_aff::min_multi_val() const +isl::multi_union_pw_aff pw_aff::sub(const isl::multi_union_pw_aff &multi2) const { - auto res = isl_pw_multi_aff_min_multi_val(copy()); - return manage(res); + return isl::union_pw_aff(*this).sub(multi2); } -isl::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::set domain, isl::multi_val mv) +isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release()); + auto res = isl_pw_aff_sub(copy(), pwaff2.release()); return manage(res); } -isl_size pw_multi_aff::n_piece() const +isl::pw_multi_aff pw_aff::sub(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_multi_aff_n_piece(get()); - return res; + return isl::pw_multi_aff(*this).sub(pma2); } -isl::pw_multi_aff pw_multi_aff::neg() const +isl::union_pw_aff pw_aff::sub(const isl::union_pw_aff &upa2) const { - auto res = isl_pw_multi_aff_neg(copy()); - return manage(res); + return isl::union_pw_aff(*this).sub(upa2); } -boolean pw_multi_aff::plain_is_equal(const isl::pw_multi_aff &pma2) const +isl::union_pw_multi_aff pw_aff::sub(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_multi_aff_plain_is_equal(get(), pma2.get()); - return manage(res); + return isl::union_pw_aff(*this).sub(upma2); } -isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const +isl::pw_aff pw_aff::sub(const isl::aff &pwaff2) const { - auto res = isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(copy(), pma2.release()); - return manage(res); + return this->sub(isl::pw_aff(pwaff2)); } -isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const +isl::pw_aff pw_aff::subtract_domain(isl::set set) const { - auto res = isl_pw_multi_aff_product(copy(), pma2.release()); + auto res = isl_pw_aff_subtract_domain(copy(), set.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::project_domain_on_params() const +isl::union_pw_aff pw_aff::subtract_domain(const isl::space &space) const { - auto res = isl_pw_multi_aff_project_domain_on_params(copy()); - return manage(res); + return isl::union_pw_aff(*this).subtract_domain(space); } -isl::pw_multi_aff pw_multi_aff::project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n) +isl::union_pw_aff pw_aff::subtract_domain(const isl::union_set &uset) const { - auto res = isl_pw_multi_aff_project_out_map(space.release(), static_cast(type), first, n); - return manage(res); + return isl::union_pw_aff(*this).subtract_domain(uset); } -isl::pw_multi_aff pw_multi_aff::pullback(isl::multi_aff ma) const +isl::pw_aff pw_aff::subtract_domain(const isl::basic_set &set) const { - auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release()); - return manage(res); + return this->subtract_domain(isl::set(set)); } -isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const +isl::pw_aff pw_aff::subtract_domain(const isl::point &set) const { - auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release()); - return manage(res); + return this->subtract_domain(isl::set(set)); } -isl::pw_multi_aff pw_multi_aff::range_factor_domain() const +isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const { - auto res = isl_pw_multi_aff_range_factor_domain(copy()); + auto res = isl_pw_aff_tdiv_q(copy(), pa2.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::range_factor_range() const +isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const { - auto res = isl_pw_multi_aff_range_factor_range(copy()); + auto res = isl_pw_aff_tdiv_r(copy(), pa2.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::range_map(isl::space space) +isl::pw_aff_list pw_aff::to_list() const { - auto res = isl_pw_multi_aff_range_map(space.release()); + auto res = isl_pw_aff_to_list(copy()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const +isl::multi_pw_aff pw_aff::to_multi_pw_aff() const { - auto res = isl_pw_multi_aff_range_product(copy(), pma2.release()); - return manage(res); + return isl::pw_multi_aff(*this).to_multi_pw_aff(); } -isl::pw_multi_aff pw_multi_aff::reset_tuple_id(isl::dim type) const +isl::union_pw_aff pw_aff::to_union_pw_aff() const { - auto res = isl_pw_multi_aff_reset_tuple_id(copy(), static_cast(type)); + auto res = isl_pw_aff_to_union_pw_aff(copy()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::reset_user() const +isl::union_pw_multi_aff pw_aff::to_union_pw_multi_aff() const { - auto res = isl_pw_multi_aff_reset_user(copy()); - return manage(res); + return isl::pw_multi_aff(*this).to_union_pw_multi_aff(); } -isl::pw_multi_aff pw_multi_aff::scale(isl::val v) const +isl::id pw_aff::tuple_id(isl::dim type) const { - auto res = isl_pw_multi_aff_scale_val(copy(), v.release()); + auto res = isl_pw_aff_get_tuple_id(get(), static_cast(type)); return manage(res); } -isl::pw_multi_aff pw_multi_aff::scale_down(isl::val v) const +isl::id pw_aff::get_tuple_id(isl::dim type) const { - auto res = isl_pw_multi_aff_scale_down_val(copy(), v.release()); - return manage(res); + return tuple_id(type); } -isl::pw_multi_aff pw_multi_aff::scale_multi_val(isl::multi_val mv) const +isl::multi_pw_aff pw_aff::unbind_params_insert_domain(const isl::multi_id &domain) const { - auto res = isl_pw_multi_aff_scale_multi_val(copy(), mv.release()); - return manage(res); + return isl::pw_multi_aff(*this).unbind_params_insert_domain(domain); } -isl::pw_multi_aff pw_multi_aff::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::multi_pw_aff pw_aff::union_add(const isl::multi_pw_aff &mpa2) 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).union_add(mpa2); } -isl::pw_multi_aff pw_multi_aff::set_pw_aff(unsigned int pos, isl::pw_aff pa) const +isl::multi_union_pw_aff pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const { - auto res = isl_pw_multi_aff_set_pw_aff(copy(), pos, pa.release()); - return manage(res); + return isl::union_pw_aff(*this).union_add(mupa2); } -isl::pw_multi_aff pw_multi_aff::set_tuple_id(isl::dim type, isl::id id) const +isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const { - auto res = isl_pw_multi_aff_set_tuple_id(copy(), static_cast(type), id.release()); + auto res = isl_pw_aff_union_add(copy(), pwaff2.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff::sub(isl::pw_multi_aff pma2) const +isl::pw_multi_aff pw_aff::union_add(const isl::pw_multi_aff &pma2) const { - auto res = isl_pw_multi_aff_sub(copy(), pma2.release()); - return manage(res); + return isl::pw_multi_aff(*this).union_add(pma2); } -isl::pw_multi_aff pw_multi_aff::subtract_domain(isl::set set) const +isl::union_pw_aff pw_aff::union_add(const isl::union_pw_aff &upa2) const { - auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release()); - return manage(res); + return isl::union_pw_aff(*this).union_add(upa2); } -isl::pw_multi_aff pw_multi_aff::union_add(isl::pw_multi_aff pma2) const +isl::union_pw_multi_aff pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_multi_aff_union_add(copy(), pma2.release()); - return manage(res); + return isl::union_pw_aff(*this).union_add(upma2); } -isl::pw_multi_aff pw_multi_aff::union_lexmax(isl::pw_multi_aff pma2) const +isl::pw_aff pw_aff::union_add(const isl::aff &pwaff2) const { - auto res = isl_pw_multi_aff_union_lexmax(copy(), pma2.release()); - return manage(res); + return this->union_add(isl::pw_aff(pwaff2)); } -isl::pw_multi_aff pw_multi_aff::union_lexmin(isl::pw_multi_aff pma2) 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_union_lexmin(copy(), pma2.release()); + auto res = isl_pw_aff_var_on_domain(ls.release(), static_cast(type), pos); return manage(res); } -isl::pw_multi_aff pw_multi_aff::zero(isl::space space) +inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj) { - auto res = isl_pw_multi_aff_zero(space.release()); - return manage(res); + char *str = isl_pw_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -// implementations for isl::pw_multi_aff_list -pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) { - return pw_multi_aff_list(ptr); +// implementations for isl::pw_aff_list +pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) { + return pw_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); +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_multi_aff_list::pw_multi_aff_list() +pw_aff_list::pw_aff_list() : ptr(nullptr) {} -pw_multi_aff_list::pw_multi_aff_list(const pw_multi_aff_list &obj) +pw_aff_list::pw_aff_list(const pw_aff_list &obj) : ptr(nullptr) { ptr = obj.copy(); } - -pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr) +pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr) : ptr(ptr) {} +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_aff_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} -pw_multi_aff_list &pw_multi_aff_list::operator=(pw_multi_aff_list obj) { +pw_aff_list &pw_aff_list::operator=(pw_aff_list obj) { std::swap(this->ptr, obj.ptr); return *this; } -pw_multi_aff_list::~pw_multi_aff_list() { +pw_aff_list::~pw_aff_list() { if (ptr) - isl_pw_multi_aff_list_free(ptr); + isl_pw_aff_list_free(ptr); } -__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & { - return isl_pw_multi_aff_list_copy(ptr); +__isl_give isl_pw_aff_list *pw_aff_list::copy() const & { + return isl_pw_aff_list_copy(ptr); } -__isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const { +__isl_keep isl_pw_aff_list *pw_aff_list::get() const { return ptr; } -__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() { - isl_pw_multi_aff_list *tmp = ptr; +__isl_give isl_pw_aff_list *pw_aff_list::release() { + isl_pw_aff_list *tmp = ptr; ptr = nullptr; return tmp; } -bool pw_multi_aff_list::is_null() const { +bool pw_aff_list::is_null() const { return ptr == nullptr; } - -isl::ctx pw_multi_aff_list::ctx() const { - return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr)); +isl::ctx pw_aff_list::ctx() const { + return isl::ctx(isl_pw_aff_list_get_ctx(ptr)); } -void pw_multi_aff_list::dump() const { - isl_pw_multi_aff_list_dump(get()); +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); } - -isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const +isl::pw_aff pw_aff_list::at(int index) const { - auto res = isl_pw_multi_aff_list_add(copy(), el.release()); + auto res = isl_pw_aff_list_get_at(get(), index); return manage(res); } -isl::pw_multi_aff_list pw_multi_aff_list::alloc(isl::ctx ctx, int n) +isl::pw_aff pw_aff_list::get_at(int index) const { - auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n); - return manage(res); + return at(index); } -isl::pw_multi_aff_list pw_multi_aff_list::clear() const +isl::pw_aff_list pw_aff_list::clear() const { - auto res = isl_pw_multi_aff_list_clear(copy()); + auto res = isl_pw_aff_list_clear(copy()); return manage(res); } -isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const +isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const { - auto res = isl_pw_multi_aff_list_concat(copy(), list2.release()); + auto res = isl_pw_aff_list_concat(copy(), list2.release()); return manage(res); } -isl::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const +isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const { - auto res = isl_pw_multi_aff_list_drop(copy(), first, n); + auto res = isl_pw_aff_list_drop(copy(), first, n); return manage(res); } -stat pw_multi_aff_list::foreach(const std::function &fn) const +stat pw_aff_list::foreach(const std::function &fn) 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 { + 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; - auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data); + auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data); return manage(res); } -isl::pw_multi_aff_list pw_multi_aff_list::from_pw_multi_aff(isl::pw_multi_aff el) +isl::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::pw_aff el) const { - auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release()); + auto res = isl_pw_aff_list_insert(copy(), pos, el.release()); return manage(res); } -isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const +class size pw_aff_list::size() const { - auto res = isl_pw_multi_aff_list_get_at(get(), index); + auto res = isl_pw_aff_list_size(get()); return manage(res); } -isl::pw_multi_aff pw_multi_aff_list::get_pw_multi_aff(int index) const +inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj) { - auto res = isl_pw_multi_aff_list_get_pw_multi_aff(get(), index); - return manage(res); + char *str = isl_pw_aff_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::pw_multi_aff_list pw_multi_aff_list::insert(unsigned int pos, isl::pw_multi_aff el) const -{ - auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release()); - 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); } - -isl_size pw_multi_aff_list::n_pw_multi_aff() const -{ - auto res = isl_pw_multi_aff_list_n_pw_multi_aff(get()); - return res; +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_multi_aff_list pw_multi_aff_list::reverse() const -{ - auto res = isl_pw_multi_aff_list_reverse(copy()); - return manage(res); -} +pw_multi_aff::pw_multi_aff() + : ptr(nullptr) {} -isl::pw_multi_aff_list pw_multi_aff_list::set_pw_multi_aff(int index, isl::pw_multi_aff el) const +pw_multi_aff::pw_multi_aff(const pw_multi_aff &obj) + : ptr(nullptr) { - auto res = isl_pw_multi_aff_list_set_pw_multi_aff(copy(), index, el.release()); - return manage(res); + ptr = obj.copy(); } -isl_size pw_multi_aff_list::size() const -{ - auto res = isl_pw_multi_aff_list_size(get()); - return res; -} +pw_multi_aff::pw_multi_aff(__isl_take isl_pw_multi_aff *ptr) + : ptr(ptr) {} -isl::pw_multi_aff_list pw_multi_aff_list::swap(unsigned int pos1, unsigned int pos2) const +pw_multi_aff::pw_multi_aff(isl::multi_aff ma) { - auto res = isl_pw_multi_aff_list_swap(copy(), pos1, pos2); - return manage(res); -} - -// implementations for isl::pw_qpolynomial -pw_qpolynomial manage(__isl_take isl_pw_qpolynomial *ptr) { - return pw_qpolynomial(ptr); -} -pw_qpolynomial manage_copy(__isl_keep isl_pw_qpolynomial *ptr) { - ptr = isl_pw_qpolynomial_copy(ptr); - return pw_qpolynomial(ptr); + auto res = isl_pw_multi_aff_from_multi_aff(ma.release()); + ptr = res; } -pw_qpolynomial::pw_qpolynomial() - : ptr(nullptr) {} - -pw_qpolynomial::pw_qpolynomial(const pw_qpolynomial &obj) - : ptr(nullptr) +pw_multi_aff::pw_multi_aff(isl::pw_aff pa) { - ptr = obj.copy(); + auto res = isl_pw_multi_aff_from_pw_aff(pa.release()); + ptr = res; } - -pw_qpolynomial::pw_qpolynomial(__isl_take isl_pw_qpolynomial *ptr) - : ptr(ptr) {} - -pw_qpolynomial::pw_qpolynomial(isl::ctx ctx, const std::string &str) +pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str) { - auto res = isl_pw_qpolynomial_read_from_str(ctx.release(), str.c_str()); + auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str()); ptr = res; } -pw_qpolynomial &pw_qpolynomial::operator=(pw_qpolynomial obj) { +pw_multi_aff &pw_multi_aff::operator=(pw_multi_aff obj) { std::swap(this->ptr, obj.ptr); return *this; } -pw_qpolynomial::~pw_qpolynomial() { +pw_multi_aff::~pw_multi_aff() { if (ptr) - isl_pw_qpolynomial_free(ptr); + isl_pw_multi_aff_free(ptr); } -__isl_give isl_pw_qpolynomial *pw_qpolynomial::copy() const & { - return isl_pw_qpolynomial_copy(ptr); +__isl_give isl_pw_multi_aff *pw_multi_aff::copy() const & { + return isl_pw_multi_aff_copy(ptr); } -__isl_keep isl_pw_qpolynomial *pw_qpolynomial::get() const { +__isl_keep isl_pw_multi_aff *pw_multi_aff::get() const { return ptr; } -__isl_give isl_pw_qpolynomial *pw_qpolynomial::release() { - isl_pw_qpolynomial *tmp = ptr; +__isl_give isl_pw_multi_aff *pw_multi_aff::release() { + isl_pw_multi_aff *tmp = ptr; ptr = nullptr; return tmp; } -bool pw_qpolynomial::is_null() const { +bool pw_multi_aff::is_null() const { return ptr == nullptr; } - -isl::ctx pw_qpolynomial::ctx() const { - return isl::ctx(isl_pw_qpolynomial_get_ctx(ptr)); +isl::ctx pw_multi_aff::ctx() const { + return isl::ctx(isl_pw_multi_aff_get_ctx(ptr)); } -void pw_qpolynomial::dump() const { - isl_pw_qpolynomial_dump(get()); +isl::multi_pw_aff pw_multi_aff::add(const isl::multi_pw_aff &multi2) const +{ + return isl::multi_pw_aff(*this).add(multi2); } +isl::multi_union_pw_aff pw_multi_aff::add(const isl::multi_union_pw_aff &multi2) const +{ + return isl::multi_pw_aff(*this).add(multi2); +} -isl::pw_qpolynomial pw_qpolynomial::add(isl::pw_qpolynomial pwqp2) const +isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const { - auto res = isl_pw_qpolynomial_add(copy(), pwqp2.release()); + auto res = isl_pw_multi_aff_add(copy(), pma2.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::add_dims(isl::dim type, unsigned int n) const +isl::union_pw_multi_aff pw_multi_aff::add(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_qpolynomial_add_dims(copy(), static_cast(type), n); - return manage(res); + return isl::union_pw_multi_aff(*this).add(upma2); } -isl::pw_qpolynomial pw_qpolynomial::alloc(isl::set set, isl::qpolynomial qp) +isl::pw_multi_aff pw_multi_aff::add(const isl::multi_aff &pma2) const { - auto res = isl_pw_qpolynomial_alloc(set.release(), qp.release()); - return manage(res); + return this->add(isl::pw_multi_aff(pma2)); } -isl::qpolynomial pw_qpolynomial::as_qpolynomial() const +isl::pw_multi_aff pw_multi_aff::add(const isl::pw_aff &pma2) const { - auto res = isl_pw_qpolynomial_as_qpolynomial(copy()); + return this->add(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const +{ + auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::coalesce() const +isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const { - auto res = isl_pw_qpolynomial_coalesce(copy()); + auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release()); return manage(res); } -isl_size pw_qpolynomial::dim(isl::dim type) const +isl::pw_multi_aff pw_multi_aff::add_constant(long v) const { - auto res = isl_pw_qpolynomial_dim(get(), static_cast(type)); - return res; + return this->add_constant(isl::val(ctx(), v)); } -isl::set pw_qpolynomial::domain() 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_domain(copy()); - return manage(res); + return isl::union_pw_multi_aff(*this).add_pw_multi_aff(pma); } -isl::pw_qpolynomial pw_qpolynomial::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_pw_multi_aff pw_multi_aff::apply(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_qpolynomial_drop_dims(copy(), static_cast(type), first, n); - return manage(res); + return isl::union_pw_multi_aff(*this).apply(upma2); } -isl::pw_qpolynomial pw_qpolynomial::drop_unused_params() const +isl::map pw_multi_aff::as_map() const { - auto res = isl_pw_qpolynomial_drop_unused_params(copy()); + auto res = isl_pw_multi_aff_as_map(copy()); return manage(res); } -isl::val pw_qpolynomial::eval(isl::point pnt) const +isl::multi_aff pw_multi_aff::as_multi_aff() const { - auto res = isl_pw_qpolynomial_eval(copy(), pnt.release()); + auto res = isl_pw_multi_aff_as_multi_aff(copy()); return manage(res); } -int pw_qpolynomial::find_dim_by_name(isl::dim type, const std::string &name) const +isl::multi_union_pw_aff pw_multi_aff::as_multi_union_pw_aff() const { - auto res = isl_pw_qpolynomial_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff(); } -isl::pw_qpolynomial pw_qpolynomial::fix_val(isl::dim type, unsigned int n, isl::val v) const +isl::pw_multi_aff pw_multi_aff::as_pw_multi_aff() const { - auto res = isl_pw_qpolynomial_fix_val(copy(), static_cast(type), n, v.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).as_pw_multi_aff(); } -stat pw_qpolynomial::foreach_piece(const std::function &fn) const +isl::set pw_multi_aff::as_set() 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); + auto res = isl_pw_multi_aff_as_set(copy()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::from_pw_aff(isl::pw_aff pwaff) +isl::union_map pw_multi_aff::as_union_map() const { - auto res = isl_pw_qpolynomial_from_pw_aff(pwaff.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).as_union_map(); } -isl::pw_qpolynomial pw_qpolynomial::from_qpolynomial(isl::qpolynomial qp) +isl::pw_aff pw_multi_aff::at(int pos) const { - auto res = isl_pw_qpolynomial_from_qpolynomial(qp.release()); + auto res = isl_pw_multi_aff_get_at(get(), pos); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::from_range() const +isl::pw_aff pw_multi_aff::get_at(int pos) const { - auto res = isl_pw_qpolynomial_from_range(copy()); - return manage(res); + return at(pos); } -isl::space pw_qpolynomial::get_domain_space() const +isl::set pw_multi_aff::bind(const isl::multi_id &tuple) const { - auto res = isl_pw_qpolynomial_get_domain_space(get()); - return manage(res); + return isl::multi_pw_aff(*this).bind(tuple); } -isl::space pw_qpolynomial::get_space() const +isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const { - auto res = isl_pw_qpolynomial_get_space(get()); + auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::gist(isl::set context) const +isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const { - auto res = isl_pw_qpolynomial_gist(copy(), context.release()); + auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::gist_params(isl::set context) const +isl::pw_multi_aff pw_multi_aff::coalesce() const { - auto res = isl_pw_qpolynomial_gist_params(copy(), context.release()); + auto res = isl_pw_multi_aff_coalesce(copy()); return manage(res); } -boolean pw_qpolynomial::has_equal_space(const isl::pw_qpolynomial &pwqp2) const +class size pw_multi_aff::dim(isl::dim type) const { - auto res = isl_pw_qpolynomial_has_equal_space(get(), pwqp2.get()); + auto res = isl_pw_multi_aff_dim(get(), static_cast(type)); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::insert_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::set pw_multi_aff::domain() const { - auto res = isl_pw_qpolynomial_insert_dims(copy(), static_cast(type), first, n); + auto res = isl_pw_multi_aff_domain(copy()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::intersect_domain(isl::set set) const +isl::pw_multi_aff pw_multi_aff::domain_map(isl::space space) { - auto res = isl_pw_qpolynomial_intersect_domain(copy(), set.release()); + auto res = isl_pw_multi_aff_domain_map(space.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::intersect_domain_wrapped_domain(isl::set set) 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_intersect_domain_wrapped_domain(copy(), set.release()); + auto res = isl_pw_multi_aff_drop_dims(copy(), static_cast(type), first, n); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::intersect_domain_wrapped_range(isl::set set) const +isl::pw_multi_aff pw_multi_aff::extract_pw_multi_aff(const isl::space &space) const { - auto res = isl_pw_qpolynomial_intersect_domain_wrapped_range(copy(), set.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space); } -isl::pw_qpolynomial pw_qpolynomial::intersect_params(isl::set set) const +isl::multi_pw_aff pw_multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_qpolynomial_intersect_params(copy(), set.release()); - return manage(res); + return isl::multi_pw_aff(*this).flat_range_product(multi2); } -boolean pw_qpolynomial::involves_dims(isl::dim type, unsigned int first, unsigned int n) 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_involves_dims(get(), static_cast(type), first, n); - return manage(res); + return isl::multi_pw_aff(*this).flat_range_product(multi2); } -boolean pw_qpolynomial::involves_nan() const +isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const { - auto res = isl_pw_qpolynomial_involves_nan(get()); + auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release()); return manage(res); } -boolean pw_qpolynomial::involves_param_id(const isl::id &id) 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_involves_param_id(get(), id.get()); - return manage(res); + return isl::union_pw_multi_aff(*this).flat_range_product(upma2); } -boolean pw_qpolynomial::is_zero() const +isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::multi_aff &pma2) const { - auto res = isl_pw_qpolynomial_is_zero(get()); - return manage(res); + return this->flat_range_product(isl::pw_multi_aff(pma2)); } -boolean pw_qpolynomial::isa_qpolynomial() const +isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::pw_aff &pma2) const { - auto res = isl_pw_qpolynomial_isa_qpolynomial(get()); - return manage(res); + return this->flat_range_product(isl::pw_multi_aff(pma2)); } -isl::val pw_qpolynomial::max() const +stat pw_multi_aff::foreach_piece(const std::function &fn) const { - auto res = isl_pw_qpolynomial_max(copy()); + struct fn_data { + 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); + auto 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); } -isl::val pw_qpolynomial::min() const +isl::pw_multi_aff pw_multi_aff::from_map(isl::map map) { - auto res = isl_pw_qpolynomial_min(copy()); + auto res = isl_pw_multi_aff_from_map(map.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::gist(isl::set set) 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_gist(copy(), set.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::mul(isl::pw_qpolynomial pwqp2) const +isl::union_pw_multi_aff pw_multi_aff::gist(const isl::union_set &context) const { - auto res = isl_pw_qpolynomial_mul(copy(), pwqp2.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).gist(context); } -isl_size pw_qpolynomial::n_piece() const +isl::pw_multi_aff pw_multi_aff::gist(const isl::basic_set &set) const { - auto res = isl_pw_qpolynomial_n_piece(get()); - return res; + return this->gist(isl::set(set)); } -isl::pw_qpolynomial pw_qpolynomial::neg() const +isl::pw_multi_aff pw_multi_aff::gist(const isl::point &set) const { - auto res = isl_pw_qpolynomial_neg(copy()); - return manage(res); + return this->gist(isl::set(set)); } -boolean pw_qpolynomial::plain_is_equal(const isl::pw_qpolynomial &pwqp2) const +boolean pw_multi_aff::has_range_tuple_id() const { - auto res = isl_pw_qpolynomial_plain_is_equal(get(), pwqp2.get()); + auto res = isl_pw_multi_aff_has_range_tuple_id(get()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::pow(unsigned int exponent) const +isl::multi_pw_aff pw_multi_aff::identity() const { - auto res = isl_pw_qpolynomial_pow(copy(), exponent); - return manage(res); + return isl::multi_pw_aff(*this).identity(); } -isl::pw_qpolynomial pw_qpolynomial::project_domain_on_params() const +isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space) { - auto res = isl_pw_qpolynomial_project_domain_on_params(copy()); + auto res = isl_pw_multi_aff_identity_on_domain_space(space.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::reset_domain_space(isl::space space) const +isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) const { - auto res = isl_pw_qpolynomial_reset_domain_space(copy(), space.release()); + auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::reset_user() const +isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const { - auto res = isl_pw_qpolynomial_reset_user(copy()); + auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::scale_down_val(isl::val v) const +isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::space &space) const { - auto res = isl_pw_qpolynomial_scale_down_val(copy(), v.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).intersect_domain(space); } -isl::pw_qpolynomial pw_qpolynomial::scale_val(isl::val v) const +isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::union_set &uset) const { - auto res = isl_pw_qpolynomial_scale_val(copy(), v.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).intersect_domain(uset); } -isl::pw_qpolynomial pw_qpolynomial::split_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::basic_set &set) const { - auto res = isl_pw_qpolynomial_split_dims(copy(), static_cast(type), first, n); - return manage(res); + return this->intersect_domain(isl::set(set)); } -isl::pw_qpolynomial pw_qpolynomial::split_periods(int max_periods) const +isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::point &set) const { - auto res = isl_pw_qpolynomial_split_periods(copy(), max_periods); - return manage(res); + return this->intersect_domain(isl::set(set)); } -isl::pw_qpolynomial pw_qpolynomial::sub(isl::pw_qpolynomial pwqp2) const +isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const { - auto res = isl_pw_qpolynomial_sub(copy(), pwqp2.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_domain(uset); } -isl::pw_qpolynomial pw_qpolynomial::subtract_domain(isl::set set) const +isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const { - auto res = isl_pw_qpolynomial_subtract_domain(copy(), set.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_range(uset); } -isl::pw_qpolynomial pw_qpolynomial::to_polynomial(int sign) const +isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const { - auto res = isl_pw_qpolynomial_to_polynomial(copy(), sign); + auto res = isl_pw_multi_aff_intersect_params(copy(), set.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial::zero(isl::space space) +boolean pw_multi_aff::involves_locals() const { - auto res = isl_pw_qpolynomial_zero(space.release()); + auto res = isl_pw_multi_aff_involves_locals(get()); return manage(res); } -// 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); +boolean pw_multi_aff::involves_nan() const +{ + return isl::multi_pw_aff(*this).involves_nan(); } -pw_qpolynomial_fold_list::pw_qpolynomial_fold_list() - : ptr(nullptr) {} - -pw_qpolynomial_fold_list::pw_qpolynomial_fold_list(const pw_qpolynomial_fold_list &obj) - : ptr(nullptr) +boolean pw_multi_aff::involves_param(const isl::id &id) const { - ptr = obj.copy(); + return isl::multi_pw_aff(*this).involves_param(id); } - -pw_qpolynomial_fold_list::pw_qpolynomial_fold_list(__isl_take isl_pw_qpolynomial_fold_list *ptr) - : ptr(ptr) {} - - -pw_qpolynomial_fold_list &pw_qpolynomial_fold_list::operator=(pw_qpolynomial_fold_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; +boolean pw_multi_aff::involves_param(const std::string &id) const +{ + return this->involves_param(isl::id(ctx(), id)); } -pw_qpolynomial_fold_list::~pw_qpolynomial_fold_list() { - if (ptr) - isl_pw_qpolynomial_fold_list_free(ptr); +boolean pw_multi_aff::involves_param(const isl::id_list &list) const +{ + return isl::multi_pw_aff(*this).involves_param(list); } -__isl_give isl_pw_qpolynomial_fold_list *pw_qpolynomial_fold_list::copy() const & { - return isl_pw_qpolynomial_fold_list_copy(ptr); +boolean pw_multi_aff::isa_multi_aff() const +{ + auto res = isl_pw_multi_aff_isa_multi_aff(get()); + return manage(res); } -__isl_keep isl_pw_qpolynomial_fold_list *pw_qpolynomial_fold_list::get() const { - return ptr; +boolean pw_multi_aff::isa_pw_multi_aff() const +{ + return isl::union_pw_multi_aff(*this).isa_pw_multi_aff(); } -__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_aff_list pw_multi_aff::list() const +{ + return isl::multi_pw_aff(*this).list(); } -bool pw_qpolynomial_fold_list::is_null() const { - return ptr == nullptr; +isl::multi_pw_aff pw_multi_aff::max(const isl::multi_pw_aff &multi2) const +{ + return isl::multi_pw_aff(*this).max(multi2); } - -isl::ctx pw_qpolynomial_fold_list::ctx() const { - return isl::ctx(isl_pw_qpolynomial_fold_list_get_ctx(ptr)); +isl::multi_val pw_multi_aff::max_multi_val() const +{ + auto res = isl_pw_multi_aff_max_multi_val(copy()); + return manage(res); } -void pw_qpolynomial_fold_list::dump() const { - isl_pw_qpolynomial_fold_list_dump(get()); +isl::multi_pw_aff pw_multi_aff::min(const isl::multi_pw_aff &multi2) const +{ + return isl::multi_pw_aff(*this).min(multi2); } - - -// implementations for isl::pw_qpolynomial_list -pw_qpolynomial_list manage(__isl_take isl_pw_qpolynomial_list *ptr) { - return pw_qpolynomial_list(ptr); -} -pw_qpolynomial_list manage_copy(__isl_keep isl_pw_qpolynomial_list *ptr) { - ptr = isl_pw_qpolynomial_list_copy(ptr); - return pw_qpolynomial_list(ptr); +isl::multi_val pw_multi_aff::min_multi_val() const +{ + auto res = isl_pw_multi_aff_min_multi_val(copy()); + return manage(res); } -pw_qpolynomial_list::pw_qpolynomial_list() - : ptr(nullptr) {} - -pw_qpolynomial_list::pw_qpolynomial_list(const pw_qpolynomial_list &obj) - : ptr(nullptr) +isl::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::set domain, isl::multi_val mv) { - ptr = obj.copy(); + auto res = isl_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release()); + return manage(res); } - -pw_qpolynomial_list::pw_qpolynomial_list(__isl_take isl_pw_qpolynomial_list *ptr) - : ptr(ptr) {} - - -pw_qpolynomial_list &pw_qpolynomial_list::operator=(pw_qpolynomial_list obj) { - std::swap(this->ptr, obj.ptr); - return *this; +class size pw_multi_aff::n_piece() const +{ + auto res = isl_pw_multi_aff_n_piece(get()); + return manage(res); } -pw_qpolynomial_list::~pw_qpolynomial_list() { - if (ptr) - isl_pw_qpolynomial_list_free(ptr); +isl::multi_pw_aff pw_multi_aff::neg() const +{ + return isl::multi_pw_aff(*this).neg(); } -__isl_give isl_pw_qpolynomial_list *pw_qpolynomial_list::copy() const & { - return isl_pw_qpolynomial_list_copy(ptr); +boolean pw_multi_aff::plain_is_empty() const +{ + return isl::union_pw_multi_aff(*this).plain_is_empty(); } -__isl_keep isl_pw_qpolynomial_list *pw_qpolynomial_list::get() const { - return ptr; +boolean pw_multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const +{ + return isl::multi_pw_aff(*this).plain_is_equal(multi2); } -__isl_give isl_pw_qpolynomial_list *pw_qpolynomial_list::release() { - isl_pw_qpolynomial_list *tmp = ptr; - ptr = nullptr; - return tmp; +boolean pw_multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +{ + return isl::multi_pw_aff(*this).plain_is_equal(multi2); } -bool pw_qpolynomial_list::is_null() const { - return ptr == nullptr; +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::ctx pw_qpolynomial_list::ctx() const { - return isl::ctx(isl_pw_qpolynomial_list_get_ctx(ptr)); +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); } -void pw_qpolynomial_list::dump() const { - isl_pw_qpolynomial_list_dump(get()); +isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const +{ + return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2)); } - -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::pw_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::multi_pw_aff pw_multi_aff::product(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_qpolynomial_list_alloc(ctx.release(), n); - return manage(res); + return isl::multi_pw_aff(*this).product(multi2); } -isl::pw_qpolynomial_list pw_qpolynomial_list::clear() const +isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const { - auto res = isl_pw_qpolynomial_list_clear(copy()); + auto res = isl_pw_multi_aff_product(copy(), pma2.release()); return manage(res); } -isl::pw_qpolynomial_list pw_qpolynomial_list::concat(isl::pw_qpolynomial_list list2) const +isl::pw_multi_aff pw_multi_aff::product(const isl::multi_aff &pma2) const { - auto res = isl_pw_qpolynomial_list_concat(copy(), list2.release()); - return manage(res); + return this->product(isl::pw_multi_aff(pma2)); } -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::pw_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::project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n) { - 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); + auto res = isl_pw_multi_aff_project_out_map(space.release(), static_cast(type), first, n); return manage(res); } -isl::pw_qpolynomial_list pw_qpolynomial_list::from_pw_qpolynomial(isl::pw_qpolynomial el) +isl::multi_pw_aff pw_multi_aff::pullback(const isl::multi_pw_aff &mpa2) const { - auto res = isl_pw_qpolynomial_list_from_pw_qpolynomial(el.release()); - return manage(res); + return isl::multi_pw_aff(*this).pullback(mpa2); } -isl::pw_qpolynomial pw_qpolynomial_list::get_at(int index) const +isl::pw_multi_aff pw_multi_aff::pullback(isl::multi_aff ma) const { - auto res = isl_pw_qpolynomial_list_get_at(get(), index); + auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release()); return manage(res); } -isl::pw_qpolynomial pw_qpolynomial_list::get_pw_qpolynomial(int index) const +isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const { - auto res = isl_pw_qpolynomial_list_get_pw_qpolynomial(get(), index); + auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release()); return manage(res); } -isl::pw_qpolynomial_list pw_qpolynomial_list::insert(unsigned int pos, isl::pw_qpolynomial el) const +isl::union_pw_multi_aff pw_multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const { - auto res = isl_pw_qpolynomial_list_insert(copy(), pos, el.release()); - return manage(res); + return isl::union_pw_multi_aff(*this).pullback(upma2); } -isl_size pw_qpolynomial_list::n_pw_qpolynomial() const +isl::pw_multi_aff_list pw_multi_aff::pw_multi_aff_list() const { - auto res = isl_pw_qpolynomial_list_n_pw_qpolynomial(get()); - return res; + return isl::union_pw_multi_aff(*this).pw_multi_aff_list(); } -isl::pw_qpolynomial_list pw_qpolynomial_list::reverse() const +isl::pw_multi_aff pw_multi_aff::range_factor_domain() const { - auto res = isl_pw_qpolynomial_list_reverse(copy()); + auto res = isl_pw_multi_aff_range_factor_domain(copy()); return manage(res); } -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_range() const { - auto res = isl_pw_qpolynomial_list_set_pw_qpolynomial(copy(), index, el.release()); + auto res = isl_pw_multi_aff_range_factor_range(copy()); return manage(res); } -isl_size pw_qpolynomial_list::size() const +isl::pw_multi_aff pw_multi_aff::range_map(isl::space space) { - auto res = isl_pw_qpolynomial_list_size(get()); - return res; + auto res = isl_pw_multi_aff_range_map(space.release()); + return manage(res); } -isl::pw_qpolynomial_list pw_qpolynomial_list::swap(unsigned int pos1, unsigned int pos2) const +isl::multi_pw_aff pw_multi_aff::range_product(const isl::multi_pw_aff &multi2) const { - auto res = isl_pw_qpolynomial_list_swap(copy(), pos1, pos2); - return manage(res); + return isl::multi_pw_aff(*this).range_product(multi2); } -// 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_union_pw_aff pw_multi_aff::range_product(const isl::multi_union_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::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const { - ptr = obj.copy(); + auto res = isl_pw_multi_aff_range_product(copy(), pma2.release()); + return manage(res); } - -qpolynomial::qpolynomial(__isl_take isl_qpolynomial *ptr) - : ptr(ptr) {} - - -qpolynomial &qpolynomial::operator=(qpolynomial obj) { - std::swap(this->ptr, obj.ptr); - return *this; +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); } -qpolynomial::~qpolynomial() { - if (ptr) - isl_qpolynomial_free(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_give isl_qpolynomial *qpolynomial::copy() const & { - return isl_qpolynomial_copy(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_keep isl_qpolynomial *qpolynomial::get() const { - return ptr; +isl::id pw_multi_aff::range_tuple_id() const +{ + auto res = isl_pw_multi_aff_get_range_tuple_id(get()); + return manage(res); } -__isl_give isl_qpolynomial *qpolynomial::release() { - isl_qpolynomial *tmp = ptr; - ptr = nullptr; - return tmp; +isl::id pw_multi_aff::get_range_tuple_id() const +{ + return range_tuple_id(); } -bool qpolynomial::is_null() const { - return ptr == nullptr; +isl::multi_pw_aff pw_multi_aff::reset_range_tuple_id() const +{ + return isl::multi_pw_aff(*this).reset_range_tuple_id(); } - -isl::ctx qpolynomial::ctx() const { - return isl::ctx(isl_qpolynomial_get_ctx(ptr)); +isl::multi_pw_aff pw_multi_aff::reset_tuple_id(isl::dim type) const +{ + return isl::multi_pw_aff(*this).reset_tuple_id(type); } -void qpolynomial::dump() const { - isl_qpolynomial_dump(get()); +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 +class 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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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::ctx pw_multi_aff_list::ctx() const { + return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr)); } -isl::qpolynomial_list qpolynomial_list::drop(unsigned int first, unsigned int n) const +isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const { - auto res = isl_qpolynomial_list_drop(copy(), first, n); + auto res = isl_pw_multi_aff_list_add(copy(), el.release()); return manage(res); } -stat qpolynomial_list::foreach(const std::function &fn) const +isl::pw_multi_aff pw_multi_aff_list::at(int index) 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_get_at(get(), index); return manage(res); } -isl::qpolynomial_list qpolynomial_list::from_qpolynomial(isl::qpolynomial el) +isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const { - auto res = isl_qpolynomial_list_from_qpolynomial(el.release()); - return manage(res); + return at(index); } -isl::qpolynomial qpolynomial_list::get_at(int index) const +isl::pw_multi_aff_list pw_multi_aff_list::clear() const { - auto res = isl_qpolynomial_list_get_at(get(), index); + auto res = isl_pw_multi_aff_list_clear(copy()); return manage(res); } -isl::qpolynomial qpolynomial_list::get_qpolynomial(int index) const +isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const { - auto res = isl_qpolynomial_list_get_qpolynomial(get(), index); + auto res = isl_pw_multi_aff_list_concat(copy(), list2.release()); 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::drop(unsigned int first, unsigned int n) const { - auto res = isl_qpolynomial_list_insert(copy(), pos, el.release()); + auto res = isl_pw_multi_aff_list_drop(copy(), first, n); return manage(res); } -isl_size qpolynomial_list::n_qpolynomial() const -{ - auto res = isl_qpolynomial_list_n_qpolynomial(get()); - return res; -} - -isl::qpolynomial_list qpolynomial_list::reverse() const +stat pw_multi_aff_list::foreach(const std::function &fn) const { - auto res = isl_qpolynomial_list_reverse(copy()); + struct fn_data { + 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); + auto 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); } -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 +class size pw_multi_aff_list::size() const { - auto res = isl_qpolynomial_list_size(get()); - return res; + auto res = isl_pw_multi_aff_list_size(get()); + return manage(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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } // implementations for isl::schedule @@ -14680,7 +17094,6 @@ ptr = obj.copy(); } - schedule::schedule(__isl_take isl_schedule *ptr) : ptr(ptr) {} @@ -14718,49 +17131,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 +17164,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 +17176,52 @@ 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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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 +17240,6 @@ ptr = obj.copy(); } - schedule_constraints::schedule_constraints(__isl_take isl_schedule_constraints *ptr) : ptr(ptr) {} @@ -14874,20 +17277,19 @@ 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::union_map schedule_constraints::coincidence() const +{ + auto res = isl_schedule_constraints_get_coincidence(get()); + return manage(res); } - -isl::schedule_constraints schedule_constraints::apply(isl::union_map umap) const +isl::union_map schedule_constraints::get_coincidence() const { - auto res = isl_schedule_constraints_apply(copy(), umap.release()); - return manage(res); + return coincidence(); } isl::schedule schedule_constraints::compute_schedule() const @@ -14896,46 +17298,48 @@ return manage(res); } -isl::union_map schedule_constraints::get_coincidence() const +isl::union_map schedule_constraints::conditional_validity() const { - auto res = isl_schedule_constraints_get_coincidence(get()); + auto res = isl_schedule_constraints_get_conditional_validity(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); + return conditional_validity(); } -isl::union_map schedule_constraints::get_conditional_validity_condition() const +isl::union_map schedule_constraints::conditional_validity_condition() const { auto res = isl_schedule_constraints_get_conditional_validity_condition(get()); return manage(res); } -isl::set schedule_constraints::get_context() const +isl::union_map schedule_constraints::get_conditional_validity_condition() const +{ + return conditional_validity_condition(); +} + +isl::set schedule_constraints::context() const { auto res = isl_schedule_constraints_get_context(get()); return manage(res); } -isl::union_set schedule_constraints::get_domain() const +isl::set schedule_constraints::get_context() const { - auto res = isl_schedule_constraints_get_domain(get()); - return manage(res); + return context(); } -isl::union_map schedule_constraints::get_proximity() const +isl::union_set schedule_constraints::domain() const { - auto res = isl_schedule_constraints_get_proximity(get()); + auto res = isl_schedule_constraints_get_domain(get()); return manage(res); } -isl::union_map schedule_constraints::get_validity() const +isl::union_set schedule_constraints::get_domain() const { - auto res = isl_schedule_constraints_get_validity(get()); - return manage(res); + return domain(); } isl::schedule_constraints schedule_constraints::on_domain(isl::union_set domain) @@ -14944,6 +17348,17 @@ return manage(res); } +isl::union_map schedule_constraints::proximity() const +{ + auto res = isl_schedule_constraints_get_proximity(get()); + return manage(res); +} + +isl::union_map schedule_constraints::get_proximity() const +{ + return proximity(); +} + isl::schedule_constraints schedule_constraints::set_coincidence(isl::union_map coincidence) const { auto res = isl_schedule_constraints_set_coincidence(copy(), coincidence.release()); @@ -14974,6 +17389,29 @@ return manage(res); } +isl::union_map schedule_constraints::validity() const +{ + auto res = isl_schedule_constraints_get_validity(get()); + return manage(res); +} + +isl::union_map schedule_constraints::get_validity() const +{ + return validity(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj) +{ + char *str = isl_schedule_constraints_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + // implementations for isl::schedule_node schedule_node manage(__isl_take isl_schedule_node *ptr) { return schedule_node(ptr); @@ -14992,11 +17430,9 @@ 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; @@ -15025,91 +17461,86 @@ 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 +template +boolean schedule_node::isa_type(T subtype) const { - auto res = isl_schedule_node_align_params(copy(), space.release()); - return manage(res); + if (is_null()) + return boolean(); + return isl_schedule_node_get_type(get()) == subtype; } - -isl::schedule_node schedule_node::ancestor(int generation) const +template +boolean schedule_node::isa() const { - auto res = isl_schedule_node_ancestor(copy(), generation); - return manage(res); + return isa_type(T::type); } - -boolean schedule_node::band_member_get_coincident(int pos) const +template +T schedule_node::as() const { - auto res = isl_schedule_node_band_member_get_coincident(get(), pos); - return manage(res); + if (isa().is_false()) + isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T()); + return T(copy()); } -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::ctx schedule_node::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::schedule_node schedule_node::band_set_ast_build_options(isl::union_set options) const +isl::schedule_node schedule_node::ancestor(int generation) const { - auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release()); + auto res = isl_schedule_node_ancestor(copy(), generation); return manage(res); } -isl::schedule_node schedule_node::child(int pos) const +class size schedule_node::ancestor_child_position(const isl::schedule_node &ancestor) const { - auto res = isl_schedule_node_child(copy(), pos); + auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get()); return manage(res); } -isl::set schedule_node::context_get_context() const +class size schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const { - auto res = isl_schedule_node_context_get_context(get()); - return manage(res); + return ancestor_child_position(ancestor); } -isl::schedule_node schedule_node::cut() const +isl::schedule_node schedule_node::child(int pos) const { - auto res = isl_schedule_node_cut(copy()); + auto res = isl_schedule_node_child(copy(), pos); return manage(res); } -isl::union_set schedule_node::domain_get_domain() const +class size schedule_node::child_position() const { - auto res = isl_schedule_node_domain_get_domain(get()); + auto res = isl_schedule_node_get_child_position(get()); return manage(res); } -isl::union_pw_multi_aff schedule_node::expansion_get_contraction() const +class size schedule_node::get_child_position() const { - auto res = isl_schedule_node_expansion_get_contraction(get()); - return manage(res); + return child_position(); } -isl::union_map schedule_node::expansion_get_expansion() const +isl::union_set schedule_node::domain() const { - auto res = isl_schedule_node_expansion_get_expansion(get()); + auto res = isl_schedule_node_get_domain(get()); return manage(res); } -isl::union_map schedule_node::extension_get_extension() const +isl::union_set schedule_node::get_domain() const { - auto res = isl_schedule_node_extension_get_extension(get()); - return manage(res); + return domain(); } -isl::union_set schedule_node::filter_get_filter() const +boolean schedule_node::every_descendant(const std::function &test) const { - auto res = isl_schedule_node_filter_get_filter(get()); + struct test_data { + std::function func; + } test_data = { test }; + auto test_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage_copy(arg_0)); + return ret.release(); + }; + auto res = isl_schedule_node_every_descendant(get(), test_lambda, &test_data); return manage(res); } @@ -15119,125 +17550,43 @@ return manage(res); } -stat schedule_node::foreach_ancestor_top_down(const std::function &fn) const +stat schedule_node::foreach_ancestor_top_down(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + 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)); + auto ret = (data->func)(manage_copy(arg_0)); return ret.release(); }; auto res = isl_schedule_node_foreach_ancestor_top_down(get(), fn_lambda, &fn_data); return manage(res); } -isl::schedule_node schedule_node::from_domain(isl::union_set domain) -{ - auto res = isl_schedule_node_from_domain(domain.release()); - return manage(res); -} - -isl::schedule_node schedule_node::from_extension(isl::union_map extension) -{ - auto res = isl_schedule_node_from_extension(extension.release()); - return manage(res); -} - -isl_size schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const -{ - auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get()); - return res; -} - -isl::schedule_node schedule_node::get_child(int pos) const -{ - auto res = isl_schedule_node_get_child(get(), pos); - return manage(res); -} - -isl_size schedule_node::get_child_position() const -{ - auto res = isl_schedule_node_get_child_position(get()); - return res; -} - -isl::union_set schedule_node::get_domain() const -{ - auto res = isl_schedule_node_get_domain(get()); - return manage(res); -} - -isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const -{ - auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get()); - return manage(res); -} - -isl::union_map schedule_node::get_prefix_schedule_relation() const -{ - auto res = isl_schedule_node_get_prefix_schedule_relation(get()); - return manage(res); -} - -isl::union_map schedule_node::get_prefix_schedule_union_map() const -{ - auto res = isl_schedule_node_get_prefix_schedule_union_map(get()); - return manage(res); -} - -isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const -{ - auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get()); - return manage(res); -} - -isl::schedule schedule_node::get_schedule() const -{ - auto res = isl_schedule_node_get_schedule(get()); - 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 -{ - auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get()); - return manage(res); -} - -isl::union_pw_multi_aff schedule_node::get_subtree_contraction() const +stat schedule_node::foreach_descendant_top_down(const std::function &fn) const { - auto res = isl_schedule_node_get_subtree_contraction(get()); - return manage(res); -} - -isl::union_map schedule_node::get_subtree_expansion() const -{ - auto res = isl_schedule_node_get_subtree_expansion(get()); + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage_copy(arg_0)); + return ret.release(); + }; + auto res = isl_schedule_node_foreach_descendant_top_down(get(), fn_lambda, &fn_data); return manage(res); } -isl::union_map schedule_node::get_subtree_schedule_union_map() const +isl::schedule_node schedule_node::from_domain(isl::union_set domain) { - auto res = isl_schedule_node_get_subtree_schedule_union_map(get()); + auto res = isl_schedule_node_from_domain(domain.release()); return manage(res); } -isl_size schedule_node::get_tree_depth() const -{ - auto res = isl_schedule_node_get_tree_depth(get()); - return res; -} - -isl::union_set schedule_node::get_universe_domain() const +isl::schedule_node schedule_node::from_extension(isl::union_map extension) { - auto res = isl_schedule_node_get_universe_domain(get()); + auto res = isl_schedule_node_from_extension(extension.release()); return manage(res); } @@ -15253,18 +17602,6 @@ return manage(res); } -isl::schedule_node schedule_node::group(isl::id group_id) const -{ - auto res = isl_schedule_node_group(copy(), group_id.release()); - return manage(res); -} - -isl::set schedule_node::guard_get_guard() const -{ - auto res = isl_schedule_node_guard_get_guard(get()); - return manage(res); -} - boolean schedule_node::has_children() const { auto res = isl_schedule_node_has_children(get()); @@ -15313,6 +17650,11 @@ return manage(res); } +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()); @@ -15343,16 +17685,24 @@ return manage(res); } -isl::id schedule_node::mark_get_id() const +isl::schedule_node schedule_node::map_descendant_bottom_up(const std::function &fn) const { - auto res = isl_schedule_node_mark_get_id(get()); + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data); return manage(res); } -isl_size schedule_node::n_children() const +class size schedule_node::n_children() const { auto res = isl_schedule_node_n_children(get()); - return res; + return manage(res); } isl::schedule_node schedule_node::next_sibling() const @@ -15379,4255 +17729,4142 @@ return manage(res); } -isl::schedule_node schedule_node::previous_sibling() const +isl::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const { - auto res = isl_schedule_node_previous_sibling(copy()); + auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get()); return manage(res); } -isl::schedule_node schedule_node::reset_user() const +isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const { - auto res = isl_schedule_node_reset_user(copy()); - return manage(res); + return prefix_schedule_multi_union_pw_aff(); } -isl::schedule_node schedule_node::root() const +isl::union_map schedule_node::prefix_schedule_relation() const { - auto res = isl_schedule_node_root(copy()); + auto res = isl_schedule_node_get_prefix_schedule_relation(get()); return manage(res); } -isl::schedule_node schedule_node::sequence_splice_child(int pos) const +isl::union_map schedule_node::get_prefix_schedule_relation() const { - auto res = isl_schedule_node_sequence_splice_child(copy(), pos); - 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); + return prefix_schedule_relation(); } -set::set() - : ptr(nullptr) {} - -set::set(const set &obj) - : ptr(nullptr) +isl::union_map schedule_node::prefix_schedule_union_map() const { - ptr = obj.copy(); + auto res = isl_schedule_node_get_prefix_schedule_union_map(get()); + return manage(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) +isl::union_map schedule_node::get_prefix_schedule_union_map() const { - auto res = isl_set_from_point(pnt.release()); - ptr = res; + return prefix_schedule_union_map(); } -set::set(isl::union_set uset) + +isl::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const { - auto res = isl_set_from_union_set(uset.release()); - ptr = res; + auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get()); + return manage(res); } -set::set(isl::ctx ctx, const std::string &str) + +isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const { - auto res = isl_set_read_from_str(ctx.release(), str.c_str()); - ptr = res; + return prefix_schedule_union_pw_multi_aff(); } -set &set::operator=(set obj) { - std::swap(this->ptr, obj.ptr); - return *this; +isl::schedule_node schedule_node::previous_sibling() const +{ + auto res = isl_schedule_node_previous_sibling(copy()); + return manage(res); } -set::~set() { - if (ptr) - isl_set_free(ptr); +isl::schedule_node schedule_node::root() const +{ + auto res = isl_schedule_node_root(copy()); + return manage(res); } -__isl_give isl_set *set::copy() const & { - return isl_set_copy(ptr); +isl::schedule schedule_node::schedule() const +{ + auto res = isl_schedule_node_get_schedule(get()); + return manage(res); } -__isl_keep isl_set *set::get() const { - return ptr; +isl::schedule schedule_node::get_schedule() const +{ + return schedule(); } -__isl_give isl_set *set::release() { - isl_set *tmp = ptr; - ptr = nullptr; - return tmp; +class size schedule_node::schedule_depth() const +{ + auto res = isl_schedule_node_get_schedule_depth(get()); + return manage(res); } -bool set::is_null() const { - return ptr == nullptr; +class size schedule_node::get_schedule_depth() const +{ + return schedule_depth(); } - -isl::ctx set::ctx() const { - return isl::ctx(isl_set_get_ctx(ptr)); +isl::schedule_node schedule_node::shared_ancestor(const isl::schedule_node &node2) const +{ + auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get()); + return manage(res); } -void set::dump() const { - isl_set_dump(get()); +isl::schedule_node schedule_node::get_shared_ancestor(const isl::schedule_node &node2) const +{ + return shared_ancestor(node2); } - -isl::set set::add_constraint(isl::constraint constraint) const +class size schedule_node::tree_depth() const { - auto res = isl_set_add_constraint(copy(), constraint.release()); + auto res = isl_schedule_node_get_tree_depth(get()); return manage(res); } -isl::set set::add_dims(isl::dim type, unsigned int n) const +class size schedule_node::get_tree_depth() const { - auto res = isl_set_add_dims(copy(), static_cast(type), n); - return manage(res); + return tree_depth(); } -isl::basic_set set::affine_hull() const +isl::union_set schedule_node::universe_domain() const { - auto res = isl_set_affine_hull(copy()); + auto res = isl_schedule_node_get_universe_domain(get()); return manage(res); } -isl::set set::align_params(isl::space model) const +isl::union_set schedule_node::get_universe_domain() const { - auto res = isl_set_align_params(copy(), model.release()); - return manage(res); + return universe_domain(); } -isl::set set::apply(isl::map map) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj) { - auto res = isl_set_apply(copy(), map.release()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::set set::bind(isl::multi_id tuple) const +// 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_bind(copy(), tuple.release()); - return manage(res); } -isl::basic_set set::bounded_simple_hull() const -{ - auto res = isl_set_bounded_simple_hull(copy()); - return manage(res); +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::set set::box_from_points(isl::point pnt1, isl::point pnt2) -{ - auto res = isl_set_box_from_points(pnt1.release(), pnt2.release()); - return manage(res); +isl::ctx schedule_node_band::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::set set::coalesce() const +isl::union_set schedule_node_band::ast_build_options() const { - auto res = isl_set_coalesce(copy()); + auto res = isl_schedule_node_band_get_ast_build_options(get()); return manage(res); } -isl::basic_set set::coefficients() const +isl::union_set schedule_node_band::get_ast_build_options() const { - auto res = isl_set_coefficients(copy()); - return manage(res); + return ast_build_options(); } -isl::set set::complement() const +isl::set schedule_node_band::ast_isolate_option() const { - auto res = isl_set_complement(copy()); + auto res = isl_schedule_node_band_get_ast_isolate_option(get()); return manage(res); } -isl::basic_set set::convex_hull() const +isl::set schedule_node_band::get_ast_isolate_option() const { - auto res = isl_set_convex_hull(copy()); - return manage(res); + return ast_isolate_option(); } -isl::val set::count_val() const +boolean schedule_node_band::member_get_coincident(int pos) const { - auto res = isl_set_count_val(get()); + auto res = isl_schedule_node_band_member_get_coincident(get(), pos); return manage(res); } -isl::set set::detect_equalities() const +schedule_node_band schedule_node_band::member_set_coincident(int pos, int coincident) const { - auto res = isl_set_detect_equalities(copy()); - return manage(res); + auto res = isl_schedule_node_band_member_set_coincident(copy(), pos, coincident); + return manage(res).as(); } -isl_size set::dim(isl::dim type) const +schedule_node_band schedule_node_band::mod(isl::multi_val mv) const { - auto res = isl_set_dim(get(), static_cast(type)); - return res; + auto res = isl_schedule_node_band_mod(copy(), mv.release()); + return manage(res).as(); } -boolean set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const +class size schedule_node_band::n_member() const { - auto res = isl_set_dim_has_any_lower_bound(get(), static_cast(type), pos); + auto res = isl_schedule_node_band_n_member(get()); return manage(res); } -boolean set::dim_has_any_upper_bound(isl::dim type, unsigned int pos) const +isl::multi_union_pw_aff schedule_node_band::partial_schedule() const { - auto res = isl_set_dim_has_any_upper_bound(get(), static_cast(type), pos); + auto res = isl_schedule_node_band_get_partial_schedule(get()); return manage(res); } -boolean set::dim_has_lower_bound(isl::dim type, unsigned int pos) const +isl::multi_union_pw_aff schedule_node_band::get_partial_schedule() const { - auto res = isl_set_dim_has_lower_bound(get(), static_cast(type), pos); - return manage(res); + return partial_schedule(); } -boolean set::dim_has_upper_bound(isl::dim type, unsigned int pos) const +boolean schedule_node_band::permutable() const { - auto res = isl_set_dim_has_upper_bound(get(), static_cast(type), pos); + auto res = isl_schedule_node_band_get_permutable(get()); return manage(res); } -boolean set::dim_is_bounded(isl::dim type, unsigned int pos) const +boolean schedule_node_band::get_permutable() const { - auto res = isl_set_dim_is_bounded(get(), static_cast(type), pos); - return manage(res); + return permutable(); } -isl::pw_aff set::dim_max(int pos) const +schedule_node_band schedule_node_band::scale(isl::multi_val mv) const { - auto res = isl_set_dim_max(copy(), pos); - return manage(res); + auto res = isl_schedule_node_band_scale(copy(), mv.release()); + return manage(res).as(); } -isl::val set::dim_max_val(int pos) const +schedule_node_band schedule_node_band::scale_down(isl::multi_val mv) const { - auto res = isl_set_dim_max_val(copy(), pos); - return manage(res); + auto res = isl_schedule_node_band_scale_down(copy(), mv.release()); + return manage(res).as(); } -isl::pw_aff set::dim_min(int pos) const +schedule_node_band schedule_node_band::set_ast_build_options(isl::union_set options) const { - auto res = isl_set_dim_min(copy(), pos); - return manage(res); + auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release()); + return manage(res).as(); } -isl::val set::dim_min_val(int pos) const +schedule_node_band schedule_node_band::set_permutable(int permutable) const { - auto res = isl_set_dim_min_val(copy(), pos); - return manage(res); + auto res = isl_schedule_node_band_set_permutable(copy(), permutable); + return manage(res).as(); } -isl::set set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +schedule_node_band schedule_node_band::shift(isl::multi_union_pw_aff shift) const { - auto res = isl_set_drop_constraints_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + auto res = isl_schedule_node_band_shift(copy(), shift.release()); + return manage(res).as(); } -isl::set set::drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +schedule_node_band schedule_node_band::split(int pos) const { - auto res = isl_set_drop_constraints_not_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + auto res = isl_schedule_node_band_split(copy(), pos); + return manage(res).as(); } -isl::set set::drop_unused_params() const +schedule_node_band schedule_node_band::tile(isl::multi_val sizes) const { - auto res = isl_set_drop_unused_params(copy()); - return manage(res); + auto res = isl_schedule_node_band_tile(copy(), sizes.release()); + return manage(res).as(); } -isl::set set::eliminate(isl::dim type, unsigned int first, unsigned int n) const +schedule_node_band schedule_node_band::member_set_ast_loop_default(int pos) const { - auto res = isl_set_eliminate(copy(), static_cast(type), first, n); - return manage(res); + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_default); + return manage(res).as(); } -isl::set set::empty(isl::space space) +schedule_node_band schedule_node_band::member_set_ast_loop_atomic(int pos) const { - auto res = isl_set_empty(space.release()); - return manage(res); + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_atomic); + return manage(res).as(); } -isl::set set::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const +schedule_node_band schedule_node_band::member_set_ast_loop_unroll(int pos) const { - auto res = isl_set_equate(copy(), static_cast(type1), pos1, static_cast(type2), pos2); - return manage(res); + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_unroll); + return manage(res).as(); } -int set::find_dim_by_id(isl::dim type, const isl::id &id) const +schedule_node_band schedule_node_band::member_set_ast_loop_separate(int pos) const { - auto res = isl_set_find_dim_by_id(get(), static_cast(type), id.get()); - return res; + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_separate); + return manage(res).as(); } -int set::find_dim_by_name(isl::dim type, const std::string &name) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj) { - auto res = isl_set_find_dim_by_name(get(), static_cast(type), name.c_str()); - return res; + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::set set::fix_si(isl::dim type, unsigned int pos, int value) 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_fix_si(copy(), static_cast(type), pos, value); - return manage(res); } -isl::set set::fix_val(isl::dim type, unsigned int pos, isl::val v) const -{ - auto res = isl_set_fix_val(copy(), static_cast(type), pos, v.release()); - return manage(res); +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::set set::flat_product(isl::set set2) const -{ - auto res = isl_set_flat_product(copy(), set2.release()); - return manage(res); +isl::ctx schedule_node_context::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::set set::flatten() const +isl::set schedule_node_context::context() const { - auto res = isl_set_flatten(copy()); + auto res = isl_schedule_node_context_get_context(get()); return manage(res); } -isl::map set::flatten_map() const +isl::set schedule_node_context::get_context() const { - auto res = isl_set_flatten_map(copy()); - return manage(res); + return context(); } -int set::follows_at(const isl::set &set2, int pos) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj) { - auto res = isl_set_follows_at(get(), set2.get(), pos); - return res; + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -stat set::foreach_basic_set(const std::function &fn) 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) { - 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); } -stat set::foreach_point(const std::function &fn) 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); +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::set set::from_multi_aff(isl::multi_aff ma) -{ - auto res = isl_set_from_multi_aff(ma.release()); - return manage(res); +isl::ctx schedule_node_domain::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::set set::from_multi_pw_aff(isl::multi_pw_aff mpa) +isl::union_set schedule_node_domain::domain() const { - auto res = isl_set_from_multi_pw_aff(mpa.release()); + auto res = isl_schedule_node_domain_get_domain(get()); return manage(res); } -isl::set set::from_params() const +isl::union_set schedule_node_domain::get_domain() const { - auto res = isl_set_from_params(copy()); - return manage(res); + return domain(); } -isl::set set::from_pw_aff(isl::pw_aff pwaff) +inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj) { - auto res = isl_set_from_pw_aff(pwaff.release()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::set set::from_pw_multi_aff(isl::pw_multi_aff pma) +// 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_from_pw_multi_aff(pma.release()); - return manage(res); } -isl::basic_set_list set::get_basic_set_list() const -{ - auto res = isl_set_get_basic_set_list(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; +} + +isl::ctx schedule_node_expansion::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::id set::get_dim_id(isl::dim type, unsigned int pos) const +isl::union_pw_multi_aff schedule_node_expansion::contraction() const { - auto res = isl_set_get_dim_id(get(), static_cast(type), pos); + auto res = isl_schedule_node_expansion_get_contraction(get()); return manage(res); } -std::string set::get_dim_name(isl::dim type, unsigned int pos) const +isl::union_pw_multi_aff schedule_node_expansion::get_contraction() const { - auto res = isl_set_get_dim_name(get(), static_cast(type), pos); - std::string tmp(res); - return tmp; + return contraction(); } -isl::multi_val set::get_plain_multi_val_if_fixed() const +isl::union_map schedule_node_expansion::expansion() const { - auto res = isl_set_get_plain_multi_val_if_fixed(get()); + auto res = isl_schedule_node_expansion_get_expansion(get()); return manage(res); } -isl::fixed_box set::get_simple_fixed_box_hull() const +isl::union_map schedule_node_expansion::get_expansion() const { - auto res = isl_set_get_simple_fixed_box_hull(get()); - return manage(res); + return expansion(); } -isl::space set::get_space() const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj) { - auto res = isl_set_get_space(get()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::val set::get_stride(int pos) const -{ - auto res = isl_set_get_stride(get(), pos); - return manage(res); -} +// implementations for isl::schedule_node_extension +schedule_node_extension::schedule_node_extension() + : schedule_node() {} -isl::id set::get_tuple_id() const +schedule_node_extension::schedule_node_extension(const schedule_node_extension &obj) + : schedule_node(obj) { - auto res = isl_set_get_tuple_id(get()); - return manage(res); } -std::string set::get_tuple_name() const -{ - auto res = isl_set_get_tuple_name(get()); - std::string tmp(res); - return tmp; +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::gist(isl::set context) const -{ - auto res = isl_set_gist(copy(), context.release()); - return manage(res); +isl::ctx schedule_node_extension::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::set set::gist_basic_set(isl::basic_set context) const +isl::union_map schedule_node_extension::extension() const { - auto res = isl_set_gist_basic_set(copy(), context.release()); + auto res = isl_schedule_node_extension_get_extension(get()); return manage(res); } -isl::set set::gist_params(isl::set context) const +isl::union_map schedule_node_extension::get_extension() const { - auto res = isl_set_gist_params(copy(), context.release()); - return manage(res); + return extension(); } -boolean set::has_dim_id(isl::dim type, unsigned int pos) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj) { - auto res = isl_set_has_dim_id(get(), static_cast(type), pos); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -boolean set::has_dim_name(isl::dim type, unsigned int pos) 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_has_dim_name(get(), static_cast(type), pos); - return manage(res); } -boolean set::has_equal_space(const isl::set &set2) const -{ - auto res = isl_set_has_equal_space(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::has_tuple_id() const -{ - auto res = isl_set_has_tuple_id(get()); - return manage(res); +isl::ctx schedule_node_filter::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -boolean set::has_tuple_name() const +isl::union_set schedule_node_filter::filter() const { - auto res = isl_set_has_tuple_name(get()); + auto res = isl_schedule_node_filter_get_filter(get()); return manage(res); } -isl::map set::identity() const +isl::union_set schedule_node_filter::get_filter() const { - auto res = isl_set_identity(copy()); - return manage(res); + return filter(); } -isl::pw_aff set::indicator_function() const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj) { - auto res = isl_set_indicator_function(copy()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::set set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) 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_insert_dims(copy(), static_cast(type), pos, n); - return manage(res); } -isl::map set::insert_domain(isl::space domain) const -{ - auto res = isl_set_insert_domain(copy(), domain.release()); - 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; } -isl::set set::intersect(isl::set set2) const -{ - auto res = isl_set_intersect(copy(), set2.release()); - return manage(res); +isl::ctx schedule_node_guard::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::set set::intersect_factor_domain(isl::set domain) const +isl::set schedule_node_guard::guard() const { - auto res = isl_set_intersect_factor_domain(copy(), domain.release()); + auto res = isl_schedule_node_guard_get_guard(get()); return manage(res); } -isl::set set::intersect_factor_range(isl::set range) const +isl::set schedule_node_guard::get_guard() const { - auto res = isl_set_intersect_factor_range(copy(), range.release()); - return manage(res); + return guard(); } -isl::set set::intersect_params(isl::set params) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_guard &obj) { - auto res = isl_set_intersect_params(copy(), params.release()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -boolean set::involves_dims(isl::dim type, unsigned int first, unsigned int n) 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_involves_dims(get(), static_cast(type), first, n); - return manage(res); } -boolean set::involves_locals() const -{ - auto res = isl_set_involves_locals(get()); - 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; } -boolean set::is_bounded() const -{ - auto res = isl_set_is_bounded(get()); - return manage(res); +isl::ctx schedule_node_leaf::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -boolean set::is_box() const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_leaf &obj) { - auto res = isl_set_is_box(get()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -boolean set::is_disjoint(const isl::set &set2) 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_is_disjoint(get(), set2.get()); - return manage(res); } -boolean set::is_empty() const -{ - auto res = isl_set_is_empty(get()); - 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; } -boolean set::is_equal(const isl::set &set2) const -{ - auto res = isl_set_is_equal(get(), set2.get()); - return manage(res); +isl::ctx schedule_node_mark::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -boolean set::is_params() const +isl::id schedule_node_mark::id() const { - auto res = isl_set_is_params(get()); + auto res = isl_schedule_node_mark_get_id(get()); return manage(res); } -boolean set::is_singleton() const +isl::id schedule_node_mark::get_id() const { - auto res = isl_set_is_singleton(get()); - return manage(res); + return id(); } -boolean set::is_strict_subset(const isl::set &set2) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_mark &obj) { - auto res = isl_set_is_strict_subset(get(), set2.get()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -boolean set::is_subset(const isl::set &set2) 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_is_subset(get(), set2.get()); - return manage(res); } -boolean set::is_wrapping() const -{ - auto res = isl_set_is_wrapping(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::map set::lex_ge_set(isl::set set2) const -{ - auto res = isl_set_lex_ge_set(copy(), set2.release()); - return manage(res); +isl::ctx schedule_node_sequence::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::map set::lex_gt_set(isl::set set2) const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_sequence &obj) { - auto res = isl_set_lex_gt_set(copy(), set2.release()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::map set::lex_lt_set(isl::set set2) 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_lex_lt_set(copy(), set2.release()); - return manage(res); } -isl::set set::lexmax() const -{ - auto res = isl_set_lexmax(copy()); - 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::pw_multi_aff set::lexmax_pw_multi_aff() const -{ - auto res = isl_set_lexmax_pw_multi_aff(copy()); - return manage(res); +isl::ctx schedule_node_set::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); } -isl::set set::lexmin() const +inline std::ostream &operator<<(std::ostream &os, const schedule_node_set &obj) { - auto res = isl_set_lexmin(copy()); - return manage(res); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::pw_multi_aff set::lexmin_pw_multi_aff() const -{ - auto res = isl_set_lexmin_pw_multi_aff(copy()); - 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); } -isl::set set::lower_bound(isl::multi_pw_aff lower) const +set::set() + : ptr(nullptr) {} + +set::set(const set &obj) + : ptr(nullptr) { - auto res = isl_set_lower_bound_multi_pw_aff(copy(), lower.release()); - return manage(res); + ptr = obj.copy(); } -isl::set set::lower_bound(isl::multi_val lower) const +set::set(__isl_take isl_set *ptr) + : ptr(ptr) {} + +set::set(isl::basic_set bset) { - auto res = isl_set_lower_bound_multi_val(copy(), lower.release()); - return manage(res); + auto res = isl_set_from_basic_set(bset.release()); + ptr = res; } -isl::set set::lower_bound_si(isl::dim type, unsigned int pos, int value) const +set::set(isl::point pnt) { - auto res = isl_set_lower_bound_si(copy(), static_cast(type), pos, value); - return manage(res); + auto res = isl_set_from_point(pnt.release()); + ptr = res; } -isl::set set::lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const +set::set(isl::union_set uset) { - auto res = isl_set_lower_bound_val(copy(), static_cast(type), pos, value.release()); - return manage(res); + auto res = isl_set_from_union_set(uset.release()); + ptr = res; } -isl::multi_pw_aff set::max_multi_pw_aff() const +set::set(isl::ctx ctx, const std::string &str) { - auto res = isl_set_max_multi_pw_aff(copy()); - return manage(res); + auto res = isl_set_read_from_str(ctx.release(), str.c_str()); + ptr = res; } -isl::val set::max_val(const isl::aff &obj) const -{ - auto res = isl_set_max_val(get(), obj.get()); - return manage(res); +set &set::operator=(set obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl::multi_pw_aff set::min_multi_pw_aff() const -{ - auto res = isl_set_min_multi_pw_aff(copy()); - return manage(res); +set::~set() { + if (ptr) + isl_set_free(ptr); } -isl::val set::min_val(const isl::aff &obj) const -{ - auto res = isl_set_min_val(get(), obj.get()); - return manage(res); +__isl_give isl_set *set::copy() const & { + return isl_set_copy(ptr); } -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_keep isl_set *set::get() const { + return ptr; } -isl_size set::n_basic_set() const -{ - auto res = isl_set_n_basic_set(get()); - return res; +__isl_give isl_set *set::release() { + isl_set *tmp = ptr; + ptr = nullptr; + return tmp; } -isl_size set::n_dim() const -{ - auto res = isl_set_n_dim(get()); - return res; +bool set::is_null() const { + return ptr == nullptr; } -isl::set set::nat_universe(isl::space space) -{ - auto res = isl_set_nat_universe(space.release()); - return manage(res); +isl::ctx set::ctx() const { + return isl::ctx(isl_set_get_ctx(ptr)); } -isl::set set::neg() const +isl::set set::add_constraint(isl::constraint constraint) const { - auto res = isl_set_neg(copy()); + auto res = isl_set_add_constraint(copy(), constraint.release()); return manage(res); } -isl::set set::params() const +isl::set set::add_dims(isl::dim type, unsigned int n) const { - auto res = isl_set_params(copy()); + auto res = isl_set_add_dims(copy(), static_cast(type), n); return manage(res); } -int set::plain_cmp(const isl::set &set2) const +isl::basic_set set::affine_hull() const { - auto res = isl_set_plain_cmp(get(), set2.get()); - return res; + auto res = isl_set_affine_hull(copy()); + return manage(res); } -isl::val set::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const +isl::set set::align_params(isl::space model) const { - auto res = isl_set_plain_get_val_if_fixed(get(), static_cast(type), pos); + auto res = isl_set_align_params(copy(), model.release()); return manage(res); } -boolean set::plain_is_disjoint(const isl::set &set2) const +isl::set set::apply(isl::map map) const { - auto res = isl_set_plain_is_disjoint(get(), set2.get()); + auto res = isl_set_apply(copy(), map.release()); return manage(res); } -boolean set::plain_is_empty() const +isl::union_set set::apply(const isl::union_map &umap) const { - auto res = isl_set_plain_is_empty(get()); - return manage(res); + return isl::union_set(*this).apply(umap); } -boolean set::plain_is_equal(const isl::set &set2) const +isl::set set::apply(const isl::basic_map &map) const { - auto res = isl_set_plain_is_equal(get(), set2.get()); - return manage(res); + return this->apply(isl::map(map)); } -boolean set::plain_is_universe() const +isl::pw_multi_aff set::as_pw_multi_aff() const { - auto res = isl_set_plain_is_universe(get()); + auto res = isl_set_as_pw_multi_aff(copy()); return manage(res); } -isl::basic_set set::plain_unshifted_simple_hull() const +isl::set set::as_set() const { - auto res = isl_set_plain_unshifted_simple_hull(copy()); - return manage(res); + return isl::union_set(*this).as_set(); } -isl::basic_set set::polyhedral_hull() const +isl::basic_set_list set::basic_set_list() const { - auto res = isl_set_polyhedral_hull(copy()); + auto res = isl_set_get_basic_set_list(get()); return manage(res); } -isl::set set::preimage(isl::multi_aff ma) const +isl::basic_set_list set::get_basic_set_list() const { - auto res = isl_set_preimage_multi_aff(copy(), ma.release()); - return manage(res); + return basic_set_list(); } -isl::set set::preimage(isl::multi_pw_aff mpa) const +isl::set set::bind(isl::multi_id tuple) const { - auto res = isl_set_preimage_multi_pw_aff(copy(), mpa.release()); + auto res = isl_set_bind(copy(), tuple.release()); return manage(res); } -isl::set set::preimage(isl::pw_multi_aff pma) const +isl::set set::coalesce() const { - auto res = isl_set_preimage_pw_multi_aff(copy(), pma.release()); + auto res = isl_set_coalesce(copy()); return manage(res); } -isl::set set::product(isl::set set2) const +isl::set set::complement() const { - auto res = isl_set_product(copy(), set2.release()); + auto res = isl_set_complement(copy()); return manage(res); } -isl::map set::project_onto_map(isl::dim type, unsigned int first, unsigned int n) const +isl::union_set set::compute_divs() const { - auto res = isl_set_project_onto_map(copy(), static_cast(type), first, n); - return manage(res); + return isl::union_set(*this).compute_divs(); } -isl::set set::project_out(isl::dim type, unsigned int first, unsigned int n) const +boolean set::contains(const isl::space &space) const { - auto res = isl_set_project_out(copy(), static_cast(type), first, n); - return manage(res); + return isl::union_set(*this).contains(space); } -isl::set set::project_out_all_params() const +isl::basic_set set::convex_hull() const { - auto res = isl_set_project_out_all_params(copy()); + auto res = isl_set_convex_hull(copy()); return manage(res); } -isl::set set::project_out_param(isl::id id) const +isl::set set::detect_equalities() const { - auto res = isl_set_project_out_param_id(copy(), id.release()); + auto res = isl_set_detect_equalities(copy()); return manage(res); } -isl::set set::project_out_param(isl::id_list list) const +class size set::dim(isl::dim type) const { - auto res = isl_set_project_out_param_id_list(copy(), list.release()); + auto res = isl_set_dim(get(), static_cast(type)); return manage(res); } -isl::set set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const +boolean set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const { - auto res = isl_set_remove_dims(copy(), static_cast(type), first, n); + auto res = isl_set_dim_has_any_lower_bound(get(), static_cast(type), pos); return manage(res); } -isl::set set::remove_divs() const +isl::id set::dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_set_remove_divs(copy()); + auto res = isl_set_get_dim_id(get(), static_cast(type), pos); return manage(res); } -isl::set set::remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::id set::get_dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_set_remove_divs_involving_dims(copy(), static_cast(type), first, n); - return manage(res); + return dim_id(type, pos); } -isl::set set::remove_redundancies() const +isl::pw_aff set::dim_max(int pos) const { - auto res = isl_set_remove_redundancies(copy()); + auto res = isl_set_dim_max(copy(), pos); return manage(res); } -isl::set set::remove_unknown_divs() const +isl::val set::dim_max_val(int pos) const { - auto res = isl_set_remove_unknown_divs(copy()); + auto res = isl_set_dim_max_val(copy(), pos); return manage(res); } -isl::set set::reset_space(isl::space space) const +isl::pw_aff set::dim_min(int pos) const { - auto res = isl_set_reset_space(copy(), space.release()); + auto res = isl_set_dim_min(copy(), pos); return manage(res); } -isl::set set::reset_tuple_id() const +isl::val set::dim_min_val(int pos) const { - auto res = isl_set_reset_tuple_id(copy()); + auto res = isl_set_dim_min_val(copy(), pos); return manage(res); } -isl::set set::reset_user() const +std::string set::dim_name(isl::dim type, unsigned int pos) const { - auto res = isl_set_reset_user(copy()); - return manage(res); + auto res = isl_set_get_dim_name(get(), static_cast(type), pos); + std::string tmp(res); + return tmp; } -isl::basic_set set::sample() const +std::string set::get_dim_name(isl::dim type, unsigned int pos) const { - auto res = isl_set_sample(copy()); - return manage(res); + return dim_name(type, pos); } -isl::point set::sample_point() const +isl::set set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_set_sample_point(copy()); + auto res = isl_set_drop_constraints_involving_dims(copy(), static_cast(type), first, n); return manage(res); } -isl::set set::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const +isl::set set::eliminate(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_set_set_dim_id(copy(), static_cast(type), pos, id.release()); + auto res = isl_set_eliminate(copy(), static_cast(type), first, n); return manage(res); } -isl::set set::set_tuple_id(isl::id id) const +isl::set set::empty(isl::space space) { - auto res = isl_set_set_tuple_id(copy(), id.release()); + auto res = isl_set_empty(space.release()); return manage(res); } -isl::set set::set_tuple_name(const std::string &s) const +boolean set::every_set(const std::function &test) const { - auto res = isl_set_set_tuple_name(copy(), s.c_str()); - return manage(res); + return isl::union_set(*this).every_set(test); } -isl::basic_set set::simple_hull() const +isl::set set::extract_set(const isl::space &space) const { - auto res = isl_set_simple_hull(copy()); - return manage(res); + return isl::union_set(*this).extract_set(space); } -int set::size() const +int set::find_dim_by_id(isl::dim type, const isl::id &id) const { - auto res = isl_set_size(get()); + auto res = isl_set_find_dim_by_id(get(), static_cast(type), id.get()); return res; } -isl::basic_set set::solutions() const +int set::find_dim_by_id(isl::dim type, const std::string &id) const { - auto res = isl_set_solutions(copy()); - return manage(res); + return this->find_dim_by_id(type, isl::id(ctx(), id)); } -isl::set set::split_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::set set::fix_si(isl::dim type, unsigned int pos, int value) const { - auto res = isl_set_split_dims(copy(), static_cast(type), first, n); + auto res = isl_set_fix_si(copy(), static_cast(type), pos, value); return manage(res); } -isl::set set::subtract(isl::set set2) const +isl::set set::flatten() const { - auto res = isl_set_subtract(copy(), set2.release()); + auto res = isl_set_flatten(copy()); return manage(res); } -isl::set set::sum(isl::set set2) const +stat set::foreach_basic_set(const std::function &fn) const { - auto res = isl_set_sum(copy(), set2.release()); + struct fn_data { + 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); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_set_foreach_basic_set(get(), fn_lambda, &fn_data); return manage(res); } -isl::map set::translation() const +stat set::foreach_point(const std::function &fn) const { - auto res = isl_set_translation(copy()); + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_set_foreach_point(get(), fn_lambda, &fn_data); return manage(res); } -isl_size set::tuple_dim() const +stat set::foreach_set(const std::function &fn) const { - auto res = isl_set_tuple_dim(get()); - return res; + return isl::union_set(*this).foreach_set(fn); } -isl::set set::unbind_params(isl::multi_id tuple) const +isl::set set::gist(isl::set context) const { - auto res = isl_set_unbind_params(copy(), tuple.release()); + auto res = isl_set_gist(copy(), context.release()); return manage(res); } -isl::map set::unbind_params_insert_domain(isl::multi_id domain) const +isl::union_set set::gist(const isl::union_set &context) const { - auto res = isl_set_unbind_params_insert_domain(copy(), domain.release()); - return manage(res); + return isl::union_set(*this).gist(context); } -isl::set set::unite(isl::set set2) const +isl::set set::gist(const isl::basic_set &context) const { - auto res = isl_set_union(copy(), set2.release()); - return manage(res); + return this->gist(isl::set(context)); } -isl::set set::universe(isl::space space) +isl::set set::gist(const isl::point &context) const { - auto res = isl_set_universe(space.release()); - return manage(res); + return this->gist(isl::set(context)); } -isl::basic_set set::unshifted_simple_hull() const +isl::set set::gist_params(isl::set context) const { - auto res = isl_set_unshifted_simple_hull(copy()); + auto res = isl_set_gist_params(copy(), context.release()); return manage(res); } -isl::basic_set set::unshifted_simple_hull_from_set_list(isl::set_list list) const +boolean set::has_equal_space(const isl::set &set2) const { - auto res = isl_set_unshifted_simple_hull_from_set_list(copy(), list.release()); + auto res = isl_set_has_equal_space(get(), set2.get()); return manage(res); } -isl::map set::unwrap() const +isl::map set::identity() const { - auto res = isl_set_unwrap(copy()); + auto res = isl_set_identity(copy()); return manage(res); } -isl::set set::upper_bound(isl::multi_pw_aff upper) const +isl::union_pw_multi_aff set::identity_union_pw_multi_aff() const { - auto res = isl_set_upper_bound_multi_pw_aff(copy(), upper.release()); - return manage(res); + return isl::union_set(*this).identity_union_pw_multi_aff(); } -isl::set set::upper_bound(isl::multi_val upper) const +isl::pw_aff set::indicator_function() const { - auto res = isl_set_upper_bound_multi_val(copy(), upper.release()); + auto res = isl_set_indicator_function(copy()); return manage(res); } -isl::set set::upper_bound_si(isl::dim type, unsigned int pos, int value) const +isl::set set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const { - auto res = isl_set_upper_bound_si(copy(), static_cast(type), pos, value); + auto res = isl_set_insert_dims(copy(), static_cast(type), pos, n); return manage(res); } -isl::set set::upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const +isl::map set::insert_domain(isl::space domain) const { - auto res = isl_set_upper_bound_val(copy(), static_cast(type), pos, value.release()); + auto res = isl_set_insert_domain(copy(), domain.release()); return manage(res); } -isl::map set::wrapped_domain_map() const +isl::set set::intersect(isl::set set2) const { - auto res = isl_set_wrapped_domain_map(copy()); + auto res = isl_set_intersect(copy(), set2.release()); 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) +isl::union_set set::intersect(const isl::union_set &uset2) const { - ptr = obj.copy(); -} - - -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; -} - -set_list::~set_list() { - if (ptr) - isl_set_list_free(ptr); -} - -__isl_give isl_set_list *set_list::copy() const & { - return isl_set_list_copy(ptr); -} - -__isl_keep isl_set_list *set_list::get() const { - return ptr; -} - -__isl_give isl_set_list *set_list::release() { - isl_set_list *tmp = ptr; - ptr = nullptr; - return tmp; -} - -bool set_list::is_null() const { - return ptr == nullptr; -} - - -isl::ctx set_list::ctx() const { - return isl::ctx(isl_set_list_get_ctx(ptr)); -} - -void set_list::dump() const { - isl_set_list_dump(get()); + return isl::union_set(*this).intersect(uset2); } - -isl::set_list set_list::add(isl::set el) const +isl::set set::intersect(const isl::basic_set &set2) const { - auto res = isl_set_list_add(copy(), el.release()); - return manage(res); + return this->intersect(isl::set(set2)); } -isl::set_list set_list::alloc(isl::ctx ctx, int n) +isl::set set::intersect(const isl::point &set2) const { - auto res = isl_set_list_alloc(ctx.release(), n); - return manage(res); + return this->intersect(isl::set(set2)); } -isl::set_list set_list::clear() const +isl::set set::intersect_params(isl::set params) const { - auto res = isl_set_list_clear(copy()); + auto res = isl_set_intersect_params(copy(), params.release()); return manage(res); } -isl::set_list set_list::concat(isl::set_list list2) const +boolean set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const { - auto res = isl_set_list_concat(copy(), list2.release()); + auto res = isl_set_involves_dims(get(), static_cast(type), first, n); return manage(res); } -isl::set_list set_list::drop(unsigned int first, unsigned int n) const +boolean set::involves_locals() const { - auto res = isl_set_list_drop(copy(), first, n); + auto res = isl_set_involves_locals(get()); return manage(res); } -stat set_list::foreach(const std::function &fn) const +boolean set::is_bounded() 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_is_bounded(get()); return manage(res); } -isl::set_list set_list::from_set(isl::set el) +boolean set::is_disjoint(const isl::set &set2) const { - auto res = isl_set_list_from_set(el.release()); + auto res = isl_set_is_disjoint(get(), set2.get()); return manage(res); } -isl::set set_list::get_at(int index) const +boolean set::is_disjoint(const isl::union_set &uset2) const { - auto res = isl_set_list_get_at(get(), index); - return manage(res); + return isl::union_set(*this).is_disjoint(uset2); } -isl::set set_list::get_set(int index) const +boolean set::is_disjoint(const isl::basic_set &set2) const { - auto res = isl_set_list_get_set(get(), index); - return manage(res); + return this->is_disjoint(isl::set(set2)); } -isl::set_list set_list::insert(unsigned int pos, isl::set el) const +boolean set::is_disjoint(const isl::point &set2) const { - auto res = isl_set_list_insert(copy(), pos, el.release()); - return manage(res); + return this->is_disjoint(isl::set(set2)); } -isl_size set_list::n_set() const +boolean set::is_empty() const { - auto res = isl_set_list_n_set(get()); - return res; + auto res = isl_set_is_empty(get()); + return manage(res); } -isl::set_list set_list::reverse() const +boolean set::is_equal(const isl::set &set2) const { - auto res = isl_set_list_reverse(copy()); + auto res = isl_set_is_equal(get(), set2.get()); return manage(res); } -isl::set_list set_list::set_set(int index, isl::set el) const +boolean set::is_equal(const isl::union_set &uset2) const { - auto res = isl_set_list_set_set(copy(), index, el.release()); - return manage(res); + return isl::union_set(*this).is_equal(uset2); } -isl_size set_list::size() const +boolean set::is_equal(const isl::basic_set &set2) const { - auto res = isl_set_list_size(get()); - return res; + return this->is_equal(isl::set(set2)); } -isl::set_list set_list::swap(unsigned int pos1, unsigned int pos2) const +boolean set::is_equal(const isl::point &set2) const { - auto res = isl_set_list_swap(copy(), pos1, pos2); - return manage(res); + return this->is_equal(isl::set(set2)); } -isl::set set_list::unite() const +boolean set::is_params() const { - auto res = isl_set_list_union(copy()); + auto res = isl_set_is_params(get()); return manage(res); } -// 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); -} - -space::space() - : ptr(nullptr) {} - -space::space(const space &obj) - : ptr(nullptr) +boolean set::is_singleton() const { - ptr = obj.copy(); + auto res = isl_set_is_singleton(get()); + return manage(res); } - -space::space(__isl_take isl_space *ptr) - : ptr(ptr) {} - -space::space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out) +boolean set::is_strict_subset(const isl::set &set2) const { - auto res = isl_space_alloc(ctx.release(), nparam, n_in, n_out); - ptr = res; + auto res = isl_set_is_strict_subset(get(), set2.get()); + return manage(res); } -space::space(isl::ctx ctx, unsigned int nparam, unsigned int dim) + +boolean set::is_strict_subset(const isl::union_set &uset2) const { - auto res = isl_space_set_alloc(ctx.release(), nparam, dim); - ptr = res; + return isl::union_set(*this).is_strict_subset(uset2); } -space &space::operator=(space obj) { - std::swap(this->ptr, obj.ptr); - return *this; +boolean set::is_strict_subset(const isl::basic_set &set2) const +{ + return this->is_strict_subset(isl::set(set2)); } -space::~space() { - if (ptr) - isl_space_free(ptr); +boolean set::is_strict_subset(const isl::point &set2) const +{ + return this->is_strict_subset(isl::set(set2)); } -__isl_give isl_space *space::copy() const & { - return isl_space_copy(ptr); +boolean set::is_subset(const isl::set &set2) const +{ + auto res = isl_set_is_subset(get(), set2.get()); + return manage(res); } -__isl_keep isl_space *space::get() const { - return ptr; +boolean set::is_subset(const isl::union_set &uset2) const +{ + return isl::union_set(*this).is_subset(uset2); } -__isl_give isl_space *space::release() { - isl_space *tmp = ptr; - ptr = nullptr; - return tmp; +boolean set::is_subset(const isl::basic_set &set2) const +{ + return this->is_subset(isl::set(set2)); } -bool space::is_null() const { - return ptr == nullptr; +boolean set::is_subset(const isl::point &set2) const +{ + return this->is_subset(isl::set(set2)); } - -isl::ctx space::ctx() const { - return isl::ctx(isl_space_get_ctx(ptr)); +boolean set::is_wrapping() const +{ + auto res = isl_set_is_wrapping(get()); + return manage(res); } -void space::dump() const { - isl_space_dump(get()); +boolean 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 +class size set::n_basic_set() const { - auto res = isl_space_domain_factor_range(copy()); + auto res = isl_set_n_basic_set(get()); return manage(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 +class size set::tuple_dim() const { - auto res = isl_space_range_factor_domain(copy()); + auto res = isl_set_tuple_dim(get()); return manage(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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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::ctx term::ctx() const { - return isl::ctx(isl_term_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_size term::dim(isl::dim type) const +isl::set set_list::get_at(int index) const { - auto res = isl_term_dim(get(), static_cast(type)); - return res; + return at(index); } -isl::val term::get_coefficient_val() const +isl::set_list set_list::clear() const { - auto res = isl_term_get_coefficient_val(get()); + auto res = isl_set_list_clear(copy()); return manage(res); } -isl::aff term::get_div(unsigned int pos) const +isl::set_list set_list::concat(isl::set_list list2) const { - auto res = isl_term_get_div(get(), pos); + auto res = isl_set_list_concat(copy(), list2.release()); return manage(res); } -isl_size term::get_exp(isl::dim type, unsigned int pos) const +isl::set_list set_list::drop(unsigned int first, unsigned int n) const { - auto res = isl_term_get_exp(get(), static_cast(type), pos); - return res; + auto res = isl_set_list_drop(copy(), first, n); + return manage(res); } -// implementations for isl::union_access_info -union_access_info manage(__isl_take isl_union_access_info *ptr) { - return union_access_info(ptr); +stat set_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_set_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); } -union_access_info manage_copy(__isl_keep isl_union_access_info *ptr) { - ptr = isl_union_access_info_copy(ptr); - return union_access_info(ptr); + +isl::set_list set_list::insert(unsigned int pos, isl::set el) const +{ + auto res = isl_set_list_insert(copy(), pos, el.release()); + return manage(res); } -union_access_info::union_access_info() +class size set_list::size() const +{ + auto res = isl_set_list_size(get()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const set_list &obj) +{ + char *str = isl_set_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// 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); +} + +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); -} - -__isl_keep isl_union_flow *union_flow::get() const { - return ptr; -} - -__isl_give isl_union_flow *union_flow::release() { - isl_union_flow *tmp = ptr; - ptr = nullptr; - return tmp; -} - -bool union_flow::is_null() const { - return ptr == nullptr; -} - - -isl::ctx union_flow::ctx() const { - return isl::ctx(isl_union_flow_get_ctx(ptr)); + auto res = isl_space_align_params(copy(), space2.release()); + return manage(res); } - -isl::union_map union_flow::get_full_may_dependence() const +isl::space space::curry() const { - auto res = isl_union_flow_get_full_may_dependence(get()); + auto res = isl_space_curry(copy()); return manage(res); } -isl::union_map union_flow::get_full_must_dependence() const +class size space::dim(isl::dim type) const { - auto res = isl_union_flow_get_full_must_dependence(get()); + auto res = isl_space_dim(get(), static_cast(type)); return manage(res); } -isl::union_map union_flow::get_may_dependence() const +isl::id space::dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_union_flow_get_may_dependence(get()); + auto res = isl_space_get_dim_id(get(), static_cast(type), pos); return manage(res); } -isl::union_map union_flow::get_may_no_source() const +isl::id space::get_dim_id(isl::dim type, unsigned int pos) const { - auto res = isl_union_flow_get_may_no_source(get()); - return manage(res); + return dim_id(type, pos); } -isl::union_map union_flow::get_must_dependence() const +isl::space space::domain() const { - auto res = isl_union_flow_get_must_dependence(get()); + auto res = isl_space_domain(copy()); return manage(res); } -isl::union_map union_flow::get_must_no_source() const +isl::multi_aff space::domain_map_multi_aff() const { - auto res = isl_union_flow_get_must_no_source(get()); + auto res = isl_space_domain_map_multi_aff(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::pw_multi_aff space::domain_map_pw_multi_aff() const +{ + auto res = isl_space_domain_map_pw_multi_aff(copy()); + return manage(res); } -union_map::union_map() - : ptr(nullptr) {} - -union_map::union_map(const union_map &obj) - : ptr(nullptr) +isl::id space::domain_tuple_id() const { - ptr = obj.copy(); + auto res = isl_space_get_domain_tuple_id(get()); + return manage(res); } +isl::id space::get_domain_tuple_id() const +{ + return domain_tuple_id(); +} -union_map::union_map(__isl_take isl_union_map *ptr) - : ptr(ptr) {} +isl::space space::drop_dims(isl::dim type, unsigned int first, unsigned int num) const +{ + auto res = isl_space_drop_dims(copy(), static_cast(type), first, num); + return manage(res); +} -union_map::union_map(isl::basic_map bmap) +int space::find_dim_by_id(isl::dim type, const isl::id &id) const { - auto res = isl_union_map_from_basic_map(bmap.release()); - ptr = res; + auto res = isl_space_find_dim_by_id(get(), static_cast(type), id.get()); + return res; } -union_map::union_map(isl::map map) + +int space::find_dim_by_id(isl::dim type, const std::string &id) const { - auto res = isl_union_map_from_map(map.release()); - ptr = res; + return this->find_dim_by_id(type, isl::id(ctx(), id)); } -union_map::union_map(isl::union_pw_multi_aff upma) + +isl::space space::flatten_domain() const { - auto res = isl_union_map_from_union_pw_multi_aff(upma.release()); - ptr = res; + auto res = isl_space_flatten_domain(copy()); + return manage(res); } -union_map::union_map(isl::ctx ctx, const std::string &str) + +isl::space space::flatten_range() const { - auto res = isl_union_map_read_from_str(ctx.release(), str.c_str()); - ptr = res; + auto res = isl_space_flatten_range(copy()); + return manage(res); } -union_map &union_map::operator=(union_map obj) { - std::swap(this->ptr, obj.ptr); - return *this; +boolean space::has_domain_tuple_id() const +{ + auto res = isl_space_has_domain_tuple_id(get()); + return manage(res); } -union_map::~union_map() { - if (ptr) - isl_union_map_free(ptr); +boolean space::has_equal_tuples(const isl::space &space2) const +{ + auto res = isl_space_has_equal_tuples(get(), space2.get()); + return manage(res); } -__isl_give isl_union_map *union_map::copy() const & { - return isl_union_map_copy(ptr); +boolean space::has_range_tuple_id() const +{ + auto res = isl_space_has_range_tuple_id(get()); + return manage(res); } -__isl_keep isl_union_map *union_map::get() const { - return ptr; +boolean space::has_tuple_id(isl::dim type) const +{ + auto res = isl_space_has_tuple_id(get(), static_cast(type)); + return manage(res); } -__isl_give isl_union_map *union_map::release() { - isl_union_map *tmp = ptr; - ptr = nullptr; - return tmp; +boolean space::has_tuple_name(isl::dim type) const +{ + auto res = isl_space_has_tuple_name(get(), static_cast(type)); + return manage(res); } -bool union_map::is_null() const { - return ptr == nullptr; +isl::multi_aff space::identity_multi_aff_on_domain() const +{ + auto res = isl_space_identity_multi_aff_on_domain(copy()); + return manage(res); } +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()); +boolean space::is_equal(const isl::space &space2) const +{ + auto res = isl_space_is_equal(get(), space2.get()); + return manage(res); } +boolean space::is_params() const +{ + auto res = isl_space_is_params(get()); + return manage(res); +} -isl::union_map union_map::affine_hull() const +boolean space::is_set() const { - auto res = isl_union_map_affine_hull(copy()); + auto res = isl_space_is_set(get()); return manage(res); } -isl::union_map union_map::align_params(isl::space model) const +boolean space::is_wrapping() const { - auto res = isl_union_map_align_params(copy(), model.release()); + auto res = isl_space_is_wrapping(get()); return manage(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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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()); - return manage(res); + 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::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_give isl_union_access_info *union_access_info::copy() const & { + return isl_union_access_info_copy(ptr); } -isl::union_map union_map::intersect_range_factor_range(isl::union_map factor) const -{ - auto res = isl_union_map_intersect_range_factor_range(copy(), factor.release()); - return manage(res); +__isl_keep isl_union_access_info *union_access_info::get() const { + return ptr; } -boolean union_map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const -{ - auto res = isl_union_map_involves_dims(get(), static_cast(type), first, n); - return manage(res); +__isl_give isl_union_access_info *union_access_info::release() { + isl_union_access_info *tmp = ptr; + ptr = nullptr; + return tmp; } -boolean union_map::is_bijective() const -{ - auto res = isl_union_map_is_bijective(get()); - return manage(res); +bool union_access_info::is_null() const { + return ptr == nullptr; } -boolean union_map::is_disjoint(const isl::union_map &umap2) const -{ - auto res = isl_union_map_is_disjoint(get(), umap2.get()); - return manage(res); +isl::ctx union_access_info::ctx() const { + return isl::ctx(isl_union_access_info_get_ctx(ptr)); } -boolean union_map::is_empty() const +isl::union_flow union_access_info::compute_flow() const { - auto res = isl_union_map_is_empty(get()); + auto res = isl_union_access_info_compute_flow(copy()); return manage(res); } -boolean union_map::is_equal(const isl::union_map &umap2) const +isl::union_access_info union_access_info::set_kill(isl::union_map kill) const { - auto res = isl_union_map_is_equal(get(), umap2.get()); + auto res = isl_union_access_info_set_kill(copy(), kill.release()); return manage(res); } -boolean union_map::is_identity() const +isl::union_access_info union_access_info::set_may_source(isl::union_map may_source) const { - auto res = isl_union_map_is_identity(get()); + auto res = isl_union_access_info_set_may_source(copy(), may_source.release()); return manage(res); } -boolean union_map::is_injective() const +isl::union_access_info union_access_info::set_must_source(isl::union_map must_source) const { - auto res = isl_union_map_is_injective(get()); + auto res = isl_union_access_info_set_must_source(copy(), must_source.release()); return manage(res); } -boolean union_map::is_single_valued() const +isl::union_access_info union_access_info::set_schedule(isl::schedule schedule) const { - auto res = isl_union_map_is_single_valued(get()); + auto res = isl_union_access_info_set_schedule(copy(), schedule.release()); return manage(res); } -boolean union_map::is_strict_subset(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_strict_subset(get(), umap2.get()); + auto res = isl_union_access_info_set_schedule_map(copy(), schedule_map.release()); return manage(res); } -boolean union_map::is_subset(const isl::union_map &umap2) const +inline std::ostream &operator<<(std::ostream &os, const union_access_info &obj) { - auto res = isl_union_map_is_subset(get(), umap2.get()); - return manage(res); + char *str = isl_union_access_info_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -boolean union_map::isa_map() const -{ - auto res = isl_union_map_isa_map(get()); - return manage(res); +// implementations for isl::union_flow +union_flow manage(__isl_take isl_union_flow *ptr) { + return union_flow(ptr); } - -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); +union_flow manage_copy(__isl_keep isl_union_flow *ptr) { + ptr = isl_union_flow_copy(ptr); + return union_flow(ptr); } -isl::union_map union_map::lex_ge_union_map(isl::union_map umap2) const +union_flow::union_flow() + : ptr(nullptr) {} + +union_flow::union_flow(const union_flow &obj) + : ptr(nullptr) { - auto res = isl_union_map_lex_ge_union_map(copy(), umap2.release()); - return manage(res); + ptr = obj.copy(); } -isl::union_map union_map::lex_gt_at_multi_union_pw_aff(isl::multi_union_pw_aff mupa) const -{ - auto res = isl_union_map_lex_gt_at_multi_union_pw_aff(copy(), mupa.release()); - 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; } -isl::union_map union_map::lex_gt_union_map(isl::union_map umap2) const -{ - auto res = isl_union_map_lex_gt_union_map(copy(), umap2.release()); - return manage(res); +union_flow::~union_flow() { + if (ptr) + isl_union_flow_free(ptr); } -isl::union_map union_map::lex_le_at_multi_union_pw_aff(isl::multi_union_pw_aff mupa) const -{ - auto res = isl_union_map_lex_le_at_multi_union_pw_aff(copy(), mupa.release()); - return manage(res); +__isl_give isl_union_flow *union_flow::copy() const & { + return isl_union_flow_copy(ptr); } -isl::union_map union_map::lex_le_union_map(isl::union_map umap2) const -{ - auto res = isl_union_map_lex_le_union_map(copy(), umap2.release()); - return manage(res); +__isl_keep isl_union_flow *union_flow::get() const { + return ptr; } -isl::union_map union_map::lex_lt_at_multi_union_pw_aff(isl::multi_union_pw_aff mupa) const -{ - auto res = isl_union_map_lex_lt_at_multi_union_pw_aff(copy(), mupa.release()); - return manage(res); +__isl_give isl_union_flow *union_flow::release() { + isl_union_flow *tmp = ptr; + ptr = nullptr; + return tmp; } -isl::union_map union_map::lex_lt_union_map(isl::union_map umap2) const -{ - auto res = isl_union_map_lex_lt_union_map(copy(), umap2.release()); - return manage(res); +bool union_flow::is_null() const { + return ptr == nullptr; } -isl::union_map union_map::lexmax() const -{ - auto res = isl_union_map_lexmax(copy()); - return manage(res); +isl::ctx union_flow::ctx() const { + return isl::ctx(isl_union_flow_get_ctx(ptr)); } -isl::union_map union_map::lexmin() const +isl::union_map union_flow::full_may_dependence() const { - auto res = isl_union_map_lexmin(copy()); + auto res = isl_union_flow_get_full_may_dependence(get()); return manage(res); } -isl_size union_map::n_map() const +isl::union_map union_flow::get_full_may_dependence() const { - auto res = isl_union_map_n_map(get()); - return res; + return full_may_dependence(); } -isl::set union_map::params() const +isl::union_map union_flow::full_must_dependence() const { - auto res = isl_union_map_params(copy()); + auto res = isl_union_flow_get_full_must_dependence(get()); return manage(res); } -boolean union_map::plain_is_empty() const +isl::union_map union_flow::get_full_must_dependence() const { - auto res = isl_union_map_plain_is_empty(get()); - return manage(res); + return full_must_dependence(); } -boolean union_map::plain_is_injective() const +isl::union_map union_flow::may_dependence() const { - auto res = isl_union_map_plain_is_injective(get()); + auto res = isl_union_flow_get_may_dependence(get()); return manage(res); } -isl::union_map union_map::polyhedral_hull() const +isl::union_map union_flow::get_may_dependence() const { - auto res = isl_union_map_polyhedral_hull(copy()); - return manage(res); + return may_dependence(); } -isl::union_map union_map::preimage_domain(isl::multi_aff ma) const +isl::union_map union_flow::may_no_source() const { - auto res = isl_union_map_preimage_domain_multi_aff(copy(), ma.release()); + auto res = isl_union_flow_get_may_no_source(get()); return manage(res); } -isl::union_map union_map::preimage_domain(isl::multi_pw_aff mpa) const +isl::union_map union_flow::get_may_no_source() const { - auto res = isl_union_map_preimage_domain_multi_pw_aff(copy(), mpa.release()); - return manage(res); + return may_no_source(); } -isl::union_map union_map::preimage_domain(isl::pw_multi_aff pma) const +isl::union_map union_flow::must_dependence() const { - auto res = isl_union_map_preimage_domain_pw_multi_aff(copy(), pma.release()); + auto res = isl_union_flow_get_must_dependence(get()); return manage(res); } -isl::union_map union_map::preimage_domain(isl::union_pw_multi_aff upma) const +isl::union_map union_flow::get_must_dependence() const { - auto res = isl_union_map_preimage_domain_union_pw_multi_aff(copy(), upma.release()); - return manage(res); + return must_dependence(); } -isl::union_map union_map::preimage_range(isl::multi_aff ma) const +isl::union_map union_flow::must_no_source() const { - auto res = isl_union_map_preimage_range_multi_aff(copy(), ma.release()); + auto res = isl_union_flow_get_must_no_source(get()); return manage(res); } -isl::union_map union_map::preimage_range(isl::pw_multi_aff pma) const +isl::union_map union_flow::get_must_no_source() const { - auto res = isl_union_map_preimage_range_pw_multi_aff(copy(), pma.release()); - return manage(res); + return must_no_source(); } -isl::union_map union_map::preimage_range(isl::union_pw_multi_aff upma) const +inline std::ostream &operator<<(std::ostream &os, const union_flow &obj) { - auto res = isl_union_map_preimage_range_union_pw_multi_aff(copy(), upma.release()); - return manage(res); + char *str = isl_union_flow_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -isl::union_map union_map::product(isl::union_map umap2) const -{ - auto res = isl_union_map_product(copy(), umap2.release()); - 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::project_out(isl::dim type, unsigned int first, unsigned int n) const +union_map::union_map() + : ptr(nullptr) {} + +union_map::union_map(const union_map &obj) + : ptr(nullptr) { - auto res = isl_union_map_project_out(copy(), static_cast(type), first, n); - return manage(res); + ptr = obj.copy(); } -isl::union_map union_map::project_out_all_params() 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_project_out_all_params(copy()); - return manage(res); + auto res = isl_union_map_from_basic_map(bmap.release()); + ptr = res; } -isl::union_set union_map::range() const +union_map::union_map(isl::map map) { - auto res = isl_union_map_range(copy()); - return manage(res); + auto res = isl_union_map_from_map(map.release()); + ptr = res; } -isl::union_map union_map::range_curry() const +union_map::union_map(isl::ctx ctx, const std::string &str) { - auto res = isl_union_map_range_curry(copy()); - return manage(res); + auto res = isl_union_map_read_from_str(ctx.release(), str.c_str()); + ptr = res; } -isl::union_map union_map::range_factor_domain() const -{ - auto res = isl_union_map_range_factor_domain(copy()); - return manage(res); +union_map &union_map::operator=(union_map obj) { + std::swap(this->ptr, obj.ptr); + return *this; } -isl::union_map union_map::range_factor_range() const -{ - auto res = isl_union_map_range_factor_range(copy()); - return manage(res); +union_map::~union_map() { + if (ptr) + isl_union_map_free(ptr); } -isl::union_map union_map::range_map() const -{ - auto res = isl_union_map_range_map(copy()); - return manage(res); +__isl_give isl_union_map *union_map::copy() const & { + return isl_union_map_copy(ptr); } -isl::union_map union_map::range_product(isl::union_map umap2) const -{ - auto res = isl_union_map_range_product(copy(), umap2.release()); - return manage(res); +__isl_keep isl_union_map *union_map::get() const { + return ptr; } -isl::union_map union_map::range_reverse() const -{ - auto res = isl_union_map_range_reverse(copy()); - 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::remove_divs() const -{ - auto res = isl_union_map_remove_divs(copy()); - return manage(res); +bool union_map::is_null() const { + return ptr == nullptr; } -isl::union_map union_map::remove_redundancies() const -{ - auto res = isl_union_map_remove_redundancies(copy()); - return manage(res); +isl::ctx union_map::ctx() const { + return isl::ctx(isl_union_map_get_ctx(ptr)); } -isl::union_map union_map::reset_user() const +isl::union_map union_map::affine_hull() const { - auto res = isl_union_map_reset_user(copy()); + auto res = isl_union_map_affine_hull(copy()); return manage(res); } -isl::union_map union_map::reverse() const +isl::union_map union_map::apply_domain(isl::union_map umap2) const { - auto res = isl_union_map_reverse(copy()); + auto res = isl_union_map_apply_domain(copy(), umap2.release()); return manage(res); } -isl::basic_map union_map::sample() const +isl::union_map union_map::apply_range(isl::union_map umap2) const { - auto res = isl_union_map_sample(copy()); + auto res = isl_union_map_apply_range(copy(), umap2.release()); return manage(res); } -isl::union_map union_map::simple_hull() const +isl::map union_map::as_map() const { - auto res = isl_union_map_simple_hull(copy()); + auto res = isl_union_map_as_map(copy()); return manage(res); } -isl::union_map union_map::subtract(isl::union_map umap2) const +isl::multi_union_pw_aff union_map::as_multi_union_pw_aff() const { - auto res = isl_union_map_subtract(copy(), umap2.release()); + auto res = isl_union_map_as_multi_union_pw_aff(copy()); return manage(res); } -isl::union_map union_map::subtract_domain(isl::union_set dom) const +isl::union_pw_multi_aff union_map::as_union_pw_multi_aff() const { - auto res = isl_union_map_subtract_domain(copy(), dom.release()); + auto res = isl_union_map_as_union_pw_multi_aff(copy()); return manage(res); } -isl::union_map union_map::subtract_range(isl::union_set dom) const +isl::union_set union_map::bind_range(isl::multi_id tuple) const { - auto res = isl_union_map_subtract_range(copy(), dom.release()); + auto res = isl_union_map_bind_range(copy(), tuple.release()); return manage(res); } -isl::union_map union_map::uncurry() const +isl::union_map union_map::coalesce() const { - auto res = isl_union_map_uncurry(copy()); + auto res = isl_union_map_coalesce(copy()); return manage(res); } -isl::union_map union_map::unite(isl::union_map umap2) const +isl::union_map union_map::compute_divs() const { - auto res = isl_union_map_union(copy(), umap2.release()); + auto res = isl_union_map_compute_divs(copy()); return manage(res); } -isl::union_map union_map::universe() const +isl::union_map union_map::curry() const { - auto res = isl_union_map_universe(copy()); + auto res = isl_union_map_curry(copy()); return manage(res); } -isl::union_set union_map::wrap() const +isl::union_set union_map::deltas() const { - auto res = isl_union_map_wrap(copy()); + auto res = isl_union_map_deltas(copy()); return manage(res); } -isl::union_map union_map::zip() const +isl::union_map union_map::detect_equalities() const { - auto res = isl_union_map_zip(copy()); + auto res = isl_union_map_detect_equalities(copy()); 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); +isl::union_set union_map::domain() const +{ + auto res = isl_union_map_domain(copy()); + return manage(res); } -union_map_list::union_map_list() - : ptr(nullptr) {} - -union_map_list::union_map_list(const union_map_list &obj) - : ptr(nullptr) +isl::union_map union_map::domain_factor_domain() const { - ptr = obj.copy(); + auto res = isl_union_map_domain_factor_domain(copy()); + return manage(res); } - -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; +isl::union_map union_map::domain_factor_range() const +{ + auto res = isl_union_map_domain_factor_range(copy()); + return manage(res); } -union_map_list::~union_map_list() { - if (ptr) - isl_union_map_list_free(ptr); +isl::union_map union_map::domain_map() const +{ + auto res = isl_union_map_domain_map(copy()); + return manage(res); } -__isl_give isl_union_map_list *union_map_list::copy() const & { - return isl_union_map_list_copy(ptr); +isl::union_pw_multi_aff union_map::domain_map_union_pw_multi_aff() const +{ + auto res = isl_union_map_domain_map_union_pw_multi_aff(copy()); + return manage(res); } -__isl_keep isl_union_map_list *union_map_list::get() const { - return ptr; +isl::union_map union_map::domain_product(isl::union_map umap2) const +{ + auto res = isl_union_map_domain_product(copy(), umap2.release()); + return manage(res); } -__isl_give isl_union_map_list *union_map_list::release() { - isl_union_map_list *tmp = ptr; - ptr = nullptr; - return tmp; +isl::union_map union_map::empty(isl::ctx ctx) +{ + auto res = isl_union_map_empty_ctx(ctx.release()); + return manage(res); } -bool union_map_list::is_null() const { - return ptr == nullptr; +isl::union_map union_map::eq_at(isl::multi_union_pw_aff mupa) const +{ + auto res = isl_union_map_eq_at_multi_union_pw_aff(copy(), mupa.release()); + return manage(res); } - -isl::ctx union_map_list::ctx() const { - return isl::ctx(isl_union_map_list_get_ctx(ptr)); +boolean union_map::every_map(const std::function &test) const +{ + struct test_data { + std::function func; + } test_data = { test }; + auto test_lambda = [](isl_map *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage_copy(arg_0)); + return ret.release(); + }; + auto res = isl_union_map_every_map(get(), test_lambda, &test_data); + return manage(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 +stat 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; + } 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; - auto res = isl_union_map_list_foreach(get(), fn_lambda, &fn_data); + auto res = isl_union_map_foreach_map(get(), fn_lambda, &fn_data); return manage(res); } -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 +boolean union_map::is_bijective() const { - auto res = isl_union_pw_aff_add_pw_aff(copy(), pa.release()); + auto res = isl_union_map_is_bijective(get()); return manage(res); } -isl::union_pw_aff union_pw_aff::aff_on_domain(isl::union_set domain, isl::aff aff) +boolean union_map::is_disjoint(const isl::union_map &umap2) const { - auto res = isl_union_pw_aff_aff_on_domain(domain.release(), aff.release()); + auto res = isl_union_map_is_disjoint(get(), umap2.get()); return manage(res); } -isl::union_pw_aff union_pw_aff::align_params(isl::space model) const +boolean union_map::is_empty() const { - auto res = isl_union_pw_aff_align_params(copy(), model.release()); + auto res = isl_union_map_is_empty(get()); return manage(res); } -isl::union_set union_pw_aff::bind(isl::id id) const +boolean union_map::is_equal(const isl::union_map &umap2) const { - auto res = isl_union_pw_aff_bind_id(copy(), id.release()); + auto res = isl_union_map_is_equal(get(), umap2.get()); return manage(res); } -isl::union_pw_aff union_pw_aff::coalesce() const +boolean union_map::is_injective() const { - auto res = isl_union_pw_aff_coalesce(copy()); + auto res = isl_union_map_is_injective(get()); return manage(res); } -isl_size union_pw_aff::dim(isl::dim type) const +boolean union_map::is_single_valued() const { - auto res = isl_union_pw_aff_dim(get(), static_cast(type)); - return res; + auto res = isl_union_map_is_single_valued(get()); + return manage(res); } -isl::union_set union_pw_aff::domain() const +boolean union_map::is_strict_subset(const isl::union_map &umap2) const { - auto res = isl_union_pw_aff_domain(copy()); + auto res = isl_union_map_is_strict_subset(get(), umap2.get()); return manage(res); } -isl::union_pw_aff union_pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +boolean union_map::is_subset(const isl::union_map &umap2) const { - auto res = isl_union_pw_aff_drop_dims(copy(), static_cast(type), first, n); + auto res = isl_union_map_is_subset(get(), umap2.get()); return manage(res); } -isl::union_pw_aff union_pw_aff::empty(isl::space space) +boolean union_map::isa_map() const { - auto res = isl_union_pw_aff_empty(space.release()); + auto res = isl_union_map_isa_map(get()); return manage(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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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_list &union_pw_aff_list::operator=(union_pw_aff_list obj) { +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) +{ + 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) +class 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; +stat union_pw_aff::foreach_pw_aff(const std::function &fn) const +{ + struct fn_data { + 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); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_union_pw_aff_foreach_pw_aff(get(), fn_lambda, &fn_data); + return manage(res); } -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)); +boolean 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 +boolean 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 +boolean 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 +boolean 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) +boolean 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) +boolean 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 +class 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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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 +stat 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; + } 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; - auto res = isl_union_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data); + auto res = isl_union_pw_aff_list_foreach(get(), fn_lambda, &fn_data); return manage(res); } -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 +class size union_pw_aff_list::size() const { - auto res = isl_union_pw_multi_aff_list_get_at(get(), index); + auto res = isl_union_pw_aff_list_size(get()); return manage(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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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::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::add(isl::union_pw_qpolynomial upwqp2) const +isl::union_pw_multi_aff union_pw_multi_aff::add(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_add(copy(), upwqp2.release()); + auto res = isl_union_pw_multi_aff_add(copy(), upma2.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::add_pw_qpolynomial(isl::pw_qpolynomial pwqp) 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_add_pw_qpolynomial(copy(), pwqp.release()); + auto res = isl_union_pw_multi_aff_add_pw_multi_aff(copy(), pma.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::align_params(isl::space model) const +isl::union_pw_multi_aff union_pw_multi_aff::apply(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_apply_union_pw_multi_aff(copy(), upma2.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::coalesce() const +isl::multi_union_pw_aff union_pw_multi_aff::as_multi_union_pw_aff() const { - auto res = isl_union_pw_qpolynomial_coalesce(copy()); + auto res = isl_union_pw_multi_aff_as_multi_union_pw_aff(copy()); 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::pw_multi_aff union_pw_multi_aff::as_pw_multi_aff() const { - auto res = isl_union_pw_qpolynomial_domain(copy()); + auto res = isl_union_pw_multi_aff_as_pw_multi_aff(copy()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::drop_dims(isl::dim type, unsigned int first, unsigned int n) const +isl::union_map union_pw_multi_aff::as_union_map() const { - auto res = isl_union_pw_qpolynomial_drop_dims(copy(), static_cast(type), first, n); + auto res = isl_union_pw_multi_aff_as_union_map(copy()); return manage(res); } -isl::val union_pw_qpolynomial::eval(isl::point pnt) const +isl::union_pw_multi_aff union_pw_multi_aff::coalesce() const { - auto res = isl_union_pw_qpolynomial_eval(copy(), pnt.release()); + auto res = isl_union_pw_multi_aff_coalesce(copy()); return manage(res); } -isl::pw_qpolynomial union_pw_qpolynomial::extract_pw_qpolynomial(isl::space space) const +isl::union_set union_pw_multi_aff::domain() const { - auto res = isl_union_pw_qpolynomial_extract_pw_qpolynomial(get(), space.release()); + auto res = isl_union_pw_multi_aff_domain(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::empty(isl::space space) { - 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_empty(space.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::from_pw_qpolynomial(isl::pw_qpolynomial pwqp) +isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::ctx ctx) { - auto res = isl_union_pw_qpolynomial_from_pw_qpolynomial(pwqp.release()); + auto res = isl_union_pw_multi_aff_empty_ctx(ctx.release()); return manage(res); } -isl::pw_qpolynomial_list union_pw_qpolynomial::get_pw_qpolynomial_list() const +isl::pw_multi_aff union_pw_multi_aff::extract_pw_multi_aff(isl::space space) const { - auto res = isl_union_pw_qpolynomial_get_pw_qpolynomial_list(get()); + auto res = isl_union_pw_multi_aff_extract_pw_multi_aff(get(), space.release()); return manage(res); } -isl::space union_pw_qpolynomial::get_space() 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_get_space(get()); + auto res = isl_union_pw_multi_aff_flat_range_product(copy(), upma2.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::gist(isl::union_set context) const +isl::union_pw_multi_aff union_pw_multi_aff::gist(isl::union_set context) const { - auto res = isl_union_pw_qpolynomial_gist(copy(), context.release()); + auto res = isl_union_pw_multi_aff_gist(copy(), context.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::intersect_domain(isl::space space) const { - auto res = isl_union_pw_qpolynomial_gist_params(copy(), context.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(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(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_space(isl::space space) 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_space(copy(), space.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_union_set(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_union_set(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_domain_wrapped_domain(isl::union_set uset) const +isl::union_pw_multi_aff union_pw_multi_aff::intersect_params(isl::set set) const { - auto res = isl_union_pw_qpolynomial_intersect_domain_wrapped_domain(copy(), uset.release()); + auto res = isl_union_pw_multi_aff_intersect_params(copy(), set.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::intersect_domain_wrapped_range(isl::union_set uset) const +boolean union_pw_multi_aff::involves_locals() const { - auto res = isl_union_pw_qpolynomial_intersect_domain_wrapped_range(copy(), uset.release()); + auto res = isl_union_pw_multi_aff_involves_locals(get()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::intersect_params(isl::set set) const +boolean union_pw_multi_aff::isa_pw_multi_aff() const { - auto res = isl_union_pw_qpolynomial_intersect_params(copy(), set.release()); + auto res = isl_union_pw_multi_aff_isa_pw_multi_aff(get()); return manage(res); } -boolean union_pw_qpolynomial::involves_nan() const +boolean union_pw_multi_aff::plain_is_empty() const { - auto res = isl_union_pw_qpolynomial_involves_nan(get()); + auto res = isl_union_pw_multi_aff_plain_is_empty(get()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::mul(isl::union_pw_qpolynomial upwqp2) 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_mul(copy(), upwqp2.release()); + auto res = isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(copy(), upma2.release()); return manage(res); } -isl_size union_pw_qpolynomial::n_pw_qpolynomial() const -{ - auto res = isl_union_pw_qpolynomial_n_pw_qpolynomial(get()); - return res; -} - -isl::union_pw_qpolynomial union_pw_qpolynomial::neg() const +isl::union_pw_multi_aff union_pw_multi_aff::pullback(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_neg(copy()); + auto res = isl_union_pw_multi_aff_pullback_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::pw_multi_aff_list union_pw_multi_aff::pw_multi_aff_list() const { - auto res = isl_union_pw_qpolynomial_plain_is_equal(get(), upwqp2.get()); + auto res = isl_union_pw_multi_aff_get_pw_multi_aff_list(get()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::reset_user() const +isl::pw_multi_aff_list union_pw_multi_aff::get_pw_multi_aff_list() const { - auto res = isl_union_pw_qpolynomial_reset_user(copy()); - return manage(res); + return pw_multi_aff_list(); } -isl::union_pw_qpolynomial union_pw_qpolynomial::scale_down_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_down_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::scale_val(isl::val v) const +isl::union_pw_multi_aff union_pw_multi_aff::range_factor_range() const { - auto res = isl_union_pw_qpolynomial_scale_val(copy(), v.release()); + auto res = isl_union_pw_multi_aff_range_factor_range(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_product(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_sub(copy(), upwqp2.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(isl::union_set uset) const +isl::space union_pw_multi_aff::space() const { - auto res = isl_union_pw_qpolynomial_subtract_domain(copy(), uset.release()); + auto res = isl_union_pw_multi_aff_get_space(get()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::subtract_domain_space(isl::space space) const +isl::space union_pw_multi_aff::get_space() const { - auto res = isl_union_pw_qpolynomial_subtract_domain_space(copy(), space.release()); - return manage(res); + return space(); } -isl::union_pw_qpolynomial union_pw_qpolynomial::subtract_domain_union_set(isl::union_set uset) const +isl::union_pw_multi_aff union_pw_multi_aff::sub(isl::union_pw_multi_aff upma2) const { - auto res = isl_union_pw_qpolynomial_subtract_domain_union_set(copy(), uset.release()); + auto res = isl_union_pw_multi_aff_sub(copy(), upma2.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::to_polynomial(int sign) const +isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::space space) const { - auto res = isl_union_pw_qpolynomial_to_polynomial(copy(), sign); + auto res = isl_union_pw_multi_aff_subtract_domain_space(copy(), space.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::union_set uset) const { - auto res = isl_union_pw_qpolynomial_zero(space.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_ctx(isl::ctx ctx) +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_ctx(ctx.release()); + auto res = isl_union_pw_multi_aff_union_add(copy(), upma2.release()); return manage(res); } -isl::union_pw_qpolynomial union_pw_qpolynomial::zero_space(isl::space space) +inline std::ostream &operator<<(std::ostream &os, const union_pw_multi_aff &obj) { - auto res = isl_union_pw_qpolynomial_zero_space(space.release()); - return manage(res); + char *str = isl_union_pw_multi_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } // implementations for isl::union_set @@ -19648,7 +21885,6 @@ ptr = obj.copy(); } - union_set::union_set(__isl_take isl_union_set *ptr) : ptr(ptr) {} @@ -19657,16 +21893,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,49 +21940,37 @@ 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); } @@ -19759,15 +21986,23 @@ return manage(res); } -isl_size union_set::dim(isl::dim type) const +isl::union_set union_set::empty(isl::ctx ctx) { - auto res = isl_union_set_dim(get(), static_cast(type)); - return res; + auto res = isl_union_set_empty_ctx(ctx.release()); + return manage(res); } -isl::union_set union_set::empty(isl::ctx ctx) +boolean union_set::every_set(const std::function &test) const { - auto res = isl_union_set_empty_ctx(ctx.release()); + struct test_data { + std::function func; + } test_data = { test }; + auto test_lambda = [](isl_set *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage_copy(arg_0)); + return ret.release(); + }; + auto res = isl_union_set_every_set(get(), test_lambda, &test_data); return manage(res); } @@ -19777,58 +22012,34 @@ return manage(res); } -stat union_set::foreach_point(const std::function &fn) const +stat union_set::foreach_point(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; auto res = isl_union_set_foreach_point(get(), fn_lambda, &fn_data); return manage(res); } -stat union_set::foreach_set(const std::function &fn) const +stat union_set::foreach_set(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; 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); -} - isl::union_set union_set::gist(isl::union_set context) const { auto res = isl_union_set_gist(copy(), context.release()); @@ -19883,12 +22094,6 @@ return manage(res); } -boolean union_set::is_params() const -{ - auto res = isl_union_set_is_params(get()); - return manage(res); -} - boolean union_set::is_strict_subset(const isl::union_set &uset2) const { auto res = isl_union_set_is_strict_subset(get(), uset2.get()); @@ -19907,30 +22112,6 @@ 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); -} - isl::union_set union_set::lexmax() const { auto res = isl_union_set_lexmax(copy()); @@ -19943,18 +22124,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 +22154,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 +22212,16 @@ 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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } // implementations for isl::union_set_list @@ -20093,10 +22242,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 +22291,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,78 +22330,42 @@ return manage(res); } -stat union_set_list::foreach(const std::function &fn) const +stat union_set_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function func; + } 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; 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); -} - isl::union_set_list union_set_list::insert(unsigned int pos, isl::union_set el) const { auto res = isl_union_set_list_insert(copy(), pos, el.release()); 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 +class 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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } // implementations for isl::val @@ -20258,7 +22386,6 @@ ptr = obj.copy(); } - val::val(__isl_take isl_val *ptr) : ptr(ptr) {} @@ -20267,6 +22394,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,16 +22429,10 @@ 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()); @@ -20323,16 +22445,20 @@ return manage(res); } +boolean val::abs_eq(long v2) const +{ + return this->abs_eq(isl::val(ctx(), v2)); +} + isl::val val::add(isl::val v2) const { auto res = isl_val_add(copy(), v2.release()); 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,16 +22473,26 @@ 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 @@ -20365,10 +22501,9 @@ return manage(res); } -boolean val::eq_si(long i) const +boolean 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,22 +22518,20 @@ 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 +boolean val::ge(const isl::val &v2) const { - auto res = isl_val_get_hash(get()); - return res; + auto res = isl_val_ge(get(), v2.get()); + return manage(res); } -long val::get_num_si() const +boolean 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 @@ -20407,10 +22540,9 @@ return manage(res); } -boolean val::gt_si(long i) const +boolean 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) @@ -20437,6 +22569,11 @@ return manage(res); } +boolean val::is_divisible_by(long v2) const +{ + return this->is_divisible_by(isl::val(ctx(), v2)); +} + boolean val::is_infty() const { auto res = isl_val_is_infty(get()); @@ -20515,46 +22652,64 @@ return manage(res); } +boolean val::le(long v2) const +{ + return this->le(isl::val(ctx(), v2)); +} + boolean val::lt(const isl::val &v2) const { auto res = isl_val_lt(get(), v2.get()); return manage(res); } +boolean val::lt(long v2) const +{ + return this->lt(isl::val(ctx(), v2)); +} + isl::val val::max(isl::val v2) const { auto res = isl_val_max(copy(), v2.release()); 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) @@ -20569,6 +22724,11 @@ return manage(res); } +boolean val::ne(long v2) const +{ + return this->ne(isl::val(ctx(), v2)); +} + isl::val val::neg() const { auto res = isl_val_neg(copy()); @@ -20587,6 +22747,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 +22770,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 +22782,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 +22811,18 @@ return manage(res); } +inline std::ostream &operator<<(std::ostream &os, const val &obj) +{ + char *str = isl_val_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + 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 +22841,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 +22890,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,279 +22934,48 @@ return manage(res); } -stat val_list::foreach(const std::function &fn) const +stat val_list::foreach(const std::function &fn) const { struct fn_data { - const std::function *func; - } fn_data = { &fn }; + std::function func; + } 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)); + auto ret = (data->func)(manage(arg_0)); return ret.release(); }; 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); -} - isl::val_list val_list::insert(unsigned int pos, isl::val el) const { auto res = isl_val_list_insert(copy(), pos, el.release()); 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 +class size val_list::size() const { auto res = isl_val_list_size(get()); - 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()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; } -} // namespace noexceptions } // namespace isl #endif /* ISL_CPP_CHECKED */ 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); } @@ -56,8 +56,12 @@ assert(FromSpace1.is_set()); assert(FromSpace2.is_set()); - unsigned Dims1 = FromSpace1.dim(isl::dim::set); - unsigned Dims2 = FromSpace2.dim(isl::dim::set); + isl::size Dim = FromSpace1.dim(isl::dim::set); + IslAssertNoError(Dim); + unsigned Dims1 = static_cast(Dim); + Dim = FromSpace2.dim(isl::dim::set); + IslAssertNoError(Dim); + unsigned Dims2 = static_cast(Dim); isl::space FromSpace = FromSpace1.map_from_domain_and_range(FromSpace2).wrap(); @@ -160,14 +164,15 @@ return Result; } -isl_size polly::getNumScatterDims(const isl::union_map &Schedule) { +unsigned polly::getNumScatterDims(const isl::union_map &Schedule) { isl_size Dims = 0; for (isl::map Map : Schedule.get_map_list()) { if (Map.is_null()) continue; - Dims = std::max(Dims, Map.range_tuple_dim()); + Dims = std::max(Dims, Map.range_tuple_dim().release()); } + assert(Dims >= 0); return Dims; } @@ -214,7 +219,9 @@ } isl::set polly::shiftDim(isl::set Set, int Pos, int Amount) { - int NumDims = Set.tuple_dim(); + isl::size Dim = Set.tuple_dim(); + IslAssertNoError(Dim); + int NumDims = static_cast(Dim); if (Pos < 0) Pos = NumDims + Pos; assert(Pos < NumDims && "Dimension index must be in range"); @@ -235,7 +242,9 @@ } isl::map polly::shiftDim(isl::map Map, isl::dim Dim, int Pos, int Amount) { - int NumDims = Map.dim(Dim); + isl::size MapDim = Map.dim(Dim); + IslAssertNoError(MapDim); + int NumDims = static_cast(MapDim); if (Pos < 0) Pos = NumDims + Pos; assert(Pos < NumDims && "Dimension index must be in range"); @@ -449,16 +458,27 @@ isl::space DomainSpace = Space.domain(); if (DomainSpace.is_null()) return {}; - unsigned DomainDims = DomainSpace.dim(isl::dim::set); + isl::size Dim = DomainSpace.dim(isl::dim::set); + if (Dim.is_error()) + return {}; + unsigned DomainDims = static_cast(Dim); + isl::space RangeSpace = Space.range().unwrap(); isl::space Range1Space = RangeSpace.domain(); if (Range1Space.is_null()) return {}; - unsigned Range1Dims = Range1Space.dim(isl::dim::set); + Dim = Range1Space.dim(isl::dim::set); + if (Dim.is_error()) + return {}; + unsigned Range1Dims = static_cast(Dim); + isl::space Range2Space = RangeSpace.range(); if (Range2Space.is_null()) return {}; - unsigned Range2Dims = Range2Space.dim(isl::dim::set); + Dim = Range2Space.dim(isl::dim::set); + if (Dim.is_error()) + return {}; + unsigned Range2Dims = static_cast(Dim); isl::space OutputSpace = DomainSpace.map_from_domain_and_range(Range1Space) @@ -606,17 +626,23 @@ if (A.is_null() || B.is_null()) return 0; - unsigned ALen = A.dim(isl::dim::set); - unsigned BLen = B.dim(isl::dim::set); + isl::size Dim = A.dim(isl::dim::set); + if (Dim.is_error()) + return 0; + unsigned ALen = static_cast(Dim); + Dim = B.dim(isl::dim::set); + if (Dim.is_error()) + return 0; + unsigned BLen = static_cast(Dim); unsigned Len = std::min(ALen, BLen); for (unsigned i = 0; i < Len; i += 1) { isl::basic_set ADim = - A.project_out(isl::dim::param, 0, A.dim(isl::dim::param)) + A.project_out(isl::dim::param, 0, A.dim(isl::dim::param).release()) .project_out(isl::dim::set, i + 1, ALen - i - 1) .project_out(isl::dim::set, 0, i); isl::basic_set BDim = - B.project_out(isl::dim::param, 0, B.dim(isl::dim::param)) + B.project_out(isl::dim::param, 0, B.dim(isl::dim::param).release()) .project_out(isl::dim::set, i + 1, BLen - i - 1) .project_out(isl::dim::set, 0, i); @@ -687,7 +713,8 @@ return NameCompare; if (ConsiderTupleLen) { - int LenCompare = BSpace.dim(isl::dim::set) - ASpace.dim(isl::dim::set); + int LenCompare = BSpace.dim(isl::dim::set).release() - + ASpace.dim(isl::dim::set).release(); if (LenCompare != 0) return LenCompare; } @@ -781,15 +808,18 @@ OS << "\n}\n"; } -static void recursiveExpand(isl::basic_set BSet, int Dim, isl::set &Expanded) { - int Dims = BSet.dim(isl::dim::set); +static void recursiveExpand(isl::basic_set BSet, unsigned Dim, + isl::set &Expanded) { + isl::size BSetDim = BSet.dim(isl::dim::set); + IslAssertNoError(BSetDim); + unsigned Dims = static_cast(BSetDim); if (Dim >= Dims) { Expanded = Expanded.unite(BSet); return; } isl::basic_set DimOnly = - BSet.project_out(isl::dim::param, 0, BSet.dim(isl::dim::param)) + BSet.project_out(isl::dim::param, 0, BSet.dim(isl::dim::param).release()) .project_out(isl::dim::set, Dim + 1, Dims - Dim - 1) .project_out(isl::dim::set, 0, Dim); if (!DimOnly.is_bounded()) { @@ -895,4 +925,10 @@ LLVM_DUMP_METHOD void polly::dumpExpanded(__isl_keep isl_union_map *UMap) { dumpExpanded(isl::manage_copy(UMap)); } + +llvm::iota_range polly::rangeIslSize(unsigned Begin, isl::size End) { + IslAssertNoError(End); + unsigned UEnd = static_cast(End); + return llvm::seq(std::min(Begin, UEnd), UEnd); +} #endif 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 @@ -26,10 +26,14 @@ /// i.e. there are two constants Min and Max, such that every value x of the /// chosen dimensions is Min <= x <= Max. bool isDimBoundedByConstant(isl::set Set, unsigned dim) { - auto ParamDims = Set.dim(isl::dim::param); + isl::size Size = Set.dim(isl::dim::param); + IslAssertNoError(Size); + auto ParamDims = static_cast(Size); Set = Set.project_out(isl::dim::param, 0, ParamDims); Set = Set.project_out(isl::dim::set, 0, dim); - auto SetDims = Set.tuple_dim(); + Size = Set.tuple_dim(); + IslAssertNoError(Size); + auto SetDims = static_cast(Size); Set = Set.project_out(isl::dim::set, 1, SetDims - 1); return bool(Set.is_bounded()); } @@ -40,7 +44,9 @@ /// Min_p <= x <= Max_p. bool isDimBoundedByParameter(isl::set Set, unsigned dim) { Set = Set.project_out(isl::dim::set, 0, dim); - auto SetDims = Set.tuple_dim(); + isl::size Dim = Set.tuple_dim(); + IslAssertNoError(Dim); + auto SetDims = static_cast(Dim); Set = Set.project_out(isl::dim::set, 1, SetDims - 1); return bool(Set.is_bounded()); } @@ -129,14 +135,15 @@ /// Because this function takes an isl_union_map, the out dimensions could be /// different. We return the maximum number in this case. However, a different /// number of dimensions is not supported by the other code in this file. -isl_size scheduleScatterDims(const isl::union_map &Schedule) { +unsigned scheduleScatterDims(const isl::union_map &Schedule) { isl_size Dims = 0; for (isl::map Map : Schedule.get_map_list()) { if (Map.is_null()) continue; - Dims = std::max(Dims, Map.range_tuple_dim()); + Dims = std::max(Dims, Map.range_tuple_dim().release()); } + assert(Dims >= 0); return Dims; } @@ -144,7 +151,9 @@ isl::union_pw_aff scheduleExtractDimAff(isl::union_map UMap, unsigned pos) { auto SingleUMap = isl::union_map::empty(UMap.ctx()); for (isl::map Map : UMap.get_map_list()) { - unsigned MapDims = Map.range_tuple_dim(); + isl::size Dim = Map.range_tuple_dim(); + IslAssertNoError(Dim); + unsigned MapDims = static_cast(Dim); isl::map SingleMap = Map.project_out(isl::dim::out, 0, pos); SingleMap = SingleMap.project_out(isl::dim::out, 1, MapDims - pos - 1); SingleUMap = SingleUMap.unite(SingleMap); @@ -152,7 +161,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. @@ -179,7 +188,9 @@ auto ScatterSet = isl::set(Schedule.range()); auto ParamSpace = Schedule.get_space().params(); - auto Dims = ScatterSet.tuple_dim(); + isl::size Size = ScatterSet.tuple_dim(); + IslAssertNoError(Size); + auto Dims = static_cast(Size); assert(Dims >= 2); // Would cause an infinite loop. @@ -238,8 +249,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); @@ -269,7 +282,7 @@ auto SubDims = scheduleScatterDims(SubSchedule); auto SubExtent = isl::set(SubSchedule.range()); - auto SubExtentDims = SubExtent.dim(isl::dim::param); + auto SubExtentDims = SubExtent.dim(isl::dim::param).release(); SubExtent = SubExtent.project_out(isl::dim::param, 0, SubExtentDims); SubExtent = SubExtent.project_out(isl::dim::set, 1, SubDims - 1); @@ -294,15 +307,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/MatmulOptimizer.cpp b/polly/lib/Transform/MatmulOptimizer.cpp --- a/polly/lib/Transform/MatmulOptimizer.cpp +++ b/polly/lib/Transform/MatmulOptimizer.cpp @@ -188,8 +188,8 @@ /// @return The modified map. static isl::map permuteDimensions(isl::map Map, isl::dim DimType, unsigned DstPos, unsigned SrcPos) { - assert((isl_size)DstPos < Map.dim(DimType) && - (isl_size)SrcPos < Map.dim(DimType)); + assert((isl_size)DstPos < Map.dim(DimType).release() && + (isl_size)SrcPos < Map.dim(DimType).release()); if (DstPos == SrcPos) return Map; isl::id DimId; @@ -229,7 +229,7 @@ isl::space Space = AccMap.get_space(); isl::map Universe = isl::map::universe(Space); - if (Space.dim(isl::dim::out) != 2) + if (Space.dim(isl::dim::out).release() != 2) return false; // MatMul has the form: @@ -317,7 +317,7 @@ MatMulInfoTy &MMI) { auto InputDimId = PartialSchedule.get_tuple_id(isl::dim::in); auto *Stmt = static_cast(InputDimId.get_user()); - isl_size OutDimNum = PartialSchedule.range_tuple_dim(); + isl_size OutDimNum = PartialSchedule.range_tuple_dim().release(); assert(OutDimNum > 2 && "In case of the matrix multiplication the loop nest " "and, consequently, the corresponding scheduling " "functions have at least three dimensions."); @@ -363,7 +363,7 @@ auto DomainSpace = Schedule.get_space().domain(); auto Space = DomainSpace.map_from_domain_and_range(DomainSpace); auto Deltas = Dep.extract_map(Space).deltas(); - isl_size DeltasDimNum = Deltas.dim(isl::dim::set); + isl_size DeltasDimNum = Deltas.dim(isl::dim::set).release(); for (int i = 0; i < DeltasDimNum; i++) { auto Val = Deltas.plain_get_val_if_fixed(isl::dim::set, i); Pos = Pos < 0 && Val.is_one() ? i : Pos; @@ -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); } @@ -729,7 +729,7 @@ // Insert into the schedule tree. isl::map ExtMap = MapOldIndVar.project_out( - isl::dim::out, 2, MapOldIndVar.range_tuple_dim() - 2); + isl::dim::out, 2, MapOldIndVar.range_tuple_dim().release() - 2); ExtMap = ExtMap.reverse(); ExtMap = ExtMap.fix_si(isl::dim::out, MMI.i, 0); ExtMap = ExtMap.intersect_range(Domain); @@ -870,9 +870,9 @@ auto Child = Node.child(0); auto UnMapOldIndVar = Child.get_prefix_schedule_union_map(); auto MapOldIndVar = isl::map::from_union_map(UnMapOldIndVar); - if (MapOldIndVar.range_tuple_dim() > 9) - return MapOldIndVar.project_out(isl::dim::out, 0, - MapOldIndVar.range_tuple_dim() - 9); + if (MapOldIndVar.range_tuple_dim().release() > 9) + return MapOldIndVar.project_out( + isl::dim::out, 0, MapOldIndVar.range_tuple_dim().release() - 9); return MapOldIndVar; } @@ -893,10 +893,10 @@ 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(); + isl_size Dims = Prefix.tuple_dim().release(); Prefix = Prefix.project_out(isl::dim::set, Dims - 1, 1); Prefix = getPartialTilePrefixes(Prefix, MicroKernelParams.Nr); Prefix = getPartialTilePrefixes(Prefix, MicroKernelParams.Mr); @@ -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; } @@ -953,8 +953,8 @@ return Node; auto Domain = Node.get_universe_domain(); assert(isl_union_set_n_set(Domain.get()) == 1); - if (Node.get_schedule_depth() != 0 || - (isl::set(Domain).tuple_dim() != + if (Node.get_schedule_depth().release() != 0 || + (isl::set(Domain).tuple_dim().release() != isl_schedule_node_band_n_member(Node.get()))) return Node; Node = isl::manage(isl_schedule_node_delete(Node.copy())); @@ -1029,7 +1029,7 @@ Node = Node.parent(); if (LeafType != isl_schedule_node_leaf || isl_schedule_node_band_n_member(Node.get()) < 3 || - Node.get_schedule_depth() != 0 || + Node.get_schedule_depth().release() != 0 || isl_union_map_n_map(PartialSchedule.get()) != 1) return false; auto NewPartialSchedule = isl::map::from_union_map(PartialSchedule); diff --git a/polly/lib/Transform/MaximalStaticExpansion.cpp b/polly/lib/Transform/MaximalStaticExpansion.cpp --- a/polly/lib/Transform/MaximalStaticExpansion.cpp +++ b/polly/lib/Transform/MaximalStaticExpansion.cpp @@ -118,10 +118,10 @@ /// i.e. there are two constants Min and Max, such that every value x of the /// chosen dimensions is Min <= x <= Max. static bool isDimBoundedByConstant(isl::set Set, unsigned dim) { - auto ParamDims = Set.dim(isl::dim::param); + auto ParamDims = Set.dim(isl::dim::param).release(); Set = Set.project_out(isl::dim::param, 0, ParamDims); Set = Set.project_out(isl::dim::set, 0, dim); - auto SetDims = Set.tuple_dim(); + auto SetDims = Set.tuple_dim().release(); Set = Set.project_out(isl::dim::set, 1, SetDims - 1); return bool(Set.is_bounded()); } @@ -350,7 +350,7 @@ // Get the current AM. auto CurrentAccessMap = MA->getAccessRelation(); - unsigned in_dimensions = CurrentAccessMap.domain_tuple_dim(); + unsigned in_dimensions = CurrentAccessMap.domain_tuple_dim().release(); // Get domain from the current AM. auto Domain = CurrentAccessMap.domain(); @@ -405,7 +405,7 @@ // Add constraints to linked output with input id. auto SpaceMap = NewAccessMap.get_space(); auto ConstraintBasicMap = - isl::basic_map::equal(SpaceMap, SpaceMap.dim(isl::dim::in)); + isl::basic_map::equal(SpaceMap, SpaceMap.dim(isl::dim::in).release()); NewAccessMap = isl::map(ConstraintBasicMap); // Set the new access relation map. 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( @@ -375,7 +376,7 @@ assert(isl_schedule_node_get_type(Node.get()) == isl_schedule_node_band); auto Space = isl::manage(isl_schedule_node_band_get_space(Node.get())); - isl_size ScheduleDimensions = Space.dim(isl::dim::set); + isl_size ScheduleDimensions = Space.dim(isl::dim::set).release(); assert((isl_size)DimToVectorize < ScheduleDimensions); if (DimToVectorize > 0) { @@ -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(); @@ -442,7 +444,7 @@ return false; auto Space = isl::manage(isl_schedule_node_band_get_space(Node.get())); - auto Dims = Space.dim(isl::dim::set); + auto Dims = Space.dim(isl::dim::set).release(); if (Dims <= 1) return false; @@ -474,10 +476,10 @@ return Node; auto Space = isl::manage(isl_schedule_node_band_get_space(Node.get())); - auto Dims = Space.dim(isl::dim::set); + auto Dims = Space.dim(isl::dim::set).release(); 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); @@ -236,7 +239,7 @@ isl::union_map NewPartialSchedMap = isl::union_map::from(PartialSched); unsigned BandDims = isl_schedule_node_band_n_member(OldNode.get()); for (isl::map Ext : NewChildExtensions.get_map_list()) { - unsigned ExtDims = Ext.domain_tuple_dim(); + unsigned ExtDims = Ext.domain_tuple_dim().release(); assert(ExtDims >= BandDims); unsigned OuterDims = ExtDims - BandDims; @@ -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 @@ -484,7 +490,7 @@ /// @param Set A set, which should be modified. /// @param VectorWidth A parameter, which determines the constraint. static isl::set addExtentConstraints(isl::set Set, int VectorWidth) { - unsigned Dims = Set.tuple_dim(); + unsigned Dims = Set.tuple_dim().release(); isl::space Space = Set.get_space(); isl::local_space LocalSpace = isl::local_space(Space); isl::constraint ExtConstr = isl::constraint::alloc_inequality(LocalSpace); @@ -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) { @@ -543,13 +550,14 @@ isl::multi_union_pw_aff PartialSched = isl::manage( isl_schedule_node_band_get_partial_schedule(BandToUnroll.get())); - assert(PartialSched.dim(isl::dim::out) == 1 && + assert(PartialSched.dim(isl::dim::out).release() == 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(); @@ -570,7 +578,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 +607,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. @@ -616,10 +624,11 @@ 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); @@ -650,7 +659,7 @@ isl::set polly::getPartialTilePrefixes(isl::set ScheduleRange, int VectorWidth) { - isl_size Dims = ScheduleRange.tuple_dim(); + isl_size Dims = ScheduleRange.tuple_dim().release(); isl::set LoopPrefixes = ScheduleRange.drop_constraints_involving_dims(isl::dim::set, Dims - 1, 1); auto ExtentPrefixes = addExtentConstraints(LoopPrefixes, VectorWidth); @@ -662,7 +671,7 @@ isl::union_set polly::getIsolateOptions(isl::set IsolateDomain, isl_size OutDimsNum) { - isl_size Dims = IsolateDomain.tuple_dim(); + isl_size Dims = IsolateDomain.tuple_dim().release(); assert(OutDimsNum <= Dims && "The isl::set IsolateDomain is used to describe the range of schedule " "dimensions values, which should be isolated. Consequently, the " @@ -693,7 +702,7 @@ auto Dims = Space.dim(isl::dim::set); auto Sizes = isl::multi_val::zero(Space); std::string IdentifierString(Identifier); - for (auto i : seq(0, Dims)) { + for (auto i : seq(0, Dims.release())) { auto tileSize = i < (isl_size)TileSizes.size() ? TileSizes[i] : DefaultTileSize; Sizes = Sizes.set_val(i, isl::val(Node.ctx(), tileSize)); @@ -717,5 +726,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 @@ -101,7 +101,7 @@ isl::map Result = isl::map::empty(PrevMap.get_space()); for (isl::basic_map BMap : PrevMap.get_basic_map_list()) { - if (Result.n_basic_map() > SimplifyMaxDisjuncts) + if (Result.n_basic_map().release() > SimplifyMaxDisjuncts) break; Result = Result.unite(BMap); } 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 @@ -246,7 +246,8 @@ 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; + Space.is_wrapping().is_false() && + Space.dim(isl::dim::set).release() == 0; } isl::union_map polly::filterKnownValInst(const isl::union_map &UMap) { @@ -685,10 +686,12 @@ TargetStmt->getSurroundingLoop())) { isl::set DefDomain = getDomainFor(DefStmt); isl::set TargetDomain = getDomainFor(TargetStmt); - assert(DefDomain.tuple_dim() <= TargetDomain.tuple_dim()); + assert(DefDomain.tuple_dim().release() <= + TargetDomain.tuple_dim().release()); Result = isl::map::from_domain_and_range(DefDomain, TargetDomain); - for (unsigned i = 0, DefDims = DefDomain.tuple_dim(); i < DefDims; i += 1) + for (unsigned i = 0, DefDims = DefDomain.tuple_dim().release(); i < DefDims; + i += 1) Result = Result.equate(isl::dim::in, i, isl::dim::out, i); } 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 @@ -652,16 +652,16 @@ &isl_ctx_free); // Basic usage - EXPECT_EQ(0, getNumScatterDims(UMAP("{ [] -> [] }"))); - EXPECT_EQ(1, getNumScatterDims(UMAP("{ [] -> [i] }"))); - EXPECT_EQ(2, getNumScatterDims(UMAP("{ [] -> [i,j] }"))); - EXPECT_EQ(3, getNumScatterDims(UMAP("{ [] -> [i,j,k] }"))); + EXPECT_EQ(0u, getNumScatterDims(UMAP("{ [] -> [] }"))); + EXPECT_EQ(1u, getNumScatterDims(UMAP("{ [] -> [i] }"))); + EXPECT_EQ(2u, getNumScatterDims(UMAP("{ [] -> [i,j] }"))); + EXPECT_EQ(3u, getNumScatterDims(UMAP("{ [] -> [i,j,k] }"))); // Different scatter spaces - EXPECT_EQ(0, getNumScatterDims(UMAP("{ A[] -> []; [] -> []}"))); - EXPECT_EQ(1, getNumScatterDims(UMAP("{ A[] -> []; [] -> [i] }"))); - EXPECT_EQ(2, getNumScatterDims(UMAP("{ A[] -> [i]; [] -> [i,j] }"))); - EXPECT_EQ(3, getNumScatterDims(UMAP("{ A[] -> [i]; [] -> [i,j,k] }"))); + EXPECT_EQ(0u, getNumScatterDims(UMAP("{ A[] -> []; [] -> []}"))); + EXPECT_EQ(1u, getNumScatterDims(UMAP("{ A[] -> []; [] -> [i] }"))); + EXPECT_EQ(2u, getNumScatterDims(UMAP("{ A[] -> [i]; [] -> [i,j] }"))); + EXPECT_EQ(3u, getNumScatterDims(UMAP("{ A[] -> [i]; [] -> [i,j,k] }"))); } TEST(ISLTools, getScatterSpace) { diff --git a/polly/unittests/Support/ISLTools.cpp b/polly/unittests/Support/ISLTools.cpp --- a/polly/unittests/Support/ISLTools.cpp +++ b/polly/unittests/Support/ISLTools.cpp @@ -19,7 +19,7 @@ Ctx, "{ [x, y] : 0 <= x <= 5 and y >= 0 and x <= 4 and y <= 3 + x }"); isl::set S = A.unite(B); - ASSERT_EQ(S.n_basic_set(), 2); + ASSERT_EQ(S.n_basic_set().release(), 2); std::vector Sets; for (auto BS : S.get_basic_set_list()) Sets.push_back(BS);