Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
/// These are automatically generated checked C++ bindings for isl.
2
///
3
/// isl is a library for computing with integer sets and maps described by
4
/// Presburger formulas. On top of this, isl provides various tools for
5
/// polyhedral compilation, ranging from dependence analysis over scheduling
6
/// to AST generation.
7
 
8
// clang-format off
9
 
10
#ifndef ISL_CPP_CHECKED
11
#define ISL_CPP_CHECKED
12
 
13
#include <stdio.h>
14
#include <stdlib.h>
15
#include <isl/set.h>
16
 
17
#include <functional>
18
#include <memory>
19
#include <ostream>
20
#include <string>
21
#include <type_traits>
22
 
23
namespace isl {
24
 
25
#define ISLPP_STRINGIZE_(X) #X
26
#define ISLPP_STRINGIZE(X) ISLPP_STRINGIZE_(X)
27
 
28
#define ISLPP_ASSERT(test, message)                          \
29
  do {                                                       \
30
    if (test)                                                \
31
      break;                                                 \
32
    fputs("Assertion \"" #test "\" failed at " __FILE__      \
33
      ":" ISLPP_STRINGIZE(__LINE__) "\n  " message "\n",     \
34
      stderr);                                               \
35
    abort();                                                 \
36
  } while (0)
37
 
38
/* Class used to check that isl::checked::boolean,
39
 * isl::checked::stat and isl::checked::size values are checked for errors.
40
 */
41
struct checker {
42
        bool checked = false;
43
        ~checker() {
44
                //ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state");
45
        }
46
};
47
 
48
class boolean {
49
private:
50
  mutable std::shared_ptr<checker> check = std::make_shared<checker>();
51
  isl_bool val;
52
 
53
  friend boolean manage(isl_bool val);
54
  boolean(isl_bool val): val(val) {}
55
public:
56
  static boolean error() {
57
    return boolean(isl_bool_error);
58
  }
59
  boolean()
60
      : val(isl_bool_error) {}
61
 
62
  /* implicit */ boolean(bool val)
63
      : val(val ? isl_bool_true : isl_bool_false) {}
64
 
65
  isl_bool release() {
66
    auto tmp = val;
67
    val = isl_bool_error;
68
    check->checked = true;
69
    return tmp;
70
  }
71
 
72
  bool is_error() const { check->checked = true; return val == isl_bool_error; }
73
  bool is_false() const { check->checked = true; return val == isl_bool_false; }
74
  bool is_true() const { check->checked = true; return val == isl_bool_true; }
75
 
76
  operator bool() const {
77
    //ISLPP_ASSERT(check->checked, "IMPLEMENTATION ERROR: Unchecked error state");
78
    ISLPP_ASSERT(!is_error(), "IMPLEMENTATION ERROR: Unhandled error state");
79
    return is_true();
80
  }
81
 
82
  boolean negate() {
83
    if (val == isl_bool_true)
84
      val = isl_bool_false;
85
    else if (val == isl_bool_false)
86
      val = isl_bool_true;
87
    return *this;
88
  }
89
 
90
  boolean operator!() const {
91
    return boolean(*this).negate();
92
  }
93
};
94
 
95
inline boolean manage(isl_bool val) {
96
  return boolean(val);
97
}
98
 
99
class ctx {
100
  isl_ctx *ptr;
101
public:
102
  /* implicit */ ctx(isl_ctx *ctx)
103
      : ptr(ctx) {}
104
  isl_ctx *release() {
105
    auto tmp = ptr;
106
    ptr = nullptr;
107
    return tmp;
108
  }
109
  isl_ctx *get() {
110
    return ptr;
111
  }
112
};
113
 
114
/* Class encapsulating an isl_stat value.
115
 */
116
class stat {
117
private:
118
        mutable std::shared_ptr<checker> check = std::make_shared<checker>();
119
        isl_stat val;
120
 
121
        friend stat manage(isl_stat val);
122
        stat(isl_stat val) : val(val) {}
123
public:
124
        static stat ok() {
125
                return stat(isl_stat_ok);
126
        }
127
        static stat error() {
128
                return stat(isl_stat_error);
129
        }
130
        stat() : val(isl_stat_error) {}
131
 
132
        isl_stat release() {
133
                check->checked = true;
134
                return val;
135
        }
136
 
137
        bool is_error() const {
138
                check->checked = true;
139
                return val == isl_stat_error;
140
        }
141
        bool is_ok() const {
142
                check->checked = true;
143
                return val == isl_stat_ok;
144
        }
145
};
146
 
147
inline stat manage(isl_stat val)
148
{
149
        return stat(val);
150
}
151
 
152
/* Class encapsulating an isl_size value.
153
 */
154
class size {
155
private:
156
        mutable std::shared_ptr<checker> check = std::make_shared<checker>();
157
        isl_size val;
158
 
159
        friend size manage(isl_size val);
160
        size(isl_size val) : val(val) {}
161
public:
162
        size() : val(isl_size_error) {}
163
 
164
        isl_size release() {
165
                auto tmp = val;
166
                val = isl_size_error;
167
                check->checked = true;
168
                return tmp;
169
        }
170
 
171
        bool is_error() const {
172
                check->checked = true;
173
                return val == isl_size_error;
174
        }
175
 
176
        explicit operator unsigned() const {
177
                ISLPP_ASSERT(check->checked,
178
                            "IMPLEMENTATION ERROR: Unchecked error state");
179
                ISLPP_ASSERT(!is_error(),
180
                            "IMPLEMENTATION ERROR: Unhandled error state");
181
                return val;
182
        }
183
};
184
 
185
inline size manage(isl_size val)
186
{
187
        return size(val);
188
}
189
 
190
enum class dim {
191
  cst = isl_dim_cst,
192
  param = isl_dim_param,
193
  in = isl_dim_in,
194
  out = isl_dim_out,
195
  set = isl_dim_set,
196
  div = isl_dim_div,
197
  all = isl_dim_all
198
};
199
 
200
} // namespace isl
201
#include <isl/id.h>
202
#include <isl/space.h>
203
#include <isl/val.h>
204
#include <isl/aff.h>
205
#include <isl/set.h>
206
#include <isl/map.h>
207
#include <isl/ilp.h>
208
#include <isl/constraint.h>
209
#include <isl/union_set.h>
210
#include <isl/union_map.h>
211
#include <isl/flow.h>
212
#include <isl/schedule.h>
213
#include <isl/schedule_node.h>
214
#include <isl/ast_build.h>
215
#include <isl/fixed_box.h>
216
 
217
namespace isl {
218
 
219
// forward declarations
220
class aff;
221
class aff_list;
222
class ast_build;
223
class ast_expr;
224
class ast_expr_id;
225
class ast_expr_int;
226
class ast_expr_op;
227
class ast_expr_op_access;
228
class ast_expr_op_add;
229
class ast_expr_op_address_of;
230
class ast_expr_op_and;
231
class ast_expr_op_and_then;
232
class ast_expr_op_call;
233
class ast_expr_op_cond;
234
class ast_expr_op_div;
235
class ast_expr_op_eq;
236
class ast_expr_op_fdiv_q;
237
class ast_expr_op_ge;
238
class ast_expr_op_gt;
239
class ast_expr_op_le;
240
class ast_expr_op_lt;
241
class ast_expr_op_max;
242
class ast_expr_op_member;
243
class ast_expr_op_min;
244
class ast_expr_op_minus;
245
class ast_expr_op_mul;
246
class ast_expr_op_or;
247
class ast_expr_op_or_else;
248
class ast_expr_op_pdiv_q;
249
class ast_expr_op_pdiv_r;
250
class ast_expr_op_select;
251
class ast_expr_op_sub;
252
class ast_expr_op_zdiv_r;
253
class ast_node;
254
class ast_node_block;
255
class ast_node_for;
256
class ast_node_if;
257
class ast_node_list;
258
class ast_node_mark;
259
class ast_node_user;
260
class basic_map;
261
class basic_map_list;
262
class basic_set;
263
class basic_set_list;
264
class constraint;
265
class fixed_box;
266
class id;
267
class id_list;
268
class id_to_ast_expr;
269
class local_space;
270
class map;
271
class map_list;
272
class multi_aff;
273
class multi_id;
274
class multi_pw_aff;
275
class multi_union_pw_aff;
276
class multi_val;
277
class point;
278
class pw_aff;
279
class pw_aff_list;
280
class pw_multi_aff;
281
class pw_multi_aff_list;
282
class schedule;
283
class schedule_constraints;
284
class schedule_node;
285
class schedule_node_band;
286
class schedule_node_context;
287
class schedule_node_domain;
288
class schedule_node_expansion;
289
class schedule_node_extension;
290
class schedule_node_filter;
291
class schedule_node_guard;
292
class schedule_node_leaf;
293
class schedule_node_mark;
294
class schedule_node_sequence;
295
class schedule_node_set;
296
class set;
297
class set_list;
298
class space;
299
class union_access_info;
300
class union_flow;
301
class union_map;
302
class union_pw_aff;
303
class union_pw_aff_list;
304
class union_pw_multi_aff;
305
class union_set;
306
class union_set_list;
307
class val;
308
class val_list;
309
 
310
// declarations for isl::aff
311
inline aff manage(__isl_take isl_aff *ptr);
312
inline aff manage_copy(__isl_keep isl_aff *ptr);
313
 
314
class aff {
315
  friend inline aff manage(__isl_take isl_aff *ptr);
316
  friend inline aff manage_copy(__isl_keep isl_aff *ptr);
317
 
318
protected:
319
  isl_aff *ptr = nullptr;
320
 
321
  inline explicit aff(__isl_take isl_aff *ptr);
322
 
323
public:
324
  inline /* implicit */ aff();
325
  inline /* implicit */ aff(const aff &obj);
326
  inline explicit aff(isl::ctx ctx, const std::string &str);
327
  inline explicit aff(isl::local_space ls, isl::val val);
328
  inline explicit aff(isl::local_space ls);
329
  inline aff &operator=(aff obj);
330
  inline ~aff();
331
  inline __isl_give isl_aff *copy() const &;
332
  inline __isl_give isl_aff *copy() && = delete;
333
  inline __isl_keep isl_aff *get() const;
334
  inline __isl_give isl_aff *release();
335
  inline bool is_null() const;
336
  inline isl::ctx ctx() const;
337
 
338
  inline isl::aff add(isl::aff aff2) const;
339
  inline isl::multi_aff add(const isl::multi_aff &multi2) const;
340
  inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
341
  inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
342
  inline isl::pw_aff add(const isl::pw_aff &pwaff2) const;
343
  inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
344
  inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const;
345
  inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
346
  inline isl::aff add_constant(isl::val v) const;
347
  inline isl::aff add_constant(long v) const;
348
  inline isl::multi_aff add_constant(const isl::multi_val &mv) const;
349
  inline isl::aff add_constant_si(int v) const;
350
  inline isl::pw_aff add_dims(isl::dim type, unsigned int n) const;
351
  inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
352
  inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
353
  inline isl::aff as_aff() const;
354
  inline isl::map as_map() const;
355
  inline isl::multi_aff as_multi_aff() const;
356
  inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
357
  inline isl::pw_multi_aff as_pw_multi_aff() const;
358
  inline isl::set as_set() const;
359
  inline isl::union_map as_union_map() const;
360
  inline isl::aff at(int pos) const;
361
  inline isl::basic_set bind(isl::id id) const;
362
  inline isl::basic_set bind(const std::string &id) const;
363
  inline isl::basic_set bind(const isl::multi_id &tuple) const;
364
  inline isl::pw_aff bind_domain(const isl::multi_id &tuple) const;
365
  inline isl::pw_aff bind_domain_wrapped_domain(const isl::multi_id &tuple) const;
366
  inline isl::aff ceil() const;
367
  inline isl::pw_aff coalesce() const;
368
  inline isl::pw_aff cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const;
369
  inline isl::multi_val constant_multi_val() const;
370
  inline isl::val constant_val() const;
371
  inline isl::val get_constant_val() const;
372
  inline isl::val denominator_val() const;
373
  inline isl::val get_denominator_val() const;
374
  inline class size dim(isl::dim type) const;
375
  inline isl::id dim_id(isl::dim type, unsigned int pos) const;
376
  inline isl::aff div(isl::aff aff2) const;
377
  inline isl::pw_aff div(const isl::pw_aff &pa2) const;
378
  inline isl::set domain() const;
379
  inline isl::space domain_space() const;
380
  inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
381
  inline isl::set eq_set(isl::aff aff2) const;
382
  inline isl::set eq_set(const isl::pw_aff &pwaff2) const;
383
  inline isl::val eval(isl::point pnt) const;
384
  inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
385
  inline isl::multi_aff flat_range_product(const isl::multi_aff &multi2) const;
386
  inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
387
  inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
388
  inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
389
  inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
390
  inline isl::aff floor() const;
391
  inline stat foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const;
392
  inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
393
  inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
394
  inline isl::set ge_set(isl::aff aff2) const;
395
  inline isl::set ge_set(const isl::pw_aff &pwaff2) const;
396
  inline isl::aff gist(isl::set context) const;
397
  inline isl::union_pw_aff gist(const isl::union_set &context) const;
398
  inline isl::aff gist(const isl::basic_set &context) const;
399
  inline isl::aff gist(const isl::point &context) const;
400
  inline isl::set gt_set(isl::aff aff2) const;
401
  inline isl::set gt_set(const isl::pw_aff &pwaff2) const;
402
  inline boolean has_range_tuple_id() const;
403
  inline isl::multi_aff identity() const;
404
  inline isl::pw_aff insert_domain(const isl::space &domain) const;
405
  inline isl::pw_aff intersect_domain(const isl::set &set) const;
406
  inline isl::union_pw_aff intersect_domain(const isl::space &space) const;
407
  inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const;
408
  inline isl::union_pw_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
409
  inline isl::union_pw_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
410
  inline isl::pw_aff intersect_params(const isl::set &set) const;
411
  inline boolean involves_locals() const;
412
  inline boolean involves_nan() const;
413
  inline boolean involves_param(const isl::id &id) const;
414
  inline boolean involves_param(const std::string &id) const;
415
  inline boolean involves_param(const isl::id_list &list) const;
416
  inline boolean is_cst() const;
417
  inline boolean is_equal(const isl::pw_aff &pa2) const;
418
  inline boolean isa_aff() const;
419
  inline boolean isa_multi_aff() const;
420
  inline boolean isa_pw_multi_aff() const;
421
  inline isl::set le_set(isl::aff aff2) const;
422
  inline isl::set le_set(const isl::pw_aff &pwaff2) const;
423
  inline isl::aff_list list() const;
424
  inline isl::set lt_set(isl::aff aff2) const;
425
  inline isl::set lt_set(const isl::pw_aff &pwaff2) const;
426
  inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
427
  inline isl::pw_aff max(const isl::pw_aff &pwaff2) const;
428
  inline isl::multi_val max_multi_val() const;
429
  inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
430
  inline isl::pw_aff min(const isl::pw_aff &pwaff2) const;
431
  inline isl::multi_val min_multi_val() const;
432
  inline isl::aff mod(isl::val mod) const;
433
  inline isl::aff mod(long mod) const;
434
  inline isl::aff mul(isl::aff aff2) const;
435
  inline isl::pw_aff mul(const isl::pw_aff &pwaff2) const;
436
  inline class size n_piece() const;
437
  inline isl::set ne_set(isl::aff aff2) const;
438
  inline isl::set ne_set(const isl::pw_aff &pwaff2) const;
439
  inline isl::aff neg() const;
440
  inline boolean plain_is_empty() const;
441
  inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
442
  inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
443
  inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
444
  inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
445
  inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
446
  inline isl::multi_aff product(const isl::multi_aff &multi2) const;
447
  inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
448
  inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
449
  inline isl::aff pullback(isl::multi_aff ma) const;
450
  inline isl::pw_aff pullback(const isl::multi_pw_aff &mpa) const;
451
  inline isl::pw_aff pullback(const isl::pw_multi_aff &pma) const;
452
  inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
453
  inline isl::aff pullback(const isl::aff &ma) const;
454
  inline isl::pw_multi_aff_list pw_multi_aff_list() const;
455
  inline isl::pw_multi_aff range_factor_domain() const;
456
  inline isl::pw_multi_aff range_factor_range() const;
457
  inline isl::multi_aff range_product(const isl::multi_aff &multi2) const;
458
  inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
459
  inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
460
  inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
461
  inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
462
  inline isl::id range_tuple_id() const;
463
  inline isl::multi_aff reset_range_tuple_id() const;
464
  inline isl::multi_aff reset_tuple_id(isl::dim type) const;
465
  inline isl::aff scale(isl::val v) const;
466
  inline isl::aff scale(long v) const;
467
  inline isl::multi_aff scale(const isl::multi_val &mv) const;
468
  inline isl::aff scale_down(isl::val v) const;
469
  inline isl::aff scale_down(long v) const;
470
  inline isl::multi_aff scale_down(const isl::multi_val &mv) const;
471
  inline isl::multi_aff set_aff(int pos, const isl::aff &el) const;
472
  inline isl::multi_aff set_at(int pos, const isl::aff &el) const;
473
  inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
474
  inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
475
  inline isl::aff set_constant_si(int v) const;
476
  inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
477
  inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
478
  inline isl::multi_aff set_range_tuple(const isl::id &id) const;
479
  inline isl::multi_aff set_range_tuple(const std::string &id) const;
480
  inline isl::pw_aff set_tuple_id(isl::dim type, const isl::id &id) const;
481
  inline isl::pw_aff set_tuple_id(isl::dim type, const std::string &id) const;
482
  inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
483
  inline class size size() const;
484
  inline isl::space space() const;
485
  inline isl::aff sub(isl::aff aff2) const;
486
  inline isl::multi_aff sub(const isl::multi_aff &multi2) const;
487
  inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
488
  inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
489
  inline isl::pw_aff sub(const isl::pw_aff &pwaff2) const;
490
  inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
491
  inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const;
492
  inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
493
  inline isl::pw_aff subtract_domain(const isl::set &set) const;
494
  inline isl::union_pw_aff subtract_domain(const isl::space &space) const;
495
  inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const;
496
  inline isl::pw_aff tdiv_q(const isl::pw_aff &pa2) const;
497
  inline isl::pw_aff tdiv_r(const isl::pw_aff &pa2) const;
498
  inline isl::aff_list to_list() const;
499
  inline isl::multi_pw_aff to_multi_pw_aff() const;
500
  inline isl::multi_union_pw_aff to_multi_union_pw_aff() const;
501
  inline isl::pw_multi_aff to_pw_multi_aff() const;
502
  inline isl::union_pw_aff to_union_pw_aff() const;
503
  inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
504
  inline isl::id tuple_id(isl::dim type) const;
505
  inline isl::aff unbind_params_insert_domain(isl::multi_id domain) const;
506
  inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
507
  inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
508
  inline isl::pw_aff union_add(const isl::pw_aff &pwaff2) const;
509
  inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
510
  inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const;
511
  inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
512
  static inline isl::aff var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos);
513
  static inline isl::aff zero_on_domain(isl::space space);
514
};
515
 
516
// declarations for isl::aff_list
517
inline aff_list manage(__isl_take isl_aff_list *ptr);
518
inline aff_list manage_copy(__isl_keep isl_aff_list *ptr);
519
 
520
class aff_list {
521
  friend inline aff_list manage(__isl_take isl_aff_list *ptr);
522
  friend inline aff_list manage_copy(__isl_keep isl_aff_list *ptr);
523
 
524
protected:
525
  isl_aff_list *ptr = nullptr;
526
 
527
  inline explicit aff_list(__isl_take isl_aff_list *ptr);
528
 
529
public:
530
  inline /* implicit */ aff_list();
531
  inline /* implicit */ aff_list(const aff_list &obj);
532
  inline explicit aff_list(isl::ctx ctx, int n);
533
  inline explicit aff_list(isl::aff el);
534
  inline explicit aff_list(isl::ctx ctx, const std::string &str);
535
  inline aff_list &operator=(aff_list obj);
536
  inline ~aff_list();
537
  inline __isl_give isl_aff_list *copy() const &;
538
  inline __isl_give isl_aff_list *copy() && = delete;
539
  inline __isl_keep isl_aff_list *get() const;
540
  inline __isl_give isl_aff_list *release();
541
  inline bool is_null() const;
542
  inline isl::ctx ctx() const;
543
 
544
  inline isl::aff_list add(isl::aff el) const;
545
  inline isl::aff at(int index) const;
546
  inline isl::aff get_at(int index) const;
547
  inline isl::aff_list clear() const;
548
  inline isl::aff_list concat(isl::aff_list list2) const;
549
  inline isl::aff_list drop(unsigned int first, unsigned int n) const;
550
  inline stat foreach(const std::function<stat(isl::aff)> &fn) const;
551
  inline isl::aff_list insert(unsigned int pos, isl::aff el) const;
552
  inline class size size() const;
553
};
554
 
555
// declarations for isl::ast_build
556
inline ast_build manage(__isl_take isl_ast_build *ptr);
557
inline ast_build manage_copy(__isl_keep isl_ast_build *ptr);
558
 
559
class ast_build {
560
  friend inline ast_build manage(__isl_take isl_ast_build *ptr);
561
  friend inline ast_build manage_copy(__isl_keep isl_ast_build *ptr);
562
 
563
protected:
564
  isl_ast_build *ptr = nullptr;
565
 
566
  inline explicit ast_build(__isl_take isl_ast_build *ptr);
567
 
568
public:
569
  inline /* implicit */ ast_build();
570
  inline /* implicit */ ast_build(const ast_build &obj);
571
  inline explicit ast_build(isl::ctx ctx);
572
  inline ast_build &operator=(ast_build obj);
573
  inline ~ast_build();
574
  inline __isl_give isl_ast_build *copy() const &;
575
  inline __isl_give isl_ast_build *copy() && = delete;
576
  inline __isl_keep isl_ast_build *get() const;
577
  inline __isl_give isl_ast_build *release();
578
  inline bool is_null() const;
579
  inline isl::ctx ctx() const;
580
 
581
private:
582
  inline ast_build &copy_callbacks(const ast_build &obj);
583
  struct at_each_domain_data {
584
    std::function<isl::ast_node(isl::ast_node, isl::ast_build)> func;
585
  };
586
  std::shared_ptr<at_each_domain_data> at_each_domain_data;
587
  static inline isl_ast_node *at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2);
588
  inline void set_at_each_domain_data(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn);
589
public:
590
  inline isl::ast_build set_at_each_domain(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn) const;
591
  inline isl::ast_expr access_from(isl::multi_pw_aff mpa) const;
592
  inline isl::ast_expr access_from(isl::pw_multi_aff pma) const;
593
  inline isl::ast_expr call_from(isl::multi_pw_aff mpa) const;
594
  inline isl::ast_expr call_from(isl::pw_multi_aff pma) const;
595
  inline isl::ast_expr expr_from(isl::pw_aff pa) const;
596
  inline isl::ast_expr expr_from(isl::set set) const;
597
  static inline isl::ast_build from_context(isl::set set);
598
  inline isl::ast_node node_from(isl::schedule schedule) const;
599
  inline isl::ast_node node_from_schedule_map(isl::union_map schedule) const;
600
  inline isl::ast_build restrict(isl::set set) const;
601
  inline isl::union_map schedule() const;
602
  inline isl::union_map get_schedule() const;
603
};
604
 
605
// declarations for isl::ast_expr
606
inline ast_expr manage(__isl_take isl_ast_expr *ptr);
607
inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr);
608
 
609
class ast_expr {
610
  friend inline ast_expr manage(__isl_take isl_ast_expr *ptr);
611
  friend inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr);
612
 
613
protected:
614
  isl_ast_expr *ptr = nullptr;
615
 
616
  inline explicit ast_expr(__isl_take isl_ast_expr *ptr);
617
 
618
public:
619
  inline /* implicit */ ast_expr();
620
  inline /* implicit */ ast_expr(const ast_expr &obj);
621
  inline ast_expr &operator=(ast_expr obj);
622
  inline ~ast_expr();
623
  inline __isl_give isl_ast_expr *copy() const &;
624
  inline __isl_give isl_ast_expr *copy() && = delete;
625
  inline __isl_keep isl_ast_expr *get() const;
626
  inline __isl_give isl_ast_expr *release();
627
  inline bool is_null() const;
628
private:
629
  template <typename T,
630
          typename = typename std::enable_if<std::is_same<
631
                  const decltype(isl_ast_expr_get_type(nullptr)),
632
                  const T>::value>::type>
633
  inline boolean isa_type(T subtype) const;
634
public:
635
  template <class T> inline boolean isa() const;
636
  template <class T> inline T as() const;
637
  inline isl::ctx ctx() const;
638
 
639
  inline isl::ast_expr add(isl::ast_expr expr2) const;
640
  inline isl::ast_expr address_of() const;
641
  inline isl::ast_expr eq(isl::ast_expr expr2) const;
642
  static inline isl::ast_expr from_val(isl::val v);
643
  inline isl::id id() const;
644
  inline isl::id get_id() const;
645
  inline isl::ast_expr le(isl::ast_expr expr2) const;
646
  inline isl::ast_expr mul(isl::ast_expr expr2) const;
647
  inline isl::ast_expr op_arg(int pos) const;
648
  inline isl::ast_expr get_op_arg(int pos) const;
649
  inline std::string to_C_str() const;
650
  inline isl::val val() const;
651
  inline isl::val get_val() const;
652
};
653
 
654
// declarations for isl::ast_expr_id
655
 
656
class ast_expr_id : public ast_expr {
657
  template <class T>
658
  friend boolean ast_expr::isa() const;
659
  friend ast_expr_id ast_expr::as<ast_expr_id>() const;
660
  static const auto type = isl_ast_expr_id;
661
 
662
protected:
663
  inline explicit ast_expr_id(__isl_take isl_ast_expr *ptr);
664
 
665
public:
666
  inline /* implicit */ ast_expr_id();
667
  inline /* implicit */ ast_expr_id(const ast_expr_id &obj);
668
  inline ast_expr_id &operator=(ast_expr_id obj);
669
  inline isl::ctx ctx() const;
670
 
671
  inline isl::id id() const;
672
  inline isl::id get_id() const;
673
};
674
 
675
// declarations for isl::ast_expr_int
676
 
677
class ast_expr_int : public ast_expr {
678
  template <class T>
679
  friend boolean ast_expr::isa() const;
680
  friend ast_expr_int ast_expr::as<ast_expr_int>() const;
681
  static const auto type = isl_ast_expr_int;
682
 
683
protected:
684
  inline explicit ast_expr_int(__isl_take isl_ast_expr *ptr);
685
 
686
public:
687
  inline /* implicit */ ast_expr_int();
688
  inline /* implicit */ ast_expr_int(const ast_expr_int &obj);
689
  inline ast_expr_int &operator=(ast_expr_int obj);
690
  inline isl::ctx ctx() const;
691
 
692
  inline isl::val val() const;
693
  inline isl::val get_val() const;
694
};
695
 
696
// declarations for isl::ast_expr_op
697
 
698
class ast_expr_op : public ast_expr {
699
  template <class T>
700
  friend boolean ast_expr::isa() const;
701
  friend ast_expr_op ast_expr::as<ast_expr_op>() const;
702
  static const auto type = isl_ast_expr_op;
703
 
704
protected:
705
  inline explicit ast_expr_op(__isl_take isl_ast_expr *ptr);
706
 
707
public:
708
  inline /* implicit */ ast_expr_op();
709
  inline /* implicit */ ast_expr_op(const ast_expr_op &obj);
710
  inline ast_expr_op &operator=(ast_expr_op obj);
711
private:
712
  template <typename T,
713
          typename = typename std::enable_if<std::is_same<
714
                  const decltype(isl_ast_expr_op_get_type(nullptr)),
715
                  const T>::value>::type>
716
  inline boolean isa_type(T subtype) const;
717
public:
718
  template <class T> inline boolean isa() const;
719
  template <class T> inline T as() const;
720
  inline isl::ctx ctx() const;
721
 
722
  inline isl::ast_expr arg(int pos) const;
723
  inline isl::ast_expr get_arg(int pos) const;
724
  inline class size n_arg() const;
725
  inline class size get_n_arg() const;
726
};
727
 
728
// declarations for isl::ast_expr_op_access
729
 
730
class ast_expr_op_access : public ast_expr_op {
731
  template <class T>
732
  friend boolean ast_expr_op::isa() const;
733
  friend ast_expr_op_access ast_expr_op::as<ast_expr_op_access>() const;
734
  static const auto type = isl_ast_expr_op_access;
735
 
736
protected:
737
  inline explicit ast_expr_op_access(__isl_take isl_ast_expr *ptr);
738
 
739
public:
740
  inline /* implicit */ ast_expr_op_access();
741
  inline /* implicit */ ast_expr_op_access(const ast_expr_op_access &obj);
742
  inline ast_expr_op_access &operator=(ast_expr_op_access obj);
743
  inline isl::ctx ctx() const;
744
 
745
};
746
 
747
// declarations for isl::ast_expr_op_add
748
 
749
class ast_expr_op_add : public ast_expr_op {
750
  template <class T>
751
  friend boolean ast_expr_op::isa() const;
752
  friend ast_expr_op_add ast_expr_op::as<ast_expr_op_add>() const;
753
  static const auto type = isl_ast_expr_op_add;
754
 
755
protected:
756
  inline explicit ast_expr_op_add(__isl_take isl_ast_expr *ptr);
757
 
758
public:
759
  inline /* implicit */ ast_expr_op_add();
760
  inline /* implicit */ ast_expr_op_add(const ast_expr_op_add &obj);
761
  inline ast_expr_op_add &operator=(ast_expr_op_add obj);
762
  inline isl::ctx ctx() const;
763
 
764
};
765
 
766
// declarations for isl::ast_expr_op_address_of
767
 
768
class ast_expr_op_address_of : public ast_expr_op {
769
  template <class T>
770
  friend boolean ast_expr_op::isa() const;
771
  friend ast_expr_op_address_of ast_expr_op::as<ast_expr_op_address_of>() const;
772
  static const auto type = isl_ast_expr_op_address_of;
773
 
774
protected:
775
  inline explicit ast_expr_op_address_of(__isl_take isl_ast_expr *ptr);
776
 
777
public:
778
  inline /* implicit */ ast_expr_op_address_of();
779
  inline /* implicit */ ast_expr_op_address_of(const ast_expr_op_address_of &obj);
780
  inline ast_expr_op_address_of &operator=(ast_expr_op_address_of obj);
781
  inline isl::ctx ctx() const;
782
 
783
};
784
 
785
// declarations for isl::ast_expr_op_and
786
 
787
class ast_expr_op_and : public ast_expr_op {
788
  template <class T>
789
  friend boolean ast_expr_op::isa() const;
790
  friend ast_expr_op_and ast_expr_op::as<ast_expr_op_and>() const;
791
  static const auto type = isl_ast_expr_op_and;
792
 
793
protected:
794
  inline explicit ast_expr_op_and(__isl_take isl_ast_expr *ptr);
795
 
796
public:
797
  inline /* implicit */ ast_expr_op_and();
798
  inline /* implicit */ ast_expr_op_and(const ast_expr_op_and &obj);
799
  inline ast_expr_op_and &operator=(ast_expr_op_and obj);
800
  inline isl::ctx ctx() const;
801
 
802
};
803
 
804
// declarations for isl::ast_expr_op_and_then
805
 
806
class ast_expr_op_and_then : public ast_expr_op {
807
  template <class T>
808
  friend boolean ast_expr_op::isa() const;
809
  friend ast_expr_op_and_then ast_expr_op::as<ast_expr_op_and_then>() const;
810
  static const auto type = isl_ast_expr_op_and_then;
811
 
812
protected:
813
  inline explicit ast_expr_op_and_then(__isl_take isl_ast_expr *ptr);
814
 
815
public:
816
  inline /* implicit */ ast_expr_op_and_then();
817
  inline /* implicit */ ast_expr_op_and_then(const ast_expr_op_and_then &obj);
818
  inline ast_expr_op_and_then &operator=(ast_expr_op_and_then obj);
819
  inline isl::ctx ctx() const;
820
 
821
};
822
 
823
// declarations for isl::ast_expr_op_call
824
 
825
class ast_expr_op_call : public ast_expr_op {
826
  template <class T>
827
  friend boolean ast_expr_op::isa() const;
828
  friend ast_expr_op_call ast_expr_op::as<ast_expr_op_call>() const;
829
  static const auto type = isl_ast_expr_op_call;
830
 
831
protected:
832
  inline explicit ast_expr_op_call(__isl_take isl_ast_expr *ptr);
833
 
834
public:
835
  inline /* implicit */ ast_expr_op_call();
836
  inline /* implicit */ ast_expr_op_call(const ast_expr_op_call &obj);
837
  inline ast_expr_op_call &operator=(ast_expr_op_call obj);
838
  inline isl::ctx ctx() const;
839
 
840
};
841
 
842
// declarations for isl::ast_expr_op_cond
843
 
844
class ast_expr_op_cond : public ast_expr_op {
845
  template <class T>
846
  friend boolean ast_expr_op::isa() const;
847
  friend ast_expr_op_cond ast_expr_op::as<ast_expr_op_cond>() const;
848
  static const auto type = isl_ast_expr_op_cond;
849
 
850
protected:
851
  inline explicit ast_expr_op_cond(__isl_take isl_ast_expr *ptr);
852
 
853
public:
854
  inline /* implicit */ ast_expr_op_cond();
855
  inline /* implicit */ ast_expr_op_cond(const ast_expr_op_cond &obj);
856
  inline ast_expr_op_cond &operator=(ast_expr_op_cond obj);
857
  inline isl::ctx ctx() const;
858
 
859
};
860
 
861
// declarations for isl::ast_expr_op_div
862
 
863
class ast_expr_op_div : public ast_expr_op {
864
  template <class T>
865
  friend boolean ast_expr_op::isa() const;
866
  friend ast_expr_op_div ast_expr_op::as<ast_expr_op_div>() const;
867
  static const auto type = isl_ast_expr_op_div;
868
 
869
protected:
870
  inline explicit ast_expr_op_div(__isl_take isl_ast_expr *ptr);
871
 
872
public:
873
  inline /* implicit */ ast_expr_op_div();
874
  inline /* implicit */ ast_expr_op_div(const ast_expr_op_div &obj);
875
  inline ast_expr_op_div &operator=(ast_expr_op_div obj);
876
  inline isl::ctx ctx() const;
877
 
878
};
879
 
880
// declarations for isl::ast_expr_op_eq
881
 
882
class ast_expr_op_eq : public ast_expr_op {
883
  template <class T>
884
  friend boolean ast_expr_op::isa() const;
885
  friend ast_expr_op_eq ast_expr_op::as<ast_expr_op_eq>() const;
886
  static const auto type = isl_ast_expr_op_eq;
887
 
888
protected:
889
  inline explicit ast_expr_op_eq(__isl_take isl_ast_expr *ptr);
890
 
891
public:
892
  inline /* implicit */ ast_expr_op_eq();
893
  inline /* implicit */ ast_expr_op_eq(const ast_expr_op_eq &obj);
894
  inline ast_expr_op_eq &operator=(ast_expr_op_eq obj);
895
  inline isl::ctx ctx() const;
896
 
897
};
898
 
899
// declarations for isl::ast_expr_op_fdiv_q
900
 
901
class ast_expr_op_fdiv_q : public ast_expr_op {
902
  template <class T>
903
  friend boolean ast_expr_op::isa() const;
904
  friend ast_expr_op_fdiv_q ast_expr_op::as<ast_expr_op_fdiv_q>() const;
905
  static const auto type = isl_ast_expr_op_fdiv_q;
906
 
907
protected:
908
  inline explicit ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr);
909
 
910
public:
911
  inline /* implicit */ ast_expr_op_fdiv_q();
912
  inline /* implicit */ ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj);
913
  inline ast_expr_op_fdiv_q &operator=(ast_expr_op_fdiv_q obj);
914
  inline isl::ctx ctx() const;
915
 
916
};
917
 
918
// declarations for isl::ast_expr_op_ge
919
 
920
class ast_expr_op_ge : public ast_expr_op {
921
  template <class T>
922
  friend boolean ast_expr_op::isa() const;
923
  friend ast_expr_op_ge ast_expr_op::as<ast_expr_op_ge>() const;
924
  static const auto type = isl_ast_expr_op_ge;
925
 
926
protected:
927
  inline explicit ast_expr_op_ge(__isl_take isl_ast_expr *ptr);
928
 
929
public:
930
  inline /* implicit */ ast_expr_op_ge();
931
  inline /* implicit */ ast_expr_op_ge(const ast_expr_op_ge &obj);
932
  inline ast_expr_op_ge &operator=(ast_expr_op_ge obj);
933
  inline isl::ctx ctx() const;
934
 
935
};
936
 
937
// declarations for isl::ast_expr_op_gt
938
 
939
class ast_expr_op_gt : public ast_expr_op {
940
  template <class T>
941
  friend boolean ast_expr_op::isa() const;
942
  friend ast_expr_op_gt ast_expr_op::as<ast_expr_op_gt>() const;
943
  static const auto type = isl_ast_expr_op_gt;
944
 
945
protected:
946
  inline explicit ast_expr_op_gt(__isl_take isl_ast_expr *ptr);
947
 
948
public:
949
  inline /* implicit */ ast_expr_op_gt();
950
  inline /* implicit */ ast_expr_op_gt(const ast_expr_op_gt &obj);
951
  inline ast_expr_op_gt &operator=(ast_expr_op_gt obj);
952
  inline isl::ctx ctx() const;
953
 
954
};
955
 
956
// declarations for isl::ast_expr_op_le
957
 
958
class ast_expr_op_le : public ast_expr_op {
959
  template <class T>
960
  friend boolean ast_expr_op::isa() const;
961
  friend ast_expr_op_le ast_expr_op::as<ast_expr_op_le>() const;
962
  static const auto type = isl_ast_expr_op_le;
963
 
964
protected:
965
  inline explicit ast_expr_op_le(__isl_take isl_ast_expr *ptr);
966
 
967
public:
968
  inline /* implicit */ ast_expr_op_le();
969
  inline /* implicit */ ast_expr_op_le(const ast_expr_op_le &obj);
970
  inline ast_expr_op_le &operator=(ast_expr_op_le obj);
971
  inline isl::ctx ctx() const;
972
 
973
};
974
 
975
// declarations for isl::ast_expr_op_lt
976
 
977
class ast_expr_op_lt : public ast_expr_op {
978
  template <class T>
979
  friend boolean ast_expr_op::isa() const;
980
  friend ast_expr_op_lt ast_expr_op::as<ast_expr_op_lt>() const;
981
  static const auto type = isl_ast_expr_op_lt;
982
 
983
protected:
984
  inline explicit ast_expr_op_lt(__isl_take isl_ast_expr *ptr);
985
 
986
public:
987
  inline /* implicit */ ast_expr_op_lt();
988
  inline /* implicit */ ast_expr_op_lt(const ast_expr_op_lt &obj);
989
  inline ast_expr_op_lt &operator=(ast_expr_op_lt obj);
990
  inline isl::ctx ctx() const;
991
 
992
};
993
 
994
// declarations for isl::ast_expr_op_max
995
 
996
class ast_expr_op_max : public ast_expr_op {
997
  template <class T>
998
  friend boolean ast_expr_op::isa() const;
999
  friend ast_expr_op_max ast_expr_op::as<ast_expr_op_max>() const;
1000
  static const auto type = isl_ast_expr_op_max;
1001
 
1002
protected:
1003
  inline explicit ast_expr_op_max(__isl_take isl_ast_expr *ptr);
1004
 
1005
public:
1006
  inline /* implicit */ ast_expr_op_max();
1007
  inline /* implicit */ ast_expr_op_max(const ast_expr_op_max &obj);
1008
  inline ast_expr_op_max &operator=(ast_expr_op_max obj);
1009
  inline isl::ctx ctx() const;
1010
 
1011
};
1012
 
1013
// declarations for isl::ast_expr_op_member
1014
 
1015
class ast_expr_op_member : public ast_expr_op {
1016
  template <class T>
1017
  friend boolean ast_expr_op::isa() const;
1018
  friend ast_expr_op_member ast_expr_op::as<ast_expr_op_member>() const;
1019
  static const auto type = isl_ast_expr_op_member;
1020
 
1021
protected:
1022
  inline explicit ast_expr_op_member(__isl_take isl_ast_expr *ptr);
1023
 
1024
public:
1025
  inline /* implicit */ ast_expr_op_member();
1026
  inline /* implicit */ ast_expr_op_member(const ast_expr_op_member &obj);
1027
  inline ast_expr_op_member &operator=(ast_expr_op_member obj);
1028
  inline isl::ctx ctx() const;
1029
 
1030
};
1031
 
1032
// declarations for isl::ast_expr_op_min
1033
 
1034
class ast_expr_op_min : public ast_expr_op {
1035
  template <class T>
1036
  friend boolean ast_expr_op::isa() const;
1037
  friend ast_expr_op_min ast_expr_op::as<ast_expr_op_min>() const;
1038
  static const auto type = isl_ast_expr_op_min;
1039
 
1040
protected:
1041
  inline explicit ast_expr_op_min(__isl_take isl_ast_expr *ptr);
1042
 
1043
public:
1044
  inline /* implicit */ ast_expr_op_min();
1045
  inline /* implicit */ ast_expr_op_min(const ast_expr_op_min &obj);
1046
  inline ast_expr_op_min &operator=(ast_expr_op_min obj);
1047
  inline isl::ctx ctx() const;
1048
 
1049
};
1050
 
1051
// declarations for isl::ast_expr_op_minus
1052
 
1053
class ast_expr_op_minus : public ast_expr_op {
1054
  template <class T>
1055
  friend boolean ast_expr_op::isa() const;
1056
  friend ast_expr_op_minus ast_expr_op::as<ast_expr_op_minus>() const;
1057
  static const auto type = isl_ast_expr_op_minus;
1058
 
1059
protected:
1060
  inline explicit ast_expr_op_minus(__isl_take isl_ast_expr *ptr);
1061
 
1062
public:
1063
  inline /* implicit */ ast_expr_op_minus();
1064
  inline /* implicit */ ast_expr_op_minus(const ast_expr_op_minus &obj);
1065
  inline ast_expr_op_minus &operator=(ast_expr_op_minus obj);
1066
  inline isl::ctx ctx() const;
1067
 
1068
};
1069
 
1070
// declarations for isl::ast_expr_op_mul
1071
 
1072
class ast_expr_op_mul : public ast_expr_op {
1073
  template <class T>
1074
  friend boolean ast_expr_op::isa() const;
1075
  friend ast_expr_op_mul ast_expr_op::as<ast_expr_op_mul>() const;
1076
  static const auto type = isl_ast_expr_op_mul;
1077
 
1078
protected:
1079
  inline explicit ast_expr_op_mul(__isl_take isl_ast_expr *ptr);
1080
 
1081
public:
1082
  inline /* implicit */ ast_expr_op_mul();
1083
  inline /* implicit */ ast_expr_op_mul(const ast_expr_op_mul &obj);
1084
  inline ast_expr_op_mul &operator=(ast_expr_op_mul obj);
1085
  inline isl::ctx ctx() const;
1086
 
1087
};
1088
 
1089
// declarations for isl::ast_expr_op_or
1090
 
1091
class ast_expr_op_or : public ast_expr_op {
1092
  template <class T>
1093
  friend boolean ast_expr_op::isa() const;
1094
  friend ast_expr_op_or ast_expr_op::as<ast_expr_op_or>() const;
1095
  static const auto type = isl_ast_expr_op_or;
1096
 
1097
protected:
1098
  inline explicit ast_expr_op_or(__isl_take isl_ast_expr *ptr);
1099
 
1100
public:
1101
  inline /* implicit */ ast_expr_op_or();
1102
  inline /* implicit */ ast_expr_op_or(const ast_expr_op_or &obj);
1103
  inline ast_expr_op_or &operator=(ast_expr_op_or obj);
1104
  inline isl::ctx ctx() const;
1105
 
1106
};
1107
 
1108
// declarations for isl::ast_expr_op_or_else
1109
 
1110
class ast_expr_op_or_else : public ast_expr_op {
1111
  template <class T>
1112
  friend boolean ast_expr_op::isa() const;
1113
  friend ast_expr_op_or_else ast_expr_op::as<ast_expr_op_or_else>() const;
1114
  static const auto type = isl_ast_expr_op_or_else;
1115
 
1116
protected:
1117
  inline explicit ast_expr_op_or_else(__isl_take isl_ast_expr *ptr);
1118
 
1119
public:
1120
  inline /* implicit */ ast_expr_op_or_else();
1121
  inline /* implicit */ ast_expr_op_or_else(const ast_expr_op_or_else &obj);
1122
  inline ast_expr_op_or_else &operator=(ast_expr_op_or_else obj);
1123
  inline isl::ctx ctx() const;
1124
 
1125
};
1126
 
1127
// declarations for isl::ast_expr_op_pdiv_q
1128
 
1129
class ast_expr_op_pdiv_q : public ast_expr_op {
1130
  template <class T>
1131
  friend boolean ast_expr_op::isa() const;
1132
  friend ast_expr_op_pdiv_q ast_expr_op::as<ast_expr_op_pdiv_q>() const;
1133
  static const auto type = isl_ast_expr_op_pdiv_q;
1134
 
1135
protected:
1136
  inline explicit ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr);
1137
 
1138
public:
1139
  inline /* implicit */ ast_expr_op_pdiv_q();
1140
  inline /* implicit */ ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj);
1141
  inline ast_expr_op_pdiv_q &operator=(ast_expr_op_pdiv_q obj);
1142
  inline isl::ctx ctx() const;
1143
 
1144
};
1145
 
1146
// declarations for isl::ast_expr_op_pdiv_r
1147
 
1148
class ast_expr_op_pdiv_r : public ast_expr_op {
1149
  template <class T>
1150
  friend boolean ast_expr_op::isa() const;
1151
  friend ast_expr_op_pdiv_r ast_expr_op::as<ast_expr_op_pdiv_r>() const;
1152
  static const auto type = isl_ast_expr_op_pdiv_r;
1153
 
1154
protected:
1155
  inline explicit ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr);
1156
 
1157
public:
1158
  inline /* implicit */ ast_expr_op_pdiv_r();
1159
  inline /* implicit */ ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj);
1160
  inline ast_expr_op_pdiv_r &operator=(ast_expr_op_pdiv_r obj);
1161
  inline isl::ctx ctx() const;
1162
 
1163
};
1164
 
1165
// declarations for isl::ast_expr_op_select
1166
 
1167
class ast_expr_op_select : public ast_expr_op {
1168
  template <class T>
1169
  friend boolean ast_expr_op::isa() const;
1170
  friend ast_expr_op_select ast_expr_op::as<ast_expr_op_select>() const;
1171
  static const auto type = isl_ast_expr_op_select;
1172
 
1173
protected:
1174
  inline explicit ast_expr_op_select(__isl_take isl_ast_expr *ptr);
1175
 
1176
public:
1177
  inline /* implicit */ ast_expr_op_select();
1178
  inline /* implicit */ ast_expr_op_select(const ast_expr_op_select &obj);
1179
  inline ast_expr_op_select &operator=(ast_expr_op_select obj);
1180
  inline isl::ctx ctx() const;
1181
 
1182
};
1183
 
1184
// declarations for isl::ast_expr_op_sub
1185
 
1186
class ast_expr_op_sub : public ast_expr_op {
1187
  template <class T>
1188
  friend boolean ast_expr_op::isa() const;
1189
  friend ast_expr_op_sub ast_expr_op::as<ast_expr_op_sub>() const;
1190
  static const auto type = isl_ast_expr_op_sub;
1191
 
1192
protected:
1193
  inline explicit ast_expr_op_sub(__isl_take isl_ast_expr *ptr);
1194
 
1195
public:
1196
  inline /* implicit */ ast_expr_op_sub();
1197
  inline /* implicit */ ast_expr_op_sub(const ast_expr_op_sub &obj);
1198
  inline ast_expr_op_sub &operator=(ast_expr_op_sub obj);
1199
  inline isl::ctx ctx() const;
1200
 
1201
};
1202
 
1203
// declarations for isl::ast_expr_op_zdiv_r
1204
 
1205
class ast_expr_op_zdiv_r : public ast_expr_op {
1206
  template <class T>
1207
  friend boolean ast_expr_op::isa() const;
1208
  friend ast_expr_op_zdiv_r ast_expr_op::as<ast_expr_op_zdiv_r>() const;
1209
  static const auto type = isl_ast_expr_op_zdiv_r;
1210
 
1211
protected:
1212
  inline explicit ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr);
1213
 
1214
public:
1215
  inline /* implicit */ ast_expr_op_zdiv_r();
1216
  inline /* implicit */ ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj);
1217
  inline ast_expr_op_zdiv_r &operator=(ast_expr_op_zdiv_r obj);
1218
  inline isl::ctx ctx() const;
1219
 
1220
};
1221
 
1222
// declarations for isl::ast_node
1223
inline ast_node manage(__isl_take isl_ast_node *ptr);
1224
inline ast_node manage_copy(__isl_keep isl_ast_node *ptr);
1225
 
1226
class ast_node {
1227
  friend inline ast_node manage(__isl_take isl_ast_node *ptr);
1228
  friend inline ast_node manage_copy(__isl_keep isl_ast_node *ptr);
1229
 
1230
protected:
1231
  isl_ast_node *ptr = nullptr;
1232
 
1233
  inline explicit ast_node(__isl_take isl_ast_node *ptr);
1234
 
1235
public:
1236
  inline /* implicit */ ast_node();
1237
  inline /* implicit */ ast_node(const ast_node &obj);
1238
  inline ast_node &operator=(ast_node obj);
1239
  inline ~ast_node();
1240
  inline __isl_give isl_ast_node *copy() const &;
1241
  inline __isl_give isl_ast_node *copy() && = delete;
1242
  inline __isl_keep isl_ast_node *get() const;
1243
  inline __isl_give isl_ast_node *release();
1244
  inline bool is_null() const;
1245
private:
1246
  template <typename T,
1247
          typename = typename std::enable_if<std::is_same<
1248
                  const decltype(isl_ast_node_get_type(nullptr)),
1249
                  const T>::value>::type>
1250
  inline boolean isa_type(T subtype) const;
1251
public:
1252
  template <class T> inline boolean isa() const;
1253
  template <class T> inline T as() const;
1254
  inline isl::ctx ctx() const;
1255
 
1256
  inline isl::id annotation() const;
1257
  inline isl::id get_annotation() const;
1258
  inline std::string to_C_str() const;
1259
  inline isl::ast_node_list to_list() const;
1260
};
1261
 
1262
// declarations for isl::ast_node_block
1263
 
1264
class ast_node_block : public ast_node {
1265
  template <class T>
1266
  friend boolean ast_node::isa() const;
1267
  friend ast_node_block ast_node::as<ast_node_block>() const;
1268
  static const auto type = isl_ast_node_block;
1269
 
1270
protected:
1271
  inline explicit ast_node_block(__isl_take isl_ast_node *ptr);
1272
 
1273
public:
1274
  inline /* implicit */ ast_node_block();
1275
  inline /* implicit */ ast_node_block(const ast_node_block &obj);
1276
  inline ast_node_block &operator=(ast_node_block obj);
1277
  inline isl::ctx ctx() const;
1278
 
1279
  inline isl::ast_node_list children() const;
1280
  inline isl::ast_node_list get_children() const;
1281
};
1282
 
1283
// declarations for isl::ast_node_for
1284
 
1285
class ast_node_for : public ast_node {
1286
  template <class T>
1287
  friend boolean ast_node::isa() const;
1288
  friend ast_node_for ast_node::as<ast_node_for>() const;
1289
  static const auto type = isl_ast_node_for;
1290
 
1291
protected:
1292
  inline explicit ast_node_for(__isl_take isl_ast_node *ptr);
1293
 
1294
public:
1295
  inline /* implicit */ ast_node_for();
1296
  inline /* implicit */ ast_node_for(const ast_node_for &obj);
1297
  inline ast_node_for &operator=(ast_node_for obj);
1298
  inline isl::ctx ctx() const;
1299
 
1300
  inline isl::ast_node body() const;
1301
  inline isl::ast_node get_body() const;
1302
  inline isl::ast_expr cond() const;
1303
  inline isl::ast_expr get_cond() const;
1304
  inline isl::ast_expr inc() const;
1305
  inline isl::ast_expr get_inc() const;
1306
  inline isl::ast_expr init() const;
1307
  inline isl::ast_expr get_init() const;
1308
  inline boolean is_degenerate() const;
1309
  inline isl::ast_expr iterator() const;
1310
  inline isl::ast_expr get_iterator() const;
1311
};
1312
 
1313
// declarations for isl::ast_node_if
1314
 
1315
class ast_node_if : public ast_node {
1316
  template <class T>
1317
  friend boolean ast_node::isa() const;
1318
  friend ast_node_if ast_node::as<ast_node_if>() const;
1319
  static const auto type = isl_ast_node_if;
1320
 
1321
protected:
1322
  inline explicit ast_node_if(__isl_take isl_ast_node *ptr);
1323
 
1324
public:
1325
  inline /* implicit */ ast_node_if();
1326
  inline /* implicit */ ast_node_if(const ast_node_if &obj);
1327
  inline ast_node_if &operator=(ast_node_if obj);
1328
  inline isl::ctx ctx() const;
1329
 
1330
  inline isl::ast_expr cond() const;
1331
  inline isl::ast_expr get_cond() const;
1332
  inline isl::ast_node else_node() const;
1333
  inline isl::ast_node get_else_node() const;
1334
  inline boolean has_else_node() const;
1335
  inline isl::ast_node then_node() const;
1336
  inline isl::ast_node get_then_node() const;
1337
};
1338
 
1339
// declarations for isl::ast_node_list
1340
inline ast_node_list manage(__isl_take isl_ast_node_list *ptr);
1341
inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr);
1342
 
1343
class ast_node_list {
1344
  friend inline ast_node_list manage(__isl_take isl_ast_node_list *ptr);
1345
  friend inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr);
1346
 
1347
protected:
1348
  isl_ast_node_list *ptr = nullptr;
1349
 
1350
  inline explicit ast_node_list(__isl_take isl_ast_node_list *ptr);
1351
 
1352
public:
1353
  inline /* implicit */ ast_node_list();
1354
  inline /* implicit */ ast_node_list(const ast_node_list &obj);
1355
  inline explicit ast_node_list(isl::ctx ctx, int n);
1356
  inline explicit ast_node_list(isl::ast_node el);
1357
  inline ast_node_list &operator=(ast_node_list obj);
1358
  inline ~ast_node_list();
1359
  inline __isl_give isl_ast_node_list *copy() const &;
1360
  inline __isl_give isl_ast_node_list *copy() && = delete;
1361
  inline __isl_keep isl_ast_node_list *get() const;
1362
  inline __isl_give isl_ast_node_list *release();
1363
  inline bool is_null() const;
1364
  inline isl::ctx ctx() const;
1365
 
1366
  inline isl::ast_node_list add(isl::ast_node el) const;
1367
  inline isl::ast_node at(int index) const;
1368
  inline isl::ast_node get_at(int index) const;
1369
  inline isl::ast_node_list clear() const;
1370
  inline isl::ast_node_list concat(isl::ast_node_list list2) const;
1371
  inline isl::ast_node_list drop(unsigned int first, unsigned int n) const;
1372
  inline stat foreach(const std::function<stat(isl::ast_node)> &fn) const;
1373
  inline isl::ast_node_list insert(unsigned int pos, isl::ast_node el) const;
1374
  inline class size size() const;
1375
};
1376
 
1377
// declarations for isl::ast_node_mark
1378
 
1379
class ast_node_mark : public ast_node {
1380
  template <class T>
1381
  friend boolean ast_node::isa() const;
1382
  friend ast_node_mark ast_node::as<ast_node_mark>() const;
1383
  static const auto type = isl_ast_node_mark;
1384
 
1385
protected:
1386
  inline explicit ast_node_mark(__isl_take isl_ast_node *ptr);
1387
 
1388
public:
1389
  inline /* implicit */ ast_node_mark();
1390
  inline /* implicit */ ast_node_mark(const ast_node_mark &obj);
1391
  inline ast_node_mark &operator=(ast_node_mark obj);
1392
  inline isl::ctx ctx() const;
1393
 
1394
  inline isl::id id() const;
1395
  inline isl::id get_id() const;
1396
  inline isl::ast_node node() const;
1397
  inline isl::ast_node get_node() const;
1398
};
1399
 
1400
// declarations for isl::ast_node_user
1401
 
1402
class ast_node_user : public ast_node {
1403
  template <class T>
1404
  friend boolean ast_node::isa() const;
1405
  friend ast_node_user ast_node::as<ast_node_user>() const;
1406
  static const auto type = isl_ast_node_user;
1407
 
1408
protected:
1409
  inline explicit ast_node_user(__isl_take isl_ast_node *ptr);
1410
 
1411
public:
1412
  inline /* implicit */ ast_node_user();
1413
  inline /* implicit */ ast_node_user(const ast_node_user &obj);
1414
  inline ast_node_user &operator=(ast_node_user obj);
1415
  inline isl::ctx ctx() const;
1416
 
1417
  inline isl::ast_expr expr() const;
1418
  inline isl::ast_expr get_expr() const;
1419
};
1420
 
1421
// declarations for isl::basic_map
1422
inline basic_map manage(__isl_take isl_basic_map *ptr);
1423
inline basic_map manage_copy(__isl_keep isl_basic_map *ptr);
1424
 
1425
class basic_map {
1426
  friend inline basic_map manage(__isl_take isl_basic_map *ptr);
1427
  friend inline basic_map manage_copy(__isl_keep isl_basic_map *ptr);
1428
 
1429
protected:
1430
  isl_basic_map *ptr = nullptr;
1431
 
1432
  inline explicit basic_map(__isl_take isl_basic_map *ptr);
1433
 
1434
public:
1435
  inline /* implicit */ basic_map();
1436
  inline /* implicit */ basic_map(const basic_map &obj);
1437
  inline explicit basic_map(isl::ctx ctx, const std::string &str);
1438
  inline basic_map &operator=(basic_map obj);
1439
  inline ~basic_map();
1440
  inline __isl_give isl_basic_map *copy() const &;
1441
  inline __isl_give isl_basic_map *copy() && = delete;
1442
  inline __isl_keep isl_basic_map *get() const;
1443
  inline __isl_give isl_basic_map *release();
1444
  inline bool is_null() const;
1445
  inline isl::ctx ctx() const;
1446
 
1447
  inline isl::map add_constraint(const isl::constraint &constraint) const;
1448
  inline isl::map add_dims(isl::dim type, unsigned int n) const;
1449
  inline isl::basic_map affine_hull() const;
1450
  inline isl::map align_params(const isl::space &model) const;
1451
  inline isl::basic_map apply_domain(isl::basic_map bmap2) const;
1452
  inline isl::map apply_domain(const isl::map &map2) const;
1453
  inline isl::union_map apply_domain(const isl::union_map &umap2) const;
1454
  inline isl::basic_map apply_range(isl::basic_map bmap2) const;
1455
  inline isl::map apply_range(const isl::map &map2) const;
1456
  inline isl::union_map apply_range(const isl::union_map &umap2) const;
1457
  inline isl::map as_map() const;
1458
  inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
1459
  inline isl::pw_multi_aff as_pw_multi_aff() const;
1460
  inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
1461
  inline isl::basic_map_list basic_map_list() const;
1462
  inline isl::set bind_domain(const isl::multi_id &tuple) const;
1463
  inline isl::set bind_range(const isl::multi_id &tuple) const;
1464
  inline boolean can_curry() const;
1465
  inline isl::map coalesce() const;
1466
  inline isl::map complement() const;
1467
  inline isl::union_map compute_divs() const;
1468
  inline isl::map curry() const;
1469
  inline isl::basic_set deltas() const;
1470
  inline isl::basic_map detect_equalities() const;
1471
  inline class size dim(isl::dim type) const;
1472
  inline isl::pw_aff dim_max(int pos) const;
1473
  inline isl::pw_aff dim_min(int pos) const;
1474
  inline isl::basic_set domain() const;
1475
  inline isl::map domain_factor_domain() const;
1476
  inline isl::map domain_factor_range() const;
1477
  inline isl::map domain_map() const;
1478
  inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
1479
  inline isl::map domain_product(const isl::map &map2) const;
1480
  inline isl::union_map domain_product(const isl::union_map &umap2) const;
1481
  inline class size domain_tuple_dim() const;
1482
  inline isl::id domain_tuple_id() const;
1483
  inline isl::map eq_at(const isl::multi_pw_aff &mpa) const;
1484
  inline isl::union_map eq_at(const isl::multi_union_pw_aff &mupa) const;
1485
  static inline isl::basic_map equal(isl::space space, unsigned int n_equal);
1486
  inline isl::basic_map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
1487
  inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
1488
  inline isl::map extract_map(const isl::space &space) const;
1489
  inline isl::map factor_domain() const;
1490
  inline isl::map factor_range() const;
1491
  inline isl::basic_map fix_si(isl::dim type, unsigned int pos, int value) const;
1492
  inline isl::basic_map fix_val(isl::dim type, unsigned int pos, isl::val v) const;
1493
  inline isl::basic_map fix_val(isl::dim type, unsigned int pos, long v) const;
1494
  inline isl::union_map fixed_power(const isl::val &exp) const;
1495
  inline isl::union_map fixed_power(long exp) const;
1496
  inline isl::map flat_range_product(const isl::map &map2) const;
1497
  inline isl::union_map flat_range_product(const isl::union_map &umap2) const;
1498
  inline isl::basic_map flatten() const;
1499
  inline isl::basic_map flatten_domain() const;
1500
  inline isl::basic_map flatten_range() const;
1501
  inline isl::map floordiv_val(const isl::val &d) const;
1502
  inline isl::map floordiv_val(long d) const;
1503
  inline stat foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const;
1504
  inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
1505
  static inline isl::basic_map from_aff(isl::aff aff);
1506
  static inline isl::basic_map from_domain_and_range(isl::basic_set domain, isl::basic_set range);
1507
  inline isl::basic_map gist(isl::basic_map context) const;
1508
  inline isl::map gist(const isl::map &context) const;
1509
  inline isl::union_map gist(const isl::union_map &context) const;
1510
  inline isl::map gist_domain(const isl::set &context) const;
1511
  inline isl::union_map gist_domain(const isl::union_set &uset) const;
1512
  inline isl::map gist_params(const isl::set &context) const;
1513
  inline isl::union_map gist_range(const isl::union_set &uset) const;
1514
  inline boolean has_domain_tuple_id() const;
1515
  inline boolean has_equal_space(const isl::map &map2) const;
1516
  inline boolean has_range_tuple_id() const;
1517
  inline boolean has_tuple_id(isl::dim type) const;
1518
  inline boolean has_tuple_name(isl::dim type) const;
1519
  inline isl::basic_map intersect(isl::basic_map bmap2) const;
1520
  inline isl::map intersect(const isl::map &map2) const;
1521
  inline isl::union_map intersect(const isl::union_map &umap2) const;
1522
  inline isl::basic_map intersect_domain(isl::basic_set bset) const;
1523
  inline isl::map intersect_domain(const isl::set &set) const;
1524
  inline isl::union_map intersect_domain(const isl::space &space) const;
1525
  inline isl::union_map intersect_domain(const isl::union_set &uset) const;
1526
  inline isl::basic_map intersect_domain(const isl::point &bset) const;
1527
  inline isl::map intersect_domain_factor_domain(const isl::map &factor) const;
1528
  inline isl::union_map intersect_domain_factor_domain(const isl::union_map &factor) const;
1529
  inline isl::map intersect_domain_factor_range(const isl::map &factor) const;
1530
  inline isl::union_map intersect_domain_factor_range(const isl::union_map &factor) const;
1531
  inline isl::map intersect_params(const isl::set &params) const;
1532
  inline isl::basic_map intersect_range(isl::basic_set bset) const;
1533
  inline isl::map intersect_range(const isl::set &set) const;
1534
  inline isl::union_map intersect_range(const isl::space &space) const;
1535
  inline isl::union_map intersect_range(const isl::union_set &uset) const;
1536
  inline isl::basic_map intersect_range(const isl::point &bset) const;
1537
  inline isl::map intersect_range_factor_domain(const isl::map &factor) const;
1538
  inline isl::union_map intersect_range_factor_domain(const isl::union_map &factor) const;
1539
  inline isl::map intersect_range_factor_range(const isl::map &factor) const;
1540
  inline isl::union_map intersect_range_factor_range(const isl::union_map &factor) const;
1541
  inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
1542
  inline boolean is_bijective() const;
1543
  inline boolean is_disjoint(const isl::map &map2) const;
1544
  inline boolean is_disjoint(const isl::union_map &umap2) const;
1545
  inline boolean is_empty() const;
1546
  inline boolean is_equal(const isl::basic_map &bmap2) const;
1547
  inline boolean is_equal(const isl::map &map2) const;
1548
  inline boolean is_equal(const isl::union_map &umap2) const;
1549
  inline boolean is_injective() const;
1550
  inline boolean is_single_valued() const;
1551
  inline boolean is_strict_subset(const isl::map &map2) const;
1552
  inline boolean is_strict_subset(const isl::union_map &umap2) const;
1553
  inline boolean is_subset(const isl::basic_map &bmap2) const;
1554
  inline boolean is_subset(const isl::map &map2) const;
1555
  inline boolean is_subset(const isl::union_map &umap2) const;
1556
  inline boolean isa_map() const;
1557
  inline isl::map lex_ge_at(const isl::multi_pw_aff &mpa) const;
1558
  inline isl::map lex_gt_at(const isl::multi_pw_aff &mpa) const;
1559
  inline isl::map lex_le_at(const isl::multi_pw_aff &mpa) const;
1560
  inline isl::map lex_lt_at(const isl::multi_pw_aff &mpa) const;
1561
  inline isl::map lexmax() const;
1562
  inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
1563
  inline isl::map lexmin() const;
1564
  inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
1565
  inline isl::map lower_bound(const isl::multi_pw_aff &lower) const;
1566
  inline isl::map lower_bound_si(isl::dim type, unsigned int pos, int value) const;
1567
  inline isl::map_list map_list() const;
1568
  inline isl::multi_pw_aff max_multi_pw_aff() const;
1569
  inline isl::multi_pw_aff min_multi_pw_aff() const;
1570
  inline isl::map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const;
1571
  inline class size n_basic_map() const;
1572
  inline isl::map order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
1573
  inline isl::set params() const;
1574
  inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
1575
  inline isl::basic_map polyhedral_hull() const;
1576
  inline isl::map preimage_domain(const isl::multi_aff &ma) const;
1577
  inline isl::map preimage_domain(const isl::multi_pw_aff &mpa) const;
1578
  inline isl::map preimage_domain(const isl::pw_multi_aff &pma) const;
1579
  inline isl::union_map preimage_domain(const isl::union_pw_multi_aff &upma) const;
1580
  inline isl::map preimage_range(const isl::multi_aff &ma) const;
1581
  inline isl::map preimage_range(const isl::pw_multi_aff &pma) const;
1582
  inline isl::union_map preimage_range(const isl::union_pw_multi_aff &upma) const;
1583
  inline isl::map product(const isl::map &map2) const;
1584
  inline isl::union_map product(const isl::union_map &umap2) const;
1585
  inline isl::map project_out(isl::dim type, unsigned int first, unsigned int n) const;
1586
  inline isl::map project_out_all_params() const;
1587
  inline isl::set range() const;
1588
  inline isl::map range_factor_domain() const;
1589
  inline isl::map range_factor_range() const;
1590
  inline isl::fixed_box range_lattice_tile() const;
1591
  inline isl::map range_map() const;
1592
  inline isl::map range_product(const isl::map &map2) const;
1593
  inline isl::union_map range_product(const isl::union_map &umap2) const;
1594
  inline isl::map range_reverse() const;
1595
  inline isl::fixed_box range_simple_fixed_box_hull() const;
1596
  inline class size range_tuple_dim() const;
1597
  inline isl::id range_tuple_id() const;
1598
  inline isl::basic_map reverse() const;
1599
  inline isl::basic_map sample() const;
1600
  inline isl::map set_domain_tuple(const isl::id &id) const;
1601
  inline isl::map set_domain_tuple(const std::string &id) const;
1602
  inline isl::map set_range_tuple(const isl::id &id) const;
1603
  inline isl::map set_range_tuple(const std::string &id) const;
1604
  inline isl::map set_tuple_id(isl::dim type, const isl::id &id) const;
1605
  inline isl::map set_tuple_id(isl::dim type, const std::string &id) const;
1606
  inline isl::space space() const;
1607
  inline isl::map subtract(const isl::map &map2) const;
1608
  inline isl::union_map subtract(const isl::union_map &umap2) const;
1609
  inline isl::union_map subtract_domain(const isl::union_set &dom) const;
1610
  inline isl::union_map subtract_range(const isl::union_set &dom) const;
1611
  inline isl::map sum(const isl::map &map2) const;
1612
  inline isl::basic_map_list to_list() const;
1613
  inline isl::union_map to_union_map() const;
1614
  inline isl::id tuple_id(isl::dim type) const;
1615
  inline isl::map uncurry() const;
1616
  inline isl::map unite(isl::basic_map bmap2) const;
1617
  inline isl::map unite(const isl::map &map2) const;
1618
  inline isl::union_map unite(const isl::union_map &umap2) const;
1619
  static inline isl::basic_map universe(isl::space space);
1620
  inline isl::basic_map unshifted_simple_hull() const;
1621
  inline isl::map upper_bound(const isl::multi_pw_aff &upper) const;
1622
  inline isl::map upper_bound_si(isl::dim type, unsigned int pos, int value) const;
1623
  inline isl::set wrap() const;
1624
  inline isl::map zip() const;
1625
};
1626
 
1627
// declarations for isl::basic_map_list
1628
inline basic_map_list manage(__isl_take isl_basic_map_list *ptr);
1629
inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr);
1630
 
1631
class basic_map_list {
1632
  friend inline basic_map_list manage(__isl_take isl_basic_map_list *ptr);
1633
  friend inline basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr);
1634
 
1635
protected:
1636
  isl_basic_map_list *ptr = nullptr;
1637
 
1638
  inline explicit basic_map_list(__isl_take isl_basic_map_list *ptr);
1639
 
1640
public:
1641
  inline /* implicit */ basic_map_list();
1642
  inline /* implicit */ basic_map_list(const basic_map_list &obj);
1643
  inline explicit basic_map_list(isl::ctx ctx, int n);
1644
  inline explicit basic_map_list(isl::basic_map el);
1645
  inline basic_map_list &operator=(basic_map_list obj);
1646
  inline ~basic_map_list();
1647
  inline __isl_give isl_basic_map_list *copy() const &;
1648
  inline __isl_give isl_basic_map_list *copy() && = delete;
1649
  inline __isl_keep isl_basic_map_list *get() const;
1650
  inline __isl_give isl_basic_map_list *release();
1651
  inline bool is_null() const;
1652
  inline isl::ctx ctx() const;
1653
 
1654
  inline isl::basic_map_list add(isl::basic_map el) const;
1655
  inline isl::basic_map at(int index) const;
1656
  inline isl::basic_map get_at(int index) const;
1657
  inline isl::basic_map_list clear() const;
1658
  inline isl::basic_map_list concat(isl::basic_map_list list2) const;
1659
  inline isl::basic_map_list drop(unsigned int first, unsigned int n) const;
1660
  inline stat foreach(const std::function<stat(isl::basic_map)> &fn) const;
1661
  inline isl::basic_map_list insert(unsigned int pos, isl::basic_map el) const;
1662
  inline class size size() const;
1663
};
1664
 
1665
// declarations for isl::basic_set
1666
inline basic_set manage(__isl_take isl_basic_set *ptr);
1667
inline basic_set manage_copy(__isl_keep isl_basic_set *ptr);
1668
 
1669
class basic_set {
1670
  friend inline basic_set manage(__isl_take isl_basic_set *ptr);
1671
  friend inline basic_set manage_copy(__isl_keep isl_basic_set *ptr);
1672
 
1673
protected:
1674
  isl_basic_set *ptr = nullptr;
1675
 
1676
  inline explicit basic_set(__isl_take isl_basic_set *ptr);
1677
 
1678
public:
1679
  inline /* implicit */ basic_set();
1680
  inline /* implicit */ basic_set(const basic_set &obj);
1681
  inline /* implicit */ basic_set(isl::point pnt);
1682
  inline explicit basic_set(isl::ctx ctx, const std::string &str);
1683
  inline basic_set &operator=(basic_set obj);
1684
  inline ~basic_set();
1685
  inline __isl_give isl_basic_set *copy() const &;
1686
  inline __isl_give isl_basic_set *copy() && = delete;
1687
  inline __isl_keep isl_basic_set *get() const;
1688
  inline __isl_give isl_basic_set *release();
1689
  inline bool is_null() const;
1690
  inline isl::ctx ctx() const;
1691
 
1692
  inline isl::set add_constraint(const isl::constraint &constraint) const;
1693
  inline isl::set add_dims(isl::dim type, unsigned int n) const;
1694
  inline isl::basic_set affine_hull() const;
1695
  inline isl::set align_params(const isl::space &model) const;
1696
  inline isl::basic_set apply(isl::basic_map bmap) const;
1697
  inline isl::set apply(const isl::map &map) const;
1698
  inline isl::union_set apply(const isl::union_map &umap) const;
1699
  inline isl::pw_multi_aff as_pw_multi_aff() const;
1700
  inline isl::set as_set() const;
1701
  inline isl::basic_set_list basic_set_list() const;
1702
  inline isl::set bind(const isl::multi_id &tuple) const;
1703
  inline isl::set coalesce() const;
1704
  inline isl::set complement() const;
1705
  inline isl::union_set compute_divs() const;
1706
  inline boolean contains(const isl::space &space) const;
1707
  inline isl::basic_set convex_hull() const;
1708
  inline isl::basic_set detect_equalities() const;
1709
  inline class size dim(isl::dim type) const;
1710
  inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
1711
  inline isl::id dim_id(isl::dim type, unsigned int pos) const;
1712
  inline isl::pw_aff dim_max(int pos) const;
1713
  inline isl::val dim_max_val(int pos) const;
1714
  inline isl::pw_aff dim_min(int pos) const;
1715
  inline isl::val dim_min_val(int pos) const;
1716
  inline std::string dim_name(isl::dim type, unsigned int pos) const;
1717
  inline isl::aff div(int pos) const;
1718
  inline isl::aff get_div(int pos) const;
1719
  inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
1720
  inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
1721
  inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
1722
  inline isl::set extract_set(const isl::space &space) const;
1723
  inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
1724
  inline int find_dim_by_id(isl::dim type, const std::string &id) const;
1725
  inline isl::basic_set fix_si(isl::dim type, unsigned int pos, int value) const;
1726
  inline isl::basic_set fix_val(isl::dim type, unsigned int pos, isl::val v) const;
1727
  inline isl::basic_set fix_val(isl::dim type, unsigned int pos, long v) const;
1728
  inline isl::basic_set flatten() const;
1729
  inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
1730
  inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
1731
  inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
1732
  inline isl::basic_set gist(isl::basic_set context) const;
1733
  inline isl::set gist(const isl::set &context) const;
1734
  inline isl::union_set gist(const isl::union_set &context) const;
1735
  inline isl::basic_set gist(const isl::point &context) const;
1736
  inline isl::set gist_params(const isl::set &context) const;
1737
  inline boolean has_equal_space(const isl::set &set2) const;
1738
  inline isl::map identity() const;
1739
  inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
1740
  inline isl::pw_aff indicator_function() const;
1741
  inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
1742
  inline isl::map insert_domain(const isl::space &domain) const;
1743
  inline isl::basic_set intersect(isl::basic_set bset2) const;
1744
  inline isl::set intersect(const isl::set &set2) const;
1745
  inline isl::union_set intersect(const isl::union_set &uset2) const;
1746
  inline isl::basic_set intersect(const isl::point &bset2) const;
1747
  inline isl::basic_set intersect_params(isl::basic_set bset2) const;
1748
  inline isl::set intersect_params(const isl::set &params) const;
1749
  inline isl::basic_set intersect_params(const isl::point &bset2) const;
1750
  inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
1751
  inline boolean involves_locals() const;
1752
  inline boolean is_bounded() const;
1753
  inline boolean is_disjoint(const isl::set &set2) const;
1754
  inline boolean is_disjoint(const isl::union_set &uset2) const;
1755
  inline boolean is_empty() const;
1756
  inline boolean is_equal(const isl::basic_set &bset2) const;
1757
  inline boolean is_equal(const isl::set &set2) const;
1758
  inline boolean is_equal(const isl::union_set &uset2) const;
1759
  inline boolean is_equal(const isl::point &bset2) const;
1760
  inline boolean is_params() const;
1761
  inline boolean is_singleton() const;
1762
  inline boolean is_strict_subset(const isl::set &set2) const;
1763
  inline boolean is_strict_subset(const isl::union_set &uset2) const;
1764
  inline boolean is_subset(const isl::basic_set &bset2) const;
1765
  inline boolean is_subset(const isl::set &set2) const;
1766
  inline boolean is_subset(const isl::union_set &uset2) const;
1767
  inline boolean is_subset(const isl::point &bset2) const;
1768
  inline boolean is_wrapping() const;
1769
  inline boolean isa_set() const;
1770
  inline isl::set lexmax() const;
1771
  inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
1772
  inline isl::set lexmin() const;
1773
  inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
1774
  inline isl::set lower_bound(const isl::multi_pw_aff &lower) const;
1775
  inline isl::set lower_bound(const isl::multi_val &lower) const;
1776
  inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
1777
  inline isl::set lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
1778
  inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
1779
  inline isl::multi_pw_aff max_multi_pw_aff() const;
1780
  inline isl::val max_val(const isl::aff &obj) const;
1781
  inline isl::multi_pw_aff min_multi_pw_aff() const;
1782
  inline isl::val min_val(const isl::aff &obj) const;
1783
  inline class size n_basic_set() const;
1784
  inline isl::basic_set params() const;
1785
  inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
1786
  inline isl::multi_val plain_multi_val_if_fixed() const;
1787
  inline isl::basic_set polyhedral_hull() const;
1788
  inline isl::set preimage(const isl::multi_aff &ma) const;
1789
  inline isl::set preimage(const isl::multi_pw_aff &mpa) const;
1790
  inline isl::set preimage(const isl::pw_multi_aff &pma) const;
1791
  inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
1792
  inline isl::set product(const isl::set &set2) const;
1793
  inline isl::basic_set project_out(isl::dim type, unsigned int first, unsigned int n) const;
1794
  inline isl::set project_out_all_params() const;
1795
  inline isl::set project_out_param(const isl::id &id) const;
1796
  inline isl::set project_out_param(const std::string &id) const;
1797
  inline isl::set project_out_param(const isl::id_list &list) const;
1798
  inline isl::pw_multi_aff pw_multi_aff_on_domain(const isl::multi_val &mv) const;
1799
  inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
1800
  inline isl::set remove_divs() const;
1801
  inline isl::set remove_redundancies() const;
1802
  inline isl::set reset_tuple_id() const;
1803
  inline isl::basic_set sample() const;
1804
  inline isl::point sample_point() const;
1805
  inline isl::set set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const;
1806
  inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
1807
  inline isl::set_list set_list() const;
1808
  inline isl::set set_tuple_id(const isl::id &id) const;
1809
  inline isl::set set_tuple_id(const std::string &id) const;
1810
  inline isl::fixed_box simple_fixed_box_hull() const;
1811
  inline isl::basic_set simple_hull() const;
1812
  inline isl::space space() const;
1813
  inline isl::space get_space() const;
1814
  inline isl::val stride(int pos) const;
1815
  inline isl::set subtract(const isl::set &set2) const;
1816
  inline isl::union_set subtract(const isl::union_set &uset2) const;
1817
  inline isl::basic_set_list to_list() const;
1818
  inline isl::set to_set() const;
1819
  inline isl::union_set to_union_set() const;
1820
  inline isl::map translation() const;
1821
  inline class size tuple_dim() const;
1822
  inline isl::id tuple_id() const;
1823
  inline std::string tuple_name() const;
1824
  inline isl::set unbind_params(const isl::multi_id &tuple) const;
1825
  inline isl::map unbind_params_insert_domain(const isl::multi_id &domain) const;
1826
  inline isl::set unite(isl::basic_set bset2) const;
1827
  inline isl::set unite(const isl::set &set2) const;
1828
  inline isl::union_set unite(const isl::union_set &uset2) const;
1829
  inline isl::set unite(const isl::point &bset2) const;
1830
  static inline isl::basic_set universe(isl::space space);
1831
  inline isl::basic_set unshifted_simple_hull() const;
1832
  inline isl::map unwrap() const;
1833
  inline isl::set upper_bound(const isl::multi_pw_aff &upper) const;
1834
  inline isl::set upper_bound(const isl::multi_val &upper) const;
1835
  inline isl::set upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
1836
  inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
1837
};
1838
 
1839
// declarations for isl::basic_set_list
1840
inline basic_set_list manage(__isl_take isl_basic_set_list *ptr);
1841
inline basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr);
1842
 
1843
class basic_set_list {
1844
  friend inline basic_set_list manage(__isl_take isl_basic_set_list *ptr);
1845
  friend inline basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr);
1846
 
1847
protected:
1848
  isl_basic_set_list *ptr = nullptr;
1849
 
1850
  inline explicit basic_set_list(__isl_take isl_basic_set_list *ptr);
1851
 
1852
public:
1853
  inline /* implicit */ basic_set_list();
1854
  inline /* implicit */ basic_set_list(const basic_set_list &obj);
1855
  inline explicit basic_set_list(isl::ctx ctx, int n);
1856
  inline explicit basic_set_list(isl::basic_set el);
1857
  inline basic_set_list &operator=(basic_set_list obj);
1858
  inline ~basic_set_list();
1859
  inline __isl_give isl_basic_set_list *copy() const &;
1860
  inline __isl_give isl_basic_set_list *copy() && = delete;
1861
  inline __isl_keep isl_basic_set_list *get() const;
1862
  inline __isl_give isl_basic_set_list *release();
1863
  inline bool is_null() const;
1864
  inline isl::ctx ctx() const;
1865
 
1866
  inline isl::basic_set_list add(isl::basic_set el) const;
1867
  inline isl::basic_set at(int index) const;
1868
  inline isl::basic_set get_at(int index) const;
1869
  inline isl::basic_set_list clear() const;
1870
  inline isl::basic_set_list concat(isl::basic_set_list list2) const;
1871
  inline isl::basic_set_list drop(unsigned int first, unsigned int n) const;
1872
  inline stat foreach(const std::function<stat(isl::basic_set)> &fn) const;
1873
  inline isl::basic_set_list insert(unsigned int pos, isl::basic_set el) const;
1874
  inline class size size() const;
1875
};
1876
 
1877
// declarations for isl::constraint
1878
inline constraint manage(__isl_take isl_constraint *ptr);
1879
inline constraint manage_copy(__isl_keep isl_constraint *ptr);
1880
 
1881
class constraint {
1882
  friend inline constraint manage(__isl_take isl_constraint *ptr);
1883
  friend inline constraint manage_copy(__isl_keep isl_constraint *ptr);
1884
 
1885
protected:
1886
  isl_constraint *ptr = nullptr;
1887
 
1888
  inline explicit constraint(__isl_take isl_constraint *ptr);
1889
 
1890
public:
1891
  inline /* implicit */ constraint();
1892
  inline /* implicit */ constraint(const constraint &obj);
1893
  inline constraint &operator=(constraint obj);
1894
  inline ~constraint();
1895
  inline __isl_give isl_constraint *copy() const &;
1896
  inline __isl_give isl_constraint *copy() && = delete;
1897
  inline __isl_keep isl_constraint *get() const;
1898
  inline __isl_give isl_constraint *release();
1899
  inline bool is_null() const;
1900
  inline isl::ctx ctx() const;
1901
 
1902
  static inline isl::constraint alloc_equality(isl::local_space ls);
1903
  static inline isl::constraint alloc_inequality(isl::local_space ls);
1904
  inline isl::constraint set_coefficient_si(isl::dim type, int pos, int v) const;
1905
  inline isl::constraint set_constant_si(int v) const;
1906
  inline isl::constraint set_constant_val(isl::val v) const;
1907
  inline isl::constraint set_constant_val(long v) const;
1908
};
1909
 
1910
// declarations for isl::fixed_box
1911
inline fixed_box manage(__isl_take isl_fixed_box *ptr);
1912
inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr);
1913
 
1914
class fixed_box {
1915
  friend inline fixed_box manage(__isl_take isl_fixed_box *ptr);
1916
  friend inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr);
1917
 
1918
protected:
1919
  isl_fixed_box *ptr = nullptr;
1920
 
1921
  inline explicit fixed_box(__isl_take isl_fixed_box *ptr);
1922
 
1923
public:
1924
  inline /* implicit */ fixed_box();
1925
  inline /* implicit */ fixed_box(const fixed_box &obj);
1926
  inline fixed_box &operator=(fixed_box obj);
1927
  inline ~fixed_box();
1928
  inline __isl_give isl_fixed_box *copy() const &;
1929
  inline __isl_give isl_fixed_box *copy() && = delete;
1930
  inline __isl_keep isl_fixed_box *get() const;
1931
  inline __isl_give isl_fixed_box *release();
1932
  inline bool is_null() const;
1933
  inline isl::ctx ctx() const;
1934
 
1935
  inline boolean is_valid() const;
1936
  inline isl::multi_aff offset() const;
1937
  inline isl::multi_aff get_offset() const;
1938
  inline isl::multi_val size() const;
1939
  inline isl::multi_val get_size() const;
1940
  inline isl::space space() const;
1941
  inline isl::space get_space() const;
1942
};
1943
 
1944
// declarations for isl::id
1945
inline id manage(__isl_take isl_id *ptr);
1946
inline id manage_copy(__isl_keep isl_id *ptr);
1947
 
1948
class id {
1949
  friend inline id manage(__isl_take isl_id *ptr);
1950
  friend inline id manage_copy(__isl_keep isl_id *ptr);
1951
 
1952
protected:
1953
  isl_id *ptr = nullptr;
1954
 
1955
  inline explicit id(__isl_take isl_id *ptr);
1956
 
1957
public:
1958
  inline /* implicit */ id();
1959
  inline /* implicit */ id(const id &obj);
1960
  inline explicit id(isl::ctx ctx, const std::string &str);
1961
  inline id &operator=(id obj);
1962
  inline ~id();
1963
  inline __isl_give isl_id *copy() const &;
1964
  inline __isl_give isl_id *copy() && = delete;
1965
  inline __isl_keep isl_id *get() const;
1966
  inline __isl_give isl_id *release();
1967
  inline bool is_null() const;
1968
  inline isl::ctx ctx() const;
1969
 
1970
  static inline isl::id alloc(isl::ctx ctx, const std::string &name, void * user);
1971
  inline std::string name() const;
1972
  inline std::string get_name() const;
1973
  inline isl::id_list to_list() const;
1974
  inline void * user() const;
1975
  inline void * get_user() const;
1976
};
1977
 
1978
// declarations for isl::id_list
1979
inline id_list manage(__isl_take isl_id_list *ptr);
1980
inline id_list manage_copy(__isl_keep isl_id_list *ptr);
1981
 
1982
class id_list {
1983
  friend inline id_list manage(__isl_take isl_id_list *ptr);
1984
  friend inline id_list manage_copy(__isl_keep isl_id_list *ptr);
1985
 
1986
protected:
1987
  isl_id_list *ptr = nullptr;
1988
 
1989
  inline explicit id_list(__isl_take isl_id_list *ptr);
1990
 
1991
public:
1992
  inline /* implicit */ id_list();
1993
  inline /* implicit */ id_list(const id_list &obj);
1994
  inline explicit id_list(isl::ctx ctx, int n);
1995
  inline explicit id_list(isl::id el);
1996
  inline explicit id_list(isl::ctx ctx, const std::string &str);
1997
  inline id_list &operator=(id_list obj);
1998
  inline ~id_list();
1999
  inline __isl_give isl_id_list *copy() const &;
2000
  inline __isl_give isl_id_list *copy() && = delete;
2001
  inline __isl_keep isl_id_list *get() const;
2002
  inline __isl_give isl_id_list *release();
2003
  inline bool is_null() const;
2004
  inline isl::ctx ctx() const;
2005
 
2006
  inline isl::id_list add(isl::id el) const;
2007
  inline isl::id_list add(const std::string &el) const;
2008
  inline isl::id at(int index) const;
2009
  inline isl::id get_at(int index) const;
2010
  inline isl::id_list clear() const;
2011
  inline isl::id_list concat(isl::id_list list2) const;
2012
  inline isl::id_list drop(unsigned int first, unsigned int n) const;
2013
  inline stat foreach(const std::function<stat(isl::id)> &fn) const;
2014
  inline isl::id_list insert(unsigned int pos, isl::id el) const;
2015
  inline isl::id_list insert(unsigned int pos, const std::string &el) const;
2016
  inline class size size() const;
2017
};
2018
 
2019
// declarations for isl::id_to_ast_expr
2020
inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr);
2021
inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr);
2022
 
2023
class id_to_ast_expr {
2024
  friend inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr);
2025
  friend inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr);
2026
 
2027
protected:
2028
  isl_id_to_ast_expr *ptr = nullptr;
2029
 
2030
  inline explicit id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr);
2031
 
2032
public:
2033
  inline /* implicit */ id_to_ast_expr();
2034
  inline /* implicit */ id_to_ast_expr(const id_to_ast_expr &obj);
2035
  inline id_to_ast_expr &operator=(id_to_ast_expr obj);
2036
  inline ~id_to_ast_expr();
2037
  inline __isl_give isl_id_to_ast_expr *copy() const &;
2038
  inline __isl_give isl_id_to_ast_expr *copy() && = delete;
2039
  inline __isl_keep isl_id_to_ast_expr *get() const;
2040
  inline __isl_give isl_id_to_ast_expr *release();
2041
  inline bool is_null() const;
2042
  inline isl::ctx ctx() const;
2043
 
2044
  static inline isl::id_to_ast_expr alloc(isl::ctx ctx, int min_size);
2045
  inline isl::id_to_ast_expr set(isl::id key, isl::ast_expr val) const;
2046
  inline isl::id_to_ast_expr set(const std::string &key, const isl::ast_expr &val) const;
2047
};
2048
 
2049
// declarations for isl::local_space
2050
inline local_space manage(__isl_take isl_local_space *ptr);
2051
inline local_space manage_copy(__isl_keep isl_local_space *ptr);
2052
 
2053
class local_space {
2054
  friend inline local_space manage(__isl_take isl_local_space *ptr);
2055
  friend inline local_space manage_copy(__isl_keep isl_local_space *ptr);
2056
 
2057
protected:
2058
  isl_local_space *ptr = nullptr;
2059
 
2060
  inline explicit local_space(__isl_take isl_local_space *ptr);
2061
 
2062
public:
2063
  inline /* implicit */ local_space();
2064
  inline /* implicit */ local_space(const local_space &obj);
2065
  inline explicit local_space(isl::space space);
2066
  inline local_space &operator=(local_space obj);
2067
  inline ~local_space();
2068
  inline __isl_give isl_local_space *copy() const &;
2069
  inline __isl_give isl_local_space *copy() && = delete;
2070
  inline __isl_keep isl_local_space *get() const;
2071
  inline __isl_give isl_local_space *release();
2072
  inline bool is_null() const;
2073
  inline isl::ctx ctx() const;
2074
 
2075
};
2076
 
2077
// declarations for isl::map
2078
inline map manage(__isl_take isl_map *ptr);
2079
inline map manage_copy(__isl_keep isl_map *ptr);
2080
 
2081
class map {
2082
  friend inline map manage(__isl_take isl_map *ptr);
2083
  friend inline map manage_copy(__isl_keep isl_map *ptr);
2084
 
2085
protected:
2086
  isl_map *ptr = nullptr;
2087
 
2088
  inline explicit map(__isl_take isl_map *ptr);
2089
 
2090
public:
2091
  inline /* implicit */ map();
2092
  inline /* implicit */ map(const map &obj);
2093
  inline /* implicit */ map(isl::basic_map bmap);
2094
  inline explicit map(isl::ctx ctx, const std::string &str);
2095
  inline map &operator=(map obj);
2096
  inline ~map();
2097
  inline __isl_give isl_map *copy() const &;
2098
  inline __isl_give isl_map *copy() && = delete;
2099
  inline __isl_keep isl_map *get() const;
2100
  inline __isl_give isl_map *release();
2101
  inline bool is_null() const;
2102
  inline isl::ctx ctx() const;
2103
 
2104
  inline isl::map add_constraint(isl::constraint constraint) const;
2105
  inline isl::map add_dims(isl::dim type, unsigned int n) const;
2106
  inline isl::basic_map affine_hull() const;
2107
  inline isl::map align_params(isl::space model) const;
2108
  inline isl::map apply_domain(isl::map map2) const;
2109
  inline isl::union_map apply_domain(const isl::union_map &umap2) const;
2110
  inline isl::map apply_domain(const isl::basic_map &map2) const;
2111
  inline isl::map apply_range(isl::map map2) const;
2112
  inline isl::union_map apply_range(const isl::union_map &umap2) const;
2113
  inline isl::map apply_range(const isl::basic_map &map2) const;
2114
  inline isl::map as_map() const;
2115
  inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
2116
  inline isl::pw_multi_aff as_pw_multi_aff() const;
2117
  inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
2118
  inline isl::basic_map_list basic_map_list() const;
2119
  inline isl::basic_map_list get_basic_map_list() const;
2120
  inline isl::set bind_domain(isl::multi_id tuple) const;
2121
  inline isl::set bind_range(isl::multi_id tuple) const;
2122
  inline boolean can_curry() const;
2123
  inline isl::map coalesce() const;
2124
  inline isl::map complement() const;
2125
  inline isl::union_map compute_divs() const;
2126
  inline isl::map curry() const;
2127
  inline isl::set deltas() const;
2128
  inline isl::map detect_equalities() const;
2129
  inline class size dim(isl::dim type) const;
2130
  inline isl::pw_aff dim_max(int pos) const;
2131
  inline isl::pw_aff dim_min(int pos) const;
2132
  inline isl::set domain() const;
2133
  inline isl::map domain_factor_domain() const;
2134
  inline isl::map domain_factor_range() const;
2135
  inline isl::map domain_map() const;
2136
  inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
2137
  inline isl::map domain_product(isl::map map2) const;
2138
  inline isl::union_map domain_product(const isl::union_map &umap2) const;
2139
  inline isl::map domain_product(const isl::basic_map &map2) const;
2140
  inline class size domain_tuple_dim() const;
2141
  inline isl::id domain_tuple_id() const;
2142
  inline isl::id get_domain_tuple_id() const;
2143
  static inline isl::map empty(isl::space space);
2144
  inline isl::map eq_at(isl::multi_pw_aff mpa) const;
2145
  inline isl::union_map eq_at(const isl::multi_union_pw_aff &mupa) const;
2146
  inline isl::map eq_at(const isl::aff &mpa) const;
2147
  inline isl::map eq_at(const isl::multi_aff &mpa) const;
2148
  inline isl::map eq_at(const isl::pw_aff &mpa) const;
2149
  inline isl::map eq_at(const isl::pw_multi_aff &mpa) const;
2150
  inline isl::map equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
2151
  inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
2152
  inline isl::map extract_map(const isl::space &space) const;
2153
  inline isl::map factor_domain() const;
2154
  inline isl::map factor_range() const;
2155
  inline isl::map fix_si(isl::dim type, unsigned int pos, int value) const;
2156
  inline isl::union_map fixed_power(const isl::val &exp) const;
2157
  inline isl::union_map fixed_power(long exp) const;
2158
  inline isl::map flat_range_product(isl::map map2) const;
2159
  inline isl::union_map flat_range_product(const isl::union_map &umap2) const;
2160
  inline isl::map flat_range_product(const isl::basic_map &map2) const;
2161
  inline isl::map flatten() const;
2162
  inline isl::map flatten_domain() const;
2163
  inline isl::map flatten_range() const;
2164
  inline isl::map floordiv_val(isl::val d) const;
2165
  inline isl::map floordiv_val(long d) const;
2166
  inline stat foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const;
2167
  inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
2168
  static inline isl::map from_aff(isl::aff aff);
2169
  static inline isl::map from_domain(isl::set set);
2170
  static inline isl::map from_domain_and_range(isl::set domain, isl::set range);
2171
  static inline isl::map from_multi_aff(isl::multi_aff maff);
2172
  static inline isl::map from_pw_aff(isl::pw_aff pwaff);
2173
  static inline isl::map from_range(isl::set set);
2174
  static inline isl::map from_union_map(isl::union_map umap);
2175
  inline isl::map gist(isl::map context) const;
2176
  inline isl::union_map gist(const isl::union_map &context) const;
2177
  inline isl::map gist(const isl::basic_map &context) const;
2178
  inline isl::map gist_domain(isl::set context) const;
2179
  inline isl::union_map gist_domain(const isl::union_set &uset) const;
2180
  inline isl::map gist_domain(const isl::basic_set &context) const;
2181
  inline isl::map gist_domain(const isl::point &context) const;
2182
  inline isl::map gist_params(isl::set context) const;
2183
  inline isl::union_map gist_range(const isl::union_set &uset) const;
2184
  inline boolean has_domain_tuple_id() const;
2185
  inline boolean has_equal_space(const isl::map &map2) const;
2186
  inline boolean has_range_tuple_id() const;
2187
  inline boolean has_tuple_id(isl::dim type) const;
2188
  inline boolean has_tuple_name(isl::dim type) const;
2189
  static inline isl::map identity(isl::space space);
2190
  inline isl::map intersect(isl::map map2) const;
2191
  inline isl::union_map intersect(const isl::union_map &umap2) const;
2192
  inline isl::map intersect(const isl::basic_map &map2) const;
2193
  inline isl::map intersect_domain(isl::set set) const;
2194
  inline isl::union_map intersect_domain(const isl::space &space) const;
2195
  inline isl::union_map intersect_domain(const isl::union_set &uset) const;
2196
  inline isl::map intersect_domain(const isl::basic_set &set) const;
2197
  inline isl::map intersect_domain(const isl::point &set) const;
2198
  inline isl::map intersect_domain_factor_domain(isl::map factor) const;
2199
  inline isl::union_map intersect_domain_factor_domain(const isl::union_map &factor) const;
2200
  inline isl::map intersect_domain_factor_domain(const isl::basic_map &factor) const;
2201
  inline isl::map intersect_domain_factor_range(isl::map factor) const;
2202
  inline isl::union_map intersect_domain_factor_range(const isl::union_map &factor) const;
2203
  inline isl::map intersect_domain_factor_range(const isl::basic_map &factor) const;
2204
  inline isl::map intersect_params(isl::set params) const;
2205
  inline isl::map intersect_range(isl::set set) const;
2206
  inline isl::union_map intersect_range(const isl::space &space) const;
2207
  inline isl::union_map intersect_range(const isl::union_set &uset) const;
2208
  inline isl::map intersect_range(const isl::basic_set &set) const;
2209
  inline isl::map intersect_range(const isl::point &set) const;
2210
  inline isl::map intersect_range_factor_domain(isl::map factor) const;
2211
  inline isl::union_map intersect_range_factor_domain(const isl::union_map &factor) const;
2212
  inline isl::map intersect_range_factor_domain(const isl::basic_map &factor) const;
2213
  inline isl::map intersect_range_factor_range(isl::map factor) const;
2214
  inline isl::union_map intersect_range_factor_range(const isl::union_map &factor) const;
2215
  inline isl::map intersect_range_factor_range(const isl::basic_map &factor) const;
2216
  inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
2217
  inline boolean is_bijective() const;
2218
  inline boolean is_disjoint(const isl::map &map2) const;
2219
  inline boolean is_disjoint(const isl::union_map &umap2) const;
2220
  inline boolean is_disjoint(const isl::basic_map &map2) const;
2221
  inline boolean is_empty() const;
2222
  inline boolean is_equal(const isl::map &map2) const;
2223
  inline boolean is_equal(const isl::union_map &umap2) const;
2224
  inline boolean is_equal(const isl::basic_map &map2) const;
2225
  inline boolean is_injective() const;
2226
  inline boolean is_single_valued() const;
2227
  inline boolean is_strict_subset(const isl::map &map2) const;
2228
  inline boolean is_strict_subset(const isl::union_map &umap2) const;
2229
  inline boolean is_strict_subset(const isl::basic_map &map2) const;
2230
  inline boolean is_subset(const isl::map &map2) const;
2231
  inline boolean is_subset(const isl::union_map &umap2) const;
2232
  inline boolean is_subset(const isl::basic_map &map2) const;
2233
  inline boolean isa_map() const;
2234
  static inline isl::map lex_ge(isl::space set_space);
2235
  inline isl::map lex_ge_at(isl::multi_pw_aff mpa) const;
2236
  static inline isl::map lex_gt(isl::space set_space);
2237
  inline isl::map lex_gt_at(isl::multi_pw_aff mpa) const;
2238
  static inline isl::map lex_le(isl::space set_space);
2239
  inline isl::map lex_le_at(isl::multi_pw_aff mpa) const;
2240
  static inline isl::map lex_lt(isl::space set_space);
2241
  inline isl::map lex_lt_at(isl::multi_pw_aff mpa) const;
2242
  inline isl::map lexmax() const;
2243
  inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
2244
  inline isl::map lexmin() const;
2245
  inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
2246
  inline isl::map lower_bound(isl::multi_pw_aff lower) const;
2247
  inline isl::map lower_bound_si(isl::dim type, unsigned int pos, int value) const;
2248
  inline isl::map_list map_list() const;
2249
  inline isl::multi_pw_aff max_multi_pw_aff() const;
2250
  inline isl::multi_pw_aff min_multi_pw_aff() const;
2251
  inline isl::map move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const;
2252
  inline class size n_basic_map() const;
2253
  inline isl::map order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const;
2254
  inline isl::set params() const;
2255
  inline isl::basic_map polyhedral_hull() const;
2256
  inline isl::map preimage_domain(isl::multi_aff ma) const;
2257
  inline isl::map preimage_domain(isl::multi_pw_aff mpa) const;
2258
  inline isl::map preimage_domain(isl::pw_multi_aff pma) const;
2259
  inline isl::union_map preimage_domain(const isl::union_pw_multi_aff &upma) const;
2260
  inline isl::map preimage_range(isl::multi_aff ma) const;
2261
  inline isl::map preimage_range(isl::pw_multi_aff pma) const;
2262
  inline isl::union_map preimage_range(const isl::union_pw_multi_aff &upma) const;
2263
  inline isl::map product(isl::map map2) const;
2264
  inline isl::union_map product(const isl::union_map &umap2) const;
2265
  inline isl::map product(const isl::basic_map &map2) const;
2266
  inline isl::map project_out(isl::dim type, unsigned int first, unsigned int n) const;
2267
  inline isl::map project_out_all_params() const;
2268
  inline isl::set range() const;
2269
  inline isl::map range_factor_domain() const;
2270
  inline isl::map range_factor_range() const;
2271
  inline isl::fixed_box range_lattice_tile() const;
2272
  inline isl::fixed_box get_range_lattice_tile() const;
2273
  inline isl::map range_map() const;
2274
  inline isl::map range_product(isl::map map2) const;
2275
  inline isl::union_map range_product(const isl::union_map &umap2) const;
2276
  inline isl::map range_product(const isl::basic_map &map2) const;
2277
  inline isl::map range_reverse() const;
2278
  inline isl::fixed_box range_simple_fixed_box_hull() const;
2279
  inline isl::fixed_box get_range_simple_fixed_box_hull() const;
2280
  inline class size range_tuple_dim() const;
2281
  inline isl::id range_tuple_id() const;
2282
  inline isl::id get_range_tuple_id() const;
2283
  inline isl::map reverse() const;
2284
  inline isl::basic_map sample() const;
2285
  inline isl::map set_domain_tuple(isl::id id) const;
2286
  inline isl::map set_domain_tuple(const std::string &id) const;
2287
  inline isl::map set_range_tuple(isl::id id) const;
2288
  inline isl::map set_range_tuple(const std::string &id) const;
2289
  inline isl::map set_tuple_id(isl::dim type, isl::id id) const;
2290
  inline isl::map set_tuple_id(isl::dim type, const std::string &id) const;
2291
  inline isl::space space() const;
2292
  inline isl::space get_space() const;
2293
  inline isl::map subtract(isl::map map2) const;
2294
  inline isl::union_map subtract(const isl::union_map &umap2) const;
2295
  inline isl::map subtract(const isl::basic_map &map2) const;
2296
  inline isl::union_map subtract_domain(const isl::union_set &dom) const;
2297
  inline isl::union_map subtract_range(const isl::union_set &dom) const;
2298
  inline isl::map sum(isl::map map2) const;
2299
  inline isl::map_list to_list() const;
2300
  inline isl::union_map to_union_map() const;
2301
  inline isl::id tuple_id(isl::dim type) const;
2302
  inline isl::id get_tuple_id(isl::dim type) const;
2303
  inline isl::map uncurry() const;
2304
  inline isl::map unite(isl::map map2) const;
2305
  inline isl::union_map unite(const isl::union_map &umap2) const;
2306
  inline isl::map unite(const isl::basic_map &map2) const;
2307
  static inline isl::map universe(isl::space space);
2308
  inline isl::basic_map unshifted_simple_hull() const;
2309
  inline isl::map upper_bound(isl::multi_pw_aff upper) const;
2310
  inline isl::map upper_bound_si(isl::dim type, unsigned int pos, int value) const;
2311
  inline isl::set wrap() const;
2312
  inline isl::map zip() const;
2313
};
2314
 
2315
// declarations for isl::map_list
2316
inline map_list manage(__isl_take isl_map_list *ptr);
2317
inline map_list manage_copy(__isl_keep isl_map_list *ptr);
2318
 
2319
class map_list {
2320
  friend inline map_list manage(__isl_take isl_map_list *ptr);
2321
  friend inline map_list manage_copy(__isl_keep isl_map_list *ptr);
2322
 
2323
protected:
2324
  isl_map_list *ptr = nullptr;
2325
 
2326
  inline explicit map_list(__isl_take isl_map_list *ptr);
2327
 
2328
public:
2329
  inline /* implicit */ map_list();
2330
  inline /* implicit */ map_list(const map_list &obj);
2331
  inline explicit map_list(isl::ctx ctx, int n);
2332
  inline explicit map_list(isl::map el);
2333
  inline explicit map_list(isl::ctx ctx, const std::string &str);
2334
  inline map_list &operator=(map_list obj);
2335
  inline ~map_list();
2336
  inline __isl_give isl_map_list *copy() const &;
2337
  inline __isl_give isl_map_list *copy() && = delete;
2338
  inline __isl_keep isl_map_list *get() const;
2339
  inline __isl_give isl_map_list *release();
2340
  inline bool is_null() const;
2341
  inline isl::ctx ctx() const;
2342
 
2343
  inline isl::map_list add(isl::map el) const;
2344
  inline isl::map at(int index) const;
2345
  inline isl::map get_at(int index) const;
2346
  inline isl::map_list clear() const;
2347
  inline isl::map_list concat(isl::map_list list2) const;
2348
  inline isl::map_list drop(unsigned int first, unsigned int n) const;
2349
  inline stat foreach(const std::function<stat(isl::map)> &fn) const;
2350
  inline isl::map_list insert(unsigned int pos, isl::map el) const;
2351
  inline class size size() const;
2352
};
2353
 
2354
// declarations for isl::multi_aff
2355
inline multi_aff manage(__isl_take isl_multi_aff *ptr);
2356
inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr);
2357
 
2358
class multi_aff {
2359
  friend inline multi_aff manage(__isl_take isl_multi_aff *ptr);
2360
  friend inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr);
2361
 
2362
protected:
2363
  isl_multi_aff *ptr = nullptr;
2364
 
2365
  inline explicit multi_aff(__isl_take isl_multi_aff *ptr);
2366
 
2367
public:
2368
  inline /* implicit */ multi_aff();
2369
  inline /* implicit */ multi_aff(const multi_aff &obj);
2370
  inline /* implicit */ multi_aff(isl::aff aff);
2371
  inline explicit multi_aff(isl::space space, isl::aff_list list);
2372
  inline explicit multi_aff(isl::ctx ctx, const std::string &str);
2373
  inline multi_aff &operator=(multi_aff obj);
2374
  inline ~multi_aff();
2375
  inline __isl_give isl_multi_aff *copy() const &;
2376
  inline __isl_give isl_multi_aff *copy() && = delete;
2377
  inline __isl_keep isl_multi_aff *get() const;
2378
  inline __isl_give isl_multi_aff *release();
2379
  inline bool is_null() const;
2380
  inline isl::ctx ctx() const;
2381
 
2382
  inline isl::multi_aff add(isl::multi_aff multi2) const;
2383
  inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
2384
  inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
2385
  inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
2386
  inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
2387
  inline isl::multi_aff add(const isl::aff &multi2) const;
2388
  inline isl::multi_aff add_constant(isl::multi_val mv) const;
2389
  inline isl::multi_aff add_constant(isl::val v) const;
2390
  inline isl::multi_aff add_constant(long v) const;
2391
  inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
2392
  inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
2393
  inline isl::map as_map() const;
2394
  inline isl::multi_aff as_multi_aff() const;
2395
  inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
2396
  inline isl::pw_multi_aff as_pw_multi_aff() const;
2397
  inline isl::set as_set() const;
2398
  inline isl::union_map as_union_map() const;
2399
  inline isl::aff at(int pos) const;
2400
  inline isl::aff get_at(int pos) const;
2401
  inline isl::basic_set bind(isl::multi_id tuple) const;
2402
  inline isl::multi_aff bind_domain(isl::multi_id tuple) const;
2403
  inline isl::multi_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
2404
  inline isl::pw_multi_aff coalesce() const;
2405
  inline isl::multi_val constant_multi_val() const;
2406
  inline isl::multi_val get_constant_multi_val() const;
2407
  inline class size dim(isl::dim type) const;
2408
  inline isl::set domain() const;
2409
  static inline isl::multi_aff domain_map(isl::space space);
2410
  inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
2411
  inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
2412
  inline isl::multi_aff flat_range_product(isl::multi_aff multi2) const;
2413
  inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
2414
  inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
2415
  inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
2416
  inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
2417
  inline isl::multi_aff flat_range_product(const isl::aff &multi2) const;
2418
  inline isl::multi_aff floor() const;
2419
  inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
2420
  inline isl::multi_aff gist(isl::set context) const;
2421
  inline isl::union_pw_multi_aff gist(const isl::union_set &context) const;
2422
  inline isl::multi_aff gist(const isl::basic_set &context) const;
2423
  inline isl::multi_aff gist(const isl::point &context) const;
2424
  inline boolean has_range_tuple_id() const;
2425
  static inline isl::multi_aff identity(isl::space space);
2426
  inline isl::multi_aff identity() const;
2427
  static inline isl::multi_aff identity_on_domain(isl::space space);
2428
  inline isl::multi_aff insert_domain(isl::space domain) const;
2429
  inline isl::pw_multi_aff intersect_domain(const isl::set &set) const;
2430
  inline isl::union_pw_multi_aff intersect_domain(const isl::space &space) const;
2431
  inline isl::union_pw_multi_aff intersect_domain(const isl::union_set &uset) const;
2432
  inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
2433
  inline isl::union_pw_multi_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
2434
  inline isl::pw_multi_aff intersect_params(const isl::set &set) const;
2435
  inline boolean involves_locals() const;
2436
  inline boolean involves_nan() const;
2437
  inline boolean involves_param(const isl::id &id) const;
2438
  inline boolean involves_param(const std::string &id) const;
2439
  inline boolean involves_param(const isl::id_list &list) const;
2440
  inline boolean isa_multi_aff() const;
2441
  inline boolean isa_pw_multi_aff() const;
2442
  inline isl::aff_list list() const;
2443
  inline isl::aff_list get_list() const;
2444
  inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
2445
  inline isl::multi_val max_multi_val() const;
2446
  inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
2447
  inline isl::multi_val min_multi_val() const;
2448
  static inline isl::multi_aff multi_val_on_domain(isl::space space, isl::multi_val mv);
2449
  inline class size n_piece() const;
2450
  inline isl::multi_aff neg() const;
2451
  inline boolean plain_is_empty() const;
2452
  inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
2453
  inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
2454
  inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
2455
  inline boolean plain_is_equal(const isl::aff &multi2) const;
2456
  inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
2457
  inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
2458
  inline isl::multi_aff product(isl::multi_aff multi2) const;
2459
  inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
2460
  inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
2461
  inline isl::multi_aff product(const isl::aff &multi2) const;
2462
  inline isl::multi_aff pullback(isl::multi_aff ma2) const;
2463
  inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const;
2464
  inline isl::pw_multi_aff pullback(const isl::pw_multi_aff &pma2) const;
2465
  inline isl::union_pw_multi_aff pullback(const isl::union_pw_multi_aff &upma2) const;
2466
  inline isl::multi_aff pullback(const isl::aff &ma2) const;
2467
  inline isl::pw_multi_aff_list pw_multi_aff_list() const;
2468
  inline isl::pw_multi_aff range_factor_domain() const;
2469
  inline isl::pw_multi_aff range_factor_range() const;
2470
  static inline isl::multi_aff range_map(isl::space space);
2471
  inline isl::multi_aff range_product(isl::multi_aff multi2) const;
2472
  inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
2473
  inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
2474
  inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
2475
  inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
2476
  inline isl::multi_aff range_product(const isl::aff &multi2) const;
2477
  inline isl::id range_tuple_id() const;
2478
  inline isl::id get_range_tuple_id() const;
2479
  inline isl::multi_aff reset_range_tuple_id() const;
2480
  inline isl::multi_aff reset_tuple_id(isl::dim type) const;
2481
  inline isl::multi_aff scale(isl::multi_val mv) const;
2482
  inline isl::multi_aff scale(isl::val v) const;
2483
  inline isl::multi_aff scale(long v) const;
2484
  inline isl::multi_aff scale_down(isl::multi_val mv) const;
2485
  inline isl::multi_aff scale_down(isl::val v) const;
2486
  inline isl::multi_aff scale_down(long v) const;
2487
  inline isl::multi_aff set_aff(int pos, isl::aff el) const;
2488
  inline isl::multi_aff set_at(int pos, isl::aff el) const;
2489
  inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
2490
  inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
2491
  inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
2492
  inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
2493
  inline isl::multi_aff set_range_tuple(isl::id id) const;
2494
  inline isl::multi_aff set_range_tuple(const std::string &id) const;
2495
  inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
2496
  inline class size size() const;
2497
  inline isl::space space() const;
2498
  inline isl::space get_space() const;
2499
  inline isl::multi_aff sub(isl::multi_aff multi2) const;
2500
  inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
2501
  inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
2502
  inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
2503
  inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
2504
  inline isl::multi_aff sub(const isl::aff &multi2) const;
2505
  inline isl::pw_multi_aff subtract_domain(const isl::set &set) const;
2506
  inline isl::union_pw_multi_aff subtract_domain(const isl::space &space) const;
2507
  inline isl::union_pw_multi_aff subtract_domain(const isl::union_set &uset) const;
2508
  inline isl::pw_multi_aff_list to_list() const;
2509
  inline isl::multi_pw_aff to_multi_pw_aff() const;
2510
  inline isl::multi_union_pw_aff to_multi_union_pw_aff() const;
2511
  inline isl::pw_multi_aff to_pw_multi_aff() const;
2512
  inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
2513
  inline isl::id tuple_id(isl::dim type) const;
2514
  inline isl::multi_aff unbind_params_insert_domain(isl::multi_id domain) const;
2515
  inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
2516
  inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
2517
  inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
2518
  inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
2519
  static inline isl::multi_aff zero(isl::space space);
2520
};
2521
 
2522
// declarations for isl::multi_id
2523
inline multi_id manage(__isl_take isl_multi_id *ptr);
2524
inline multi_id manage_copy(__isl_keep isl_multi_id *ptr);
2525
 
2526
class multi_id {
2527
  friend inline multi_id manage(__isl_take isl_multi_id *ptr);
2528
  friend inline multi_id manage_copy(__isl_keep isl_multi_id *ptr);
2529
 
2530
protected:
2531
  isl_multi_id *ptr = nullptr;
2532
 
2533
  inline explicit multi_id(__isl_take isl_multi_id *ptr);
2534
 
2535
public:
2536
  inline /* implicit */ multi_id();
2537
  inline /* implicit */ multi_id(const multi_id &obj);
2538
  inline explicit multi_id(isl::space space, isl::id_list list);
2539
  inline explicit multi_id(isl::ctx ctx, const std::string &str);
2540
  inline multi_id &operator=(multi_id obj);
2541
  inline ~multi_id();
2542
  inline __isl_give isl_multi_id *copy() const &;
2543
  inline __isl_give isl_multi_id *copy() && = delete;
2544
  inline __isl_keep isl_multi_id *get() const;
2545
  inline __isl_give isl_multi_id *release();
2546
  inline bool is_null() const;
2547
  inline isl::ctx ctx() const;
2548
 
2549
  inline isl::id at(int pos) const;
2550
  inline isl::id get_at(int pos) const;
2551
  inline isl::multi_id flat_range_product(isl::multi_id multi2) const;
2552
  inline isl::id_list list() const;
2553
  inline isl::id_list get_list() const;
2554
  inline boolean plain_is_equal(const isl::multi_id &multi2) const;
2555
  inline isl::multi_id range_product(isl::multi_id multi2) const;
2556
  inline isl::multi_id set_at(int pos, isl::id el) const;
2557
  inline isl::multi_id set_at(int pos, const std::string &el) const;
2558
  inline isl::multi_id set_id(int pos, isl::id el) const;
2559
  inline isl::multi_id set_id(int pos, const std::string &el) const;
2560
  inline class size size() const;
2561
  inline isl::space space() const;
2562
  inline isl::space get_space() const;
2563
};
2564
 
2565
// declarations for isl::multi_pw_aff
2566
inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr);
2567
inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr);
2568
 
2569
class multi_pw_aff {
2570
  friend inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr);
2571
  friend inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr);
2572
 
2573
protected:
2574
  isl_multi_pw_aff *ptr = nullptr;
2575
 
2576
  inline explicit multi_pw_aff(__isl_take isl_multi_pw_aff *ptr);
2577
 
2578
public:
2579
  inline /* implicit */ multi_pw_aff();
2580
  inline /* implicit */ multi_pw_aff(const multi_pw_aff &obj);
2581
  inline /* implicit */ multi_pw_aff(isl::aff aff);
2582
  inline /* implicit */ multi_pw_aff(isl::multi_aff ma);
2583
  inline /* implicit */ multi_pw_aff(isl::pw_aff pa);
2584
  inline explicit multi_pw_aff(isl::space space, isl::pw_aff_list list);
2585
  inline /* implicit */ multi_pw_aff(isl::pw_multi_aff pma);
2586
  inline explicit multi_pw_aff(isl::ctx ctx, const std::string &str);
2587
  inline multi_pw_aff &operator=(multi_pw_aff obj);
2588
  inline ~multi_pw_aff();
2589
  inline __isl_give isl_multi_pw_aff *copy() const &;
2590
  inline __isl_give isl_multi_pw_aff *copy() && = delete;
2591
  inline __isl_keep isl_multi_pw_aff *get() const;
2592
  inline __isl_give isl_multi_pw_aff *release();
2593
  inline bool is_null() const;
2594
  inline isl::ctx ctx() const;
2595
 
2596
  inline isl::multi_pw_aff add(isl::multi_pw_aff multi2) const;
2597
  inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
2598
  inline isl::multi_pw_aff add(const isl::aff &multi2) const;
2599
  inline isl::multi_pw_aff add(const isl::multi_aff &multi2) const;
2600
  inline isl::multi_pw_aff add(const isl::pw_aff &multi2) const;
2601
  inline isl::multi_pw_aff add(const isl::pw_multi_aff &multi2) const;
2602
  inline isl::multi_pw_aff add_constant(isl::multi_val mv) const;
2603
  inline isl::multi_pw_aff add_constant(isl::val v) const;
2604
  inline isl::multi_pw_aff add_constant(long v) const;
2605
  inline isl::map as_map() const;
2606
  inline isl::multi_aff as_multi_aff() const;
2607
  inline isl::set as_set() const;
2608
  inline isl::pw_aff at(int pos) const;
2609
  inline isl::pw_aff get_at(int pos) const;
2610
  inline isl::set bind(isl::multi_id tuple) const;
2611
  inline isl::multi_pw_aff bind_domain(isl::multi_id tuple) const;
2612
  inline isl::multi_pw_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
2613
  inline isl::multi_pw_aff coalesce() const;
2614
  inline class size dim(isl::dim type) const;
2615
  inline isl::set domain() const;
2616
  inline isl::multi_pw_aff flat_range_product(isl::multi_pw_aff multi2) const;
2617
  inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
2618
  inline isl::multi_pw_aff flat_range_product(const isl::aff &multi2) const;
2619
  inline isl::multi_pw_aff flat_range_product(const isl::multi_aff &multi2) const;
2620
  inline isl::multi_pw_aff flat_range_product(const isl::pw_aff &multi2) const;
2621
  inline isl::multi_pw_aff flat_range_product(const isl::pw_multi_aff &multi2) const;
2622
  inline isl::multi_pw_aff gist(isl::set set) const;
2623
  inline isl::multi_union_pw_aff gist(const isl::union_set &context) const;
2624
  inline isl::multi_pw_aff gist(const isl::basic_set &set) const;
2625
  inline isl::multi_pw_aff gist(const isl::point &set) const;
2626
  inline boolean has_range_tuple_id() const;
2627
  static inline isl::multi_pw_aff identity(isl::space space);
2628
  inline isl::multi_pw_aff identity() const;
2629
  static inline isl::multi_pw_aff identity_on_domain(isl::space space);
2630
  inline isl::multi_pw_aff insert_domain(isl::space domain) const;
2631
  inline isl::multi_pw_aff intersect_domain(isl::set domain) const;
2632
  inline isl::multi_union_pw_aff intersect_domain(const isl::union_set &uset) const;
2633
  inline isl::multi_pw_aff intersect_domain(const isl::basic_set &domain) const;
2634
  inline isl::multi_pw_aff intersect_domain(const isl::point &domain) const;
2635
  inline isl::multi_pw_aff intersect_params(isl::set set) const;
2636
  inline boolean involves_nan() const;
2637
  inline boolean involves_param(const isl::id &id) const;
2638
  inline boolean involves_param(const std::string &id) const;
2639
  inline boolean involves_param(const isl::id_list &list) const;
2640
  inline boolean isa_multi_aff() const;
2641
  inline isl::pw_aff_list list() const;
2642
  inline isl::pw_aff_list get_list() const;
2643
  inline isl::multi_pw_aff max(isl::multi_pw_aff multi2) const;
2644
  inline isl::multi_val max_multi_val() const;
2645
  inline isl::multi_pw_aff min(isl::multi_pw_aff multi2) const;
2646
  inline isl::multi_val min_multi_val() const;
2647
  inline isl::multi_pw_aff neg() const;
2648
  inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
2649
  inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
2650
  inline boolean plain_is_equal(const isl::aff &multi2) const;
2651
  inline boolean plain_is_equal(const isl::multi_aff &multi2) const;
2652
  inline boolean plain_is_equal(const isl::pw_aff &multi2) const;
2653
  inline boolean plain_is_equal(const isl::pw_multi_aff &multi2) const;
2654
  inline isl::multi_pw_aff product(isl::multi_pw_aff multi2) const;
2655
  inline isl::multi_pw_aff pullback(isl::multi_aff ma) const;
2656
  inline isl::multi_pw_aff pullback(isl::multi_pw_aff mpa2) const;
2657
  inline isl::multi_pw_aff pullback(isl::pw_multi_aff pma) const;
2658
  inline isl::multi_union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
2659
  inline isl::multi_pw_aff range_product(isl::multi_pw_aff multi2) const;
2660
  inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
2661
  inline isl::multi_pw_aff range_product(const isl::aff &multi2) const;
2662
  inline isl::multi_pw_aff range_product(const isl::multi_aff &multi2) const;
2663
  inline isl::multi_pw_aff range_product(const isl::pw_aff &multi2) const;
2664
  inline isl::multi_pw_aff range_product(const isl::pw_multi_aff &multi2) const;
2665
  inline isl::id range_tuple_id() const;
2666
  inline isl::id get_range_tuple_id() const;
2667
  inline isl::multi_pw_aff reset_range_tuple_id() const;
2668
  inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
2669
  inline isl::multi_pw_aff scale(isl::multi_val mv) const;
2670
  inline isl::multi_pw_aff scale(isl::val v) const;
2671
  inline isl::multi_pw_aff scale(long v) const;
2672
  inline isl::multi_pw_aff scale_down(isl::multi_val mv) const;
2673
  inline isl::multi_pw_aff scale_down(isl::val v) const;
2674
  inline isl::multi_pw_aff scale_down(long v) const;
2675
  inline isl::multi_pw_aff set_at(int pos, isl::pw_aff el) const;
2676
  inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
2677
  inline isl::multi_pw_aff set_pw_aff(int pos, isl::pw_aff el) const;
2678
  inline isl::multi_pw_aff set_range_tuple(isl::id id) const;
2679
  inline isl::multi_pw_aff set_range_tuple(const std::string &id) const;
2680
  inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
2681
  inline class size size() const;
2682
  inline isl::space space() const;
2683
  inline isl::space get_space() const;
2684
  inline isl::multi_pw_aff sub(isl::multi_pw_aff multi2) const;
2685
  inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
2686
  inline isl::multi_pw_aff sub(const isl::aff &multi2) const;
2687
  inline isl::multi_pw_aff sub(const isl::multi_aff &multi2) const;
2688
  inline isl::multi_pw_aff sub(const isl::pw_aff &multi2) const;
2689
  inline isl::multi_pw_aff sub(const isl::pw_multi_aff &multi2) const;
2690
  inline isl::multi_pw_aff unbind_params_insert_domain(isl::multi_id domain) const;
2691
  inline isl::multi_pw_aff union_add(isl::multi_pw_aff mpa2) const;
2692
  inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
2693
  inline isl::multi_pw_aff union_add(const isl::aff &mpa2) const;
2694
  inline isl::multi_pw_aff union_add(const isl::multi_aff &mpa2) const;
2695
  inline isl::multi_pw_aff union_add(const isl::pw_aff &mpa2) const;
2696
  inline isl::multi_pw_aff union_add(const isl::pw_multi_aff &mpa2) const;
2697
  static inline isl::multi_pw_aff zero(isl::space space);
2698
};
2699
 
2700
// declarations for isl::multi_union_pw_aff
2701
inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr);
2702
inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr);
2703
 
2704
class multi_union_pw_aff {
2705
  friend inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr);
2706
  friend inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr);
2707
 
2708
protected:
2709
  isl_multi_union_pw_aff *ptr = nullptr;
2710
 
2711
  inline explicit multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr);
2712
 
2713
public:
2714
  inline /* implicit */ multi_union_pw_aff();
2715
  inline /* implicit */ multi_union_pw_aff(const multi_union_pw_aff &obj);
2716
  inline /* implicit */ multi_union_pw_aff(isl::multi_pw_aff mpa);
2717
  inline /* implicit */ multi_union_pw_aff(isl::union_pw_aff upa);
2718
  inline explicit multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list);
2719
  inline explicit multi_union_pw_aff(isl::union_pw_multi_aff upma);
2720
  inline explicit multi_union_pw_aff(isl::ctx ctx, const std::string &str);
2721
  inline multi_union_pw_aff &operator=(multi_union_pw_aff obj);
2722
  inline ~multi_union_pw_aff();
2723
  inline __isl_give isl_multi_union_pw_aff *copy() const &;
2724
  inline __isl_give isl_multi_union_pw_aff *copy() && = delete;
2725
  inline __isl_keep isl_multi_union_pw_aff *get() const;
2726
  inline __isl_give isl_multi_union_pw_aff *release();
2727
  inline bool is_null() const;
2728
  inline isl::ctx ctx() const;
2729
 
2730
  inline isl::multi_union_pw_aff add(isl::multi_union_pw_aff multi2) const;
2731
  inline isl::union_pw_aff at(int pos) const;
2732
  inline isl::union_pw_aff get_at(int pos) const;
2733
  inline isl::union_set bind(isl::multi_id tuple) const;
2734
  inline isl::multi_union_pw_aff coalesce() const;
2735
  inline class size dim(isl::dim type) const;
2736
  inline isl::union_set domain() const;
2737
  inline isl::multi_union_pw_aff flat_range_product(isl::multi_union_pw_aff multi2) const;
2738
  static inline isl::multi_union_pw_aff from_union_map(isl::union_map umap);
2739
  inline isl::multi_union_pw_aff gist(isl::union_set context) const;
2740
  inline boolean has_range_tuple_id() const;
2741
  inline isl::multi_union_pw_aff intersect_domain(isl::union_set uset) const;
2742
  inline isl::multi_union_pw_aff intersect_params(isl::set params) const;
2743
  inline boolean involves_nan() const;
2744
  inline isl::union_pw_aff_list list() const;
2745
  inline isl::union_pw_aff_list get_list() const;
2746
  inline isl::multi_union_pw_aff neg() const;
2747
  inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
2748
  inline isl::multi_union_pw_aff pullback(isl::union_pw_multi_aff upma) const;
2749
  inline isl::multi_union_pw_aff range_product(isl::multi_union_pw_aff multi2) const;
2750
  inline isl::id range_tuple_id() const;
2751
  inline isl::id get_range_tuple_id() const;
2752
  inline isl::multi_union_pw_aff reset_range_tuple_id() const;
2753
  inline isl::multi_union_pw_aff reset_tuple_id(isl::dim type) const;
2754
  inline isl::multi_union_pw_aff scale(isl::multi_val mv) const;
2755
  inline isl::multi_union_pw_aff scale(isl::val v) const;
2756
  inline isl::multi_union_pw_aff scale(long v) const;
2757
  inline isl::multi_union_pw_aff scale_down(isl::multi_val mv) const;
2758
  inline isl::multi_union_pw_aff scale_down(isl::val v) const;
2759
  inline isl::multi_union_pw_aff scale_down(long v) const;
2760
  inline isl::multi_union_pw_aff set_at(int pos, isl::union_pw_aff el) const;
2761
  inline isl::multi_union_pw_aff set_range_tuple(isl::id id) const;
2762
  inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const;
2763
  inline isl::multi_union_pw_aff set_union_pw_aff(int pos, isl::union_pw_aff el) const;
2764
  inline class size size() const;
2765
  inline isl::space space() const;
2766
  inline isl::space get_space() const;
2767
  inline isl::multi_union_pw_aff sub(isl::multi_union_pw_aff multi2) const;
2768
  inline isl::multi_union_pw_aff union_add(isl::multi_union_pw_aff mupa2) const;
2769
  static inline isl::multi_union_pw_aff zero(isl::space space);
2770
};
2771
 
2772
// declarations for isl::multi_val
2773
inline multi_val manage(__isl_take isl_multi_val *ptr);
2774
inline multi_val manage_copy(__isl_keep isl_multi_val *ptr);
2775
 
2776
class multi_val {
2777
  friend inline multi_val manage(__isl_take isl_multi_val *ptr);
2778
  friend inline multi_val manage_copy(__isl_keep isl_multi_val *ptr);
2779
 
2780
protected:
2781
  isl_multi_val *ptr = nullptr;
2782
 
2783
  inline explicit multi_val(__isl_take isl_multi_val *ptr);
2784
 
2785
public:
2786
  inline /* implicit */ multi_val();
2787
  inline /* implicit */ multi_val(const multi_val &obj);
2788
  inline explicit multi_val(isl::space space, isl::val_list list);
2789
  inline explicit multi_val(isl::ctx ctx, const std::string &str);
2790
  inline multi_val &operator=(multi_val obj);
2791
  inline ~multi_val();
2792
  inline __isl_give isl_multi_val *copy() const &;
2793
  inline __isl_give isl_multi_val *copy() && = delete;
2794
  inline __isl_keep isl_multi_val *get() const;
2795
  inline __isl_give isl_multi_val *release();
2796
  inline bool is_null() const;
2797
  inline isl::ctx ctx() const;
2798
 
2799
  inline isl::multi_val add(isl::multi_val multi2) const;
2800
  inline isl::multi_val add(isl::val v) const;
2801
  inline isl::multi_val add(long v) const;
2802
  inline isl::val at(int pos) const;
2803
  inline isl::val get_at(int pos) const;
2804
  inline class size dim(isl::dim type) const;
2805
  inline isl::multi_val flat_range_product(isl::multi_val multi2) const;
2806
  inline boolean has_range_tuple_id() const;
2807
  inline boolean involves_nan() const;
2808
  inline isl::val_list list() const;
2809
  inline isl::val_list get_list() const;
2810
  inline isl::multi_val max(isl::multi_val multi2) const;
2811
  inline isl::multi_val min(isl::multi_val multi2) const;
2812
  inline isl::multi_val neg() const;
2813
  inline boolean plain_is_equal(const isl::multi_val &multi2) const;
2814
  inline isl::multi_val product(isl::multi_val multi2) const;
2815
  inline isl::multi_val range_product(isl::multi_val multi2) const;
2816
  inline isl::id range_tuple_id() const;
2817
  inline isl::id get_range_tuple_id() const;
2818
  inline isl::multi_val reset_range_tuple_id() const;
2819
  inline isl::multi_val reset_tuple_id(isl::dim type) const;
2820
  inline isl::multi_val scale(isl::multi_val mv) const;
2821
  inline isl::multi_val scale(isl::val v) const;
2822
  inline isl::multi_val scale(long v) const;
2823
  inline isl::multi_val scale_down(isl::multi_val mv) const;
2824
  inline isl::multi_val scale_down(isl::val v) const;
2825
  inline isl::multi_val scale_down(long v) const;
2826
  inline isl::multi_val set_at(int pos, isl::val el) const;
2827
  inline isl::multi_val set_at(int pos, long el) const;
2828
  inline isl::multi_val set_range_tuple(isl::id id) const;
2829
  inline isl::multi_val set_range_tuple(const std::string &id) const;
2830
  inline isl::multi_val set_val(int pos, isl::val el) const;
2831
  inline isl::multi_val set_val(int pos, long el) const;
2832
  inline class size size() const;
2833
  inline isl::space space() const;
2834
  inline isl::space get_space() const;
2835
  inline isl::multi_val sub(isl::multi_val multi2) const;
2836
  static inline isl::multi_val zero(isl::space space);
2837
};
2838
 
2839
// declarations for isl::point
2840
inline point manage(__isl_take isl_point *ptr);
2841
inline point manage_copy(__isl_keep isl_point *ptr);
2842
 
2843
class point {
2844
  friend inline point manage(__isl_take isl_point *ptr);
2845
  friend inline point manage_copy(__isl_keep isl_point *ptr);
2846
 
2847
protected:
2848
  isl_point *ptr = nullptr;
2849
 
2850
  inline explicit point(__isl_take isl_point *ptr);
2851
 
2852
public:
2853
  inline /* implicit */ point();
2854
  inline /* implicit */ point(const point &obj);
2855
  inline explicit point(isl::space space);
2856
  inline point &operator=(point obj);
2857
  inline ~point();
2858
  inline __isl_give isl_point *copy() const &;
2859
  inline __isl_give isl_point *copy() && = delete;
2860
  inline __isl_keep isl_point *get() const;
2861
  inline __isl_give isl_point *release();
2862
  inline bool is_null() const;
2863
  inline isl::ctx ctx() const;
2864
 
2865
  inline isl::set add_constraint(const isl::constraint &constraint) const;
2866
  inline isl::set add_dims(isl::dim type, unsigned int n) const;
2867
  inline isl::basic_set affine_hull() const;
2868
  inline isl::set align_params(const isl::space &model) const;
2869
  inline isl::basic_set apply(const isl::basic_map &bmap) const;
2870
  inline isl::set apply(const isl::map &map) const;
2871
  inline isl::union_set apply(const isl::union_map &umap) const;
2872
  inline isl::pw_multi_aff as_pw_multi_aff() const;
2873
  inline isl::set as_set() const;
2874
  inline isl::basic_set_list basic_set_list() const;
2875
  inline isl::set bind(const isl::multi_id &tuple) const;
2876
  inline isl::set coalesce() const;
2877
  inline isl::set complement() const;
2878
  inline isl::union_set compute_divs() const;
2879
  inline boolean contains(const isl::space &space) const;
2880
  inline isl::basic_set convex_hull() const;
2881
  inline isl::val coordinate_val(isl::dim type, int pos) const;
2882
  inline isl::val get_coordinate_val(isl::dim type, int pos) const;
2883
  inline isl::basic_set detect_equalities() const;
2884
  inline class size dim(isl::dim type) const;
2885
  inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
2886
  inline isl::id dim_id(isl::dim type, unsigned int pos) const;
2887
  inline isl::pw_aff dim_max(int pos) const;
2888
  inline isl::val dim_max_val(int pos) const;
2889
  inline isl::pw_aff dim_min(int pos) const;
2890
  inline isl::val dim_min_val(int pos) const;
2891
  inline std::string dim_name(isl::dim type, unsigned int pos) const;
2892
  inline isl::aff div(int pos) const;
2893
  inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
2894
  inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
2895
  inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
2896
  inline isl::set extract_set(const isl::space &space) const;
2897
  inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
2898
  inline int find_dim_by_id(isl::dim type, const std::string &id) const;
2899
  inline isl::basic_set fix_si(isl::dim type, unsigned int pos, int value) const;
2900
  inline isl::basic_set fix_val(isl::dim type, unsigned int pos, const isl::val &v) const;
2901
  inline isl::basic_set fix_val(isl::dim type, unsigned int pos, long v) const;
2902
  inline isl::basic_set flatten() const;
2903
  inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
2904
  inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
2905
  inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
2906
  inline isl::basic_set gist(const isl::basic_set &context) const;
2907
  inline isl::set gist(const isl::set &context) const;
2908
  inline isl::union_set gist(const isl::union_set &context) const;
2909
  inline isl::set gist_params(const isl::set &context) const;
2910
  inline boolean has_equal_space(const isl::set &set2) const;
2911
  inline isl::map identity() const;
2912
  inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
2913
  inline isl::pw_aff indicator_function() const;
2914
  inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
2915
  inline isl::map insert_domain(const isl::space &domain) const;
2916
  inline isl::basic_set intersect(const isl::basic_set &bset2) const;
2917
  inline isl::set intersect(const isl::set &set2) const;
2918
  inline isl::union_set intersect(const isl::union_set &uset2) const;
2919
  inline isl::basic_set intersect_params(const isl::basic_set &bset2) const;
2920
  inline isl::set intersect_params(const isl::set &params) const;
2921
  inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
2922
  inline boolean involves_locals() const;
2923
  inline boolean is_bounded() const;
2924
  inline boolean is_disjoint(const isl::set &set2) const;
2925
  inline boolean is_disjoint(const isl::union_set &uset2) const;
2926
  inline boolean is_empty() const;
2927
  inline boolean is_equal(const isl::basic_set &bset2) const;
2928
  inline boolean is_equal(const isl::set &set2) const;
2929
  inline boolean is_equal(const isl::union_set &uset2) const;
2930
  inline boolean is_params() const;
2931
  inline boolean is_singleton() const;
2932
  inline boolean is_strict_subset(const isl::set &set2) const;
2933
  inline boolean is_strict_subset(const isl::union_set &uset2) const;
2934
  inline boolean is_subset(const isl::basic_set &bset2) const;
2935
  inline boolean is_subset(const isl::set &set2) const;
2936
  inline boolean is_subset(const isl::union_set &uset2) const;
2937
  inline boolean is_wrapping() const;
2938
  inline boolean isa_set() const;
2939
  inline isl::set lexmax() const;
2940
  inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
2941
  inline isl::set lexmin() const;
2942
  inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
2943
  inline isl::set lower_bound(const isl::multi_pw_aff &lower) const;
2944
  inline isl::set lower_bound(const isl::multi_val &lower) const;
2945
  inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
2946
  inline isl::set lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
2947
  inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
2948
  inline isl::multi_pw_aff max_multi_pw_aff() const;
2949
  inline isl::val max_val(const isl::aff &obj) const;
2950
  inline isl::multi_pw_aff min_multi_pw_aff() const;
2951
  inline isl::val min_val(const isl::aff &obj) const;
2952
  inline isl::multi_val multi_val() const;
2953
  inline isl::multi_val get_multi_val() const;
2954
  inline class size n_basic_set() const;
2955
  inline isl::basic_set params() const;
2956
  inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
2957
  inline isl::multi_val plain_multi_val_if_fixed() const;
2958
  inline isl::basic_set polyhedral_hull() const;
2959
  inline isl::set preimage(const isl::multi_aff &ma) const;
2960
  inline isl::set preimage(const isl::multi_pw_aff &mpa) const;
2961
  inline isl::set preimage(const isl::pw_multi_aff &pma) const;
2962
  inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
2963
  inline isl::set product(const isl::set &set2) const;
2964
  inline isl::basic_set project_out(isl::dim type, unsigned int first, unsigned int n) const;
2965
  inline isl::set project_out_all_params() const;
2966
  inline isl::set project_out_param(const isl::id &id) const;
2967
  inline isl::set project_out_param(const std::string &id) const;
2968
  inline isl::set project_out_param(const isl::id_list &list) const;
2969
  inline isl::pw_multi_aff pw_multi_aff_on_domain(const isl::multi_val &mv) const;
2970
  inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
2971
  inline isl::set remove_divs() const;
2972
  inline isl::set remove_redundancies() const;
2973
  inline isl::set reset_tuple_id() const;
2974
  inline isl::basic_set sample() const;
2975
  inline isl::point sample_point() const;
2976
  inline isl::set set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const;
2977
  inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
2978
  inline isl::set_list set_list() const;
2979
  inline isl::set set_tuple_id(const isl::id &id) const;
2980
  inline isl::set set_tuple_id(const std::string &id) const;
2981
  inline isl::fixed_box simple_fixed_box_hull() const;
2982
  inline isl::basic_set simple_hull() const;
2983
  inline isl::space space() const;
2984
  inline isl::val stride(int pos) const;
2985
  inline isl::set subtract(const isl::set &set2) const;
2986
  inline isl::union_set subtract(const isl::union_set &uset2) const;
2987
  inline isl::basic_set_list to_list() const;
2988
  inline isl::set to_set() const;
2989
  inline isl::union_set to_union_set() const;
2990
  inline isl::map translation() const;
2991
  inline class size tuple_dim() const;
2992
  inline isl::id tuple_id() const;
2993
  inline std::string tuple_name() const;
2994
  inline isl::set unbind_params(const isl::multi_id &tuple) const;
2995
  inline isl::map unbind_params_insert_domain(const isl::multi_id &domain) const;
2996
  inline isl::set unite(const isl::basic_set &bset2) const;
2997
  inline isl::set unite(const isl::set &set2) const;
2998
  inline isl::union_set unite(const isl::union_set &uset2) const;
2999
  inline isl::basic_set unshifted_simple_hull() const;
3000
  inline isl::map unwrap() const;
3001
  inline isl::set upper_bound(const isl::multi_pw_aff &upper) const;
3002
  inline isl::set upper_bound(const isl::multi_val &upper) const;
3003
  inline isl::set upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const;
3004
  inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
3005
};
3006
 
3007
// declarations for isl::pw_aff
3008
inline pw_aff manage(__isl_take isl_pw_aff *ptr);
3009
inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr);
3010
 
3011
class pw_aff {
3012
  friend inline pw_aff manage(__isl_take isl_pw_aff *ptr);
3013
  friend inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr);
3014
 
3015
protected:
3016
  isl_pw_aff *ptr = nullptr;
3017
 
3018
  inline explicit pw_aff(__isl_take isl_pw_aff *ptr);
3019
 
3020
public:
3021
  inline /* implicit */ pw_aff();
3022
  inline /* implicit */ pw_aff(const pw_aff &obj);
3023
  inline /* implicit */ pw_aff(isl::aff aff);
3024
  inline explicit pw_aff(isl::ctx ctx, const std::string &str);
3025
  inline explicit pw_aff(isl::set domain, isl::val v);
3026
  inline explicit pw_aff(isl::local_space ls);
3027
  inline pw_aff &operator=(pw_aff obj);
3028
  inline ~pw_aff();
3029
  inline __isl_give isl_pw_aff *copy() const &;
3030
  inline __isl_give isl_pw_aff *copy() && = delete;
3031
  inline __isl_keep isl_pw_aff *get() const;
3032
  inline __isl_give isl_pw_aff *release();
3033
  inline bool is_null() const;
3034
  inline isl::ctx ctx() const;
3035
 
3036
  inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
3037
  inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
3038
  inline isl::pw_aff add(isl::pw_aff pwaff2) const;
3039
  inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const;
3040
  inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const;
3041
  inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
3042
  inline isl::pw_aff add(const isl::aff &pwaff2) const;
3043
  inline isl::pw_aff add_constant(isl::val v) const;
3044
  inline isl::pw_aff add_constant(long v) const;
3045
  inline isl::pw_multi_aff add_constant(const isl::multi_val &mv) const;
3046
  inline isl::pw_aff add_dims(isl::dim type, unsigned int n) const;
3047
  inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
3048
  inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
3049
  inline isl::aff as_aff() const;
3050
  inline isl::map as_map() const;
3051
  inline isl::multi_aff as_multi_aff() const;
3052
  inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
3053
  inline isl::pw_multi_aff as_pw_multi_aff() const;
3054
  inline isl::set as_set() const;
3055
  inline isl::union_map as_union_map() const;
3056
  inline isl::pw_aff at(int pos) const;
3057
  inline isl::set bind(const isl::multi_id &tuple) const;
3058
  inline isl::set bind(isl::id id) const;
3059
  inline isl::set bind(const std::string &id) const;
3060
  inline isl::pw_aff bind_domain(isl::multi_id tuple) const;
3061
  inline isl::pw_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
3062
  inline isl::pw_aff ceil() const;
3063
  inline isl::pw_aff coalesce() const;
3064
  inline isl::pw_aff cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const;
3065
  inline class size dim(isl::dim type) const;
3066
  inline isl::id dim_id(isl::dim type, unsigned int pos) const;
3067
  inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
3068
  inline isl::pw_aff div(isl::pw_aff pa2) const;
3069
  inline isl::set domain() const;
3070
  inline isl::space domain_space() const;
3071
  inline isl::space get_domain_space() const;
3072
  inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
3073
  inline isl::set eq_set(isl::pw_aff pwaff2) const;
3074
  inline isl::val eval(isl::point pnt) const;
3075
  inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
3076
  inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
3077
  inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
3078
  inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const;
3079
  inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
3080
  inline isl::pw_aff floor() const;
3081
  inline stat foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const;
3082
  inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
3083
  inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
3084
  inline isl::set ge_set(isl::pw_aff pwaff2) const;
3085
  inline isl::pw_aff gist(isl::set context) const;
3086
  inline isl::union_pw_aff gist(const isl::union_set &context) const;
3087
  inline isl::pw_aff gist(const isl::basic_set &context) const;
3088
  inline isl::pw_aff gist(const isl::point &context) const;
3089
  inline isl::set gt_set(isl::pw_aff pwaff2) const;
3090
  inline boolean has_range_tuple_id() const;
3091
  inline isl::multi_pw_aff identity() const;
3092
  inline isl::pw_aff insert_domain(isl::space domain) const;
3093
  inline isl::pw_aff intersect_domain(isl::set set) const;
3094
  inline isl::union_pw_aff intersect_domain(const isl::space &space) const;
3095
  inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const;
3096
  inline isl::pw_aff intersect_domain(const isl::basic_set &set) const;
3097
  inline isl::pw_aff intersect_domain(const isl::point &set) const;
3098
  inline isl::union_pw_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
3099
  inline isl::union_pw_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
3100
  inline isl::pw_aff intersect_params(isl::set set) const;
3101
  inline boolean involves_locals() const;
3102
  inline boolean involves_nan() const;
3103
  inline boolean involves_param(const isl::id &id) const;
3104
  inline boolean involves_param(const std::string &id) const;
3105
  inline boolean involves_param(const isl::id_list &list) const;
3106
  inline boolean is_cst() const;
3107
  inline boolean is_equal(const isl::pw_aff &pa2) const;
3108
  inline boolean isa_aff() const;
3109
  inline boolean isa_multi_aff() const;
3110
  inline boolean isa_pw_multi_aff() const;
3111
  inline isl::set le_set(isl::pw_aff pwaff2) const;
3112
  inline isl::pw_aff_list list() const;
3113
  inline isl::set lt_set(isl::pw_aff pwaff2) const;
3114
  inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
3115
  inline isl::pw_aff max(isl::pw_aff pwaff2) const;
3116
  inline isl::pw_aff max(const isl::aff &pwaff2) const;
3117
  inline isl::multi_val max_multi_val() const;
3118
  inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
3119
  inline isl::pw_aff min(isl::pw_aff pwaff2) const;
3120
  inline isl::pw_aff min(const isl::aff &pwaff2) const;
3121
  inline isl::multi_val min_multi_val() const;
3122
  inline isl::pw_aff mod(isl::val mod) const;
3123
  inline isl::pw_aff mod(long mod) const;
3124
  inline isl::pw_aff mul(isl::pw_aff pwaff2) const;
3125
  inline class size n_piece() const;
3126
  inline isl::set ne_set(isl::pw_aff pwaff2) const;
3127
  inline isl::pw_aff neg() const;
3128
  static inline isl::pw_aff param_on_domain(isl::set domain, isl::id id);
3129
  inline boolean plain_is_empty() const;
3130
  inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
3131
  inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
3132
  inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const;
3133
  inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
3134
  inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
3135
  inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const;
3136
  inline isl::pw_aff pullback(isl::multi_aff ma) const;
3137
  inline isl::pw_aff pullback(isl::multi_pw_aff mpa) const;
3138
  inline isl::pw_aff pullback(isl::pw_multi_aff pma) const;
3139
  inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const;
3140
  inline isl::pw_multi_aff_list pw_multi_aff_list() const;
3141
  inline isl::pw_multi_aff range_factor_domain() const;
3142
  inline isl::pw_multi_aff range_factor_range() const;
3143
  inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
3144
  inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
3145
  inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const;
3146
  inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
3147
  inline isl::id range_tuple_id() const;
3148
  inline isl::multi_pw_aff reset_range_tuple_id() const;
3149
  inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
3150
  inline isl::multi_pw_aff scale(const isl::multi_val &mv) const;
3151
  inline isl::pw_aff scale(isl::val v) const;
3152
  inline isl::pw_aff scale(long v) const;
3153
  inline isl::multi_pw_aff scale_down(const isl::multi_val &mv) const;
3154
  inline isl::pw_aff scale_down(isl::val f) const;
3155
  inline isl::pw_aff scale_down(long f) const;
3156
  inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
3157
  inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
3158
  inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
3159
  inline isl::pw_multi_aff set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const;
3160
  inline isl::pw_multi_aff set_range_tuple(const isl::id &id) const;
3161
  inline isl::pw_multi_aff set_range_tuple(const std::string &id) const;
3162
  inline isl::pw_aff set_tuple_id(isl::dim type, isl::id id) const;
3163
  inline isl::pw_aff set_tuple_id(isl::dim type, const std::string &id) const;
3164
  inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
3165
  inline class size size() const;
3166
  inline isl::space space() const;
3167
  inline isl::space get_space() const;
3168
  inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
3169
  inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
3170
  inline isl::pw_aff sub(isl::pw_aff pwaff2) const;
3171
  inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const;
3172
  inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const;
3173
  inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
3174
  inline isl::pw_aff sub(const isl::aff &pwaff2) const;
3175
  inline isl::pw_aff subtract_domain(isl::set set) const;
3176
  inline isl::union_pw_aff subtract_domain(const isl::space &space) const;
3177
  inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const;
3178
  inline isl::pw_aff subtract_domain(const isl::basic_set &set) const;
3179
  inline isl::pw_aff subtract_domain(const isl::point &set) const;
3180
  inline isl::pw_aff tdiv_q(isl::pw_aff pa2) const;
3181
  inline isl::pw_aff tdiv_r(isl::pw_aff pa2) const;
3182
  inline isl::pw_aff_list to_list() const;
3183
  inline isl::multi_pw_aff to_multi_pw_aff() const;
3184
  inline isl::union_pw_aff to_union_pw_aff() const;
3185
  inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
3186
  inline isl::id tuple_id(isl::dim type) const;
3187
  inline isl::id get_tuple_id(isl::dim type) const;
3188
  inline isl::multi_pw_aff unbind_params_insert_domain(const isl::multi_id &domain) const;
3189
  inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
3190
  inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
3191
  inline isl::pw_aff union_add(isl::pw_aff pwaff2) const;
3192
  inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const;
3193
  inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const;
3194
  inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
3195
  inline isl::pw_aff union_add(const isl::aff &pwaff2) const;
3196
  static inline isl::pw_aff var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos);
3197
};
3198
 
3199
// declarations for isl::pw_aff_list
3200
inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr);
3201
inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr);
3202
 
3203
class pw_aff_list {
3204
  friend inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr);
3205
  friend inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr);
3206
 
3207
protected:
3208
  isl_pw_aff_list *ptr = nullptr;
3209
 
3210
  inline explicit pw_aff_list(__isl_take isl_pw_aff_list *ptr);
3211
 
3212
public:
3213
  inline /* implicit */ pw_aff_list();
3214
  inline /* implicit */ pw_aff_list(const pw_aff_list &obj);
3215
  inline explicit pw_aff_list(isl::ctx ctx, int n);
3216
  inline explicit pw_aff_list(isl::pw_aff el);
3217
  inline explicit pw_aff_list(isl::ctx ctx, const std::string &str);
3218
  inline pw_aff_list &operator=(pw_aff_list obj);
3219
  inline ~pw_aff_list();
3220
  inline __isl_give isl_pw_aff_list *copy() const &;
3221
  inline __isl_give isl_pw_aff_list *copy() && = delete;
3222
  inline __isl_keep isl_pw_aff_list *get() const;
3223
  inline __isl_give isl_pw_aff_list *release();
3224
  inline bool is_null() const;
3225
  inline isl::ctx ctx() const;
3226
 
3227
  inline isl::pw_aff_list add(isl::pw_aff el) const;
3228
  inline isl::pw_aff at(int index) const;
3229
  inline isl::pw_aff get_at(int index) const;
3230
  inline isl::pw_aff_list clear() const;
3231
  inline isl::pw_aff_list concat(isl::pw_aff_list list2) const;
3232
  inline isl::pw_aff_list drop(unsigned int first, unsigned int n) const;
3233
  inline stat foreach(const std::function<stat(isl::pw_aff)> &fn) const;
3234
  inline isl::pw_aff_list insert(unsigned int pos, isl::pw_aff el) const;
3235
  inline class size size() const;
3236
};
3237
 
3238
// declarations for isl::pw_multi_aff
3239
inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr);
3240
inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr);
3241
 
3242
class pw_multi_aff {
3243
  friend inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr);
3244
  friend inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr);
3245
 
3246
protected:
3247
  isl_pw_multi_aff *ptr = nullptr;
3248
 
3249
  inline explicit pw_multi_aff(__isl_take isl_pw_multi_aff *ptr);
3250
 
3251
public:
3252
  inline /* implicit */ pw_multi_aff();
3253
  inline /* implicit */ pw_multi_aff(const pw_multi_aff &obj);
3254
  inline /* implicit */ pw_multi_aff(isl::multi_aff ma);
3255
  inline /* implicit */ pw_multi_aff(isl::pw_aff pa);
3256
  inline explicit pw_multi_aff(isl::ctx ctx, const std::string &str);
3257
  inline pw_multi_aff &operator=(pw_multi_aff obj);
3258
  inline ~pw_multi_aff();
3259
  inline __isl_give isl_pw_multi_aff *copy() const &;
3260
  inline __isl_give isl_pw_multi_aff *copy() && = delete;
3261
  inline __isl_keep isl_pw_multi_aff *get() const;
3262
  inline __isl_give isl_pw_multi_aff *release();
3263
  inline bool is_null() const;
3264
  inline isl::ctx ctx() const;
3265
 
3266
  inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const;
3267
  inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
3268
  inline isl::pw_multi_aff add(isl::pw_multi_aff pma2) const;
3269
  inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
3270
  inline isl::pw_multi_aff add(const isl::multi_aff &pma2) const;
3271
  inline isl::pw_multi_aff add(const isl::pw_aff &pma2) const;
3272
  inline isl::pw_multi_aff add_constant(isl::multi_val mv) const;
3273
  inline isl::pw_multi_aff add_constant(isl::val v) const;
3274
  inline isl::pw_multi_aff add_constant(long v) const;
3275
  inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
3276
  inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
3277
  inline isl::map as_map() const;
3278
  inline isl::multi_aff as_multi_aff() const;
3279
  inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
3280
  inline isl::pw_multi_aff as_pw_multi_aff() const;
3281
  inline isl::set as_set() const;
3282
  inline isl::union_map as_union_map() const;
3283
  inline isl::pw_aff at(int pos) const;
3284
  inline isl::pw_aff get_at(int pos) const;
3285
  inline isl::set bind(const isl::multi_id &tuple) const;
3286
  inline isl::pw_multi_aff bind_domain(isl::multi_id tuple) const;
3287
  inline isl::pw_multi_aff bind_domain_wrapped_domain(isl::multi_id tuple) const;
3288
  inline isl::pw_multi_aff coalesce() const;
3289
  inline class size dim(isl::dim type) const;
3290
  inline isl::set domain() const;
3291
  static inline isl::pw_multi_aff domain_map(isl::space space);
3292
  inline isl::pw_multi_aff drop_dims(isl::dim type, unsigned int first, unsigned int n) const;
3293
  inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
3294
  inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const;
3295
  inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
3296
  inline isl::pw_multi_aff flat_range_product(isl::pw_multi_aff pma2) const;
3297
  inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
3298
  inline isl::pw_multi_aff flat_range_product(const isl::multi_aff &pma2) const;
3299
  inline isl::pw_multi_aff flat_range_product(const isl::pw_aff &pma2) const;
3300
  inline stat foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const;
3301
  static inline isl::pw_multi_aff from_map(isl::map map);
3302
  inline isl::pw_multi_aff gist(isl::set set) const;
3303
  inline isl::union_pw_multi_aff gist(const isl::union_set &context) const;
3304
  inline isl::pw_multi_aff gist(const isl::basic_set &set) const;
3305
  inline isl::pw_multi_aff gist(const isl::point &set) const;
3306
  inline boolean has_range_tuple_id() const;
3307
  inline isl::multi_pw_aff identity() const;
3308
  static inline isl::pw_multi_aff identity_on_domain(isl::space space);
3309
  inline isl::pw_multi_aff insert_domain(isl::space domain) const;
3310
  inline isl::pw_multi_aff intersect_domain(isl::set set) const;
3311
  inline isl::union_pw_multi_aff intersect_domain(const isl::space &space) const;
3312
  inline isl::union_pw_multi_aff intersect_domain(const isl::union_set &uset) const;
3313
  inline isl::pw_multi_aff intersect_domain(const isl::basic_set &set) const;
3314
  inline isl::pw_multi_aff intersect_domain(const isl::point &set) const;
3315
  inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const;
3316
  inline isl::union_pw_multi_aff intersect_domain_wrapped_range(const isl::union_set &uset) const;
3317
  inline isl::pw_multi_aff intersect_params(isl::set set) const;
3318
  inline boolean involves_locals() const;
3319
  inline boolean involves_nan() const;
3320
  inline boolean involves_param(const isl::id &id) const;
3321
  inline boolean involves_param(const std::string &id) const;
3322
  inline boolean involves_param(const isl::id_list &list) const;
3323
  inline boolean isa_multi_aff() const;
3324
  inline boolean isa_pw_multi_aff() const;
3325
  inline isl::pw_aff_list list() const;
3326
  inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const;
3327
  inline isl::multi_val max_multi_val() const;
3328
  inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const;
3329
  inline isl::multi_val min_multi_val() const;
3330
  static inline isl::pw_multi_aff multi_val_on_domain(isl::set domain, isl::multi_val mv);
3331
  inline class size n_piece() const;
3332
  inline isl::multi_pw_aff neg() const;
3333
  inline boolean plain_is_empty() const;
3334
  inline boolean plain_is_equal(const isl::multi_pw_aff &multi2) const;
3335
  inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
3336
  inline isl::pw_multi_aff preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const;
3337
  inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
3338
  inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const;
3339
  inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const;
3340
  inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const;
3341
  inline isl::pw_multi_aff product(isl::pw_multi_aff pma2) const;
3342
  inline isl::pw_multi_aff product(const isl::multi_aff &pma2) const;
3343
  inline isl::pw_multi_aff product(const isl::pw_aff &pma2) const;
3344
  static inline isl::pw_multi_aff project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n);
3345
  inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const;
3346
  inline isl::pw_multi_aff pullback(isl::multi_aff ma) const;
3347
  inline isl::pw_multi_aff pullback(isl::pw_multi_aff pma2) const;
3348
  inline isl::union_pw_multi_aff pullback(const isl::union_pw_multi_aff &upma2) const;
3349
  inline isl::pw_multi_aff_list pw_multi_aff_list() const;
3350
  inline isl::pw_multi_aff range_factor_domain() const;
3351
  inline isl::pw_multi_aff range_factor_range() const;
3352
  static inline isl::pw_multi_aff range_map(isl::space space);
3353
  inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const;
3354
  inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
3355
  inline isl::pw_multi_aff range_product(isl::pw_multi_aff pma2) const;
3356
  inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
3357
  inline isl::pw_multi_aff range_product(const isl::multi_aff &pma2) const;
3358
  inline isl::pw_multi_aff range_product(const isl::pw_aff &pma2) const;
3359
  inline isl::id range_tuple_id() const;
3360
  inline isl::id get_range_tuple_id() const;
3361
  inline isl::multi_pw_aff reset_range_tuple_id() const;
3362
  inline isl::multi_pw_aff reset_tuple_id(isl::dim type) const;
3363
  inline isl::multi_pw_aff scale(const isl::multi_val &mv) const;
3364
  inline isl::pw_multi_aff scale(isl::val v) const;
3365
  inline isl::pw_multi_aff scale(long v) const;
3366
  inline isl::multi_pw_aff scale_down(const isl::multi_val &mv) const;
3367
  inline isl::pw_multi_aff scale_down(isl::val v) const;
3368
  inline isl::pw_multi_aff scale_down(long v) const;
3369
  inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const;
3370
  inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
3371
  inline isl::multi_pw_aff set_pw_aff(int pos, const isl::pw_aff &el) const;
3372
  inline isl::pw_multi_aff set_pw_aff(unsigned int pos, isl::pw_aff pa) const;
3373
  inline isl::pw_multi_aff set_range_tuple(isl::id id) const;
3374
  inline isl::pw_multi_aff set_range_tuple(const std::string &id) const;
3375
  inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
3376
  inline class size size() const;
3377
  inline isl::space space() const;
3378
  inline isl::space get_space() const;
3379
  inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const;
3380
  inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
3381
  inline isl::pw_multi_aff sub(isl::pw_multi_aff pma2) const;
3382
  inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
3383
  inline isl::pw_multi_aff sub(const isl::multi_aff &pma2) const;
3384
  inline isl::pw_multi_aff sub(const isl::pw_aff &pma2) const;
3385
  inline isl::pw_multi_aff subtract_domain(isl::set set) const;
3386
  inline isl::union_pw_multi_aff subtract_domain(const isl::space &space) const;
3387
  inline isl::union_pw_multi_aff subtract_domain(const isl::union_set &uset) const;
3388
  inline isl::pw_multi_aff subtract_domain(const isl::basic_set &set) const;
3389
  inline isl::pw_multi_aff subtract_domain(const isl::point &set) const;
3390
  inline isl::pw_multi_aff_list to_list() const;
3391
  inline isl::multi_pw_aff to_multi_pw_aff() const;
3392
  inline isl::union_pw_multi_aff to_union_pw_multi_aff() const;
3393
  inline isl::id tuple_id(isl::dim type) const;
3394
  inline isl::id get_tuple_id(isl::dim type) const;
3395
  inline isl::multi_pw_aff unbind_params_insert_domain(const isl::multi_id &domain) const;
3396
  inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const;
3397
  inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
3398
  inline isl::pw_multi_aff union_add(isl::pw_multi_aff pma2) const;
3399
  inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
3400
  inline isl::pw_multi_aff union_add(const isl::multi_aff &pma2) const;
3401
  inline isl::pw_multi_aff union_add(const isl::pw_aff &pma2) const;
3402
  static inline isl::pw_multi_aff zero(isl::space space);
3403
};
3404
 
3405
// declarations for isl::pw_multi_aff_list
3406
inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
3407
inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
3408
 
3409
class pw_multi_aff_list {
3410
  friend inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr);
3411
  friend inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr);
3412
 
3413
protected:
3414
  isl_pw_multi_aff_list *ptr = nullptr;
3415
 
3416
  inline explicit pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr);
3417
 
3418
public:
3419
  inline /* implicit */ pw_multi_aff_list();
3420
  inline /* implicit */ pw_multi_aff_list(const pw_multi_aff_list &obj);
3421
  inline explicit pw_multi_aff_list(isl::ctx ctx, int n);
3422
  inline explicit pw_multi_aff_list(isl::pw_multi_aff el);
3423
  inline explicit pw_multi_aff_list(isl::ctx ctx, const std::string &str);
3424
  inline pw_multi_aff_list &operator=(pw_multi_aff_list obj);
3425
  inline ~pw_multi_aff_list();
3426
  inline __isl_give isl_pw_multi_aff_list *copy() const &;
3427
  inline __isl_give isl_pw_multi_aff_list *copy() && = delete;
3428
  inline __isl_keep isl_pw_multi_aff_list *get() const;
3429
  inline __isl_give isl_pw_multi_aff_list *release();
3430
  inline bool is_null() const;
3431
  inline isl::ctx ctx() const;
3432
 
3433
  inline isl::pw_multi_aff_list add(isl::pw_multi_aff el) const;
3434
  inline isl::pw_multi_aff at(int index) const;
3435
  inline isl::pw_multi_aff get_at(int index) const;
3436
  inline isl::pw_multi_aff_list clear() const;
3437
  inline isl::pw_multi_aff_list concat(isl::pw_multi_aff_list list2) const;
3438
  inline isl::pw_multi_aff_list drop(unsigned int first, unsigned int n) const;
3439
  inline stat foreach(const std::function<stat(isl::pw_multi_aff)> &fn) const;
3440
  inline isl::pw_multi_aff_list insert(unsigned int pos, isl::pw_multi_aff el) const;
3441
  inline class size size() const;
3442
};
3443
 
3444
// declarations for isl::schedule
3445
inline schedule manage(__isl_take isl_schedule *ptr);
3446
inline schedule manage_copy(__isl_keep isl_schedule *ptr);
3447
 
3448
class schedule {
3449
  friend inline schedule manage(__isl_take isl_schedule *ptr);
3450
  friend inline schedule manage_copy(__isl_keep isl_schedule *ptr);
3451
 
3452
protected:
3453
  isl_schedule *ptr = nullptr;
3454
 
3455
  inline explicit schedule(__isl_take isl_schedule *ptr);
3456
 
3457
public:
3458
  inline /* implicit */ schedule();
3459
  inline /* implicit */ schedule(const schedule &obj);
3460
  inline explicit schedule(isl::ctx ctx, const std::string &str);
3461
  inline schedule &operator=(schedule obj);
3462
  inline ~schedule();
3463
  inline __isl_give isl_schedule *copy() const &;
3464
  inline __isl_give isl_schedule *copy() && = delete;
3465
  inline __isl_keep isl_schedule *get() const;
3466
  inline __isl_give isl_schedule *release();
3467
  inline bool is_null() const;
3468
  inline isl::ctx ctx() const;
3469
 
3470
  inline isl::schedule align_params(isl::space space) const;
3471
  inline isl::union_set domain() const;
3472
  inline isl::union_set get_domain() const;
3473
  static inline isl::schedule from_domain(isl::union_set domain);
3474
  inline isl::schedule gist_domain_params(isl::set context) const;
3475
  inline isl::schedule insert_partial_schedule(isl::multi_union_pw_aff partial) const;
3476
  inline isl::schedule intersect_domain(isl::union_set domain) const;
3477
  inline isl::union_map map() const;
3478
  inline isl::union_map get_map() const;
3479
  inline isl::schedule pullback(isl::union_pw_multi_aff upma) const;
3480
  inline isl::schedule_node root() const;
3481
  inline isl::schedule_node get_root() const;
3482
  inline isl::schedule sequence(isl::schedule schedule2) const;
3483
};
3484
 
3485
// declarations for isl::schedule_constraints
3486
inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr);
3487
inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr);
3488
 
3489
class schedule_constraints {
3490
  friend inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr);
3491
  friend inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr);
3492
 
3493
protected:
3494
  isl_schedule_constraints *ptr = nullptr;
3495
 
3496
  inline explicit schedule_constraints(__isl_take isl_schedule_constraints *ptr);
3497
 
3498
public:
3499
  inline /* implicit */ schedule_constraints();
3500
  inline /* implicit */ schedule_constraints(const schedule_constraints &obj);
3501
  inline explicit schedule_constraints(isl::ctx ctx, const std::string &str);
3502
  inline schedule_constraints &operator=(schedule_constraints obj);
3503
  inline ~schedule_constraints();
3504
  inline __isl_give isl_schedule_constraints *copy() const &;
3505
  inline __isl_give isl_schedule_constraints *copy() && = delete;
3506
  inline __isl_keep isl_schedule_constraints *get() const;
3507
  inline __isl_give isl_schedule_constraints *release();
3508
  inline bool is_null() const;
3509
  inline isl::ctx ctx() const;
3510
 
3511
  inline isl::union_map coincidence() const;
3512
  inline isl::union_map get_coincidence() const;
3513
  inline isl::schedule compute_schedule() const;
3514
  inline isl::union_map conditional_validity() const;
3515
  inline isl::union_map get_conditional_validity() const;
3516
  inline isl::union_map conditional_validity_condition() const;
3517
  inline isl::union_map get_conditional_validity_condition() const;
3518
  inline isl::set context() const;
3519
  inline isl::set get_context() const;
3520
  inline isl::union_set domain() const;
3521
  inline isl::union_set get_domain() const;
3522
  static inline isl::schedule_constraints on_domain(isl::union_set domain);
3523
  inline isl::union_map proximity() const;
3524
  inline isl::union_map get_proximity() const;
3525
  inline isl::schedule_constraints set_coincidence(isl::union_map coincidence) const;
3526
  inline isl::schedule_constraints set_conditional_validity(isl::union_map condition, isl::union_map validity) const;
3527
  inline isl::schedule_constraints set_context(isl::set context) const;
3528
  inline isl::schedule_constraints set_proximity(isl::union_map proximity) const;
3529
  inline isl::schedule_constraints set_validity(isl::union_map validity) const;
3530
  inline isl::union_map validity() const;
3531
  inline isl::union_map get_validity() const;
3532
};
3533
 
3534
// declarations for isl::schedule_node
3535
inline schedule_node manage(__isl_take isl_schedule_node *ptr);
3536
inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr);
3537
 
3538
class schedule_node {
3539
  friend inline schedule_node manage(__isl_take isl_schedule_node *ptr);
3540
  friend inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr);
3541
 
3542
protected:
3543
  isl_schedule_node *ptr = nullptr;
3544
 
3545
  inline explicit schedule_node(__isl_take isl_schedule_node *ptr);
3546
 
3547
public:
3548
  inline /* implicit */ schedule_node();
3549
  inline /* implicit */ schedule_node(const schedule_node &obj);
3550
  inline schedule_node &operator=(schedule_node obj);
3551
  inline ~schedule_node();
3552
  inline __isl_give isl_schedule_node *copy() const &;
3553
  inline __isl_give isl_schedule_node *copy() && = delete;
3554
  inline __isl_keep isl_schedule_node *get() const;
3555
  inline __isl_give isl_schedule_node *release();
3556
  inline bool is_null() const;
3557
private:
3558
  template <typename T,
3559
          typename = typename std::enable_if<std::is_same<
3560
                  const decltype(isl_schedule_node_get_type(nullptr)),
3561
                  const T>::value>::type>
3562
  inline boolean isa_type(T subtype) const;
3563
public:
3564
  template <class T> inline boolean isa() const;
3565
  template <class T> inline T as() const;
3566
  inline isl::ctx ctx() const;
3567
 
3568
  inline isl::schedule_node ancestor(int generation) const;
3569
  inline class size ancestor_child_position(const isl::schedule_node &ancestor) const;
3570
  inline class size get_ancestor_child_position(const isl::schedule_node &ancestor) const;
3571
  inline isl::schedule_node child(int pos) const;
3572
  inline class size child_position() const;
3573
  inline class size get_child_position() const;
3574
  inline isl::union_set domain() const;
3575
  inline isl::union_set get_domain() const;
3576
  inline boolean every_descendant(const std::function<boolean(isl::schedule_node)> &test) const;
3577
  inline isl::schedule_node first_child() const;
3578
  inline stat foreach_ancestor_top_down(const std::function<stat(isl::schedule_node)> &fn) const;
3579
  inline stat foreach_descendant_top_down(const std::function<boolean(isl::schedule_node)> &fn) const;
3580
  static inline isl::schedule_node from_domain(isl::union_set domain);
3581
  static inline isl::schedule_node from_extension(isl::union_map extension);
3582
  inline isl::schedule_node graft_after(isl::schedule_node graft) const;
3583
  inline isl::schedule_node graft_before(isl::schedule_node graft) const;
3584
  inline boolean has_children() const;
3585
  inline boolean has_next_sibling() const;
3586
  inline boolean has_parent() const;
3587
  inline boolean has_previous_sibling() const;
3588
  inline isl::schedule_node insert_context(isl::set context) const;
3589
  inline isl::schedule_node insert_filter(isl::union_set filter) const;
3590
  inline isl::schedule_node insert_guard(isl::set context) const;
3591
  inline isl::schedule_node insert_mark(isl::id mark) const;
3592
  inline isl::schedule_node insert_mark(const std::string &mark) const;
3593
  inline isl::schedule_node insert_partial_schedule(isl::multi_union_pw_aff schedule) const;
3594
  inline isl::schedule_node insert_sequence(isl::union_set_list filters) const;
3595
  inline isl::schedule_node insert_set(isl::union_set_list filters) const;
3596
  inline boolean is_equal(const isl::schedule_node &node2) const;
3597
  inline boolean is_subtree_anchored() const;
3598
  inline isl::schedule_node map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const;
3599
  inline class size n_children() const;
3600
  inline isl::schedule_node next_sibling() const;
3601
  inline isl::schedule_node order_after(isl::union_set filter) const;
3602
  inline isl::schedule_node order_before(isl::union_set filter) const;
3603
  inline isl::schedule_node parent() const;
3604
  inline isl::multi_union_pw_aff prefix_schedule_multi_union_pw_aff() const;
3605
  inline isl::multi_union_pw_aff get_prefix_schedule_multi_union_pw_aff() const;
3606
  inline isl::union_map prefix_schedule_relation() const;
3607
  inline isl::union_map get_prefix_schedule_relation() const;
3608
  inline isl::union_map prefix_schedule_union_map() const;
3609
  inline isl::union_map get_prefix_schedule_union_map() const;
3610
  inline isl::union_pw_multi_aff prefix_schedule_union_pw_multi_aff() const;
3611
  inline isl::union_pw_multi_aff get_prefix_schedule_union_pw_multi_aff() const;
3612
  inline isl::schedule_node previous_sibling() const;
3613
  inline isl::schedule_node root() const;
3614
  inline isl::schedule schedule() const;
3615
  inline isl::schedule get_schedule() const;
3616
  inline class size schedule_depth() const;
3617
  inline class size get_schedule_depth() const;
3618
  inline isl::schedule_node shared_ancestor(const isl::schedule_node &node2) const;
3619
  inline isl::schedule_node get_shared_ancestor(const isl::schedule_node &node2) const;
3620
  inline class size tree_depth() const;
3621
  inline class size get_tree_depth() const;
3622
  inline isl::union_set universe_domain() const;
3623
  inline isl::union_set get_universe_domain() const;
3624
};
3625
 
3626
// declarations for isl::schedule_node_band
3627
 
3628
class schedule_node_band : public schedule_node {
3629
  template <class T>
3630
  friend boolean schedule_node::isa() const;
3631
  friend schedule_node_band schedule_node::as<schedule_node_band>() const;
3632
  static const auto type = isl_schedule_node_band;
3633
 
3634
protected:
3635
  inline explicit schedule_node_band(__isl_take isl_schedule_node *ptr);
3636
 
3637
public:
3638
  inline /* implicit */ schedule_node_band();
3639
  inline /* implicit */ schedule_node_band(const schedule_node_band &obj);
3640
  inline schedule_node_band &operator=(schedule_node_band obj);
3641
  inline isl::ctx ctx() const;
3642
 
3643
  inline isl::union_set ast_build_options() const;
3644
  inline isl::union_set get_ast_build_options() const;
3645
  inline isl::set ast_isolate_option() const;
3646
  inline isl::set get_ast_isolate_option() const;
3647
  inline boolean member_get_coincident(int pos) const;
3648
  inline schedule_node_band member_set_coincident(int pos, int coincident) const;
3649
  inline schedule_node_band mod(isl::multi_val mv) const;
3650
  inline class size n_member() const;
3651
  inline isl::multi_union_pw_aff partial_schedule() const;
3652
  inline isl::multi_union_pw_aff get_partial_schedule() const;
3653
  inline boolean permutable() const;
3654
  inline boolean get_permutable() const;
3655
  inline schedule_node_band scale(isl::multi_val mv) const;
3656
  inline schedule_node_band scale_down(isl::multi_val mv) const;
3657
  inline schedule_node_band set_ast_build_options(isl::union_set options) const;
3658
  inline schedule_node_band set_permutable(int permutable) const;
3659
  inline schedule_node_band shift(isl::multi_union_pw_aff shift) const;
3660
  inline schedule_node_band split(int pos) const;
3661
  inline schedule_node_band tile(isl::multi_val sizes) const;
3662
  inline schedule_node_band member_set_ast_loop_default(int pos) const;
3663
  inline schedule_node_band member_set_ast_loop_atomic(int pos) const;
3664
  inline schedule_node_band member_set_ast_loop_unroll(int pos) const;
3665
  inline schedule_node_band member_set_ast_loop_separate(int pos) const;
3666
};
3667
 
3668
// declarations for isl::schedule_node_context
3669
 
3670
class schedule_node_context : public schedule_node {
3671
  template <class T>
3672
  friend boolean schedule_node::isa() const;
3673
  friend schedule_node_context schedule_node::as<schedule_node_context>() const;
3674
  static const auto type = isl_schedule_node_context;
3675
 
3676
protected:
3677
  inline explicit schedule_node_context(__isl_take isl_schedule_node *ptr);
3678
 
3679
public:
3680
  inline /* implicit */ schedule_node_context();
3681
  inline /* implicit */ schedule_node_context(const schedule_node_context &obj);
3682
  inline schedule_node_context &operator=(schedule_node_context obj);
3683
  inline isl::ctx ctx() const;
3684
 
3685
  inline isl::set context() const;
3686
  inline isl::set get_context() const;
3687
};
3688
 
3689
// declarations for isl::schedule_node_domain
3690
 
3691
class schedule_node_domain : public schedule_node {
3692
  template <class T>
3693
  friend boolean schedule_node::isa() const;
3694
  friend schedule_node_domain schedule_node::as<schedule_node_domain>() const;
3695
  static const auto type = isl_schedule_node_domain;
3696
 
3697
protected:
3698
  inline explicit schedule_node_domain(__isl_take isl_schedule_node *ptr);
3699
 
3700
public:
3701
  inline /* implicit */ schedule_node_domain();
3702
  inline /* implicit */ schedule_node_domain(const schedule_node_domain &obj);
3703
  inline schedule_node_domain &operator=(schedule_node_domain obj);
3704
  inline isl::ctx ctx() const;
3705
 
3706
  inline isl::union_set domain() const;
3707
  inline isl::union_set get_domain() const;
3708
};
3709
 
3710
// declarations for isl::schedule_node_expansion
3711
 
3712
class schedule_node_expansion : public schedule_node {
3713
  template <class T>
3714
  friend boolean schedule_node::isa() const;
3715
  friend schedule_node_expansion schedule_node::as<schedule_node_expansion>() const;
3716
  static const auto type = isl_schedule_node_expansion;
3717
 
3718
protected:
3719
  inline explicit schedule_node_expansion(__isl_take isl_schedule_node *ptr);
3720
 
3721
public:
3722
  inline /* implicit */ schedule_node_expansion();
3723
  inline /* implicit */ schedule_node_expansion(const schedule_node_expansion &obj);
3724
  inline schedule_node_expansion &operator=(schedule_node_expansion obj);
3725
  inline isl::ctx ctx() const;
3726
 
3727
  inline isl::union_pw_multi_aff contraction() const;
3728
  inline isl::union_pw_multi_aff get_contraction() const;
3729
  inline isl::union_map expansion() const;
3730
  inline isl::union_map get_expansion() const;
3731
};
3732
 
3733
// declarations for isl::schedule_node_extension
3734
 
3735
class schedule_node_extension : public schedule_node {
3736
  template <class T>
3737
  friend boolean schedule_node::isa() const;
3738
  friend schedule_node_extension schedule_node::as<schedule_node_extension>() const;
3739
  static const auto type = isl_schedule_node_extension;
3740
 
3741
protected:
3742
  inline explicit schedule_node_extension(__isl_take isl_schedule_node *ptr);
3743
 
3744
public:
3745
  inline /* implicit */ schedule_node_extension();
3746
  inline /* implicit */ schedule_node_extension(const schedule_node_extension &obj);
3747
  inline schedule_node_extension &operator=(schedule_node_extension obj);
3748
  inline isl::ctx ctx() const;
3749
 
3750
  inline isl::union_map extension() const;
3751
  inline isl::union_map get_extension() const;
3752
};
3753
 
3754
// declarations for isl::schedule_node_filter
3755
 
3756
class schedule_node_filter : public schedule_node {
3757
  template <class T>
3758
  friend boolean schedule_node::isa() const;
3759
  friend schedule_node_filter schedule_node::as<schedule_node_filter>() const;
3760
  static const auto type = isl_schedule_node_filter;
3761
 
3762
protected:
3763
  inline explicit schedule_node_filter(__isl_take isl_schedule_node *ptr);
3764
 
3765
public:
3766
  inline /* implicit */ schedule_node_filter();
3767
  inline /* implicit */ schedule_node_filter(const schedule_node_filter &obj);
3768
  inline schedule_node_filter &operator=(schedule_node_filter obj);
3769
  inline isl::ctx ctx() const;
3770
 
3771
  inline isl::union_set filter() const;
3772
  inline isl::union_set get_filter() const;
3773
};
3774
 
3775
// declarations for isl::schedule_node_guard
3776
 
3777
class schedule_node_guard : public schedule_node {
3778
  template <class T>
3779
  friend boolean schedule_node::isa() const;
3780
  friend schedule_node_guard schedule_node::as<schedule_node_guard>() const;
3781
  static const auto type = isl_schedule_node_guard;
3782
 
3783
protected:
3784
  inline explicit schedule_node_guard(__isl_take isl_schedule_node *ptr);
3785
 
3786
public:
3787
  inline /* implicit */ schedule_node_guard();
3788
  inline /* implicit */ schedule_node_guard(const schedule_node_guard &obj);
3789
  inline schedule_node_guard &operator=(schedule_node_guard obj);
3790
  inline isl::ctx ctx() const;
3791
 
3792
  inline isl::set guard() const;
3793
  inline isl::set get_guard() const;
3794
};
3795
 
3796
// declarations for isl::schedule_node_leaf
3797
 
3798
class schedule_node_leaf : public schedule_node {
3799
  template <class T>
3800
  friend boolean schedule_node::isa() const;
3801
  friend schedule_node_leaf schedule_node::as<schedule_node_leaf>() const;
3802
  static const auto type = isl_schedule_node_leaf;
3803
 
3804
protected:
3805
  inline explicit schedule_node_leaf(__isl_take isl_schedule_node *ptr);
3806
 
3807
public:
3808
  inline /* implicit */ schedule_node_leaf();
3809
  inline /* implicit */ schedule_node_leaf(const schedule_node_leaf &obj);
3810
  inline schedule_node_leaf &operator=(schedule_node_leaf obj);
3811
  inline isl::ctx ctx() const;
3812
 
3813
};
3814
 
3815
// declarations for isl::schedule_node_mark
3816
 
3817
class schedule_node_mark : public schedule_node {
3818
  template <class T>
3819
  friend boolean schedule_node::isa() const;
3820
  friend schedule_node_mark schedule_node::as<schedule_node_mark>() const;
3821
  static const auto type = isl_schedule_node_mark;
3822
 
3823
protected:
3824
  inline explicit schedule_node_mark(__isl_take isl_schedule_node *ptr);
3825
 
3826
public:
3827
  inline /* implicit */ schedule_node_mark();
3828
  inline /* implicit */ schedule_node_mark(const schedule_node_mark &obj);
3829
  inline schedule_node_mark &operator=(schedule_node_mark obj);
3830
  inline isl::ctx ctx() const;
3831
 
3832
  inline isl::id id() const;
3833
  inline isl::id get_id() const;
3834
};
3835
 
3836
// declarations for isl::schedule_node_sequence
3837
 
3838
class schedule_node_sequence : public schedule_node {
3839
  template <class T>
3840
  friend boolean schedule_node::isa() const;
3841
  friend schedule_node_sequence schedule_node::as<schedule_node_sequence>() const;
3842
  static const auto type = isl_schedule_node_sequence;
3843
 
3844
protected:
3845
  inline explicit schedule_node_sequence(__isl_take isl_schedule_node *ptr);
3846
 
3847
public:
3848
  inline /* implicit */ schedule_node_sequence();
3849
  inline /* implicit */ schedule_node_sequence(const schedule_node_sequence &obj);
3850
  inline schedule_node_sequence &operator=(schedule_node_sequence obj);
3851
  inline isl::ctx ctx() const;
3852
 
3853
};
3854
 
3855
// declarations for isl::schedule_node_set
3856
 
3857
class schedule_node_set : public schedule_node {
3858
  template <class T>
3859
  friend boolean schedule_node::isa() const;
3860
  friend schedule_node_set schedule_node::as<schedule_node_set>() const;
3861
  static const auto type = isl_schedule_node_set;
3862
 
3863
protected:
3864
  inline explicit schedule_node_set(__isl_take isl_schedule_node *ptr);
3865
 
3866
public:
3867
  inline /* implicit */ schedule_node_set();
3868
  inline /* implicit */ schedule_node_set(const schedule_node_set &obj);
3869
  inline schedule_node_set &operator=(schedule_node_set obj);
3870
  inline isl::ctx ctx() const;
3871
 
3872
};
3873
 
3874
// declarations for isl::set
3875
inline set manage(__isl_take isl_set *ptr);
3876
inline set manage_copy(__isl_keep isl_set *ptr);
3877
 
3878
class set {
3879
  friend inline set manage(__isl_take isl_set *ptr);
3880
  friend inline set manage_copy(__isl_keep isl_set *ptr);
3881
 
3882
protected:
3883
  isl_set *ptr = nullptr;
3884
 
3885
  inline explicit set(__isl_take isl_set *ptr);
3886
 
3887
public:
3888
  inline /* implicit */ set();
3889
  inline /* implicit */ set(const set &obj);
3890
  inline /* implicit */ set(isl::basic_set bset);
3891
  inline /* implicit */ set(isl::point pnt);
3892
  inline explicit set(isl::union_set uset);
3893
  inline explicit set(isl::ctx ctx, const std::string &str);
3894
  inline set &operator=(set obj);
3895
  inline ~set();
3896
  inline __isl_give isl_set *copy() const &;
3897
  inline __isl_give isl_set *copy() && = delete;
3898
  inline __isl_keep isl_set *get() const;
3899
  inline __isl_give isl_set *release();
3900
  inline bool is_null() const;
3901
  inline isl::ctx ctx() const;
3902
 
3903
  inline isl::set add_constraint(isl::constraint constraint) const;
3904
  inline isl::set add_dims(isl::dim type, unsigned int n) const;
3905
  inline isl::basic_set affine_hull() const;
3906
  inline isl::set align_params(isl::space model) const;
3907
  inline isl::set apply(isl::map map) const;
3908
  inline isl::union_set apply(const isl::union_map &umap) const;
3909
  inline isl::set apply(const isl::basic_map &map) const;
3910
  inline isl::pw_multi_aff as_pw_multi_aff() const;
3911
  inline isl::set as_set() const;
3912
  inline isl::basic_set_list basic_set_list() const;
3913
  inline isl::basic_set_list get_basic_set_list() const;
3914
  inline isl::set bind(isl::multi_id tuple) const;
3915
  inline isl::set coalesce() const;
3916
  inline isl::set complement() const;
3917
  inline isl::union_set compute_divs() const;
3918
  inline boolean contains(const isl::space &space) const;
3919
  inline isl::basic_set convex_hull() const;
3920
  inline isl::set detect_equalities() const;
3921
  inline class size dim(isl::dim type) const;
3922
  inline boolean dim_has_any_lower_bound(isl::dim type, unsigned int pos) const;
3923
  inline isl::id dim_id(isl::dim type, unsigned int pos) const;
3924
  inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
3925
  inline isl::pw_aff dim_max(int pos) const;
3926
  inline isl::val dim_max_val(int pos) const;
3927
  inline isl::pw_aff dim_min(int pos) const;
3928
  inline isl::val dim_min_val(int pos) const;
3929
  inline std::string dim_name(isl::dim type, unsigned int pos) const;
3930
  inline std::string get_dim_name(isl::dim type, unsigned int pos) const;
3931
  inline isl::set drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const;
3932
  inline isl::set eliminate(isl::dim type, unsigned int first, unsigned int n) const;
3933
  static inline isl::set empty(isl::space space);
3934
  inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
3935
  inline isl::set extract_set(const isl::space &space) const;
3936
  inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
3937
  inline int find_dim_by_id(isl::dim type, const std::string &id) const;
3938
  inline isl::set fix_si(isl::dim type, unsigned int pos, int value) const;
3939
  inline isl::set flatten() const;
3940
  inline stat foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const;
3941
  inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
3942
  inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
3943
  inline isl::set gist(isl::set context) const;
3944
  inline isl::union_set gist(const isl::union_set &context) const;
3945
  inline isl::set gist(const isl::basic_set &context) const;
3946
  inline isl::set gist(const isl::point &context) const;
3947
  inline isl::set gist_params(isl::set context) const;
3948
  inline boolean has_equal_space(const isl::set &set2) const;
3949
  inline isl::map identity() const;
3950
  inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
3951
  inline isl::pw_aff indicator_function() const;
3952
  inline isl::set insert_dims(isl::dim type, unsigned int pos, unsigned int n) const;
3953
  inline isl::map insert_domain(isl::space domain) const;
3954
  inline isl::set intersect(isl::set set2) const;
3955
  inline isl::union_set intersect(const isl::union_set &uset2) const;
3956
  inline isl::set intersect(const isl::basic_set &set2) const;
3957
  inline isl::set intersect(const isl::point &set2) const;
3958
  inline isl::set intersect_params(isl::set params) const;
3959
  inline boolean involves_dims(isl::dim type, unsigned int first, unsigned int n) const;
3960
  inline boolean involves_locals() const;
3961
  inline boolean is_bounded() const;
3962
  inline boolean is_disjoint(const isl::set &set2) const;
3963
  inline boolean is_disjoint(const isl::union_set &uset2) const;
3964
  inline boolean is_disjoint(const isl::basic_set &set2) const;
3965
  inline boolean is_disjoint(const isl::point &set2) const;
3966
  inline boolean is_empty() const;
3967
  inline boolean is_equal(const isl::set &set2) const;
3968
  inline boolean is_equal(const isl::union_set &uset2) const;
3969
  inline boolean is_equal(const isl::basic_set &set2) const;
3970
  inline boolean is_equal(const isl::point &set2) const;
3971
  inline boolean is_params() const;
3972
  inline boolean is_singleton() const;
3973
  inline boolean is_strict_subset(const isl::set &set2) const;
3974
  inline boolean is_strict_subset(const isl::union_set &uset2) const;
3975
  inline boolean is_strict_subset(const isl::basic_set &set2) const;
3976
  inline boolean is_strict_subset(const isl::point &set2) const;
3977
  inline boolean is_subset(const isl::set &set2) const;
3978
  inline boolean is_subset(const isl::union_set &uset2) const;
3979
  inline boolean is_subset(const isl::basic_set &set2) const;
3980
  inline boolean is_subset(const isl::point &set2) const;
3981
  inline boolean is_wrapping() const;
3982
  inline boolean isa_set() const;
3983
  inline isl::set lexmax() const;
3984
  inline isl::pw_multi_aff lexmax_pw_multi_aff() const;
3985
  inline isl::set lexmin() const;
3986
  inline isl::pw_multi_aff lexmin_pw_multi_aff() const;
3987
  inline isl::set lower_bound(isl::multi_pw_aff lower) const;
3988
  inline isl::set lower_bound(isl::multi_val lower) const;
3989
  inline isl::set lower_bound_si(isl::dim type, unsigned int pos, int value) const;
3990
  inline isl::set lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const;
3991
  inline isl::set lower_bound_val(isl::dim type, unsigned int pos, long value) const;
3992
  inline isl::multi_pw_aff max_multi_pw_aff() const;
3993
  inline isl::val max_val(const isl::aff &obj) const;
3994
  inline isl::multi_pw_aff min_multi_pw_aff() const;
3995
  inline isl::val min_val(const isl::aff &obj) const;
3996
  inline class size n_basic_set() const;
3997
  inline isl::set params() const;
3998
  inline isl::val plain_get_val_if_fixed(isl::dim type, unsigned int pos) const;
3999
  inline isl::multi_val plain_multi_val_if_fixed() const;
4000
  inline isl::multi_val get_plain_multi_val_if_fixed() const;
4001
  inline isl::basic_set polyhedral_hull() const;
4002
  inline isl::set preimage(isl::multi_aff ma) const;
4003
  inline isl::set preimage(isl::multi_pw_aff mpa) const;
4004
  inline isl::set preimage(isl::pw_multi_aff pma) const;
4005
  inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const;
4006
  inline isl::set product(isl::set set2) const;
4007
  inline isl::set project_out(isl::dim type, unsigned int first, unsigned int n) const;
4008
  inline isl::set project_out_all_params() const;
4009
  inline isl::set project_out_param(isl::id id) const;
4010
  inline isl::set project_out_param(const std::string &id) const;
4011
  inline isl::set project_out_param(isl::id_list list) const;
4012
  inline isl::pw_multi_aff pw_multi_aff_on_domain(isl::multi_val mv) const;
4013
  inline isl::set remove_dims(isl::dim type, unsigned int first, unsigned int n) const;
4014
  inline isl::set remove_divs() const;
4015
  inline isl::set remove_redundancies() const;
4016
  inline isl::set reset_tuple_id() const;
4017
  inline isl::basic_set sample() const;
4018
  inline isl::point sample_point() const;
4019
  inline isl::set set_dim_id(isl::dim type, unsigned int pos, isl::id id) const;
4020
  inline isl::set set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
4021
  inline isl::set_list set_list() const;
4022
  inline isl::set set_tuple_id(isl::id id) const;
4023
  inline isl::set set_tuple_id(const std::string &id) const;
4024
  inline isl::fixed_box simple_fixed_box_hull() const;
4025
  inline isl::fixed_box get_simple_fixed_box_hull() const;
4026
  inline isl::basic_set simple_hull() const;
4027
  inline isl::space space() const;
4028
  inline isl::space get_space() const;
4029
  inline isl::val stride(int pos) const;
4030
  inline isl::val get_stride(int pos) const;
4031
  inline isl::set subtract(isl::set set2) const;
4032
  inline isl::union_set subtract(const isl::union_set &uset2) const;
4033
  inline isl::set subtract(const isl::basic_set &set2) const;
4034
  inline isl::set subtract(const isl::point &set2) const;
4035
  inline isl::set_list to_list() const;
4036
  inline isl::union_set to_union_set() const;
4037
  inline isl::map translation() const;
4038
  inline class size tuple_dim() const;
4039
  inline isl::id tuple_id() const;
4040
  inline isl::id get_tuple_id() const;
4041
  inline std::string tuple_name() const;
4042
  inline std::string get_tuple_name() const;
4043
  inline isl::set unbind_params(isl::multi_id tuple) const;
4044
  inline isl::map unbind_params_insert_domain(isl::multi_id domain) const;
4045
  inline isl::set unite(isl::set set2) const;
4046
  inline isl::union_set unite(const isl::union_set &uset2) const;
4047
  inline isl::set unite(const isl::basic_set &set2) const;
4048
  inline isl::set unite(const isl::point &set2) const;
4049
  static inline isl::set universe(isl::space space);
4050
  inline isl::basic_set unshifted_simple_hull() const;
4051
  inline isl::map unwrap() const;
4052
  inline isl::set upper_bound(isl::multi_pw_aff upper) const;
4053
  inline isl::set upper_bound(isl::multi_val upper) const;
4054
  inline isl::set upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const;
4055
  inline isl::set upper_bound_val(isl::dim type, unsigned int pos, long value) const;
4056
};
4057
 
4058
// declarations for isl::set_list
4059
inline set_list manage(__isl_take isl_set_list *ptr);
4060
inline set_list manage_copy(__isl_keep isl_set_list *ptr);
4061
 
4062
class set_list {
4063
  friend inline set_list manage(__isl_take isl_set_list *ptr);
4064
  friend inline set_list manage_copy(__isl_keep isl_set_list *ptr);
4065
 
4066
protected:
4067
  isl_set_list *ptr = nullptr;
4068
 
4069
  inline explicit set_list(__isl_take isl_set_list *ptr);
4070
 
4071
public:
4072
  inline /* implicit */ set_list();
4073
  inline /* implicit */ set_list(const set_list &obj);
4074
  inline explicit set_list(isl::ctx ctx, int n);
4075
  inline explicit set_list(isl::set el);
4076
  inline explicit set_list(isl::ctx ctx, const std::string &str);
4077
  inline set_list &operator=(set_list obj);
4078
  inline ~set_list();
4079
  inline __isl_give isl_set_list *copy() const &;
4080
  inline __isl_give isl_set_list *copy() && = delete;
4081
  inline __isl_keep isl_set_list *get() const;
4082
  inline __isl_give isl_set_list *release();
4083
  inline bool is_null() const;
4084
  inline isl::ctx ctx() const;
4085
 
4086
  inline isl::set_list add(isl::set el) const;
4087
  inline isl::set at(int index) const;
4088
  inline isl::set get_at(int index) const;
4089
  inline isl::set_list clear() const;
4090
  inline isl::set_list concat(isl::set_list list2) const;
4091
  inline isl::set_list drop(unsigned int first, unsigned int n) const;
4092
  inline stat foreach(const std::function<stat(isl::set)> &fn) const;
4093
  inline isl::set_list insert(unsigned int pos, isl::set el) const;
4094
  inline class size size() const;
4095
};
4096
 
4097
// declarations for isl::space
4098
inline space manage(__isl_take isl_space *ptr);
4099
inline space manage_copy(__isl_keep isl_space *ptr);
4100
 
4101
class space {
4102
  friend inline space manage(__isl_take isl_space *ptr);
4103
  friend inline space manage_copy(__isl_keep isl_space *ptr);
4104
 
4105
protected:
4106
  isl_space *ptr = nullptr;
4107
 
4108
  inline explicit space(__isl_take isl_space *ptr);
4109
 
4110
public:
4111
  inline /* implicit */ space();
4112
  inline /* implicit */ space(const space &obj);
4113
  inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out);
4114
  inline explicit space(isl::ctx ctx, unsigned int nparam, unsigned int dim);
4115
  inline space &operator=(space obj);
4116
  inline ~space();
4117
  inline __isl_give isl_space *copy() const &;
4118
  inline __isl_give isl_space *copy() && = delete;
4119
  inline __isl_keep isl_space *get() const;
4120
  inline __isl_give isl_space *release();
4121
  inline bool is_null() const;
4122
  inline isl::ctx ctx() const;
4123
 
4124
  inline isl::space add_dims(isl::dim type, unsigned int n) const;
4125
  inline isl::space add_named_tuple(isl::id tuple_id, unsigned int dim) const;
4126
  inline isl::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const;
4127
  inline isl::space add_param(isl::id id) const;
4128
  inline isl::space add_param(const std::string &id) const;
4129
  inline isl::space add_unnamed_tuple(unsigned int dim) const;
4130
  inline isl::space align_params(isl::space space2) const;
4131
  inline isl::space curry() const;
4132
  inline class size dim(isl::dim type) const;
4133
  inline isl::id dim_id(isl::dim type, unsigned int pos) const;
4134
  inline isl::id get_dim_id(isl::dim type, unsigned int pos) const;
4135
  inline isl::space domain() const;
4136
  inline isl::multi_aff domain_map_multi_aff() const;
4137
  inline isl::pw_multi_aff domain_map_pw_multi_aff() const;
4138
  inline isl::id domain_tuple_id() const;
4139
  inline isl::id get_domain_tuple_id() const;
4140
  inline isl::space drop_dims(isl::dim type, unsigned int first, unsigned int num) const;
4141
  inline int find_dim_by_id(isl::dim type, const isl::id &id) const;
4142
  inline int find_dim_by_id(isl::dim type, const std::string &id) const;
4143
  inline isl::space flatten_domain() const;
4144
  inline isl::space flatten_range() const;
4145
  inline boolean has_domain_tuple_id() const;
4146
  inline boolean has_equal_tuples(const isl::space &space2) const;
4147
  inline boolean has_range_tuple_id() const;
4148
  inline boolean has_tuple_id(isl::dim type) const;
4149
  inline boolean has_tuple_name(isl::dim type) const;
4150
  inline isl::multi_aff identity_multi_aff_on_domain() const;
4151
  inline isl::multi_pw_aff identity_multi_pw_aff_on_domain() const;
4152
  inline isl::pw_multi_aff identity_pw_multi_aff_on_domain() const;
4153
  inline boolean is_equal(const isl::space &space2) const;
4154
  inline boolean is_params() const;
4155
  inline boolean is_set() const;
4156
  inline boolean is_wrapping() const;
4157
  inline isl::space map_from_domain_and_range(isl::space range) const;
4158
  inline isl::space map_from_set() const;
4159
  inline isl::multi_aff multi_aff(isl::aff_list list) const;
4160
  inline isl::multi_aff multi_aff_on_domain(isl::multi_val mv) const;
4161
  inline isl::multi_id multi_id(isl::id_list list) const;
4162
  inline isl::multi_pw_aff multi_pw_aff(isl::pw_aff_list list) const;
4163
  inline isl::multi_union_pw_aff multi_union_pw_aff(isl::union_pw_aff_list list) const;
4164
  inline isl::multi_val multi_val(isl::val_list list) const;
4165
  inline isl::aff param_aff_on_domain(isl::id id) const;
4166
  inline isl::aff param_aff_on_domain(const std::string &id) const;
4167
  inline isl::space params() const;
4168
  static inline isl::space params_alloc(isl::ctx ctx, unsigned int nparam);
4169
  inline isl::space product(isl::space right) const;
4170
  inline isl::space range() const;
4171
  inline isl::multi_aff range_map_multi_aff() const;
4172
  inline isl::pw_multi_aff range_map_pw_multi_aff() const;
4173
  inline isl::space range_reverse() const;
4174
  inline isl::id range_tuple_id() const;
4175
  inline isl::id get_range_tuple_id() const;
4176
  inline isl::space reverse() const;
4177
  inline isl::space set_dim_id(isl::dim type, unsigned int pos, isl::id id) const;
4178
  inline isl::space set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const;
4179
  inline isl::space set_domain_tuple(isl::id id) const;
4180
  inline isl::space set_domain_tuple(const std::string &id) const;
4181
  inline isl::space set_from_params() const;
4182
  inline isl::space set_range_tuple(isl::id id) const;
4183
  inline isl::space set_range_tuple(const std::string &id) const;
4184
  inline isl::space set_tuple_id(isl::dim type, isl::id id) const;
4185
  inline isl::space set_tuple_id(isl::dim type, const std::string &id) const;
4186
  inline isl::id tuple_id(isl::dim type) const;
4187
  inline isl::id get_tuple_id(isl::dim type) const;
4188
  inline std::string tuple_name(isl::dim type) const;
4189
  inline std::string get_tuple_name(isl::dim type) const;
4190
  inline isl::space uncurry() const;
4191
  static inline isl::space unit(isl::ctx ctx);
4192
  inline isl::map universe_map() const;
4193
  inline isl::set universe_set() const;
4194
  inline isl::space unwrap() const;
4195
  inline isl::space wrap() const;
4196
  inline isl::aff zero_aff_on_domain() const;
4197
  inline isl::multi_aff zero_multi_aff() const;
4198
  inline isl::multi_pw_aff zero_multi_pw_aff() const;
4199
  inline isl::multi_union_pw_aff zero_multi_union_pw_aff() const;
4200
  inline isl::multi_val zero_multi_val() const;
4201
};
4202
 
4203
// declarations for isl::union_access_info
4204
inline union_access_info manage(__isl_take isl_union_access_info *ptr);
4205
inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr);
4206
 
4207
class union_access_info {
4208
  friend inline union_access_info manage(__isl_take isl_union_access_info *ptr);
4209
  friend inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr);
4210
 
4211
protected:
4212
  isl_union_access_info *ptr = nullptr;
4213
 
4214
  inline explicit union_access_info(__isl_take isl_union_access_info *ptr);
4215
 
4216
public:
4217
  inline /* implicit */ union_access_info();
4218
  inline /* implicit */ union_access_info(const union_access_info &obj);
4219
  inline explicit union_access_info(isl::union_map sink);
4220
  inline union_access_info &operator=(union_access_info obj);
4221
  inline ~union_access_info();
4222
  inline __isl_give isl_union_access_info *copy() const &;
4223
  inline __isl_give isl_union_access_info *copy() && = delete;
4224
  inline __isl_keep isl_union_access_info *get() const;
4225
  inline __isl_give isl_union_access_info *release();
4226
  inline bool is_null() const;
4227
  inline isl::ctx ctx() const;
4228
 
4229
  inline isl::union_flow compute_flow() const;
4230
  inline isl::union_access_info set_kill(isl::union_map kill) const;
4231
  inline isl::union_access_info set_may_source(isl::union_map may_source) const;
4232
  inline isl::union_access_info set_must_source(isl::union_map must_source) const;
4233
  inline isl::union_access_info set_schedule(isl::schedule schedule) const;
4234
  inline isl::union_access_info set_schedule_map(isl::union_map schedule_map) const;
4235
};
4236
 
4237
// declarations for isl::union_flow
4238
inline union_flow manage(__isl_take isl_union_flow *ptr);
4239
inline union_flow manage_copy(__isl_keep isl_union_flow *ptr);
4240
 
4241
class union_flow {
4242
  friend inline union_flow manage(__isl_take isl_union_flow *ptr);
4243
  friend inline union_flow manage_copy(__isl_keep isl_union_flow *ptr);
4244
 
4245
protected:
4246
  isl_union_flow *ptr = nullptr;
4247
 
4248
  inline explicit union_flow(__isl_take isl_union_flow *ptr);
4249
 
4250
public:
4251
  inline /* implicit */ union_flow();
4252
  inline /* implicit */ union_flow(const union_flow &obj);
4253
  inline union_flow &operator=(union_flow obj);
4254
  inline ~union_flow();
4255
  inline __isl_give isl_union_flow *copy() const &;
4256
  inline __isl_give isl_union_flow *copy() && = delete;
4257
  inline __isl_keep isl_union_flow *get() const;
4258
  inline __isl_give isl_union_flow *release();
4259
  inline bool is_null() const;
4260
  inline isl::ctx ctx() const;
4261
 
4262
  inline isl::union_map full_may_dependence() const;
4263
  inline isl::union_map get_full_may_dependence() const;
4264
  inline isl::union_map full_must_dependence() const;
4265
  inline isl::union_map get_full_must_dependence() const;
4266
  inline isl::union_map may_dependence() const;
4267
  inline isl::union_map get_may_dependence() const;
4268
  inline isl::union_map may_no_source() const;
4269
  inline isl::union_map get_may_no_source() const;
4270
  inline isl::union_map must_dependence() const;
4271
  inline isl::union_map get_must_dependence() const;
4272
  inline isl::union_map must_no_source() const;
4273
  inline isl::union_map get_must_no_source() const;
4274
};
4275
 
4276
// declarations for isl::union_map
4277
inline union_map manage(__isl_take isl_union_map *ptr);
4278
inline union_map manage_copy(__isl_keep isl_union_map *ptr);
4279
 
4280
class union_map {
4281
  friend inline union_map manage(__isl_take isl_union_map *ptr);
4282
  friend inline union_map manage_copy(__isl_keep isl_union_map *ptr);
4283
 
4284
protected:
4285
  isl_union_map *ptr = nullptr;
4286
 
4287
  inline explicit union_map(__isl_take isl_union_map *ptr);
4288
 
4289
public:
4290
  inline /* implicit */ union_map();
4291
  inline /* implicit */ union_map(const union_map &obj);
4292
  inline /* implicit */ union_map(isl::basic_map bmap);
4293
  inline /* implicit */ union_map(isl::map map);
4294
  inline explicit union_map(isl::ctx ctx, const std::string &str);
4295
  inline union_map &operator=(union_map obj);
4296
  inline ~union_map();
4297
  inline __isl_give isl_union_map *copy() const &;
4298
  inline __isl_give isl_union_map *copy() && = delete;
4299
  inline __isl_keep isl_union_map *get() const;
4300
  inline __isl_give isl_union_map *release();
4301
  inline bool is_null() const;
4302
  inline isl::ctx ctx() const;
4303
 
4304
  inline isl::union_map affine_hull() const;
4305
  inline isl::union_map apply_domain(isl::union_map umap2) const;
4306
  inline isl::union_map apply_range(isl::union_map umap2) const;
4307
  inline isl::map as_map() const;
4308
  inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
4309
  inline isl::union_pw_multi_aff as_union_pw_multi_aff() const;
4310
  inline isl::union_set bind_range(isl::multi_id tuple) const;
4311
  inline isl::union_map coalesce() const;
4312
  inline isl::union_map compute_divs() const;
4313
  inline isl::union_map curry() const;
4314
  inline isl::union_set deltas() const;
4315
  inline isl::union_map detect_equalities() const;
4316
  inline isl::union_set domain() const;
4317
  inline isl::union_map domain_factor_domain() const;
4318
  inline isl::union_map domain_factor_range() const;
4319
  inline isl::union_map domain_map() const;
4320
  inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const;
4321
  inline isl::union_map domain_product(isl::union_map umap2) const;
4322
  static inline isl::union_map empty(isl::ctx ctx);
4323
  inline isl::union_map eq_at(isl::multi_union_pw_aff mupa) const;
4324
  inline boolean every_map(const std::function<boolean(isl::map)> &test) const;
4325
  inline isl::map extract_map(isl::space space) const;
4326
  inline isl::union_map factor_domain() const;
4327
  inline isl::union_map factor_range() const;
4328
  inline isl::union_map fixed_power(isl::val exp) const;
4329
  inline isl::union_map fixed_power(long exp) const;
4330
  inline isl::union_map flat_range_product(isl::union_map umap2) const;
4331
  inline stat foreach_map(const std::function<stat(isl::map)> &fn) const;
4332
  static inline isl::union_map from(isl::multi_union_pw_aff mupa);
4333
  static inline isl::union_map from(isl::union_pw_multi_aff upma);
4334
  static inline isl::union_map from_domain(isl::union_set uset);
4335
  static inline isl::union_map from_domain_and_range(isl::union_set domain, isl::union_set range);
4336
  static inline isl::union_map from_range(isl::union_set uset);
4337
  inline isl::union_map gist(isl::union_map context) const;
4338
  inline isl::union_map gist_domain(isl::union_set uset) const;
4339
  inline isl::union_map gist_params(isl::set set) const;
4340
  inline isl::union_map gist_range(isl::union_set uset) const;
4341
  inline isl::union_map intersect(isl::union_map umap2) const;
4342
  inline isl::union_map intersect_domain(isl::space space) const;
4343
  inline isl::union_map intersect_domain(isl::union_set uset) const;
4344
  inline isl::union_map intersect_domain_factor_domain(isl::union_map factor) const;
4345
  inline isl::union_map intersect_domain_factor_range(isl::union_map factor) const;
4346
  inline isl::union_map intersect_params(isl::set set) const;
4347
  inline isl::union_map intersect_range(isl::space space) const;
4348
  inline isl::union_map intersect_range(isl::union_set uset) const;
4349
  inline isl::union_map intersect_range_factor_domain(isl::union_map factor) const;
4350
  inline isl::union_map intersect_range_factor_range(isl::union_map factor) const;
4351
  inline boolean is_bijective() const;
4352
  inline boolean is_disjoint(const isl::union_map &umap2) const;
4353
  inline boolean is_empty() const;
4354
  inline boolean is_equal(const isl::union_map &umap2) const;
4355
  inline boolean is_injective() const;
4356
  inline boolean is_single_valued() const;
4357
  inline boolean is_strict_subset(const isl::union_map &umap2) const;
4358
  inline boolean is_subset(const isl::union_map &umap2) const;
4359
  inline boolean isa_map() const;
4360
  inline isl::union_map lexmax() const;
4361
  inline isl::union_map lexmin() const;
4362
  inline isl::map_list map_list() const;
4363
  inline isl::map_list get_map_list() const;
4364
  inline isl::set params() const;
4365
  inline isl::union_map polyhedral_hull() const;
4366
  inline isl::union_map preimage_domain(isl::multi_aff ma) const;
4367
  inline isl::union_map preimage_domain(isl::multi_pw_aff mpa) const;
4368
  inline isl::union_map preimage_domain(isl::pw_multi_aff pma) const;
4369
  inline isl::union_map preimage_domain(isl::union_pw_multi_aff upma) const;
4370
  inline isl::union_map preimage_range(isl::multi_aff ma) const;
4371
  inline isl::union_map preimage_range(isl::pw_multi_aff pma) const;
4372
  inline isl::union_map preimage_range(isl::union_pw_multi_aff upma) const;
4373
  inline isl::union_map product(isl::union_map umap2) const;
4374
  inline isl::union_map project_out_all_params() const;
4375
  inline isl::union_set range() const;
4376
  inline isl::union_map range_factor_domain() const;
4377
  inline isl::union_map range_factor_range() const;
4378
  inline isl::union_map range_map() const;
4379
  inline isl::union_map range_product(isl::union_map umap2) const;
4380
  inline isl::union_map range_reverse() const;
4381
  inline isl::union_map reverse() const;
4382
  inline isl::space space() const;
4383
  inline isl::space get_space() const;
4384
  inline isl::union_map subtract(isl::union_map umap2) const;
4385
  inline isl::union_map subtract_domain(isl::union_set dom) const;
4386
  inline isl::union_map subtract_range(isl::union_set dom) const;
4387
  inline isl::union_map uncurry() const;
4388
  inline isl::union_map unite(isl::union_map umap2) const;
4389
  inline isl::union_map universe() const;
4390
  inline isl::union_set wrap() const;
4391
  inline isl::union_map zip() const;
4392
};
4393
 
4394
// declarations for isl::union_pw_aff
4395
inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr);
4396
inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr);
4397
 
4398
class union_pw_aff {
4399
  friend inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr);
4400
  friend inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr);
4401
 
4402
protected:
4403
  isl_union_pw_aff *ptr = nullptr;
4404
 
4405
  inline explicit union_pw_aff(__isl_take isl_union_pw_aff *ptr);
4406
 
4407
public:
4408
  inline /* implicit */ union_pw_aff();
4409
  inline /* implicit */ union_pw_aff(const union_pw_aff &obj);
4410
  inline /* implicit */ union_pw_aff(isl::aff aff);
4411
  inline /* implicit */ union_pw_aff(isl::pw_aff pa);
4412
  inline explicit union_pw_aff(isl::ctx ctx, const std::string &str);
4413
  inline explicit union_pw_aff(isl::union_set domain, isl::val v);
4414
  inline union_pw_aff &operator=(union_pw_aff obj);
4415
  inline ~union_pw_aff();
4416
  inline __isl_give isl_union_pw_aff *copy() const &;
4417
  inline __isl_give isl_union_pw_aff *copy() && = delete;
4418
  inline __isl_keep isl_union_pw_aff *get() const;
4419
  inline __isl_give isl_union_pw_aff *release();
4420
  inline bool is_null() const;
4421
  inline isl::ctx ctx() const;
4422
 
4423
  inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const;
4424
  inline isl::union_pw_aff add(isl::union_pw_aff upa2) const;
4425
  inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const;
4426
  inline isl::union_pw_aff add(const isl::aff &upa2) const;
4427
  inline isl::union_pw_aff add(const isl::pw_aff &upa2) const;
4428
  inline isl::union_pw_multi_aff add_pw_multi_aff(const isl::pw_multi_aff &pma) const;
4429
  inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const;
4430
  inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
4431
  inline isl::pw_multi_aff as_pw_multi_aff() const;
4432
  inline isl::union_map as_union_map() const;
4433
  inline isl::union_pw_aff at(int pos) const;
4434
  inline isl::union_set bind(const isl::multi_id &tuple) const;
4435
  inline isl::union_set bind(isl::id id) const;
4436
  inline isl::union_set bind(const std::string &id) const;
4437
  inline isl::union_pw_aff coalesce() const;
4438
  inline class size dim(isl::dim type) const;
4439
  inline isl::union_set domain() const;
4440
  static inline isl::union_pw_aff empty(isl::space space);
4441
  inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const;
4442
  inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const;
4443
  inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const;
4444
  inline stat foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const;
4445
  inline isl::union_pw_aff gist(isl::union_set context) const;
4446
  inline boolean has_range_tuple_id() const;
4447
  inline isl::union_pw_aff intersect_domain(isl::space space) const;
4448
  inline isl::union_pw_aff intersect_domain(isl::union_set uset) const;
4449
  inline isl::union_pw_aff intersect_domain_wrapped_domain(isl::union_set uset) const;
4450
  inline isl::union_pw_aff intersect_domain_wrapped_range(isl::union_set uset) const;
4451
  inline isl::union_pw_aff intersect_params(isl::set set) const;
4452
  inline boolean involves_locals() const;
4453
  inline boolean involves_nan() const;
4454
  inline boolean isa_pw_multi_aff() const;
4455
  inline isl::union_pw_aff_list list() const;
4456
  inline isl::multi_union_pw_aff neg() const;
4457
  inline boolean plain_is_empty() const;
4458
  inline boolean plain_is_equal(const isl::multi_union_pw_aff &multi2) const;
4459
  inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const;
4460
  inline isl::union_pw_aff pullback(isl::union_pw_multi_aff upma) const;
4461
  inline isl::pw_multi_aff_list pw_multi_aff_list() const;
4462
  inline isl::union_pw_multi_aff range_factor_domain() const;
4463
  inline isl::union_pw_multi_aff range_factor_range() const;
4464
  inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const;
4465
  inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const;
4466
  inline isl::id range_tuple_id() const;
4467
  inline isl::multi_union_pw_aff reset_range_tuple_id() const;
4468
  inline isl::multi_union_pw_aff reset_tuple_id(isl::dim type) const;
4469
  inline isl::multi_union_pw_aff scale(const isl::multi_val &mv) const;
4470
  inline isl::multi_union_pw_aff scale(const isl::val &v) const;
4471
  inline isl::multi_union_pw_aff scale(long v) const;
4472
  inline isl::multi_union_pw_aff scale_down(const isl::multi_val &mv) const;
4473
  inline isl::multi_union_pw_aff scale_down(const isl::val &v) const;
4474
  inline isl::multi_union_pw_aff scale_down(long v) const;
4475
  inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const;
4476
  inline isl::multi_union_pw_aff set_range_tuple(const isl::id &id) const;
4477
  inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const;
4478
  inline isl::multi_union_pw_aff set_union_pw_aff(int pos, const isl::union_pw_aff &el) const;
4479
  inline class size size() const;
4480
  inline isl::space space() const;
4481
  inline isl::space get_space() const;
4482
  inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const;
4483
  inline isl::union_pw_aff sub(isl::union_pw_aff upa2) const;
4484
  inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const;
4485
  inline isl::union_pw_aff sub(const isl::aff &upa2) const;
4486
  inline isl::union_pw_aff sub(const isl::pw_aff &upa2) const;
4487
  inline isl::union_pw_aff subtract_domain(isl::space space) const;
4488
  inline isl::union_pw_aff subtract_domain(isl::union_set uset) const;
4489
  inline isl::union_pw_aff_list to_list() const;
4490
  inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const;
4491
  inline isl::union_pw_aff union_add(isl::union_pw_aff upa2) const;
4492
  inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const;
4493
  inline isl::union_pw_aff union_add(const isl::aff &upa2) const;
4494
  inline isl::union_pw_aff union_add(const isl::pw_aff &upa2) const;
4495
};
4496
 
4497
// declarations for isl::union_pw_aff_list
4498
inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
4499
inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
4500
 
4501
class union_pw_aff_list {
4502
  friend inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr);
4503
  friend inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr);
4504
 
4505
protected:
4506
  isl_union_pw_aff_list *ptr = nullptr;
4507
 
4508
  inline explicit union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr);
4509
 
4510
public:
4511
  inline /* implicit */ union_pw_aff_list();
4512
  inline /* implicit */ union_pw_aff_list(const union_pw_aff_list &obj);
4513
  inline explicit union_pw_aff_list(isl::ctx ctx, int n);
4514
  inline explicit union_pw_aff_list(isl::union_pw_aff el);
4515
  inline explicit union_pw_aff_list(isl::ctx ctx, const std::string &str);
4516
  inline union_pw_aff_list &operator=(union_pw_aff_list obj);
4517
  inline ~union_pw_aff_list();
4518
  inline __isl_give isl_union_pw_aff_list *copy() const &;
4519
  inline __isl_give isl_union_pw_aff_list *copy() && = delete;
4520
  inline __isl_keep isl_union_pw_aff_list *get() const;
4521
  inline __isl_give isl_union_pw_aff_list *release();
4522
  inline bool is_null() const;
4523
  inline isl::ctx ctx() const;
4524
 
4525
  inline isl::union_pw_aff_list add(isl::union_pw_aff el) const;
4526
  inline isl::union_pw_aff at(int index) const;
4527
  inline isl::union_pw_aff get_at(int index) const;
4528
  inline isl::union_pw_aff_list clear() const;
4529
  inline isl::union_pw_aff_list concat(isl::union_pw_aff_list list2) const;
4530
  inline isl::union_pw_aff_list drop(unsigned int first, unsigned int n) const;
4531
  inline stat foreach(const std::function<stat(isl::union_pw_aff)> &fn) const;
4532
  inline isl::union_pw_aff_list insert(unsigned int pos, isl::union_pw_aff el) const;
4533
  inline class size size() const;
4534
};
4535
 
4536
// declarations for isl::union_pw_multi_aff
4537
inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr);
4538
inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr);
4539
 
4540
class union_pw_multi_aff {
4541
  friend inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr);
4542
  friend inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr);
4543
 
4544
protected:
4545
  isl_union_pw_multi_aff *ptr = nullptr;
4546
 
4547
  inline explicit union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr);
4548
 
4549
public:
4550
  inline /* implicit */ union_pw_multi_aff();
4551
  inline /* implicit */ union_pw_multi_aff(const union_pw_multi_aff &obj);
4552
  inline explicit union_pw_multi_aff(isl::union_set uset);
4553
  inline /* implicit */ union_pw_multi_aff(isl::multi_aff ma);
4554
  inline /* implicit */ union_pw_multi_aff(isl::pw_multi_aff pma);
4555
  inline explicit union_pw_multi_aff(isl::union_map umap);
4556
  inline /* implicit */ union_pw_multi_aff(isl::union_pw_aff upa);
4557
  inline explicit union_pw_multi_aff(isl::ctx ctx, const std::string &str);
4558
  inline union_pw_multi_aff &operator=(union_pw_multi_aff obj);
4559
  inline ~union_pw_multi_aff();
4560
  inline __isl_give isl_union_pw_multi_aff *copy() const &;
4561
  inline __isl_give isl_union_pw_multi_aff *copy() && = delete;
4562
  inline __isl_keep isl_union_pw_multi_aff *get() const;
4563
  inline __isl_give isl_union_pw_multi_aff *release();
4564
  inline bool is_null() const;
4565
  inline isl::ctx ctx() const;
4566
 
4567
  inline isl::union_pw_multi_aff add(isl::union_pw_multi_aff upma2) const;
4568
  inline isl::union_pw_multi_aff add_pw_multi_aff(isl::pw_multi_aff pma) const;
4569
  inline isl::union_pw_multi_aff apply(isl::union_pw_multi_aff upma2) const;
4570
  inline isl::multi_union_pw_aff as_multi_union_pw_aff() const;
4571
  inline isl::pw_multi_aff as_pw_multi_aff() const;
4572
  inline isl::union_map as_union_map() const;
4573
  inline isl::union_pw_multi_aff coalesce() const;
4574
  inline isl::union_set domain() const;
4575
  static inline isl::union_pw_multi_aff empty(isl::space space);
4576
  static inline isl::union_pw_multi_aff empty(isl::ctx ctx);
4577
  inline isl::pw_multi_aff extract_pw_multi_aff(isl::space space) const;
4578
  inline isl::union_pw_multi_aff flat_range_product(isl::union_pw_multi_aff upma2) const;
4579
  inline isl::union_pw_multi_aff gist(isl::union_set context) const;
4580
  inline isl::union_pw_multi_aff intersect_domain(isl::space space) const;
4581
  inline isl::union_pw_multi_aff intersect_domain(isl::union_set uset) const;
4582
  inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(isl::union_set uset) const;
4583
  inline isl::union_pw_multi_aff intersect_domain_wrapped_range(isl::union_set uset) const;
4584
  inline isl::union_pw_multi_aff intersect_params(isl::set set) const;
4585
  inline boolean involves_locals() const;
4586
  inline boolean isa_pw_multi_aff() const;
4587
  inline boolean plain_is_empty() const;
4588
  inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2) const;
4589
  inline isl::union_pw_multi_aff pullback(isl::union_pw_multi_aff upma2) const;
4590
  inline isl::pw_multi_aff_list pw_multi_aff_list() const;
4591
  inline isl::pw_multi_aff_list get_pw_multi_aff_list() const;
4592
  inline isl::union_pw_multi_aff range_factor_domain() const;
4593
  inline isl::union_pw_multi_aff range_factor_range() const;
4594
  inline isl::union_pw_multi_aff range_product(isl::union_pw_multi_aff upma2) const;
4595
  inline isl::space space() const;
4596
  inline isl::space get_space() const;
4597
  inline isl::union_pw_multi_aff sub(isl::union_pw_multi_aff upma2) const;
4598
  inline isl::union_pw_multi_aff subtract_domain(isl::space space) const;
4599
  inline isl::union_pw_multi_aff subtract_domain(isl::union_set uset) const;
4600
  inline isl::union_pw_multi_aff union_add(isl::union_pw_multi_aff upma2) const;
4601
};
4602
 
4603
// declarations for isl::union_set
4604
inline union_set manage(__isl_take isl_union_set *ptr);
4605
inline union_set manage_copy(__isl_keep isl_union_set *ptr);
4606
 
4607
class union_set {
4608
  friend inline union_set manage(__isl_take isl_union_set *ptr);
4609
  friend inline union_set manage_copy(__isl_keep isl_union_set *ptr);
4610
 
4611
protected:
4612
  isl_union_set *ptr = nullptr;
4613
 
4614
  inline explicit union_set(__isl_take isl_union_set *ptr);
4615
 
4616
public:
4617
  inline /* implicit */ union_set();
4618
  inline /* implicit */ union_set(const union_set &obj);
4619
  inline /* implicit */ union_set(isl::basic_set bset);
4620
  inline /* implicit */ union_set(isl::point pnt);
4621
  inline /* implicit */ union_set(isl::set set);
4622
  inline explicit union_set(isl::ctx ctx, const std::string &str);
4623
  inline union_set &operator=(union_set obj);
4624
  inline ~union_set();
4625
  inline __isl_give isl_union_set *copy() const &;
4626
  inline __isl_give isl_union_set *copy() && = delete;
4627
  inline __isl_keep isl_union_set *get() const;
4628
  inline __isl_give isl_union_set *release();
4629
  inline bool is_null() const;
4630
  inline isl::ctx ctx() const;
4631
 
4632
  inline isl::union_set affine_hull() const;
4633
  inline isl::union_set apply(isl::union_map umap) const;
4634
  inline isl::set as_set() const;
4635
  inline isl::union_set coalesce() const;
4636
  inline isl::union_set compute_divs() const;
4637
  inline boolean contains(const isl::space &space) const;
4638
  inline isl::union_set detect_equalities() const;
4639
  static inline isl::union_set empty(isl::ctx ctx);
4640
  inline boolean every_set(const std::function<boolean(isl::set)> &test) const;
4641
  inline isl::set extract_set(isl::space space) const;
4642
  inline stat foreach_point(const std::function<stat(isl::point)> &fn) const;
4643
  inline stat foreach_set(const std::function<stat(isl::set)> &fn) const;
4644
  inline isl::union_set gist(isl::union_set context) const;
4645
  inline isl::union_set gist_params(isl::set set) const;
4646
  inline isl::union_map identity() const;
4647
  inline isl::union_pw_multi_aff identity_union_pw_multi_aff() const;
4648
  inline isl::union_set intersect(isl::union_set uset2) const;
4649
  inline isl::union_set intersect_params(isl::set set) const;
4650
  inline boolean is_disjoint(const isl::union_set &uset2) const;
4651
  inline boolean is_empty() const;
4652
  inline boolean is_equal(const isl::union_set &uset2) const;
4653
  inline boolean is_strict_subset(const isl::union_set &uset2) const;
4654
  inline boolean is_subset(const isl::union_set &uset2) const;
4655
  inline boolean isa_set() const;
4656
  inline isl::union_set lexmax() const;
4657
  inline isl::union_set lexmin() const;
4658
  inline isl::set params() const;
4659
  inline isl::union_set polyhedral_hull() const;
4660
  inline isl::union_set preimage(isl::multi_aff ma) const;
4661
  inline isl::union_set preimage(isl::pw_multi_aff pma) const;
4662
  inline isl::union_set preimage(isl::union_pw_multi_aff upma) const;
4663
  inline isl::point sample_point() const;
4664
  inline isl::set_list set_list() const;
4665
  inline isl::set_list get_set_list() const;
4666
  inline isl::space space() const;
4667
  inline isl::space get_space() const;
4668
  inline isl::union_set subtract(isl::union_set uset2) const;
4669
  inline isl::union_set_list to_list() const;
4670
  inline isl::union_set unite(isl::union_set uset2) const;
4671
  inline isl::union_set universe() const;
4672
  inline isl::union_map unwrap() const;
4673
};
4674
 
4675
// declarations for isl::union_set_list
4676
inline union_set_list manage(__isl_take isl_union_set_list *ptr);
4677
inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr);
4678
 
4679
class union_set_list {
4680
  friend inline union_set_list manage(__isl_take isl_union_set_list *ptr);
4681
  friend inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr);
4682
 
4683
protected:
4684
  isl_union_set_list *ptr = nullptr;
4685
 
4686
  inline explicit union_set_list(__isl_take isl_union_set_list *ptr);
4687
 
4688
public:
4689
  inline /* implicit */ union_set_list();
4690
  inline /* implicit */ union_set_list(const union_set_list &obj);
4691
  inline explicit union_set_list(isl::ctx ctx, int n);
4692
  inline explicit union_set_list(isl::union_set el);
4693
  inline explicit union_set_list(isl::ctx ctx, const std::string &str);
4694
  inline union_set_list &operator=(union_set_list obj);
4695
  inline ~union_set_list();
4696
  inline __isl_give isl_union_set_list *copy() const &;
4697
  inline __isl_give isl_union_set_list *copy() && = delete;
4698
  inline __isl_keep isl_union_set_list *get() const;
4699
  inline __isl_give isl_union_set_list *release();
4700
  inline bool is_null() const;
4701
  inline isl::ctx ctx() const;
4702
 
4703
  inline isl::union_set_list add(isl::union_set el) const;
4704
  inline isl::union_set at(int index) const;
4705
  inline isl::union_set get_at(int index) const;
4706
  inline isl::union_set_list clear() const;
4707
  inline isl::union_set_list concat(isl::union_set_list list2) const;
4708
  inline isl::union_set_list drop(unsigned int first, unsigned int n) const;
4709
  inline stat foreach(const std::function<stat(isl::union_set)> &fn) const;
4710
  inline isl::union_set_list insert(unsigned int pos, isl::union_set el) const;
4711
  inline class size size() const;
4712
};
4713
 
4714
// declarations for isl::val
4715
inline val manage(__isl_take isl_val *ptr);
4716
inline val manage_copy(__isl_keep isl_val *ptr);
4717
 
4718
class val {
4719
  friend inline val manage(__isl_take isl_val *ptr);
4720
  friend inline val manage_copy(__isl_keep isl_val *ptr);
4721
 
4722
protected:
4723
  isl_val *ptr = nullptr;
4724
 
4725
  inline explicit val(__isl_take isl_val *ptr);
4726
 
4727
public:
4728
  inline /* implicit */ val();
4729
  inline /* implicit */ val(const val &obj);
4730
  inline explicit val(isl::ctx ctx, long i);
4731
  inline explicit val(isl::ctx ctx, const std::string &str);
4732
  inline val &operator=(val obj);
4733
  inline ~val();
4734
  inline __isl_give isl_val *copy() const &;
4735
  inline __isl_give isl_val *copy() && = delete;
4736
  inline __isl_keep isl_val *get() const;
4737
  inline __isl_give isl_val *release();
4738
  inline bool is_null() const;
4739
  inline isl::ctx ctx() const;
4740
 
4741
  inline isl::val abs() const;
4742
  inline boolean abs_eq(const isl::val &v2) const;
4743
  inline boolean abs_eq(long v2) const;
4744
  inline isl::val add(isl::val v2) const;
4745
  inline isl::val add(long v2) const;
4746
  inline isl::val ceil() const;
4747
  inline int cmp_si(long i) const;
4748
  inline long den_si() const;
4749
  inline long get_den_si() const;
4750
  inline isl::val div(isl::val v2) const;
4751
  inline isl::val div(long v2) const;
4752
  inline boolean eq(const isl::val &v2) const;
4753
  inline boolean eq(long v2) const;
4754
  inline isl::val floor() const;
4755
  inline isl::val gcd(isl::val v2) const;
4756
  inline isl::val gcd(long v2) const;
4757
  inline boolean ge(const isl::val &v2) const;
4758
  inline boolean ge(long v2) const;
4759
  inline boolean gt(const isl::val &v2) const;
4760
  inline boolean gt(long v2) const;
4761
  static inline isl::val infty(isl::ctx ctx);
4762
  static inline isl::val int_from_ui(isl::ctx ctx, unsigned long u);
4763
  inline isl::val inv() const;
4764
  inline boolean is_divisible_by(const isl::val &v2) const;
4765
  inline boolean is_divisible_by(long v2) const;
4766
  inline boolean is_infty() const;
4767
  inline boolean is_int() const;
4768
  inline boolean is_nan() const;
4769
  inline boolean is_neg() const;
4770
  inline boolean is_neginfty() const;
4771
  inline boolean is_negone() const;
4772
  inline boolean is_nonneg() const;
4773
  inline boolean is_nonpos() const;
4774
  inline boolean is_one() const;
4775
  inline boolean is_pos() const;
4776
  inline boolean is_rat() const;
4777
  inline boolean is_zero() const;
4778
  inline boolean le(const isl::val &v2) const;
4779
  inline boolean le(long v2) const;
4780
  inline boolean lt(const isl::val &v2) const;
4781
  inline boolean lt(long v2) const;
4782
  inline isl::val max(isl::val v2) const;
4783
  inline isl::val max(long v2) const;
4784
  inline isl::val min(isl::val v2) const;
4785
  inline isl::val min(long v2) const;
4786
  inline isl::val mod(isl::val v2) const;
4787
  inline isl::val mod(long v2) const;
4788
  inline isl::val mul(isl::val v2) const;
4789
  inline isl::val mul(long v2) const;
4790
  static inline isl::val nan(isl::ctx ctx);
4791
  inline boolean ne(const isl::val &v2) const;
4792
  inline boolean ne(long v2) const;
4793
  inline isl::val neg() const;
4794
  static inline isl::val neginfty(isl::ctx ctx);
4795
  static inline isl::val negone(isl::ctx ctx);
4796
  inline long num_si() const;
4797
  inline long get_num_si() const;
4798
  static inline isl::val one(isl::ctx ctx);
4799
  inline isl::val pow2() const;
4800
  inline int sgn() const;
4801
  inline isl::val sub(isl::val v2) const;
4802
  inline isl::val sub(long v2) const;
4803
  inline isl::val_list to_list() const;
4804
  inline isl::val trunc() const;
4805
  static inline isl::val zero(isl::ctx ctx);
4806
};
4807
 
4808
// declarations for isl::val_list
4809
inline val_list manage(__isl_take isl_val_list *ptr);
4810
inline val_list manage_copy(__isl_keep isl_val_list *ptr);
4811
 
4812
class val_list {
4813
  friend inline val_list manage(__isl_take isl_val_list *ptr);
4814
  friend inline val_list manage_copy(__isl_keep isl_val_list *ptr);
4815
 
4816
protected:
4817
  isl_val_list *ptr = nullptr;
4818
 
4819
  inline explicit val_list(__isl_take isl_val_list *ptr);
4820
 
4821
public:
4822
  inline /* implicit */ val_list();
4823
  inline /* implicit */ val_list(const val_list &obj);
4824
  inline explicit val_list(isl::ctx ctx, int n);
4825
  inline explicit val_list(isl::val el);
4826
  inline explicit val_list(isl::ctx ctx, const std::string &str);
4827
  inline val_list &operator=(val_list obj);
4828
  inline ~val_list();
4829
  inline __isl_give isl_val_list *copy() const &;
4830
  inline __isl_give isl_val_list *copy() && = delete;
4831
  inline __isl_keep isl_val_list *get() const;
4832
  inline __isl_give isl_val_list *release();
4833
  inline bool is_null() const;
4834
  inline isl::ctx ctx() const;
4835
 
4836
  inline isl::val_list add(isl::val el) const;
4837
  inline isl::val_list add(long el) const;
4838
  inline isl::val at(int index) const;
4839
  inline isl::val get_at(int index) const;
4840
  inline isl::val_list clear() const;
4841
  inline isl::val_list concat(isl::val_list list2) const;
4842
  inline isl::val_list drop(unsigned int first, unsigned int n) const;
4843
  inline stat foreach(const std::function<stat(isl::val)> &fn) const;
4844
  inline isl::val_list insert(unsigned int pos, isl::val el) const;
4845
  inline isl::val_list insert(unsigned int pos, long el) const;
4846
  inline class size size() const;
4847
};
4848
 
4849
// implementations for isl::aff
4850
aff manage(__isl_take isl_aff *ptr) {
4851
  return aff(ptr);
4852
}
4853
aff manage_copy(__isl_keep isl_aff *ptr) {
4854
  ptr = isl_aff_copy(ptr);
4855
  return aff(ptr);
4856
}
4857
 
4858
aff::aff()
4859
    : ptr(nullptr) {}
4860
 
4861
aff::aff(const aff &obj)
4862
    : ptr(nullptr)
4863
{
4864
  ptr = obj.copy();
4865
}
4866
 
4867
aff::aff(__isl_take isl_aff *ptr)
4868
    : ptr(ptr) {}
4869
 
4870
aff::aff(isl::ctx ctx, const std::string &str)
4871
{
4872
  auto res = isl_aff_read_from_str(ctx.release(), str.c_str());
4873
  ptr = res;
4874
}
4875
 
4876
aff::aff(isl::local_space ls, isl::val val)
4877
{
4878
  auto res = isl_aff_val_on_domain(ls.release(), val.release());
4879
  ptr = res;
4880
}
4881
 
4882
aff::aff(isl::local_space ls)
4883
{
4884
  auto res = isl_aff_zero_on_domain(ls.release());
4885
  ptr = res;
4886
}
4887
 
4888
aff &aff::operator=(aff obj) {
4889
  std::swap(this->ptr, obj.ptr);
4890
  return *this;
4891
}
4892
 
4893
aff::~aff() {
4894
  if (ptr)
4895
    isl_aff_free(ptr);
4896
}
4897
 
4898
__isl_give isl_aff *aff::copy() const & {
4899
  return isl_aff_copy(ptr);
4900
}
4901
 
4902
__isl_keep isl_aff *aff::get() const {
4903
  return ptr;
4904
}
4905
 
4906
__isl_give isl_aff *aff::release() {
4907
  isl_aff *tmp = ptr;
4908
  ptr = nullptr;
4909
  return tmp;
4910
}
4911
 
4912
bool aff::is_null() const {
4913
  return ptr == nullptr;
4914
}
4915
 
4916
isl::ctx aff::ctx() const {
4917
  return isl::ctx(isl_aff_get_ctx(ptr));
4918
}
4919
 
4920
isl::aff aff::add(isl::aff aff2) const
4921
{
4922
  auto res = isl_aff_add(copy(), aff2.release());
4923
  return manage(res);
4924
}
4925
 
4926
isl::multi_aff aff::add(const isl::multi_aff &multi2) const
4927
{
4928
  return isl::multi_aff(*this).add(multi2);
4929
}
4930
 
4931
isl::multi_pw_aff aff::add(const isl::multi_pw_aff &multi2) const
4932
{
4933
  return isl::pw_aff(*this).add(multi2);
4934
}
4935
 
4936
isl::multi_union_pw_aff aff::add(const isl::multi_union_pw_aff &multi2) const
4937
{
4938
  return isl::pw_aff(*this).add(multi2);
4939
}
4940
 
4941
isl::pw_aff aff::add(const isl::pw_aff &pwaff2) const
4942
{
4943
  return isl::pw_aff(*this).add(pwaff2);
4944
}
4945
 
4946
isl::pw_multi_aff aff::add(const isl::pw_multi_aff &pma2) const
4947
{
4948
  return isl::pw_aff(*this).add(pma2);
4949
}
4950
 
4951
isl::union_pw_aff aff::add(const isl::union_pw_aff &upa2) const
4952
{
4953
  return isl::pw_aff(*this).add(upa2);
4954
}
4955
 
4956
isl::union_pw_multi_aff aff::add(const isl::union_pw_multi_aff &upma2) const
4957
{
4958
  return isl::pw_aff(*this).add(upma2);
4959
}
4960
 
4961
isl::aff aff::add_constant(isl::val v) const
4962
{
4963
  auto res = isl_aff_add_constant_val(copy(), v.release());
4964
  return manage(res);
4965
}
4966
 
4967
isl::aff aff::add_constant(long v) const
4968
{
4969
  return this->add_constant(isl::val(ctx(), v));
4970
}
4971
 
4972
isl::multi_aff aff::add_constant(const isl::multi_val &mv) const
4973
{
4974
  return isl::multi_aff(*this).add_constant(mv);
4975
}
4976
 
4977
isl::aff aff::add_constant_si(int v) const
4978
{
4979
  auto res = isl_aff_add_constant_si(copy(), v);
4980
  return manage(res);
4981
}
4982
 
4983
isl::pw_aff aff::add_dims(isl::dim type, unsigned int n) const
4984
{
4985
  return isl::pw_aff(*this).add_dims(type, n);
4986
}
4987
 
4988
isl::union_pw_multi_aff aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
4989
{
4990
  return isl::pw_aff(*this).add_pw_multi_aff(pma);
4991
}
4992
 
4993
isl::union_pw_multi_aff aff::apply(const isl::union_pw_multi_aff &upma2) const
4994
{
4995
  return isl::pw_aff(*this).apply(upma2);
4996
}
4997
 
4998
isl::aff aff::as_aff() const
4999
{
5000
  return isl::pw_aff(*this).as_aff();
5001
}
5002
 
5003
isl::map aff::as_map() const
5004
{
5005
  return isl::pw_aff(*this).as_map();
5006
}
5007
 
5008
isl::multi_aff aff::as_multi_aff() const
5009
{
5010
  return isl::pw_aff(*this).as_multi_aff();
5011
}
5012
 
5013
isl::multi_union_pw_aff aff::as_multi_union_pw_aff() const
5014
{
5015
  return isl::pw_aff(*this).as_multi_union_pw_aff();
5016
}
5017
 
5018
isl::pw_multi_aff aff::as_pw_multi_aff() const
5019
{
5020
  return isl::pw_aff(*this).as_pw_multi_aff();
5021
}
5022
 
5023
isl::set aff::as_set() const
5024
{
5025
  return isl::multi_aff(*this).as_set();
5026
}
5027
 
5028
isl::union_map aff::as_union_map() const
5029
{
5030
  return isl::pw_aff(*this).as_union_map();
5031
}
5032
 
5033
isl::aff aff::at(int pos) const
5034
{
5035
  return isl::multi_aff(*this).at(pos);
5036
}
5037
 
5038
isl::basic_set aff::bind(isl::id id) const
5039
{
5040
  auto res = isl_aff_bind_id(copy(), id.release());
5041
  return manage(res);
5042
}
5043
 
5044
isl::basic_set aff::bind(const std::string &id) const
5045
{
5046
  return this->bind(isl::id(ctx(), id));
5047
}
5048
 
5049
isl::basic_set aff::bind(const isl::multi_id &tuple) const
5050
{
5051
  return isl::multi_aff(*this).bind(tuple);
5052
}
5053
 
5054
isl::pw_aff aff::bind_domain(const isl::multi_id &tuple) const
5055
{
5056
  return isl::pw_aff(*this).bind_domain(tuple);
5057
}
5058
 
5059
isl::pw_aff aff::bind_domain_wrapped_domain(const isl::multi_id &tuple) const
5060
{
5061
  return isl::pw_aff(*this).bind_domain_wrapped_domain(tuple);
5062
}
5063
 
5064
isl::aff aff::ceil() const
5065
{
5066
  auto res = isl_aff_ceil(copy());
5067
  return manage(res);
5068
}
5069
 
5070
isl::pw_aff aff::coalesce() const
5071
{
5072
  return isl::pw_aff(*this).coalesce();
5073
}
5074
 
5075
isl::pw_aff aff::cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const
5076
{
5077
  return isl::pw_aff(*this).cond(pwaff_true, pwaff_false);
5078
}
5079
 
5080
isl::multi_val aff::constant_multi_val() const
5081
{
5082
  return isl::multi_aff(*this).constant_multi_val();
5083
}
5084
 
5085
isl::val aff::constant_val() const
5086
{
5087
  auto res = isl_aff_get_constant_val(get());
5088
  return manage(res);
5089
}
5090
 
5091
isl::val aff::get_constant_val() const
5092
{
5093
  return constant_val();
5094
}
5095
 
5096
isl::val aff::denominator_val() const
5097
{
5098
  auto res = isl_aff_get_denominator_val(get());
5099
  return manage(res);
5100
}
5101
 
5102
isl::val aff::get_denominator_val() const
5103
{
5104
  return denominator_val();
5105
}
5106
 
5107
class size aff::dim(isl::dim type) const
5108
{
5109
  return isl::multi_aff(*this).dim(type);
5110
}
5111
 
5112
isl::id aff::dim_id(isl::dim type, unsigned int pos) const
5113
{
5114
  return isl::pw_aff(*this).dim_id(type, pos);
5115
}
5116
 
5117
isl::aff aff::div(isl::aff aff2) const
5118
{
5119
  auto res = isl_aff_div(copy(), aff2.release());
5120
  return manage(res);
5121
}
5122
 
5123
isl::pw_aff aff::div(const isl::pw_aff &pa2) const
5124
{
5125
  return isl::pw_aff(*this).div(pa2);
5126
}
5127
 
5128
isl::set aff::domain() const
5129
{
5130
  return isl::pw_aff(*this).domain();
5131
}
5132
 
5133
isl::space aff::domain_space() const
5134
{
5135
  return isl::pw_aff(*this).domain_space();
5136
}
5137
 
5138
isl::pw_multi_aff aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
5139
{
5140
  return isl::pw_aff(*this).drop_dims(type, first, n);
5141
}
5142
 
5143
isl::set aff::eq_set(isl::aff aff2) const
5144
{
5145
  auto res = isl_aff_eq_set(copy(), aff2.release());
5146
  return manage(res);
5147
}
5148
 
5149
isl::set aff::eq_set(const isl::pw_aff &pwaff2) const
5150
{
5151
  return isl::pw_aff(*this).eq_set(pwaff2);
5152
}
5153
 
5154
isl::val aff::eval(isl::point pnt) const
5155
{
5156
  auto res = isl_aff_eval(copy(), pnt.release());
5157
  return manage(res);
5158
}
5159
 
5160
isl::pw_multi_aff aff::extract_pw_multi_aff(const isl::space &space) const
5161
{
5162
  return isl::pw_aff(*this).extract_pw_multi_aff(space);
5163
}
5164
 
5165
isl::multi_aff aff::flat_range_product(const isl::multi_aff &multi2) const
5166
{
5167
  return isl::multi_aff(*this).flat_range_product(multi2);
5168
}
5169
 
5170
isl::multi_pw_aff aff::flat_range_product(const isl::multi_pw_aff &multi2) const
5171
{
5172
  return isl::pw_aff(*this).flat_range_product(multi2);
5173
}
5174
 
5175
isl::multi_union_pw_aff aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
5176
{
5177
  return isl::pw_aff(*this).flat_range_product(multi2);
5178
}
5179
 
5180
isl::pw_multi_aff aff::flat_range_product(const isl::pw_multi_aff &pma2) const
5181
{
5182
  return isl::pw_aff(*this).flat_range_product(pma2);
5183
}
5184
 
5185
isl::union_pw_multi_aff aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
5186
{
5187
  return isl::pw_aff(*this).flat_range_product(upma2);
5188
}
5189
 
5190
isl::aff aff::floor() const
5191
{
5192
  auto res = isl_aff_floor(copy());
5193
  return manage(res);
5194
}
5195
 
5196
stat aff::foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const
5197
{
5198
  return isl::pw_aff(*this).foreach_piece(fn);
5199
}
5200
 
5201
stat aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
5202
{
5203
  return isl::pw_aff(*this).foreach_piece(fn);
5204
}
5205
 
5206
stat aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
5207
{
5208
  return isl::pw_aff(*this).foreach_pw_aff(fn);
5209
}
5210
 
5211
isl::set aff::ge_set(isl::aff aff2) const
5212
{
5213
  auto res = isl_aff_ge_set(copy(), aff2.release());
5214
  return manage(res);
5215
}
5216
 
5217
isl::set aff::ge_set(const isl::pw_aff &pwaff2) const
5218
{
5219
  return isl::pw_aff(*this).ge_set(pwaff2);
5220
}
5221
 
5222
isl::aff aff::gist(isl::set context) const
5223
{
5224
  auto res = isl_aff_gist(copy(), context.release());
5225
  return manage(res);
5226
}
5227
 
5228
isl::union_pw_aff aff::gist(const isl::union_set &context) const
5229
{
5230
  return isl::pw_aff(*this).gist(context);
5231
}
5232
 
5233
isl::aff aff::gist(const isl::basic_set &context) const
5234
{
5235
  return this->gist(isl::set(context));
5236
}
5237
 
5238
isl::aff aff::gist(const isl::point &context) const
5239
{
5240
  return this->gist(isl::set(context));
5241
}
5242
 
5243
isl::set aff::gt_set(isl::aff aff2) const
5244
{
5245
  auto res = isl_aff_gt_set(copy(), aff2.release());
5246
  return manage(res);
5247
}
5248
 
5249
isl::set aff::gt_set(const isl::pw_aff &pwaff2) const
5250
{
5251
  return isl::pw_aff(*this).gt_set(pwaff2);
5252
}
5253
 
5254
boolean aff::has_range_tuple_id() const
5255
{
5256
  return isl::multi_aff(*this).has_range_tuple_id();
5257
}
5258
 
5259
isl::multi_aff aff::identity() const
5260
{
5261
  return isl::multi_aff(*this).identity();
5262
}
5263
 
5264
isl::pw_aff aff::insert_domain(const isl::space &domain) const
5265
{
5266
  return isl::pw_aff(*this).insert_domain(domain);
5267
}
5268
 
5269
isl::pw_aff aff::intersect_domain(const isl::set &set) const
5270
{
5271
  return isl::pw_aff(*this).intersect_domain(set);
5272
}
5273
 
5274
isl::union_pw_aff aff::intersect_domain(const isl::space &space) const
5275
{
5276
  return isl::pw_aff(*this).intersect_domain(space);
5277
}
5278
 
5279
isl::union_pw_aff aff::intersect_domain(const isl::union_set &uset) const
5280
{
5281
  return isl::pw_aff(*this).intersect_domain(uset);
5282
}
5283
 
5284
isl::union_pw_aff aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
5285
{
5286
  return isl::pw_aff(*this).intersect_domain_wrapped_domain(uset);
5287
}
5288
 
5289
isl::union_pw_aff aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
5290
{
5291
  return isl::pw_aff(*this).intersect_domain_wrapped_range(uset);
5292
}
5293
 
5294
isl::pw_aff aff::intersect_params(const isl::set &set) const
5295
{
5296
  return isl::pw_aff(*this).intersect_params(set);
5297
}
5298
 
5299
boolean aff::involves_locals() const
5300
{
5301
  return isl::multi_aff(*this).involves_locals();
5302
}
5303
 
5304
boolean aff::involves_nan() const
5305
{
5306
  return isl::multi_aff(*this).involves_nan();
5307
}
5308
 
5309
boolean aff::involves_param(const isl::id &id) const
5310
{
5311
  return isl::pw_aff(*this).involves_param(id);
5312
}
5313
 
5314
boolean aff::involves_param(const std::string &id) const
5315
{
5316
  return this->involves_param(isl::id(ctx(), id));
5317
}
5318
 
5319
boolean aff::involves_param(const isl::id_list &list) const
5320
{
5321
  return isl::pw_aff(*this).involves_param(list);
5322
}
5323
 
5324
boolean aff::is_cst() const
5325
{
5326
  auto res = isl_aff_is_cst(get());
5327
  return manage(res);
5328
}
5329
 
5330
boolean aff::is_equal(const isl::pw_aff &pa2) const
5331
{
5332
  return isl::pw_aff(*this).is_equal(pa2);
5333
}
5334
 
5335
boolean aff::isa_aff() const
5336
{
5337
  return isl::pw_aff(*this).isa_aff();
5338
}
5339
 
5340
boolean aff::isa_multi_aff() const
5341
{
5342
  return isl::pw_aff(*this).isa_multi_aff();
5343
}
5344
 
5345
boolean aff::isa_pw_multi_aff() const
5346
{
5347
  return isl::pw_aff(*this).isa_pw_multi_aff();
5348
}
5349
 
5350
isl::set aff::le_set(isl::aff aff2) const
5351
{
5352
  auto res = isl_aff_le_set(copy(), aff2.release());
5353
  return manage(res);
5354
}
5355
 
5356
isl::set aff::le_set(const isl::pw_aff &pwaff2) const
5357
{
5358
  return isl::pw_aff(*this).le_set(pwaff2);
5359
}
5360
 
5361
isl::aff_list aff::list() const
5362
{
5363
  return isl::multi_aff(*this).list();
5364
}
5365
 
5366
isl::set aff::lt_set(isl::aff aff2) const
5367
{
5368
  auto res = isl_aff_lt_set(copy(), aff2.release());
5369
  return manage(res);
5370
}
5371
 
5372
isl::set aff::lt_set(const isl::pw_aff &pwaff2) const
5373
{
5374
  return isl::pw_aff(*this).lt_set(pwaff2);
5375
}
5376
 
5377
isl::multi_pw_aff aff::max(const isl::multi_pw_aff &multi2) const
5378
{
5379
  return isl::pw_aff(*this).max(multi2);
5380
}
5381
 
5382
isl::pw_aff aff::max(const isl::pw_aff &pwaff2) const
5383
{
5384
  return isl::pw_aff(*this).max(pwaff2);
5385
}
5386
 
5387
isl::multi_val aff::max_multi_val() const
5388
{
5389
  return isl::pw_aff(*this).max_multi_val();
5390
}
5391
 
5392
isl::multi_pw_aff aff::min(const isl::multi_pw_aff &multi2) const
5393
{
5394
  return isl::pw_aff(*this).min(multi2);
5395
}
5396
 
5397
isl::pw_aff aff::min(const isl::pw_aff &pwaff2) const
5398
{
5399
  return isl::pw_aff(*this).min(pwaff2);
5400
}
5401
 
5402
isl::multi_val aff::min_multi_val() const
5403
{
5404
  return isl::pw_aff(*this).min_multi_val();
5405
}
5406
 
5407
isl::aff aff::mod(isl::val mod) const
5408
{
5409
  auto res = isl_aff_mod_val(copy(), mod.release());
5410
  return manage(res);
5411
}
5412
 
5413
isl::aff aff::mod(long mod) const
5414
{
5415
  return this->mod(isl::val(ctx(), mod));
5416
}
5417
 
5418
isl::aff aff::mul(isl::aff aff2) const
5419
{
5420
  auto res = isl_aff_mul(copy(), aff2.release());
5421
  return manage(res);
5422
}
5423
 
5424
isl::pw_aff aff::mul(const isl::pw_aff &pwaff2) const
5425
{
5426
  return isl::pw_aff(*this).mul(pwaff2);
5427
}
5428
 
5429
class size aff::n_piece() const
5430
{
5431
  return isl::pw_aff(*this).n_piece();
5432
}
5433
 
5434
isl::set aff::ne_set(isl::aff aff2) const
5435
{
5436
  auto res = isl_aff_ne_set(copy(), aff2.release());
5437
  return manage(res);
5438
}
5439
 
5440
isl::set aff::ne_set(const isl::pw_aff &pwaff2) const
5441
{
5442
  return isl::pw_aff(*this).ne_set(pwaff2);
5443
}
5444
 
5445
isl::aff aff::neg() const
5446
{
5447
  auto res = isl_aff_neg(copy());
5448
  return manage(res);
5449
}
5450
 
5451
boolean aff::plain_is_empty() const
5452
{
5453
  return isl::pw_aff(*this).plain_is_empty();
5454
}
5455
 
5456
boolean aff::plain_is_equal(const isl::multi_aff &multi2) const
5457
{
5458
  return isl::multi_aff(*this).plain_is_equal(multi2);
5459
}
5460
 
5461
boolean aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
5462
{
5463
  return isl::pw_aff(*this).plain_is_equal(multi2);
5464
}
5465
 
5466
boolean aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
5467
{
5468
  return isl::pw_aff(*this).plain_is_equal(multi2);
5469
}
5470
 
5471
isl::pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
5472
{
5473
  return isl::pw_aff(*this).preimage_domain_wrapped_domain(pma2);
5474
}
5475
 
5476
isl::union_pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
5477
{
5478
  return isl::pw_aff(*this).preimage_domain_wrapped_domain(upma2);
5479
}
5480
 
5481
isl::multi_aff aff::product(const isl::multi_aff &multi2) const
5482
{
5483
  return isl::multi_aff(*this).product(multi2);
5484
}
5485
 
5486
isl::multi_pw_aff aff::product(const isl::multi_pw_aff &multi2) const
5487
{
5488
  return isl::pw_aff(*this).product(multi2);
5489
}
5490
 
5491
isl::pw_multi_aff aff::product(const isl::pw_multi_aff &pma2) const
5492
{
5493
  return isl::pw_aff(*this).product(pma2);
5494
}
5495
 
5496
isl::aff aff::pullback(isl::multi_aff ma) const
5497
{
5498
  auto res = isl_aff_pullback_multi_aff(copy(), ma.release());
5499
  return manage(res);
5500
}
5501
 
5502
isl::pw_aff aff::pullback(const isl::multi_pw_aff &mpa) const
5503
{
5504
  return isl::pw_aff(*this).pullback(mpa);
5505
}
5506
 
5507
isl::pw_aff aff::pullback(const isl::pw_multi_aff &pma) const
5508
{
5509
  return isl::pw_aff(*this).pullback(pma);
5510
}
5511
 
5512
isl::union_pw_aff aff::pullback(const isl::union_pw_multi_aff &upma) const
5513
{
5514
  return isl::pw_aff(*this).pullback(upma);
5515
}
5516
 
5517
isl::aff aff::pullback(const isl::aff &ma) const
5518
{
5519
  return this->pullback(isl::multi_aff(ma));
5520
}
5521
 
5522
isl::pw_multi_aff_list aff::pw_multi_aff_list() const
5523
{
5524
  return isl::pw_aff(*this).pw_multi_aff_list();
5525
}
5526
 
5527
isl::pw_multi_aff aff::range_factor_domain() const
5528
{
5529
  return isl::pw_aff(*this).range_factor_domain();
5530
}
5531
 
5532
isl::pw_multi_aff aff::range_factor_range() const
5533
{
5534
  return isl::pw_aff(*this).range_factor_range();
5535
}
5536
 
5537
isl::multi_aff aff::range_product(const isl::multi_aff &multi2) const
5538
{
5539
  return isl::multi_aff(*this).range_product(multi2);
5540
}
5541
 
5542
isl::multi_pw_aff aff::range_product(const isl::multi_pw_aff &multi2) const
5543
{
5544
  return isl::pw_aff(*this).range_product(multi2);
5545
}
5546
 
5547
isl::multi_union_pw_aff aff::range_product(const isl::multi_union_pw_aff &multi2) const
5548
{
5549
  return isl::pw_aff(*this).range_product(multi2);
5550
}
5551
 
5552
isl::pw_multi_aff aff::range_product(const isl::pw_multi_aff &pma2) const
5553
{
5554
  return isl::pw_aff(*this).range_product(pma2);
5555
}
5556
 
5557
isl::union_pw_multi_aff aff::range_product(const isl::union_pw_multi_aff &upma2) const
5558
{
5559
  return isl::pw_aff(*this).range_product(upma2);
5560
}
5561
 
5562
isl::id aff::range_tuple_id() const
5563
{
5564
  return isl::multi_aff(*this).range_tuple_id();
5565
}
5566
 
5567
isl::multi_aff aff::reset_range_tuple_id() const
5568
{
5569
  return isl::multi_aff(*this).reset_range_tuple_id();
5570
}
5571
 
5572
isl::multi_aff aff::reset_tuple_id(isl::dim type) const
5573
{
5574
  return isl::multi_aff(*this).reset_tuple_id(type);
5575
}
5576
 
5577
isl::aff aff::scale(isl::val v) const
5578
{
5579
  auto res = isl_aff_scale_val(copy(), v.release());
5580
  return manage(res);
5581
}
5582
 
5583
isl::aff aff::scale(long v) const
5584
{
5585
  return this->scale(isl::val(ctx(), v));
5586
}
5587
 
5588
isl::multi_aff aff::scale(const isl::multi_val &mv) const
5589
{
5590
  return isl::multi_aff(*this).scale(mv);
5591
}
5592
 
5593
isl::aff aff::scale_down(isl::val v) const
5594
{
5595
  auto res = isl_aff_scale_down_val(copy(), v.release());
5596
  return manage(res);
5597
}
5598
 
5599
isl::aff aff::scale_down(long v) const
5600
{
5601
  return this->scale_down(isl::val(ctx(), v));
5602
}
5603
 
5604
isl::multi_aff aff::scale_down(const isl::multi_val &mv) const
5605
{
5606
  return isl::multi_aff(*this).scale_down(mv);
5607
}
5608
 
5609
isl::multi_aff aff::set_aff(int pos, const isl::aff &el) const
5610
{
5611
  return isl::multi_aff(*this).set_aff(pos, el);
5612
}
5613
 
5614
isl::multi_aff aff::set_at(int pos, const isl::aff &el) const
5615
{
5616
  return isl::multi_aff(*this).set_at(pos, el);
5617
}
5618
 
5619
isl::multi_pw_aff aff::set_at(int pos, const isl::pw_aff &el) const
5620
{
5621
  return isl::pw_aff(*this).set_at(pos, el);
5622
}
5623
 
5624
isl::multi_union_pw_aff aff::set_at(int pos, const isl::union_pw_aff &el) const
5625
{
5626
  return isl::pw_aff(*this).set_at(pos, el);
5627
}
5628
 
5629
isl::aff aff::set_constant_si(int v) const
5630
{
5631
  auto res = isl_aff_set_constant_si(copy(), v);
5632
  return manage(res);
5633
}
5634
 
5635
isl::multi_pw_aff aff::set_pw_aff(int pos, const isl::pw_aff &el) const
5636
{
5637
  return isl::pw_aff(*this).set_pw_aff(pos, el);
5638
}
5639
 
5640
isl::pw_multi_aff aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const
5641
{
5642
  return isl::pw_aff(*this).set_pw_aff(pos, pa);
5643
}
5644
 
5645
isl::multi_aff aff::set_range_tuple(const isl::id &id) const
5646
{
5647
  return isl::multi_aff(*this).set_range_tuple(id);
5648
}
5649
 
5650
isl::multi_aff aff::set_range_tuple(const std::string &id) const
5651
{
5652
  return this->set_range_tuple(isl::id(ctx(), id));
5653
}
5654
 
5655
isl::pw_aff aff::set_tuple_id(isl::dim type, const isl::id &id) const
5656
{
5657
  return isl::pw_aff(*this).set_tuple_id(type, id);
5658
}
5659
 
5660
isl::pw_aff aff::set_tuple_id(isl::dim type, const std::string &id) const
5661
{
5662
  return this->set_tuple_id(type, isl::id(ctx(), id));
5663
}
5664
 
5665
isl::multi_union_pw_aff aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
5666
{
5667
  return isl::pw_aff(*this).set_union_pw_aff(pos, el);
5668
}
5669
 
5670
class size aff::size() const
5671
{
5672
  return isl::multi_aff(*this).size();
5673
}
5674
 
5675
isl::space aff::space() const
5676
{
5677
  return isl::pw_aff(*this).space();
5678
}
5679
 
5680
isl::aff aff::sub(isl::aff aff2) const
5681
{
5682
  auto res = isl_aff_sub(copy(), aff2.release());
5683
  return manage(res);
5684
}
5685
 
5686
isl::multi_aff aff::sub(const isl::multi_aff &multi2) const
5687
{
5688
  return isl::multi_aff(*this).sub(multi2);
5689
}
5690
 
5691
isl::multi_pw_aff aff::sub(const isl::multi_pw_aff &multi2) const
5692
{
5693
  return isl::pw_aff(*this).sub(multi2);
5694
}
5695
 
5696
isl::multi_union_pw_aff aff::sub(const isl::multi_union_pw_aff &multi2) const
5697
{
5698
  return isl::pw_aff(*this).sub(multi2);
5699
}
5700
 
5701
isl::pw_aff aff::sub(const isl::pw_aff &pwaff2) const
5702
{
5703
  return isl::pw_aff(*this).sub(pwaff2);
5704
}
5705
 
5706
isl::pw_multi_aff aff::sub(const isl::pw_multi_aff &pma2) const
5707
{
5708
  return isl::pw_aff(*this).sub(pma2);
5709
}
5710
 
5711
isl::union_pw_aff aff::sub(const isl::union_pw_aff &upa2) const
5712
{
5713
  return isl::pw_aff(*this).sub(upa2);
5714
}
5715
 
5716
isl::union_pw_multi_aff aff::sub(const isl::union_pw_multi_aff &upma2) const
5717
{
5718
  return isl::pw_aff(*this).sub(upma2);
5719
}
5720
 
5721
isl::pw_aff aff::subtract_domain(const isl::set &set) const
5722
{
5723
  return isl::pw_aff(*this).subtract_domain(set);
5724
}
5725
 
5726
isl::union_pw_aff aff::subtract_domain(const isl::space &space) const
5727
{
5728
  return isl::pw_aff(*this).subtract_domain(space);
5729
}
5730
 
5731
isl::union_pw_aff aff::subtract_domain(const isl::union_set &uset) const
5732
{
5733
  return isl::pw_aff(*this).subtract_domain(uset);
5734
}
5735
 
5736
isl::pw_aff aff::tdiv_q(const isl::pw_aff &pa2) const
5737
{
5738
  return isl::pw_aff(*this).tdiv_q(pa2);
5739
}
5740
 
5741
isl::pw_aff aff::tdiv_r(const isl::pw_aff &pa2) const
5742
{
5743
  return isl::pw_aff(*this).tdiv_r(pa2);
5744
}
5745
 
5746
isl::aff_list aff::to_list() const
5747
{
5748
  auto res = isl_aff_to_list(copy());
5749
  return manage(res);
5750
}
5751
 
5752
isl::multi_pw_aff aff::to_multi_pw_aff() const
5753
{
5754
  return isl::multi_aff(*this).to_multi_pw_aff();
5755
}
5756
 
5757
isl::multi_union_pw_aff aff::to_multi_union_pw_aff() const
5758
{
5759
  return isl::multi_aff(*this).to_multi_union_pw_aff();
5760
}
5761
 
5762
isl::pw_multi_aff aff::to_pw_multi_aff() const
5763
{
5764
  return isl::multi_aff(*this).to_pw_multi_aff();
5765
}
5766
 
5767
isl::union_pw_aff aff::to_union_pw_aff() const
5768
{
5769
  return isl::pw_aff(*this).to_union_pw_aff();
5770
}
5771
 
5772
isl::union_pw_multi_aff aff::to_union_pw_multi_aff() const
5773
{
5774
  return isl::pw_aff(*this).to_union_pw_multi_aff();
5775
}
5776
 
5777
isl::id aff::tuple_id(isl::dim type) const
5778
{
5779
  return isl::pw_aff(*this).tuple_id(type);
5780
}
5781
 
5782
isl::aff aff::unbind_params_insert_domain(isl::multi_id domain) const
5783
{
5784
  auto res = isl_aff_unbind_params_insert_domain(copy(), domain.release());
5785
  return manage(res);
5786
}
5787
 
5788
isl::multi_pw_aff aff::union_add(const isl::multi_pw_aff &mpa2) const
5789
{
5790
  return isl::pw_aff(*this).union_add(mpa2);
5791
}
5792
 
5793
isl::multi_union_pw_aff aff::union_add(const isl::multi_union_pw_aff &mupa2) const
5794
{
5795
  return isl::pw_aff(*this).union_add(mupa2);
5796
}
5797
 
5798
isl::pw_aff aff::union_add(const isl::pw_aff &pwaff2) const
5799
{
5800
  return isl::pw_aff(*this).union_add(pwaff2);
5801
}
5802
 
5803
isl::pw_multi_aff aff::union_add(const isl::pw_multi_aff &pma2) const
5804
{
5805
  return isl::pw_aff(*this).union_add(pma2);
5806
}
5807
 
5808
isl::union_pw_aff aff::union_add(const isl::union_pw_aff &upa2) const
5809
{
5810
  return isl::pw_aff(*this).union_add(upa2);
5811
}
5812
 
5813
isl::union_pw_multi_aff aff::union_add(const isl::union_pw_multi_aff &upma2) const
5814
{
5815
  return isl::pw_aff(*this).union_add(upma2);
5816
}
5817
 
5818
isl::aff aff::var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos)
5819
{
5820
  auto res = isl_aff_var_on_domain(ls.release(), static_cast<enum isl_dim_type>(type), pos);
5821
  return manage(res);
5822
}
5823
 
5824
isl::aff aff::zero_on_domain(isl::space space)
5825
{
5826
  auto res = isl_aff_zero_on_domain_space(space.release());
5827
  return manage(res);
5828
}
5829
 
5830
inline std::ostream &operator<<(std::ostream &os, const aff &obj)
5831
{
5832
  char *str = isl_aff_to_str(obj.get());
5833
  if (!str) {
5834
    os.setstate(std::ios_base::badbit);
5835
    return os;
5836
  }
5837
  os << str;
5838
  free(str);
5839
  return os;
5840
}
5841
 
5842
// implementations for isl::aff_list
5843
aff_list manage(__isl_take isl_aff_list *ptr) {
5844
  return aff_list(ptr);
5845
}
5846
aff_list manage_copy(__isl_keep isl_aff_list *ptr) {
5847
  ptr = isl_aff_list_copy(ptr);
5848
  return aff_list(ptr);
5849
}
5850
 
5851
aff_list::aff_list()
5852
    : ptr(nullptr) {}
5853
 
5854
aff_list::aff_list(const aff_list &obj)
5855
    : ptr(nullptr)
5856
{
5857
  ptr = obj.copy();
5858
}
5859
 
5860
aff_list::aff_list(__isl_take isl_aff_list *ptr)
5861
    : ptr(ptr) {}
5862
 
5863
aff_list::aff_list(isl::ctx ctx, int n)
5864
{
5865
  auto res = isl_aff_list_alloc(ctx.release(), n);
5866
  ptr = res;
5867
}
5868
 
5869
aff_list::aff_list(isl::aff el)
5870
{
5871
  auto res = isl_aff_list_from_aff(el.release());
5872
  ptr = res;
5873
}
5874
 
5875
aff_list::aff_list(isl::ctx ctx, const std::string &str)
5876
{
5877
  auto res = isl_aff_list_read_from_str(ctx.release(), str.c_str());
5878
  ptr = res;
5879
}
5880
 
5881
aff_list &aff_list::operator=(aff_list obj) {
5882
  std::swap(this->ptr, obj.ptr);
5883
  return *this;
5884
}
5885
 
5886
aff_list::~aff_list() {
5887
  if (ptr)
5888
    isl_aff_list_free(ptr);
5889
}
5890
 
5891
__isl_give isl_aff_list *aff_list::copy() const & {
5892
  return isl_aff_list_copy(ptr);
5893
}
5894
 
5895
__isl_keep isl_aff_list *aff_list::get() const {
5896
  return ptr;
5897
}
5898
 
5899
__isl_give isl_aff_list *aff_list::release() {
5900
  isl_aff_list *tmp = ptr;
5901
  ptr = nullptr;
5902
  return tmp;
5903
}
5904
 
5905
bool aff_list::is_null() const {
5906
  return ptr == nullptr;
5907
}
5908
 
5909
isl::ctx aff_list::ctx() const {
5910
  return isl::ctx(isl_aff_list_get_ctx(ptr));
5911
}
5912
 
5913
isl::aff_list aff_list::add(isl::aff el) const
5914
{
5915
  auto res = isl_aff_list_add(copy(), el.release());
5916
  return manage(res);
5917
}
5918
 
5919
isl::aff aff_list::at(int index) const
5920
{
5921
  auto res = isl_aff_list_get_at(get(), index);
5922
  return manage(res);
5923
}
5924
 
5925
isl::aff aff_list::get_at(int index) const
5926
{
5927
  return at(index);
5928
}
5929
 
5930
isl::aff_list aff_list::clear() const
5931
{
5932
  auto res = isl_aff_list_clear(copy());
5933
  return manage(res);
5934
}
5935
 
5936
isl::aff_list aff_list::concat(isl::aff_list list2) const
5937
{
5938
  auto res = isl_aff_list_concat(copy(), list2.release());
5939
  return manage(res);
5940
}
5941
 
5942
isl::aff_list aff_list::drop(unsigned int first, unsigned int n) const
5943
{
5944
  auto res = isl_aff_list_drop(copy(), first, n);
5945
  return manage(res);
5946
}
5947
 
5948
stat aff_list::foreach(const std::function<stat(isl::aff)> &fn) const
5949
{
5950
  struct fn_data {
5951
    std::function<stat(isl::aff)> func;
5952
  } fn_data = { fn };
5953
  auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat {
5954
    auto *data = static_cast<struct fn_data *>(arg_1);
5955
    auto ret = (data->func)(manage(arg_0));
5956
    return ret.release();
5957
  };
5958
  auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data);
5959
  return manage(res);
5960
}
5961
 
5962
isl::aff_list aff_list::insert(unsigned int pos, isl::aff el) const
5963
{
5964
  auto res = isl_aff_list_insert(copy(), pos, el.release());
5965
  return manage(res);
5966
}
5967
 
5968
class size aff_list::size() const
5969
{
5970
  auto res = isl_aff_list_size(get());
5971
  return manage(res);
5972
}
5973
 
5974
inline std::ostream &operator<<(std::ostream &os, const aff_list &obj)
5975
{
5976
  char *str = isl_aff_list_to_str(obj.get());
5977
  if (!str) {
5978
    os.setstate(std::ios_base::badbit);
5979
    return os;
5980
  }
5981
  os << str;
5982
  free(str);
5983
  return os;
5984
}
5985
 
5986
// implementations for isl::ast_build
5987
ast_build manage(__isl_take isl_ast_build *ptr) {
5988
  return ast_build(ptr);
5989
}
5990
ast_build manage_copy(__isl_keep isl_ast_build *ptr) {
5991
  ptr = isl_ast_build_copy(ptr);
5992
  return ast_build(ptr);
5993
}
5994
 
5995
ast_build::ast_build()
5996
    : ptr(nullptr) {}
5997
 
5998
ast_build::ast_build(const ast_build &obj)
5999
    : ptr(nullptr)
6000
{
6001
  ptr = obj.copy();
6002
  copy_callbacks(obj);
6003
}
6004
 
6005
ast_build::ast_build(__isl_take isl_ast_build *ptr)
6006
    : ptr(ptr) {}
6007
 
6008
ast_build::ast_build(isl::ctx ctx)
6009
{
6010
  auto res = isl_ast_build_alloc(ctx.release());
6011
  ptr = res;
6012
}
6013
 
6014
ast_build &ast_build::operator=(ast_build obj) {
6015
  std::swap(this->ptr, obj.ptr);
6016
  copy_callbacks(obj);
6017
  return *this;
6018
}
6019
 
6020
ast_build::~ast_build() {
6021
  if (ptr)
6022
    isl_ast_build_free(ptr);
6023
}
6024
 
6025
__isl_give isl_ast_build *ast_build::copy() const & {
6026
  return isl_ast_build_copy(ptr);
6027
}
6028
 
6029
__isl_keep isl_ast_build *ast_build::get() const {
6030
  return ptr;
6031
}
6032
 
6033
__isl_give isl_ast_build *ast_build::release() {
6034
  if (at_each_domain_data)
6035
    isl_die(ctx().get(), isl_error_invalid, "cannot release object with persistent callbacks", return nullptr);
6036
  isl_ast_build *tmp = ptr;
6037
  ptr = nullptr;
6038
  return tmp;
6039
}
6040
 
6041
bool ast_build::is_null() const {
6042
  return ptr == nullptr;
6043
}
6044
 
6045
isl::ctx ast_build::ctx() const {
6046
  return isl::ctx(isl_ast_build_get_ctx(ptr));
6047
}
6048
 
6049
ast_build &ast_build::copy_callbacks(const ast_build &obj)
6050
{
6051
  at_each_domain_data = obj.at_each_domain_data;
6052
  return *this;
6053
}
6054
 
6055
isl_ast_node *ast_build::at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2)
6056
{
6057
  auto *data = static_cast<struct at_each_domain_data *>(arg_2);
6058
  auto ret = (data->func)(manage(arg_0), manage_copy(arg_1));
6059
  return ret.release();
6060
}
6061
 
6062
void ast_build::set_at_each_domain_data(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn)
6063
{
6064
  at_each_domain_data = std::make_shared<struct at_each_domain_data>();
6065
  at_each_domain_data->func = fn;
6066
  ptr = isl_ast_build_set_at_each_domain(ptr, &at_each_domain, at_each_domain_data.get());
6067
}
6068
 
6069
isl::ast_build ast_build::set_at_each_domain(const std::function<isl::ast_node(isl::ast_node, isl::ast_build)> &fn) const
6070
{
6071
  auto copy = *this;
6072
  copy.set_at_each_domain_data(fn);
6073
  return copy;
6074
}
6075
 
6076
isl::ast_expr ast_build::access_from(isl::multi_pw_aff mpa) const
6077
{
6078
  auto res = isl_ast_build_access_from_multi_pw_aff(get(), mpa.release());
6079
  return manage(res);
6080
}
6081
 
6082
isl::ast_expr ast_build::access_from(isl::pw_multi_aff pma) const
6083
{
6084
  auto res = isl_ast_build_access_from_pw_multi_aff(get(), pma.release());
6085
  return manage(res);
6086
}
6087
 
6088
isl::ast_expr ast_build::call_from(isl::multi_pw_aff mpa) const
6089
{
6090
  auto res = isl_ast_build_call_from_multi_pw_aff(get(), mpa.release());
6091
  return manage(res);
6092
}
6093
 
6094
isl::ast_expr ast_build::call_from(isl::pw_multi_aff pma) const
6095
{
6096
  auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release());
6097
  return manage(res);
6098
}
6099
 
6100
isl::ast_expr ast_build::expr_from(isl::pw_aff pa) const
6101
{
6102
  auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release());
6103
  return manage(res);
6104
}
6105
 
6106
isl::ast_expr ast_build::expr_from(isl::set set) const
6107
{
6108
  auto res = isl_ast_build_expr_from_set(get(), set.release());
6109
  return manage(res);
6110
}
6111
 
6112
isl::ast_build ast_build::from_context(isl::set set)
6113
{
6114
  auto res = isl_ast_build_from_context(set.release());
6115
  return manage(res);
6116
}
6117
 
6118
isl::ast_node ast_build::node_from(isl::schedule schedule) const
6119
{
6120
  auto res = isl_ast_build_node_from_schedule(get(), schedule.release());
6121
  return manage(res);
6122
}
6123
 
6124
isl::ast_node ast_build::node_from_schedule_map(isl::union_map schedule) const
6125
{
6126
  auto res = isl_ast_build_node_from_schedule_map(get(), schedule.release());
6127
  return manage(res);
6128
}
6129
 
6130
isl::ast_build ast_build::restrict(isl::set set) const
6131
{
6132
  auto res = isl_ast_build_restrict(copy(), set.release());
6133
  return manage(res).copy_callbacks(*this);
6134
}
6135
 
6136
isl::union_map ast_build::schedule() const
6137
{
6138
  auto res = isl_ast_build_get_schedule(get());
6139
  return manage(res);
6140
}
6141
 
6142
isl::union_map ast_build::get_schedule() const
6143
{
6144
  return schedule();
6145
}
6146
 
6147
// implementations for isl::ast_expr
6148
ast_expr manage(__isl_take isl_ast_expr *ptr) {
6149
  return ast_expr(ptr);
6150
}
6151
ast_expr manage_copy(__isl_keep isl_ast_expr *ptr) {
6152
  ptr = isl_ast_expr_copy(ptr);
6153
  return ast_expr(ptr);
6154
}
6155
 
6156
ast_expr::ast_expr()
6157
    : ptr(nullptr) {}
6158
 
6159
ast_expr::ast_expr(const ast_expr &obj)
6160
    : ptr(nullptr)
6161
{
6162
  ptr = obj.copy();
6163
}
6164
 
6165
ast_expr::ast_expr(__isl_take isl_ast_expr *ptr)
6166
    : ptr(ptr) {}
6167
 
6168
ast_expr &ast_expr::operator=(ast_expr obj) {
6169
  std::swap(this->ptr, obj.ptr);
6170
  return *this;
6171
}
6172
 
6173
ast_expr::~ast_expr() {
6174
  if (ptr)
6175
    isl_ast_expr_free(ptr);
6176
}
6177
 
6178
__isl_give isl_ast_expr *ast_expr::copy() const & {
6179
  return isl_ast_expr_copy(ptr);
6180
}
6181
 
6182
__isl_keep isl_ast_expr *ast_expr::get() const {
6183
  return ptr;
6184
}
6185
 
6186
__isl_give isl_ast_expr *ast_expr::release() {
6187
  isl_ast_expr *tmp = ptr;
6188
  ptr = nullptr;
6189
  return tmp;
6190
}
6191
 
6192
bool ast_expr::is_null() const {
6193
  return ptr == nullptr;
6194
}
6195
 
6196
template <typename T, typename>
6197
boolean ast_expr::isa_type(T subtype) const
6198
{
6199
  if (is_null())
6200
    return boolean();
6201
  return isl_ast_expr_get_type(get()) == subtype;
6202
}
6203
template <class T>
6204
boolean ast_expr::isa() const
6205
{
6206
  return isa_type<decltype(T::type)>(T::type);
6207
}
6208
template <class T>
6209
T ast_expr::as() const
6210
{
6211
 if (isa<T>().is_false())
6212
    isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
6213
  return T(copy());
6214
}
6215
 
6216
isl::ctx ast_expr::ctx() const {
6217
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6218
}
6219
 
6220
isl::ast_expr ast_expr::add(isl::ast_expr expr2) const
6221
{
6222
  auto res = isl_ast_expr_add(copy(), expr2.release());
6223
  return manage(res);
6224
}
6225
 
6226
isl::ast_expr ast_expr::address_of() const
6227
{
6228
  auto res = isl_ast_expr_address_of(copy());
6229
  return manage(res);
6230
}
6231
 
6232
isl::ast_expr ast_expr::eq(isl::ast_expr expr2) const
6233
{
6234
  auto res = isl_ast_expr_eq(copy(), expr2.release());
6235
  return manage(res);
6236
}
6237
 
6238
isl::ast_expr ast_expr::from_val(isl::val v)
6239
{
6240
  auto res = isl_ast_expr_from_val(v.release());
6241
  return manage(res);
6242
}
6243
 
6244
isl::id ast_expr::id() const
6245
{
6246
  auto res = isl_ast_expr_get_id(get());
6247
  return manage(res);
6248
}
6249
 
6250
isl::id ast_expr::get_id() const
6251
{
6252
  return id();
6253
}
6254
 
6255
isl::ast_expr ast_expr::le(isl::ast_expr expr2) const
6256
{
6257
  auto res = isl_ast_expr_le(copy(), expr2.release());
6258
  return manage(res);
6259
}
6260
 
6261
isl::ast_expr ast_expr::mul(isl::ast_expr expr2) const
6262
{
6263
  auto res = isl_ast_expr_mul(copy(), expr2.release());
6264
  return manage(res);
6265
}
6266
 
6267
isl::ast_expr ast_expr::op_arg(int pos) const
6268
{
6269
  auto res = isl_ast_expr_get_op_arg(get(), pos);
6270
  return manage(res);
6271
}
6272
 
6273
isl::ast_expr ast_expr::get_op_arg(int pos) const
6274
{
6275
  return op_arg(pos);
6276
}
6277
 
6278
std::string ast_expr::to_C_str() const
6279
{
6280
  auto res = isl_ast_expr_to_C_str(get());
6281
  std::string tmp(res);
6282
  free(res);
6283
  return tmp;
6284
}
6285
 
6286
isl::val ast_expr::val() const
6287
{
6288
  auto res = isl_ast_expr_get_val(get());
6289
  return manage(res);
6290
}
6291
 
6292
isl::val ast_expr::get_val() const
6293
{
6294
  return val();
6295
}
6296
 
6297
inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj)
6298
{
6299
  char *str = isl_ast_expr_to_str(obj.get());
6300
  if (!str) {
6301
    os.setstate(std::ios_base::badbit);
6302
    return os;
6303
  }
6304
  os << str;
6305
  free(str);
6306
  return os;
6307
}
6308
 
6309
// implementations for isl::ast_expr_id
6310
ast_expr_id::ast_expr_id()
6311
    : ast_expr() {}
6312
 
6313
ast_expr_id::ast_expr_id(const ast_expr_id &obj)
6314
    : ast_expr(obj)
6315
{
6316
}
6317
 
6318
ast_expr_id::ast_expr_id(__isl_take isl_ast_expr *ptr)
6319
    : ast_expr(ptr) {}
6320
 
6321
ast_expr_id &ast_expr_id::operator=(ast_expr_id obj) {
6322
  std::swap(this->ptr, obj.ptr);
6323
  return *this;
6324
}
6325
 
6326
isl::ctx ast_expr_id::ctx() const {
6327
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6328
}
6329
 
6330
isl::id ast_expr_id::id() const
6331
{
6332
  auto res = isl_ast_expr_id_get_id(get());
6333
  return manage(res);
6334
}
6335
 
6336
isl::id ast_expr_id::get_id() const
6337
{
6338
  return id();
6339
}
6340
 
6341
inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj)
6342
{
6343
  char *str = isl_ast_expr_to_str(obj.get());
6344
  if (!str) {
6345
    os.setstate(std::ios_base::badbit);
6346
    return os;
6347
  }
6348
  os << str;
6349
  free(str);
6350
  return os;
6351
}
6352
 
6353
// implementations for isl::ast_expr_int
6354
ast_expr_int::ast_expr_int()
6355
    : ast_expr() {}
6356
 
6357
ast_expr_int::ast_expr_int(const ast_expr_int &obj)
6358
    : ast_expr(obj)
6359
{
6360
}
6361
 
6362
ast_expr_int::ast_expr_int(__isl_take isl_ast_expr *ptr)
6363
    : ast_expr(ptr) {}
6364
 
6365
ast_expr_int &ast_expr_int::operator=(ast_expr_int obj) {
6366
  std::swap(this->ptr, obj.ptr);
6367
  return *this;
6368
}
6369
 
6370
isl::ctx ast_expr_int::ctx() const {
6371
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6372
}
6373
 
6374
isl::val ast_expr_int::val() const
6375
{
6376
  auto res = isl_ast_expr_int_get_val(get());
6377
  return manage(res);
6378
}
6379
 
6380
isl::val ast_expr_int::get_val() const
6381
{
6382
  return val();
6383
}
6384
 
6385
inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj)
6386
{
6387
  char *str = isl_ast_expr_to_str(obj.get());
6388
  if (!str) {
6389
    os.setstate(std::ios_base::badbit);
6390
    return os;
6391
  }
6392
  os << str;
6393
  free(str);
6394
  return os;
6395
}
6396
 
6397
// implementations for isl::ast_expr_op
6398
ast_expr_op::ast_expr_op()
6399
    : ast_expr() {}
6400
 
6401
ast_expr_op::ast_expr_op(const ast_expr_op &obj)
6402
    : ast_expr(obj)
6403
{
6404
}
6405
 
6406
ast_expr_op::ast_expr_op(__isl_take isl_ast_expr *ptr)
6407
    : ast_expr(ptr) {}
6408
 
6409
ast_expr_op &ast_expr_op::operator=(ast_expr_op obj) {
6410
  std::swap(this->ptr, obj.ptr);
6411
  return *this;
6412
}
6413
 
6414
template <typename T, typename>
6415
boolean ast_expr_op::isa_type(T subtype) const
6416
{
6417
  if (is_null())
6418
    return boolean();
6419
  return isl_ast_expr_op_get_type(get()) == subtype;
6420
}
6421
template <class T>
6422
boolean ast_expr_op::isa() const
6423
{
6424
  return isa_type<decltype(T::type)>(T::type);
6425
}
6426
template <class T>
6427
T ast_expr_op::as() const
6428
{
6429
 if (isa<T>().is_false())
6430
    isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
6431
  return T(copy());
6432
}
6433
 
6434
isl::ctx ast_expr_op::ctx() const {
6435
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6436
}
6437
 
6438
isl::ast_expr ast_expr_op::arg(int pos) const
6439
{
6440
  auto res = isl_ast_expr_op_get_arg(get(), pos);
6441
  return manage(res);
6442
}
6443
 
6444
isl::ast_expr ast_expr_op::get_arg(int pos) const
6445
{
6446
  return arg(pos);
6447
}
6448
 
6449
class size ast_expr_op::n_arg() const
6450
{
6451
  auto res = isl_ast_expr_op_get_n_arg(get());
6452
  return manage(res);
6453
}
6454
 
6455
class size ast_expr_op::get_n_arg() const
6456
{
6457
  return n_arg();
6458
}
6459
 
6460
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj)
6461
{
6462
  char *str = isl_ast_expr_to_str(obj.get());
6463
  if (!str) {
6464
    os.setstate(std::ios_base::badbit);
6465
    return os;
6466
  }
6467
  os << str;
6468
  free(str);
6469
  return os;
6470
}
6471
 
6472
// implementations for isl::ast_expr_op_access
6473
ast_expr_op_access::ast_expr_op_access()
6474
    : ast_expr_op() {}
6475
 
6476
ast_expr_op_access::ast_expr_op_access(const ast_expr_op_access &obj)
6477
    : ast_expr_op(obj)
6478
{
6479
}
6480
 
6481
ast_expr_op_access::ast_expr_op_access(__isl_take isl_ast_expr *ptr)
6482
    : ast_expr_op(ptr) {}
6483
 
6484
ast_expr_op_access &ast_expr_op_access::operator=(ast_expr_op_access obj) {
6485
  std::swap(this->ptr, obj.ptr);
6486
  return *this;
6487
}
6488
 
6489
isl::ctx ast_expr_op_access::ctx() const {
6490
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6491
}
6492
 
6493
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj)
6494
{
6495
  char *str = isl_ast_expr_to_str(obj.get());
6496
  if (!str) {
6497
    os.setstate(std::ios_base::badbit);
6498
    return os;
6499
  }
6500
  os << str;
6501
  free(str);
6502
  return os;
6503
}
6504
 
6505
// implementations for isl::ast_expr_op_add
6506
ast_expr_op_add::ast_expr_op_add()
6507
    : ast_expr_op() {}
6508
 
6509
ast_expr_op_add::ast_expr_op_add(const ast_expr_op_add &obj)
6510
    : ast_expr_op(obj)
6511
{
6512
}
6513
 
6514
ast_expr_op_add::ast_expr_op_add(__isl_take isl_ast_expr *ptr)
6515
    : ast_expr_op(ptr) {}
6516
 
6517
ast_expr_op_add &ast_expr_op_add::operator=(ast_expr_op_add obj) {
6518
  std::swap(this->ptr, obj.ptr);
6519
  return *this;
6520
}
6521
 
6522
isl::ctx ast_expr_op_add::ctx() const {
6523
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6524
}
6525
 
6526
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj)
6527
{
6528
  char *str = isl_ast_expr_to_str(obj.get());
6529
  if (!str) {
6530
    os.setstate(std::ios_base::badbit);
6531
    return os;
6532
  }
6533
  os << str;
6534
  free(str);
6535
  return os;
6536
}
6537
 
6538
// implementations for isl::ast_expr_op_address_of
6539
ast_expr_op_address_of::ast_expr_op_address_of()
6540
    : ast_expr_op() {}
6541
 
6542
ast_expr_op_address_of::ast_expr_op_address_of(const ast_expr_op_address_of &obj)
6543
    : ast_expr_op(obj)
6544
{
6545
}
6546
 
6547
ast_expr_op_address_of::ast_expr_op_address_of(__isl_take isl_ast_expr *ptr)
6548
    : ast_expr_op(ptr) {}
6549
 
6550
ast_expr_op_address_of &ast_expr_op_address_of::operator=(ast_expr_op_address_of obj) {
6551
  std::swap(this->ptr, obj.ptr);
6552
  return *this;
6553
}
6554
 
6555
isl::ctx ast_expr_op_address_of::ctx() const {
6556
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6557
}
6558
 
6559
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj)
6560
{
6561
  char *str = isl_ast_expr_to_str(obj.get());
6562
  if (!str) {
6563
    os.setstate(std::ios_base::badbit);
6564
    return os;
6565
  }
6566
  os << str;
6567
  free(str);
6568
  return os;
6569
}
6570
 
6571
// implementations for isl::ast_expr_op_and
6572
ast_expr_op_and::ast_expr_op_and()
6573
    : ast_expr_op() {}
6574
 
6575
ast_expr_op_and::ast_expr_op_and(const ast_expr_op_and &obj)
6576
    : ast_expr_op(obj)
6577
{
6578
}
6579
 
6580
ast_expr_op_and::ast_expr_op_and(__isl_take isl_ast_expr *ptr)
6581
    : ast_expr_op(ptr) {}
6582
 
6583
ast_expr_op_and &ast_expr_op_and::operator=(ast_expr_op_and obj) {
6584
  std::swap(this->ptr, obj.ptr);
6585
  return *this;
6586
}
6587
 
6588
isl::ctx ast_expr_op_and::ctx() const {
6589
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6590
}
6591
 
6592
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj)
6593
{
6594
  char *str = isl_ast_expr_to_str(obj.get());
6595
  if (!str) {
6596
    os.setstate(std::ios_base::badbit);
6597
    return os;
6598
  }
6599
  os << str;
6600
  free(str);
6601
  return os;
6602
}
6603
 
6604
// implementations for isl::ast_expr_op_and_then
6605
ast_expr_op_and_then::ast_expr_op_and_then()
6606
    : ast_expr_op() {}
6607
 
6608
ast_expr_op_and_then::ast_expr_op_and_then(const ast_expr_op_and_then &obj)
6609
    : ast_expr_op(obj)
6610
{
6611
}
6612
 
6613
ast_expr_op_and_then::ast_expr_op_and_then(__isl_take isl_ast_expr *ptr)
6614
    : ast_expr_op(ptr) {}
6615
 
6616
ast_expr_op_and_then &ast_expr_op_and_then::operator=(ast_expr_op_and_then obj) {
6617
  std::swap(this->ptr, obj.ptr);
6618
  return *this;
6619
}
6620
 
6621
isl::ctx ast_expr_op_and_then::ctx() const {
6622
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6623
}
6624
 
6625
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj)
6626
{
6627
  char *str = isl_ast_expr_to_str(obj.get());
6628
  if (!str) {
6629
    os.setstate(std::ios_base::badbit);
6630
    return os;
6631
  }
6632
  os << str;
6633
  free(str);
6634
  return os;
6635
}
6636
 
6637
// implementations for isl::ast_expr_op_call
6638
ast_expr_op_call::ast_expr_op_call()
6639
    : ast_expr_op() {}
6640
 
6641
ast_expr_op_call::ast_expr_op_call(const ast_expr_op_call &obj)
6642
    : ast_expr_op(obj)
6643
{
6644
}
6645
 
6646
ast_expr_op_call::ast_expr_op_call(__isl_take isl_ast_expr *ptr)
6647
    : ast_expr_op(ptr) {}
6648
 
6649
ast_expr_op_call &ast_expr_op_call::operator=(ast_expr_op_call obj) {
6650
  std::swap(this->ptr, obj.ptr);
6651
  return *this;
6652
}
6653
 
6654
isl::ctx ast_expr_op_call::ctx() const {
6655
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6656
}
6657
 
6658
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj)
6659
{
6660
  char *str = isl_ast_expr_to_str(obj.get());
6661
  if (!str) {
6662
    os.setstate(std::ios_base::badbit);
6663
    return os;
6664
  }
6665
  os << str;
6666
  free(str);
6667
  return os;
6668
}
6669
 
6670
// implementations for isl::ast_expr_op_cond
6671
ast_expr_op_cond::ast_expr_op_cond()
6672
    : ast_expr_op() {}
6673
 
6674
ast_expr_op_cond::ast_expr_op_cond(const ast_expr_op_cond &obj)
6675
    : ast_expr_op(obj)
6676
{
6677
}
6678
 
6679
ast_expr_op_cond::ast_expr_op_cond(__isl_take isl_ast_expr *ptr)
6680
    : ast_expr_op(ptr) {}
6681
 
6682
ast_expr_op_cond &ast_expr_op_cond::operator=(ast_expr_op_cond obj) {
6683
  std::swap(this->ptr, obj.ptr);
6684
  return *this;
6685
}
6686
 
6687
isl::ctx ast_expr_op_cond::ctx() const {
6688
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6689
}
6690
 
6691
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj)
6692
{
6693
  char *str = isl_ast_expr_to_str(obj.get());
6694
  if (!str) {
6695
    os.setstate(std::ios_base::badbit);
6696
    return os;
6697
  }
6698
  os << str;
6699
  free(str);
6700
  return os;
6701
}
6702
 
6703
// implementations for isl::ast_expr_op_div
6704
ast_expr_op_div::ast_expr_op_div()
6705
    : ast_expr_op() {}
6706
 
6707
ast_expr_op_div::ast_expr_op_div(const ast_expr_op_div &obj)
6708
    : ast_expr_op(obj)
6709
{
6710
}
6711
 
6712
ast_expr_op_div::ast_expr_op_div(__isl_take isl_ast_expr *ptr)
6713
    : ast_expr_op(ptr) {}
6714
 
6715
ast_expr_op_div &ast_expr_op_div::operator=(ast_expr_op_div obj) {
6716
  std::swap(this->ptr, obj.ptr);
6717
  return *this;
6718
}
6719
 
6720
isl::ctx ast_expr_op_div::ctx() const {
6721
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6722
}
6723
 
6724
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj)
6725
{
6726
  char *str = isl_ast_expr_to_str(obj.get());
6727
  if (!str) {
6728
    os.setstate(std::ios_base::badbit);
6729
    return os;
6730
  }
6731
  os << str;
6732
  free(str);
6733
  return os;
6734
}
6735
 
6736
// implementations for isl::ast_expr_op_eq
6737
ast_expr_op_eq::ast_expr_op_eq()
6738
    : ast_expr_op() {}
6739
 
6740
ast_expr_op_eq::ast_expr_op_eq(const ast_expr_op_eq &obj)
6741
    : ast_expr_op(obj)
6742
{
6743
}
6744
 
6745
ast_expr_op_eq::ast_expr_op_eq(__isl_take isl_ast_expr *ptr)
6746
    : ast_expr_op(ptr) {}
6747
 
6748
ast_expr_op_eq &ast_expr_op_eq::operator=(ast_expr_op_eq obj) {
6749
  std::swap(this->ptr, obj.ptr);
6750
  return *this;
6751
}
6752
 
6753
isl::ctx ast_expr_op_eq::ctx() const {
6754
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6755
}
6756
 
6757
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj)
6758
{
6759
  char *str = isl_ast_expr_to_str(obj.get());
6760
  if (!str) {
6761
    os.setstate(std::ios_base::badbit);
6762
    return os;
6763
  }
6764
  os << str;
6765
  free(str);
6766
  return os;
6767
}
6768
 
6769
// implementations for isl::ast_expr_op_fdiv_q
6770
ast_expr_op_fdiv_q::ast_expr_op_fdiv_q()
6771
    : ast_expr_op() {}
6772
 
6773
ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj)
6774
    : ast_expr_op(obj)
6775
{
6776
}
6777
 
6778
ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr)
6779
    : ast_expr_op(ptr) {}
6780
 
6781
ast_expr_op_fdiv_q &ast_expr_op_fdiv_q::operator=(ast_expr_op_fdiv_q obj) {
6782
  std::swap(this->ptr, obj.ptr);
6783
  return *this;
6784
}
6785
 
6786
isl::ctx ast_expr_op_fdiv_q::ctx() const {
6787
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6788
}
6789
 
6790
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj)
6791
{
6792
  char *str = isl_ast_expr_to_str(obj.get());
6793
  if (!str) {
6794
    os.setstate(std::ios_base::badbit);
6795
    return os;
6796
  }
6797
  os << str;
6798
  free(str);
6799
  return os;
6800
}
6801
 
6802
// implementations for isl::ast_expr_op_ge
6803
ast_expr_op_ge::ast_expr_op_ge()
6804
    : ast_expr_op() {}
6805
 
6806
ast_expr_op_ge::ast_expr_op_ge(const ast_expr_op_ge &obj)
6807
    : ast_expr_op(obj)
6808
{
6809
}
6810
 
6811
ast_expr_op_ge::ast_expr_op_ge(__isl_take isl_ast_expr *ptr)
6812
    : ast_expr_op(ptr) {}
6813
 
6814
ast_expr_op_ge &ast_expr_op_ge::operator=(ast_expr_op_ge obj) {
6815
  std::swap(this->ptr, obj.ptr);
6816
  return *this;
6817
}
6818
 
6819
isl::ctx ast_expr_op_ge::ctx() const {
6820
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6821
}
6822
 
6823
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj)
6824
{
6825
  char *str = isl_ast_expr_to_str(obj.get());
6826
  if (!str) {
6827
    os.setstate(std::ios_base::badbit);
6828
    return os;
6829
  }
6830
  os << str;
6831
  free(str);
6832
  return os;
6833
}
6834
 
6835
// implementations for isl::ast_expr_op_gt
6836
ast_expr_op_gt::ast_expr_op_gt()
6837
    : ast_expr_op() {}
6838
 
6839
ast_expr_op_gt::ast_expr_op_gt(const ast_expr_op_gt &obj)
6840
    : ast_expr_op(obj)
6841
{
6842
}
6843
 
6844
ast_expr_op_gt::ast_expr_op_gt(__isl_take isl_ast_expr *ptr)
6845
    : ast_expr_op(ptr) {}
6846
 
6847
ast_expr_op_gt &ast_expr_op_gt::operator=(ast_expr_op_gt obj) {
6848
  std::swap(this->ptr, obj.ptr);
6849
  return *this;
6850
}
6851
 
6852
isl::ctx ast_expr_op_gt::ctx() const {
6853
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6854
}
6855
 
6856
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj)
6857
{
6858
  char *str = isl_ast_expr_to_str(obj.get());
6859
  if (!str) {
6860
    os.setstate(std::ios_base::badbit);
6861
    return os;
6862
  }
6863
  os << str;
6864
  free(str);
6865
  return os;
6866
}
6867
 
6868
// implementations for isl::ast_expr_op_le
6869
ast_expr_op_le::ast_expr_op_le()
6870
    : ast_expr_op() {}
6871
 
6872
ast_expr_op_le::ast_expr_op_le(const ast_expr_op_le &obj)
6873
    : ast_expr_op(obj)
6874
{
6875
}
6876
 
6877
ast_expr_op_le::ast_expr_op_le(__isl_take isl_ast_expr *ptr)
6878
    : ast_expr_op(ptr) {}
6879
 
6880
ast_expr_op_le &ast_expr_op_le::operator=(ast_expr_op_le obj) {
6881
  std::swap(this->ptr, obj.ptr);
6882
  return *this;
6883
}
6884
 
6885
isl::ctx ast_expr_op_le::ctx() const {
6886
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6887
}
6888
 
6889
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj)
6890
{
6891
  char *str = isl_ast_expr_to_str(obj.get());
6892
  if (!str) {
6893
    os.setstate(std::ios_base::badbit);
6894
    return os;
6895
  }
6896
  os << str;
6897
  free(str);
6898
  return os;
6899
}
6900
 
6901
// implementations for isl::ast_expr_op_lt
6902
ast_expr_op_lt::ast_expr_op_lt()
6903
    : ast_expr_op() {}
6904
 
6905
ast_expr_op_lt::ast_expr_op_lt(const ast_expr_op_lt &obj)
6906
    : ast_expr_op(obj)
6907
{
6908
}
6909
 
6910
ast_expr_op_lt::ast_expr_op_lt(__isl_take isl_ast_expr *ptr)
6911
    : ast_expr_op(ptr) {}
6912
 
6913
ast_expr_op_lt &ast_expr_op_lt::operator=(ast_expr_op_lt obj) {
6914
  std::swap(this->ptr, obj.ptr);
6915
  return *this;
6916
}
6917
 
6918
isl::ctx ast_expr_op_lt::ctx() const {
6919
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6920
}
6921
 
6922
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj)
6923
{
6924
  char *str = isl_ast_expr_to_str(obj.get());
6925
  if (!str) {
6926
    os.setstate(std::ios_base::badbit);
6927
    return os;
6928
  }
6929
  os << str;
6930
  free(str);
6931
  return os;
6932
}
6933
 
6934
// implementations for isl::ast_expr_op_max
6935
ast_expr_op_max::ast_expr_op_max()
6936
    : ast_expr_op() {}
6937
 
6938
ast_expr_op_max::ast_expr_op_max(const ast_expr_op_max &obj)
6939
    : ast_expr_op(obj)
6940
{
6941
}
6942
 
6943
ast_expr_op_max::ast_expr_op_max(__isl_take isl_ast_expr *ptr)
6944
    : ast_expr_op(ptr) {}
6945
 
6946
ast_expr_op_max &ast_expr_op_max::operator=(ast_expr_op_max obj) {
6947
  std::swap(this->ptr, obj.ptr);
6948
  return *this;
6949
}
6950
 
6951
isl::ctx ast_expr_op_max::ctx() const {
6952
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6953
}
6954
 
6955
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj)
6956
{
6957
  char *str = isl_ast_expr_to_str(obj.get());
6958
  if (!str) {
6959
    os.setstate(std::ios_base::badbit);
6960
    return os;
6961
  }
6962
  os << str;
6963
  free(str);
6964
  return os;
6965
}
6966
 
6967
// implementations for isl::ast_expr_op_member
6968
ast_expr_op_member::ast_expr_op_member()
6969
    : ast_expr_op() {}
6970
 
6971
ast_expr_op_member::ast_expr_op_member(const ast_expr_op_member &obj)
6972
    : ast_expr_op(obj)
6973
{
6974
}
6975
 
6976
ast_expr_op_member::ast_expr_op_member(__isl_take isl_ast_expr *ptr)
6977
    : ast_expr_op(ptr) {}
6978
 
6979
ast_expr_op_member &ast_expr_op_member::operator=(ast_expr_op_member obj) {
6980
  std::swap(this->ptr, obj.ptr);
6981
  return *this;
6982
}
6983
 
6984
isl::ctx ast_expr_op_member::ctx() const {
6985
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
6986
}
6987
 
6988
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj)
6989
{
6990
  char *str = isl_ast_expr_to_str(obj.get());
6991
  if (!str) {
6992
    os.setstate(std::ios_base::badbit);
6993
    return os;
6994
  }
6995
  os << str;
6996
  free(str);
6997
  return os;
6998
}
6999
 
7000
// implementations for isl::ast_expr_op_min
7001
ast_expr_op_min::ast_expr_op_min()
7002
    : ast_expr_op() {}
7003
 
7004
ast_expr_op_min::ast_expr_op_min(const ast_expr_op_min &obj)
7005
    : ast_expr_op(obj)
7006
{
7007
}
7008
 
7009
ast_expr_op_min::ast_expr_op_min(__isl_take isl_ast_expr *ptr)
7010
    : ast_expr_op(ptr) {}
7011
 
7012
ast_expr_op_min &ast_expr_op_min::operator=(ast_expr_op_min obj) {
7013
  std::swap(this->ptr, obj.ptr);
7014
  return *this;
7015
}
7016
 
7017
isl::ctx ast_expr_op_min::ctx() const {
7018
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
7019
}
7020
 
7021
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj)
7022
{
7023
  char *str = isl_ast_expr_to_str(obj.get());
7024
  if (!str) {
7025
    os.setstate(std::ios_base::badbit);
7026
    return os;
7027
  }
7028
  os << str;
7029
  free(str);
7030
  return os;
7031
}
7032
 
7033
// implementations for isl::ast_expr_op_minus
7034
ast_expr_op_minus::ast_expr_op_minus()
7035
    : ast_expr_op() {}
7036
 
7037
ast_expr_op_minus::ast_expr_op_minus(const ast_expr_op_minus &obj)
7038
    : ast_expr_op(obj)
7039
{
7040
}
7041
 
7042
ast_expr_op_minus::ast_expr_op_minus(__isl_take isl_ast_expr *ptr)
7043
    : ast_expr_op(ptr) {}
7044
 
7045
ast_expr_op_minus &ast_expr_op_minus::operator=(ast_expr_op_minus obj) {
7046
  std::swap(this->ptr, obj.ptr);
7047
  return *this;
7048
}
7049
 
7050
isl::ctx ast_expr_op_minus::ctx() const {
7051
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
7052
}
7053
 
7054
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj)
7055
{
7056
  char *str = isl_ast_expr_to_str(obj.get());
7057
  if (!str) {
7058
    os.setstate(std::ios_base::badbit);
7059
    return os;
7060
  }
7061
  os << str;
7062
  free(str);
7063
  return os;
7064
}
7065
 
7066
// implementations for isl::ast_expr_op_mul
7067
ast_expr_op_mul::ast_expr_op_mul()
7068
    : ast_expr_op() {}
7069
 
7070
ast_expr_op_mul::ast_expr_op_mul(const ast_expr_op_mul &obj)
7071
    : ast_expr_op(obj)
7072
{
7073
}
7074
 
7075
ast_expr_op_mul::ast_expr_op_mul(__isl_take isl_ast_expr *ptr)
7076
    : ast_expr_op(ptr) {}
7077
 
7078
ast_expr_op_mul &ast_expr_op_mul::operator=(ast_expr_op_mul obj) {
7079
  std::swap(this->ptr, obj.ptr);
7080
  return *this;
7081
}
7082
 
7083
isl::ctx ast_expr_op_mul::ctx() const {
7084
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
7085
}
7086
 
7087
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj)
7088
{
7089
  char *str = isl_ast_expr_to_str(obj.get());
7090
  if (!str) {
7091
    os.setstate(std::ios_base::badbit);
7092
    return os;
7093
  }
7094
  os << str;
7095
  free(str);
7096
  return os;
7097
}
7098
 
7099
// implementations for isl::ast_expr_op_or
7100
ast_expr_op_or::ast_expr_op_or()
7101
    : ast_expr_op() {}
7102
 
7103
ast_expr_op_or::ast_expr_op_or(const ast_expr_op_or &obj)
7104
    : ast_expr_op(obj)
7105
{
7106
}
7107
 
7108
ast_expr_op_or::ast_expr_op_or(__isl_take isl_ast_expr *ptr)
7109
    : ast_expr_op(ptr) {}
7110
 
7111
ast_expr_op_or &ast_expr_op_or::operator=(ast_expr_op_or obj) {
7112
  std::swap(this->ptr, obj.ptr);
7113
  return *this;
7114
}
7115
 
7116
isl::ctx ast_expr_op_or::ctx() const {
7117
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
7118
}
7119
 
7120
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj)
7121
{
7122
  char *str = isl_ast_expr_to_str(obj.get());
7123
  if (!str) {
7124
    os.setstate(std::ios_base::badbit);
7125
    return os;
7126
  }
7127
  os << str;
7128
  free(str);
7129
  return os;
7130
}
7131
 
7132
// implementations for isl::ast_expr_op_or_else
7133
ast_expr_op_or_else::ast_expr_op_or_else()
7134
    : ast_expr_op() {}
7135
 
7136
ast_expr_op_or_else::ast_expr_op_or_else(const ast_expr_op_or_else &obj)
7137
    : ast_expr_op(obj)
7138
{
7139
}
7140
 
7141
ast_expr_op_or_else::ast_expr_op_or_else(__isl_take isl_ast_expr *ptr)
7142
    : ast_expr_op(ptr) {}
7143
 
7144
ast_expr_op_or_else &ast_expr_op_or_else::operator=(ast_expr_op_or_else obj) {
7145
  std::swap(this->ptr, obj.ptr);
7146
  return *this;
7147
}
7148
 
7149
isl::ctx ast_expr_op_or_else::ctx() const {
7150
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
7151
}
7152
 
7153
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj)
7154
{
7155
  char *str = isl_ast_expr_to_str(obj.get());
7156
  if (!str) {
7157
    os.setstate(std::ios_base::badbit);
7158
    return os;
7159
  }
7160
  os << str;
7161
  free(str);
7162
  return os;
7163
}
7164
 
7165
// implementations for isl::ast_expr_op_pdiv_q
7166
ast_expr_op_pdiv_q::ast_expr_op_pdiv_q()
7167
    : ast_expr_op() {}
7168
 
7169
ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj)
7170
    : ast_expr_op(obj)
7171
{
7172
}
7173
 
7174
ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr)
7175
    : ast_expr_op(ptr) {}
7176
 
7177
ast_expr_op_pdiv_q &ast_expr_op_pdiv_q::operator=(ast_expr_op_pdiv_q obj) {
7178
  std::swap(this->ptr, obj.ptr);
7179
  return *this;
7180
}
7181
 
7182
isl::ctx ast_expr_op_pdiv_q::ctx() const {
7183
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
7184
}
7185
 
7186
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj)
7187
{
7188
  char *str = isl_ast_expr_to_str(obj.get());
7189
  if (!str) {
7190
    os.setstate(std::ios_base::badbit);
7191
    return os;
7192
  }
7193
  os << str;
7194
  free(str);
7195
  return os;
7196
}
7197
 
7198
// implementations for isl::ast_expr_op_pdiv_r
7199
ast_expr_op_pdiv_r::ast_expr_op_pdiv_r()
7200
    : ast_expr_op() {}
7201
 
7202
ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj)
7203
    : ast_expr_op(obj)
7204
{
7205
}
7206
 
7207
ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr)
7208
    : ast_expr_op(ptr) {}
7209
 
7210
ast_expr_op_pdiv_r &ast_expr_op_pdiv_r::operator=(ast_expr_op_pdiv_r obj) {
7211
  std::swap(this->ptr, obj.ptr);
7212
  return *this;
7213
}
7214
 
7215
isl::ctx ast_expr_op_pdiv_r::ctx() const {
7216
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
7217
}
7218
 
7219
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj)
7220
{
7221
  char *str = isl_ast_expr_to_str(obj.get());
7222
  if (!str) {
7223
    os.setstate(std::ios_base::badbit);
7224
    return os;
7225
  }
7226
  os << str;
7227
  free(str);
7228
  return os;
7229
}
7230
 
7231
// implementations for isl::ast_expr_op_select
7232
ast_expr_op_select::ast_expr_op_select()
7233
    : ast_expr_op() {}
7234
 
7235
ast_expr_op_select::ast_expr_op_select(const ast_expr_op_select &obj)
7236
    : ast_expr_op(obj)
7237
{
7238
}
7239
 
7240
ast_expr_op_select::ast_expr_op_select(__isl_take isl_ast_expr *ptr)
7241
    : ast_expr_op(ptr) {}
7242
 
7243
ast_expr_op_select &ast_expr_op_select::operator=(ast_expr_op_select obj) {
7244
  std::swap(this->ptr, obj.ptr);
7245
  return *this;
7246
}
7247
 
7248
isl::ctx ast_expr_op_select::ctx() const {
7249
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
7250
}
7251
 
7252
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj)
7253
{
7254
  char *str = isl_ast_expr_to_str(obj.get());
7255
  if (!str) {
7256
    os.setstate(std::ios_base::badbit);
7257
    return os;
7258
  }
7259
  os << str;
7260
  free(str);
7261
  return os;
7262
}
7263
 
7264
// implementations for isl::ast_expr_op_sub
7265
ast_expr_op_sub::ast_expr_op_sub()
7266
    : ast_expr_op() {}
7267
 
7268
ast_expr_op_sub::ast_expr_op_sub(const ast_expr_op_sub &obj)
7269
    : ast_expr_op(obj)
7270
{
7271
}
7272
 
7273
ast_expr_op_sub::ast_expr_op_sub(__isl_take isl_ast_expr *ptr)
7274
    : ast_expr_op(ptr) {}
7275
 
7276
ast_expr_op_sub &ast_expr_op_sub::operator=(ast_expr_op_sub obj) {
7277
  std::swap(this->ptr, obj.ptr);
7278
  return *this;
7279
}
7280
 
7281
isl::ctx ast_expr_op_sub::ctx() const {
7282
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
7283
}
7284
 
7285
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj)
7286
{
7287
  char *str = isl_ast_expr_to_str(obj.get());
7288
  if (!str) {
7289
    os.setstate(std::ios_base::badbit);
7290
    return os;
7291
  }
7292
  os << str;
7293
  free(str);
7294
  return os;
7295
}
7296
 
7297
// implementations for isl::ast_expr_op_zdiv_r
7298
ast_expr_op_zdiv_r::ast_expr_op_zdiv_r()
7299
    : ast_expr_op() {}
7300
 
7301
ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj)
7302
    : ast_expr_op(obj)
7303
{
7304
}
7305
 
7306
ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr)
7307
    : ast_expr_op(ptr) {}
7308
 
7309
ast_expr_op_zdiv_r &ast_expr_op_zdiv_r::operator=(ast_expr_op_zdiv_r obj) {
7310
  std::swap(this->ptr, obj.ptr);
7311
  return *this;
7312
}
7313
 
7314
isl::ctx ast_expr_op_zdiv_r::ctx() const {
7315
  return isl::ctx(isl_ast_expr_get_ctx(ptr));
7316
}
7317
 
7318
inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj)
7319
{
7320
  char *str = isl_ast_expr_to_str(obj.get());
7321
  if (!str) {
7322
    os.setstate(std::ios_base::badbit);
7323
    return os;
7324
  }
7325
  os << str;
7326
  free(str);
7327
  return os;
7328
}
7329
 
7330
// implementations for isl::ast_node
7331
ast_node manage(__isl_take isl_ast_node *ptr) {
7332
  return ast_node(ptr);
7333
}
7334
ast_node manage_copy(__isl_keep isl_ast_node *ptr) {
7335
  ptr = isl_ast_node_copy(ptr);
7336
  return ast_node(ptr);
7337
}
7338
 
7339
ast_node::ast_node()
7340
    : ptr(nullptr) {}
7341
 
7342
ast_node::ast_node(const ast_node &obj)
7343
    : ptr(nullptr)
7344
{
7345
  ptr = obj.copy();
7346
}
7347
 
7348
ast_node::ast_node(__isl_take isl_ast_node *ptr)
7349
    : ptr(ptr) {}
7350
 
7351
ast_node &ast_node::operator=(ast_node obj) {
7352
  std::swap(this->ptr, obj.ptr);
7353
  return *this;
7354
}
7355
 
7356
ast_node::~ast_node() {
7357
  if (ptr)
7358
    isl_ast_node_free(ptr);
7359
}
7360
 
7361
__isl_give isl_ast_node *ast_node::copy() const & {
7362
  return isl_ast_node_copy(ptr);
7363
}
7364
 
7365
__isl_keep isl_ast_node *ast_node::get() const {
7366
  return ptr;
7367
}
7368
 
7369
__isl_give isl_ast_node *ast_node::release() {
7370
  isl_ast_node *tmp = ptr;
7371
  ptr = nullptr;
7372
  return tmp;
7373
}
7374
 
7375
bool ast_node::is_null() const {
7376
  return ptr == nullptr;
7377
}
7378
 
7379
template <typename T, typename>
7380
boolean ast_node::isa_type(T subtype) const
7381
{
7382
  if (is_null())
7383
    return boolean();
7384
  return isl_ast_node_get_type(get()) == subtype;
7385
}
7386
template <class T>
7387
boolean ast_node::isa() const
7388
{
7389
  return isa_type<decltype(T::type)>(T::type);
7390
}
7391
template <class T>
7392
T ast_node::as() const
7393
{
7394
 if (isa<T>().is_false())
7395
    isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
7396
  return T(copy());
7397
}
7398
 
7399
isl::ctx ast_node::ctx() const {
7400
  return isl::ctx(isl_ast_node_get_ctx(ptr));
7401
}
7402
 
7403
isl::id ast_node::annotation() const
7404
{
7405
  auto res = isl_ast_node_get_annotation(get());
7406
  return manage(res);
7407
}
7408
 
7409
isl::id ast_node::get_annotation() const
7410
{
7411
  return annotation();
7412
}
7413
 
7414
std::string ast_node::to_C_str() const
7415
{
7416
  auto res = isl_ast_node_to_C_str(get());
7417
  std::string tmp(res);
7418
  free(res);
7419
  return tmp;
7420
}
7421
 
7422
isl::ast_node_list ast_node::to_list() const
7423
{
7424
  auto res = isl_ast_node_to_list(copy());
7425
  return manage(res);
7426
}
7427
 
7428
inline std::ostream &operator<<(std::ostream &os, const ast_node &obj)
7429
{
7430
  char *str = isl_ast_node_to_str(obj.get());
7431
  if (!str) {
7432
    os.setstate(std::ios_base::badbit);
7433
    return os;
7434
  }
7435
  os << str;
7436
  free(str);
7437
  return os;
7438
}
7439
 
7440
// implementations for isl::ast_node_block
7441
ast_node_block::ast_node_block()
7442
    : ast_node() {}
7443
 
7444
ast_node_block::ast_node_block(const ast_node_block &obj)
7445
    : ast_node(obj)
7446
{
7447
}
7448
 
7449
ast_node_block::ast_node_block(__isl_take isl_ast_node *ptr)
7450
    : ast_node(ptr) {}
7451
 
7452
ast_node_block &ast_node_block::operator=(ast_node_block obj) {
7453
  std::swap(this->ptr, obj.ptr);
7454
  return *this;
7455
}
7456
 
7457
isl::ctx ast_node_block::ctx() const {
7458
  return isl::ctx(isl_ast_node_get_ctx(ptr));
7459
}
7460
 
7461
isl::ast_node_list ast_node_block::children() const
7462
{
7463
  auto res = isl_ast_node_block_get_children(get());
7464
  return manage(res);
7465
}
7466
 
7467
isl::ast_node_list ast_node_block::get_children() const
7468
{
7469
  return children();
7470
}
7471
 
7472
inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj)
7473
{
7474
  char *str = isl_ast_node_to_str(obj.get());
7475
  if (!str) {
7476
    os.setstate(std::ios_base::badbit);
7477
    return os;
7478
  }
7479
  os << str;
7480
  free(str);
7481
  return os;
7482
}
7483
 
7484
// implementations for isl::ast_node_for
7485
ast_node_for::ast_node_for()
7486
    : ast_node() {}
7487
 
7488
ast_node_for::ast_node_for(const ast_node_for &obj)
7489
    : ast_node(obj)
7490
{
7491
}
7492
 
7493
ast_node_for::ast_node_for(__isl_take isl_ast_node *ptr)
7494
    : ast_node(ptr) {}
7495
 
7496
ast_node_for &ast_node_for::operator=(ast_node_for obj) {
7497
  std::swap(this->ptr, obj.ptr);
7498
  return *this;
7499
}
7500
 
7501
isl::ctx ast_node_for::ctx() const {
7502
  return isl::ctx(isl_ast_node_get_ctx(ptr));
7503
}
7504
 
7505
isl::ast_node ast_node_for::body() const
7506
{
7507
  auto res = isl_ast_node_for_get_body(get());
7508
  return manage(res);
7509
}
7510
 
7511
isl::ast_node ast_node_for::get_body() const
7512
{
7513
  return body();
7514
}
7515
 
7516
isl::ast_expr ast_node_for::cond() const
7517
{
7518
  auto res = isl_ast_node_for_get_cond(get());
7519
  return manage(res);
7520
}
7521
 
7522
isl::ast_expr ast_node_for::get_cond() const
7523
{
7524
  return cond();
7525
}
7526
 
7527
isl::ast_expr ast_node_for::inc() const
7528
{
7529
  auto res = isl_ast_node_for_get_inc(get());
7530
  return manage(res);
7531
}
7532
 
7533
isl::ast_expr ast_node_for::get_inc() const
7534
{
7535
  return inc();
7536
}
7537
 
7538
isl::ast_expr ast_node_for::init() const
7539
{
7540
  auto res = isl_ast_node_for_get_init(get());
7541
  return manage(res);
7542
}
7543
 
7544
isl::ast_expr ast_node_for::get_init() const
7545
{
7546
  return init();
7547
}
7548
 
7549
boolean ast_node_for::is_degenerate() const
7550
{
7551
  auto res = isl_ast_node_for_is_degenerate(get());
7552
  return manage(res);
7553
}
7554
 
7555
isl::ast_expr ast_node_for::iterator() const
7556
{
7557
  auto res = isl_ast_node_for_get_iterator(get());
7558
  return manage(res);
7559
}
7560
 
7561
isl::ast_expr ast_node_for::get_iterator() const
7562
{
7563
  return iterator();
7564
}
7565
 
7566
inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj)
7567
{
7568
  char *str = isl_ast_node_to_str(obj.get());
7569
  if (!str) {
7570
    os.setstate(std::ios_base::badbit);
7571
    return os;
7572
  }
7573
  os << str;
7574
  free(str);
7575
  return os;
7576
}
7577
 
7578
// implementations for isl::ast_node_if
7579
ast_node_if::ast_node_if()
7580
    : ast_node() {}
7581
 
7582
ast_node_if::ast_node_if(const ast_node_if &obj)
7583
    : ast_node(obj)
7584
{
7585
}
7586
 
7587
ast_node_if::ast_node_if(__isl_take isl_ast_node *ptr)
7588
    : ast_node(ptr) {}
7589
 
7590
ast_node_if &ast_node_if::operator=(ast_node_if obj) {
7591
  std::swap(this->ptr, obj.ptr);
7592
  return *this;
7593
}
7594
 
7595
isl::ctx ast_node_if::ctx() const {
7596
  return isl::ctx(isl_ast_node_get_ctx(ptr));
7597
}
7598
 
7599
isl::ast_expr ast_node_if::cond() const
7600
{
7601
  auto res = isl_ast_node_if_get_cond(get());
7602
  return manage(res);
7603
}
7604
 
7605
isl::ast_expr ast_node_if::get_cond() const
7606
{
7607
  return cond();
7608
}
7609
 
7610
isl::ast_node ast_node_if::else_node() const
7611
{
7612
  auto res = isl_ast_node_if_get_else_node(get());
7613
  return manage(res);
7614
}
7615
 
7616
isl::ast_node ast_node_if::get_else_node() const
7617
{
7618
  return else_node();
7619
}
7620
 
7621
boolean ast_node_if::has_else_node() const
7622
{
7623
  auto res = isl_ast_node_if_has_else_node(get());
7624
  return manage(res);
7625
}
7626
 
7627
isl::ast_node ast_node_if::then_node() const
7628
{
7629
  auto res = isl_ast_node_if_get_then_node(get());
7630
  return manage(res);
7631
}
7632
 
7633
isl::ast_node ast_node_if::get_then_node() const
7634
{
7635
  return then_node();
7636
}
7637
 
7638
inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj)
7639
{
7640
  char *str = isl_ast_node_to_str(obj.get());
7641
  if (!str) {
7642
    os.setstate(std::ios_base::badbit);
7643
    return os;
7644
  }
7645
  os << str;
7646
  free(str);
7647
  return os;
7648
}
7649
 
7650
// implementations for isl::ast_node_list
7651
ast_node_list manage(__isl_take isl_ast_node_list *ptr) {
7652
  return ast_node_list(ptr);
7653
}
7654
ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) {
7655
  ptr = isl_ast_node_list_copy(ptr);
7656
  return ast_node_list(ptr);
7657
}
7658
 
7659
ast_node_list::ast_node_list()
7660
    : ptr(nullptr) {}
7661
 
7662
ast_node_list::ast_node_list(const ast_node_list &obj)
7663
    : ptr(nullptr)
7664
{
7665
  ptr = obj.copy();
7666
}
7667
 
7668
ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr)
7669
    : ptr(ptr) {}
7670
 
7671
ast_node_list::ast_node_list(isl::ctx ctx, int n)
7672
{
7673
  auto res = isl_ast_node_list_alloc(ctx.release(), n);
7674
  ptr = res;
7675
}
7676
 
7677
ast_node_list::ast_node_list(isl::ast_node el)
7678
{
7679
  auto res = isl_ast_node_list_from_ast_node(el.release());
7680
  ptr = res;
7681
}
7682
 
7683
ast_node_list &ast_node_list::operator=(ast_node_list obj) {
7684
  std::swap(this->ptr, obj.ptr);
7685
  return *this;
7686
}
7687
 
7688
ast_node_list::~ast_node_list() {
7689
  if (ptr)
7690
    isl_ast_node_list_free(ptr);
7691
}
7692
 
7693
__isl_give isl_ast_node_list *ast_node_list::copy() const & {
7694
  return isl_ast_node_list_copy(ptr);
7695
}
7696
 
7697
__isl_keep isl_ast_node_list *ast_node_list::get() const {
7698
  return ptr;
7699
}
7700
 
7701
__isl_give isl_ast_node_list *ast_node_list::release() {
7702
  isl_ast_node_list *tmp = ptr;
7703
  ptr = nullptr;
7704
  return tmp;
7705
}
7706
 
7707
bool ast_node_list::is_null() const {
7708
  return ptr == nullptr;
7709
}
7710
 
7711
isl::ctx ast_node_list::ctx() const {
7712
  return isl::ctx(isl_ast_node_list_get_ctx(ptr));
7713
}
7714
 
7715
isl::ast_node_list ast_node_list::add(isl::ast_node el) const
7716
{
7717
  auto res = isl_ast_node_list_add(copy(), el.release());
7718
  return manage(res);
7719
}
7720
 
7721
isl::ast_node ast_node_list::at(int index) const
7722
{
7723
  auto res = isl_ast_node_list_get_at(get(), index);
7724
  return manage(res);
7725
}
7726
 
7727
isl::ast_node ast_node_list::get_at(int index) const
7728
{
7729
  return at(index);
7730
}
7731
 
7732
isl::ast_node_list ast_node_list::clear() const
7733
{
7734
  auto res = isl_ast_node_list_clear(copy());
7735
  return manage(res);
7736
}
7737
 
7738
isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const
7739
{
7740
  auto res = isl_ast_node_list_concat(copy(), list2.release());
7741
  return manage(res);
7742
}
7743
 
7744
isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const
7745
{
7746
  auto res = isl_ast_node_list_drop(copy(), first, n);
7747
  return manage(res);
7748
}
7749
 
7750
stat ast_node_list::foreach(const std::function<stat(isl::ast_node)> &fn) const
7751
{
7752
  struct fn_data {
7753
    std::function<stat(isl::ast_node)> func;
7754
  } fn_data = { fn };
7755
  auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_stat {
7756
    auto *data = static_cast<struct fn_data *>(arg_1);
7757
    auto ret = (data->func)(manage(arg_0));
7758
    return ret.release();
7759
  };
7760
  auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data);
7761
  return manage(res);
7762
}
7763
 
7764
isl::ast_node_list ast_node_list::insert(unsigned int pos, isl::ast_node el) const
7765
{
7766
  auto res = isl_ast_node_list_insert(copy(), pos, el.release());
7767
  return manage(res);
7768
}
7769
 
7770
class size ast_node_list::size() const
7771
{
7772
  auto res = isl_ast_node_list_size(get());
7773
  return manage(res);
7774
}
7775
 
7776
inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj)
7777
{
7778
  char *str = isl_ast_node_list_to_str(obj.get());
7779
  if (!str) {
7780
    os.setstate(std::ios_base::badbit);
7781
    return os;
7782
  }
7783
  os << str;
7784
  free(str);
7785
  return os;
7786
}
7787
 
7788
// implementations for isl::ast_node_mark
7789
ast_node_mark::ast_node_mark()
7790
    : ast_node() {}
7791
 
7792
ast_node_mark::ast_node_mark(const ast_node_mark &obj)
7793
    : ast_node(obj)
7794
{
7795
}
7796
 
7797
ast_node_mark::ast_node_mark(__isl_take isl_ast_node *ptr)
7798
    : ast_node(ptr) {}
7799
 
7800
ast_node_mark &ast_node_mark::operator=(ast_node_mark obj) {
7801
  std::swap(this->ptr, obj.ptr);
7802
  return *this;
7803
}
7804
 
7805
isl::ctx ast_node_mark::ctx() const {
7806
  return isl::ctx(isl_ast_node_get_ctx(ptr));
7807
}
7808
 
7809
isl::id ast_node_mark::id() const
7810
{
7811
  auto res = isl_ast_node_mark_get_id(get());
7812
  return manage(res);
7813
}
7814
 
7815
isl::id ast_node_mark::get_id() const
7816
{
7817
  return id();
7818
}
7819
 
7820
isl::ast_node ast_node_mark::node() const
7821
{
7822
  auto res = isl_ast_node_mark_get_node(get());
7823
  return manage(res);
7824
}
7825
 
7826
isl::ast_node ast_node_mark::get_node() const
7827
{
7828
  return node();
7829
}
7830
 
7831
inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj)
7832
{
7833
  char *str = isl_ast_node_to_str(obj.get());
7834
  if (!str) {
7835
    os.setstate(std::ios_base::badbit);
7836
    return os;
7837
  }
7838
  os << str;
7839
  free(str);
7840
  return os;
7841
}
7842
 
7843
// implementations for isl::ast_node_user
7844
ast_node_user::ast_node_user()
7845
    : ast_node() {}
7846
 
7847
ast_node_user::ast_node_user(const ast_node_user &obj)
7848
    : ast_node(obj)
7849
{
7850
}
7851
 
7852
ast_node_user::ast_node_user(__isl_take isl_ast_node *ptr)
7853
    : ast_node(ptr) {}
7854
 
7855
ast_node_user &ast_node_user::operator=(ast_node_user obj) {
7856
  std::swap(this->ptr, obj.ptr);
7857
  return *this;
7858
}
7859
 
7860
isl::ctx ast_node_user::ctx() const {
7861
  return isl::ctx(isl_ast_node_get_ctx(ptr));
7862
}
7863
 
7864
isl::ast_expr ast_node_user::expr() const
7865
{
7866
  auto res = isl_ast_node_user_get_expr(get());
7867
  return manage(res);
7868
}
7869
 
7870
isl::ast_expr ast_node_user::get_expr() const
7871
{
7872
  return expr();
7873
}
7874
 
7875
inline std::ostream &operator<<(std::ostream &os, const ast_node_user &obj)
7876
{
7877
  char *str = isl_ast_node_to_str(obj.get());
7878
  if (!str) {
7879
    os.setstate(std::ios_base::badbit);
7880
    return os;
7881
  }
7882
  os << str;
7883
  free(str);
7884
  return os;
7885
}
7886
 
7887
// implementations for isl::basic_map
7888
basic_map manage(__isl_take isl_basic_map *ptr) {
7889
  return basic_map(ptr);
7890
}
7891
basic_map manage_copy(__isl_keep isl_basic_map *ptr) {
7892
  ptr = isl_basic_map_copy(ptr);
7893
  return basic_map(ptr);
7894
}
7895
 
7896
basic_map::basic_map()
7897
    : ptr(nullptr) {}
7898
 
7899
basic_map::basic_map(const basic_map &obj)
7900
    : ptr(nullptr)
7901
{
7902
  ptr = obj.copy();
7903
}
7904
 
7905
basic_map::basic_map(__isl_take isl_basic_map *ptr)
7906
    : ptr(ptr) {}
7907
 
7908
basic_map::basic_map(isl::ctx ctx, const std::string &str)
7909
{
7910
  auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str());
7911
  ptr = res;
7912
}
7913
 
7914
basic_map &basic_map::operator=(basic_map obj) {
7915
  std::swap(this->ptr, obj.ptr);
7916
  return *this;
7917
}
7918
 
7919
basic_map::~basic_map() {
7920
  if (ptr)
7921
    isl_basic_map_free(ptr);
7922
}
7923
 
7924
__isl_give isl_basic_map *basic_map::copy() const & {
7925
  return isl_basic_map_copy(ptr);
7926
}
7927
 
7928
__isl_keep isl_basic_map *basic_map::get() const {
7929
  return ptr;
7930
}
7931
 
7932
__isl_give isl_basic_map *basic_map::release() {
7933
  isl_basic_map *tmp = ptr;
7934
  ptr = nullptr;
7935
  return tmp;
7936
}
7937
 
7938
bool basic_map::is_null() const {
7939
  return ptr == nullptr;
7940
}
7941
 
7942
isl::ctx basic_map::ctx() const {
7943
  return isl::ctx(isl_basic_map_get_ctx(ptr));
7944
}
7945
 
7946
isl::map basic_map::add_constraint(const isl::constraint &constraint) const
7947
{
7948
  return isl::map(*this).add_constraint(constraint);
7949
}
7950
 
7951
isl::map basic_map::add_dims(isl::dim type, unsigned int n) const
7952
{
7953
  return isl::map(*this).add_dims(type, n);
7954
}
7955
 
7956
isl::basic_map basic_map::affine_hull() const
7957
{
7958
  auto res = isl_basic_map_affine_hull(copy());
7959
  return manage(res);
7960
}
7961
 
7962
isl::map basic_map::align_params(const isl::space &model) const
7963
{
7964
  return isl::map(*this).align_params(model);
7965
}
7966
 
7967
isl::basic_map basic_map::apply_domain(isl::basic_map bmap2) const
7968
{
7969
  auto res = isl_basic_map_apply_domain(copy(), bmap2.release());
7970
  return manage(res);
7971
}
7972
 
7973
isl::map basic_map::apply_domain(const isl::map &map2) const
7974
{
7975
  return isl::map(*this).apply_domain(map2);
7976
}
7977
 
7978
isl::union_map basic_map::apply_domain(const isl::union_map &umap2) const
7979
{
7980
  return isl::map(*this).apply_domain(umap2);
7981
}
7982
 
7983
isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const
7984
{
7985
  auto res = isl_basic_map_apply_range(copy(), bmap2.release());
7986
  return manage(res);
7987
}
7988
 
7989
isl::map basic_map::apply_range(const isl::map &map2) const
7990
{
7991
  return isl::map(*this).apply_range(map2);
7992
}
7993
 
7994
isl::union_map basic_map::apply_range(const isl::union_map &umap2) const
7995
{
7996
  return isl::map(*this).apply_range(umap2);
7997
}
7998
 
7999
isl::map basic_map::as_map() const
8000
{
8001
  return isl::map(*this).as_map();
8002
}
8003
 
8004
isl::multi_union_pw_aff basic_map::as_multi_union_pw_aff() const
8005
{
8006
  return isl::map(*this).as_multi_union_pw_aff();
8007
}
8008
 
8009
isl::pw_multi_aff basic_map::as_pw_multi_aff() const
8010
{
8011
  return isl::map(*this).as_pw_multi_aff();
8012
}
8013
 
8014
isl::union_pw_multi_aff basic_map::as_union_pw_multi_aff() const
8015
{
8016
  return isl::map(*this).as_union_pw_multi_aff();
8017
}
8018
 
8019
isl::basic_map_list basic_map::basic_map_list() const
8020
{
8021
  return isl::map(*this).basic_map_list();
8022
}
8023
 
8024
isl::set basic_map::bind_domain(const isl::multi_id &tuple) const
8025
{
8026
  return isl::map(*this).bind_domain(tuple);
8027
}
8028
 
8029
isl::set basic_map::bind_range(const isl::multi_id &tuple) const
8030
{
8031
  return isl::map(*this).bind_range(tuple);
8032
}
8033
 
8034
boolean basic_map::can_curry() const
8035
{
8036
  return isl::map(*this).can_curry();
8037
}
8038
 
8039
isl::map basic_map::coalesce() const
8040
{
8041
  return isl::map(*this).coalesce();
8042
}
8043
 
8044
isl::map basic_map::complement() const
8045
{
8046
  return isl::map(*this).complement();
8047
}
8048
 
8049
isl::union_map basic_map::compute_divs() const
8050
{
8051
  return isl::map(*this).compute_divs();
8052
}
8053
 
8054
isl::map basic_map::curry() const
8055
{
8056
  return isl::map(*this).curry();
8057
}
8058
 
8059
isl::basic_set basic_map::deltas() const
8060
{
8061
  auto res = isl_basic_map_deltas(copy());
8062
  return manage(res);
8063
}
8064
 
8065
isl::basic_map basic_map::detect_equalities() const
8066
{
8067
  auto res = isl_basic_map_detect_equalities(copy());
8068
  return manage(res);
8069
}
8070
 
8071
class size basic_map::dim(isl::dim type) const
8072
{
8073
  return isl::map(*this).dim(type);
8074
}
8075
 
8076
isl::pw_aff basic_map::dim_max(int pos) const
8077
{
8078
  return isl::map(*this).dim_max(pos);
8079
}
8080
 
8081
isl::pw_aff basic_map::dim_min(int pos) const
8082
{
8083
  return isl::map(*this).dim_min(pos);
8084
}
8085
 
8086
isl::basic_set basic_map::domain() const
8087
{
8088
  auto res = isl_basic_map_domain(copy());
8089
  return manage(res);
8090
}
8091
 
8092
isl::map basic_map::domain_factor_domain() const
8093
{
8094
  return isl::map(*this).domain_factor_domain();
8095
}
8096
 
8097
isl::map basic_map::domain_factor_range() const
8098
{
8099
  return isl::map(*this).domain_factor_range();
8100
}
8101
 
8102
isl::map basic_map::domain_map() const
8103
{
8104
  return isl::map(*this).domain_map();
8105
}
8106
 
8107
isl::union_pw_multi_aff basic_map::domain_map_union_pw_multi_aff() const
8108
{
8109
  return isl::map(*this).domain_map_union_pw_multi_aff();
8110
}
8111
 
8112
isl::map basic_map::domain_product(const isl::map &map2) const
8113
{
8114
  return isl::map(*this).domain_product(map2);
8115
}
8116
 
8117
isl::union_map basic_map::domain_product(const isl::union_map &umap2) const
8118
{
8119
  return isl::map(*this).domain_product(umap2);
8120
}
8121
 
8122
class size basic_map::domain_tuple_dim() const
8123
{
8124
  return isl::map(*this).domain_tuple_dim();
8125
}
8126
 
8127
isl::id basic_map::domain_tuple_id() const
8128
{
8129
  return isl::map(*this).domain_tuple_id();
8130
}
8131
 
8132
isl::map basic_map::eq_at(const isl::multi_pw_aff &mpa) const
8133
{
8134
  return isl::map(*this).eq_at(mpa);
8135
}
8136
 
8137
isl::union_map basic_map::eq_at(const isl::multi_union_pw_aff &mupa) const
8138
{
8139
  return isl::map(*this).eq_at(mupa);
8140
}
8141
 
8142
isl::basic_map basic_map::equal(isl::space space, unsigned int n_equal)
8143
{
8144
  auto res = isl_basic_map_equal(space.release(), n_equal);
8145
  return manage(res);
8146
}
8147
 
8148
isl::basic_map basic_map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const
8149
{
8150
  auto res = isl_basic_map_equate(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
8151
  return manage(res);
8152
}
8153
 
8154
boolean basic_map::every_map(const std::function<boolean(isl::map)> &test) const
8155
{
8156
  return isl::map(*this).every_map(test);
8157
}
8158
 
8159
isl::map basic_map::extract_map(const isl::space &space) const
8160
{
8161
  return isl::map(*this).extract_map(space);
8162
}
8163
 
8164
isl::map basic_map::factor_domain() const
8165
{
8166
  return isl::map(*this).factor_domain();
8167
}
8168
 
8169
isl::map basic_map::factor_range() const
8170
{
8171
  return isl::map(*this).factor_range();
8172
}
8173
 
8174
isl::basic_map basic_map::fix_si(isl::dim type, unsigned int pos, int value) const
8175
{
8176
  auto res = isl_basic_map_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
8177
  return manage(res);
8178
}
8179
 
8180
isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, isl::val v) const
8181
{
8182
  auto res = isl_basic_map_fix_val(copy(), static_cast<enum isl_dim_type>(type), pos, v.release());
8183
  return manage(res);
8184
}
8185
 
8186
isl::basic_map basic_map::fix_val(isl::dim type, unsigned int pos, long v) const
8187
{
8188
  return this->fix_val(type, pos, isl::val(ctx(), v));
8189
}
8190
 
8191
isl::union_map basic_map::fixed_power(const isl::val &exp) const
8192
{
8193
  return isl::map(*this).fixed_power(exp);
8194
}
8195
 
8196
isl::union_map basic_map::fixed_power(long exp) const
8197
{
8198
  return this->fixed_power(isl::val(ctx(), exp));
8199
}
8200
 
8201
isl::map basic_map::flat_range_product(const isl::map &map2) const
8202
{
8203
  return isl::map(*this).flat_range_product(map2);
8204
}
8205
 
8206
isl::union_map basic_map::flat_range_product(const isl::union_map &umap2) const
8207
{
8208
  return isl::map(*this).flat_range_product(umap2);
8209
}
8210
 
8211
isl::basic_map basic_map::flatten() const
8212
{
8213
  auto res = isl_basic_map_flatten(copy());
8214
  return manage(res);
8215
}
8216
 
8217
isl::basic_map basic_map::flatten_domain() const
8218
{
8219
  auto res = isl_basic_map_flatten_domain(copy());
8220
  return manage(res);
8221
}
8222
 
8223
isl::basic_map basic_map::flatten_range() const
8224
{
8225
  auto res = isl_basic_map_flatten_range(copy());
8226
  return manage(res);
8227
}
8228
 
8229
isl::map basic_map::floordiv_val(const isl::val &d) const
8230
{
8231
  return isl::map(*this).floordiv_val(d);
8232
}
8233
 
8234
isl::map basic_map::floordiv_val(long d) const
8235
{
8236
  return this->floordiv_val(isl::val(ctx(), d));
8237
}
8238
 
8239
stat basic_map::foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const
8240
{
8241
  return isl::map(*this).foreach_basic_map(fn);
8242
}
8243
 
8244
stat basic_map::foreach_map(const std::function<stat(isl::map)> &fn) const
8245
{
8246
  return isl::map(*this).foreach_map(fn);
8247
}
8248
 
8249
isl::basic_map basic_map::from_aff(isl::aff aff)
8250
{
8251
  auto res = isl_basic_map_from_aff(aff.release());
8252
  return manage(res);
8253
}
8254
 
8255
isl::basic_map basic_map::from_domain_and_range(isl::basic_set domain, isl::basic_set range)
8256
{
8257
  auto res = isl_basic_map_from_domain_and_range(domain.release(), range.release());
8258
  return manage(res);
8259
}
8260
 
8261
isl::basic_map basic_map::gist(isl::basic_map context) const
8262
{
8263
  auto res = isl_basic_map_gist(copy(), context.release());
8264
  return manage(res);
8265
}
8266
 
8267
isl::map basic_map::gist(const isl::map &context) const
8268
{
8269
  return isl::map(*this).gist(context);
8270
}
8271
 
8272
isl::union_map basic_map::gist(const isl::union_map &context) const
8273
{
8274
  return isl::map(*this).gist(context);
8275
}
8276
 
8277
isl::map basic_map::gist_domain(const isl::set &context) const
8278
{
8279
  return isl::map(*this).gist_domain(context);
8280
}
8281
 
8282
isl::union_map basic_map::gist_domain(const isl::union_set &uset) const
8283
{
8284
  return isl::map(*this).gist_domain(uset);
8285
}
8286
 
8287
isl::map basic_map::gist_params(const isl::set &context) const
8288
{
8289
  return isl::map(*this).gist_params(context);
8290
}
8291
 
8292
isl::union_map basic_map::gist_range(const isl::union_set &uset) const
8293
{
8294
  return isl::map(*this).gist_range(uset);
8295
}
8296
 
8297
boolean basic_map::has_domain_tuple_id() const
8298
{
8299
  return isl::map(*this).has_domain_tuple_id();
8300
}
8301
 
8302
boolean basic_map::has_equal_space(const isl::map &map2) const
8303
{
8304
  return isl::map(*this).has_equal_space(map2);
8305
}
8306
 
8307
boolean basic_map::has_range_tuple_id() const
8308
{
8309
  return isl::map(*this).has_range_tuple_id();
8310
}
8311
 
8312
boolean basic_map::has_tuple_id(isl::dim type) const
8313
{
8314
  return isl::map(*this).has_tuple_id(type);
8315
}
8316
 
8317
boolean basic_map::has_tuple_name(isl::dim type) const
8318
{
8319
  return isl::map(*this).has_tuple_name(type);
8320
}
8321
 
8322
isl::basic_map basic_map::intersect(isl::basic_map bmap2) const
8323
{
8324
  auto res = isl_basic_map_intersect(copy(), bmap2.release());
8325
  return manage(res);
8326
}
8327
 
8328
isl::map basic_map::intersect(const isl::map &map2) const
8329
{
8330
  return isl::map(*this).intersect(map2);
8331
}
8332
 
8333
isl::union_map basic_map::intersect(const isl::union_map &umap2) const
8334
{
8335
  return isl::map(*this).intersect(umap2);
8336
}
8337
 
8338
isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const
8339
{
8340
  auto res = isl_basic_map_intersect_domain(copy(), bset.release());
8341
  return manage(res);
8342
}
8343
 
8344
isl::map basic_map::intersect_domain(const isl::set &set) const
8345
{
8346
  return isl::map(*this).intersect_domain(set);
8347
}
8348
 
8349
isl::union_map basic_map::intersect_domain(const isl::space &space) const
8350
{
8351
  return isl::map(*this).intersect_domain(space);
8352
}
8353
 
8354
isl::union_map basic_map::intersect_domain(const isl::union_set &uset) const
8355
{
8356
  return isl::map(*this).intersect_domain(uset);
8357
}
8358
 
8359
isl::basic_map basic_map::intersect_domain(const isl::point &bset) const
8360
{
8361
  return this->intersect_domain(isl::basic_set(bset));
8362
}
8363
 
8364
isl::map basic_map::intersect_domain_factor_domain(const isl::map &factor) const
8365
{
8366
  return isl::map(*this).intersect_domain_factor_domain(factor);
8367
}
8368
 
8369
isl::union_map basic_map::intersect_domain_factor_domain(const isl::union_map &factor) const
8370
{
8371
  return isl::map(*this).intersect_domain_factor_domain(factor);
8372
}
8373
 
8374
isl::map basic_map::intersect_domain_factor_range(const isl::map &factor) const
8375
{
8376
  return isl::map(*this).intersect_domain_factor_range(factor);
8377
}
8378
 
8379
isl::union_map basic_map::intersect_domain_factor_range(const isl::union_map &factor) const
8380
{
8381
  return isl::map(*this).intersect_domain_factor_range(factor);
8382
}
8383
 
8384
isl::map basic_map::intersect_params(const isl::set &params) const
8385
{
8386
  return isl::map(*this).intersect_params(params);
8387
}
8388
 
8389
isl::basic_map basic_map::intersect_range(isl::basic_set bset) const
8390
{
8391
  auto res = isl_basic_map_intersect_range(copy(), bset.release());
8392
  return manage(res);
8393
}
8394
 
8395
isl::map basic_map::intersect_range(const isl::set &set) const
8396
{
8397
  return isl::map(*this).intersect_range(set);
8398
}
8399
 
8400
isl::union_map basic_map::intersect_range(const isl::space &space) const
8401
{
8402
  return isl::map(*this).intersect_range(space);
8403
}
8404
 
8405
isl::union_map basic_map::intersect_range(const isl::union_set &uset) const
8406
{
8407
  return isl::map(*this).intersect_range(uset);
8408
}
8409
 
8410
isl::basic_map basic_map::intersect_range(const isl::point &bset) const
8411
{
8412
  return this->intersect_range(isl::basic_set(bset));
8413
}
8414
 
8415
isl::map basic_map::intersect_range_factor_domain(const isl::map &factor) const
8416
{
8417
  return isl::map(*this).intersect_range_factor_domain(factor);
8418
}
8419
 
8420
isl::union_map basic_map::intersect_range_factor_domain(const isl::union_map &factor) const
8421
{
8422
  return isl::map(*this).intersect_range_factor_domain(factor);
8423
}
8424
 
8425
isl::map basic_map::intersect_range_factor_range(const isl::map &factor) const
8426
{
8427
  return isl::map(*this).intersect_range_factor_range(factor);
8428
}
8429
 
8430
isl::union_map basic_map::intersect_range_factor_range(const isl::union_map &factor) const
8431
{
8432
  return isl::map(*this).intersect_range_factor_range(factor);
8433
}
8434
 
8435
boolean basic_map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
8436
{
8437
  return isl::map(*this).involves_dims(type, first, n);
8438
}
8439
 
8440
boolean basic_map::is_bijective() const
8441
{
8442
  return isl::map(*this).is_bijective();
8443
}
8444
 
8445
boolean basic_map::is_disjoint(const isl::map &map2) const
8446
{
8447
  return isl::map(*this).is_disjoint(map2);
8448
}
8449
 
8450
boolean basic_map::is_disjoint(const isl::union_map &umap2) const
8451
{
8452
  return isl::map(*this).is_disjoint(umap2);
8453
}
8454
 
8455
boolean basic_map::is_empty() const
8456
{
8457
  auto res = isl_basic_map_is_empty(get());
8458
  return manage(res);
8459
}
8460
 
8461
boolean basic_map::is_equal(const isl::basic_map &bmap2) const
8462
{
8463
  auto res = isl_basic_map_is_equal(get(), bmap2.get());
8464
  return manage(res);
8465
}
8466
 
8467
boolean basic_map::is_equal(const isl::map &map2) const
8468
{
8469
  return isl::map(*this).is_equal(map2);
8470
}
8471
 
8472
boolean basic_map::is_equal(const isl::union_map &umap2) const
8473
{
8474
  return isl::map(*this).is_equal(umap2);
8475
}
8476
 
8477
boolean basic_map::is_injective() const
8478
{
8479
  return isl::map(*this).is_injective();
8480
}
8481
 
8482
boolean basic_map::is_single_valued() const
8483
{
8484
  return isl::map(*this).is_single_valued();
8485
}
8486
 
8487
boolean basic_map::is_strict_subset(const isl::map &map2) const
8488
{
8489
  return isl::map(*this).is_strict_subset(map2);
8490
}
8491
 
8492
boolean basic_map::is_strict_subset(const isl::union_map &umap2) const
8493
{
8494
  return isl::map(*this).is_strict_subset(umap2);
8495
}
8496
 
8497
boolean basic_map::is_subset(const isl::basic_map &bmap2) const
8498
{
8499
  auto res = isl_basic_map_is_subset(get(), bmap2.get());
8500
  return manage(res);
8501
}
8502
 
8503
boolean basic_map::is_subset(const isl::map &map2) const
8504
{
8505
  return isl::map(*this).is_subset(map2);
8506
}
8507
 
8508
boolean basic_map::is_subset(const isl::union_map &umap2) const
8509
{
8510
  return isl::map(*this).is_subset(umap2);
8511
}
8512
 
8513
boolean basic_map::isa_map() const
8514
{
8515
  return isl::map(*this).isa_map();
8516
}
8517
 
8518
isl::map basic_map::lex_ge_at(const isl::multi_pw_aff &mpa) const
8519
{
8520
  return isl::map(*this).lex_ge_at(mpa);
8521
}
8522
 
8523
isl::map basic_map::lex_gt_at(const isl::multi_pw_aff &mpa) const
8524
{
8525
  return isl::map(*this).lex_gt_at(mpa);
8526
}
8527
 
8528
isl::map basic_map::lex_le_at(const isl::multi_pw_aff &mpa) const
8529
{
8530
  return isl::map(*this).lex_le_at(mpa);
8531
}
8532
 
8533
isl::map basic_map::lex_lt_at(const isl::multi_pw_aff &mpa) const
8534
{
8535
  return isl::map(*this).lex_lt_at(mpa);
8536
}
8537
 
8538
isl::map basic_map::lexmax() const
8539
{
8540
  auto res = isl_basic_map_lexmax(copy());
8541
  return manage(res);
8542
}
8543
 
8544
isl::pw_multi_aff basic_map::lexmax_pw_multi_aff() const
8545
{
8546
  return isl::map(*this).lexmax_pw_multi_aff();
8547
}
8548
 
8549
isl::map basic_map::lexmin() const
8550
{
8551
  auto res = isl_basic_map_lexmin(copy());
8552
  return manage(res);
8553
}
8554
 
8555
isl::pw_multi_aff basic_map::lexmin_pw_multi_aff() const
8556
{
8557
  return isl::map(*this).lexmin_pw_multi_aff();
8558
}
8559
 
8560
isl::map basic_map::lower_bound(const isl::multi_pw_aff &lower) const
8561
{
8562
  return isl::map(*this).lower_bound(lower);
8563
}
8564
 
8565
isl::map basic_map::lower_bound_si(isl::dim type, unsigned int pos, int value) const
8566
{
8567
  return isl::map(*this).lower_bound_si(type, pos, value);
8568
}
8569
 
8570
isl::map_list basic_map::map_list() const
8571
{
8572
  return isl::map(*this).map_list();
8573
}
8574
 
8575
isl::multi_pw_aff basic_map::max_multi_pw_aff() const
8576
{
8577
  return isl::map(*this).max_multi_pw_aff();
8578
}
8579
 
8580
isl::multi_pw_aff basic_map::min_multi_pw_aff() const
8581
{
8582
  return isl::map(*this).min_multi_pw_aff();
8583
}
8584
 
8585
isl::map basic_map::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const
8586
{
8587
  return isl::map(*this).move_dims(dst_type, dst_pos, src_type, src_pos, n);
8588
}
8589
 
8590
class size basic_map::n_basic_map() const
8591
{
8592
  return isl::map(*this).n_basic_map();
8593
}
8594
 
8595
isl::map basic_map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const
8596
{
8597
  return isl::map(*this).order_lt(type1, pos1, type2, pos2);
8598
}
8599
 
8600
isl::set basic_map::params() const
8601
{
8602
  return isl::map(*this).params();
8603
}
8604
 
8605
isl::val basic_map::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
8606
{
8607
  auto res = isl_basic_map_plain_get_val_if_fixed(get(), static_cast<enum isl_dim_type>(type), pos);
8608
  return manage(res);
8609
}
8610
 
8611
isl::basic_map basic_map::polyhedral_hull() const
8612
{
8613
  return isl::map(*this).polyhedral_hull();
8614
}
8615
 
8616
isl::map basic_map::preimage_domain(const isl::multi_aff &ma) const
8617
{
8618
  return isl::map(*this).preimage_domain(ma);
8619
}
8620
 
8621
isl::map basic_map::preimage_domain(const isl::multi_pw_aff &mpa) const
8622
{
8623
  return isl::map(*this).preimage_domain(mpa);
8624
}
8625
 
8626
isl::map basic_map::preimage_domain(const isl::pw_multi_aff &pma) const
8627
{
8628
  return isl::map(*this).preimage_domain(pma);
8629
}
8630
 
8631
isl::union_map basic_map::preimage_domain(const isl::union_pw_multi_aff &upma) const
8632
{
8633
  return isl::map(*this).preimage_domain(upma);
8634
}
8635
 
8636
isl::map basic_map::preimage_range(const isl::multi_aff &ma) const
8637
{
8638
  return isl::map(*this).preimage_range(ma);
8639
}
8640
 
8641
isl::map basic_map::preimage_range(const isl::pw_multi_aff &pma) const
8642
{
8643
  return isl::map(*this).preimage_range(pma);
8644
}
8645
 
8646
isl::union_map basic_map::preimage_range(const isl::union_pw_multi_aff &upma) const
8647
{
8648
  return isl::map(*this).preimage_range(upma);
8649
}
8650
 
8651
isl::map basic_map::product(const isl::map &map2) const
8652
{
8653
  return isl::map(*this).product(map2);
8654
}
8655
 
8656
isl::union_map basic_map::product(const isl::union_map &umap2) const
8657
{
8658
  return isl::map(*this).product(umap2);
8659
}
8660
 
8661
isl::map basic_map::project_out(isl::dim type, unsigned int first, unsigned int n) const
8662
{
8663
  return isl::map(*this).project_out(type, first, n);
8664
}
8665
 
8666
isl::map basic_map::project_out_all_params() const
8667
{
8668
  return isl::map(*this).project_out_all_params();
8669
}
8670
 
8671
isl::set basic_map::range() const
8672
{
8673
  return isl::map(*this).range();
8674
}
8675
 
8676
isl::map basic_map::range_factor_domain() const
8677
{
8678
  return isl::map(*this).range_factor_domain();
8679
}
8680
 
8681
isl::map basic_map::range_factor_range() const
8682
{
8683
  return isl::map(*this).range_factor_range();
8684
}
8685
 
8686
isl::fixed_box basic_map::range_lattice_tile() const
8687
{
8688
  return isl::map(*this).range_lattice_tile();
8689
}
8690
 
8691
isl::map basic_map::range_map() const
8692
{
8693
  return isl::map(*this).range_map();
8694
}
8695
 
8696
isl::map basic_map::range_product(const isl::map &map2) const
8697
{
8698
  return isl::map(*this).range_product(map2);
8699
}
8700
 
8701
isl::union_map basic_map::range_product(const isl::union_map &umap2) const
8702
{
8703
  return isl::map(*this).range_product(umap2);
8704
}
8705
 
8706
isl::map basic_map::range_reverse() const
8707
{
8708
  return isl::map(*this).range_reverse();
8709
}
8710
 
8711
isl::fixed_box basic_map::range_simple_fixed_box_hull() const
8712
{
8713
  return isl::map(*this).range_simple_fixed_box_hull();
8714
}
8715
 
8716
class size basic_map::range_tuple_dim() const
8717
{
8718
  return isl::map(*this).range_tuple_dim();
8719
}
8720
 
8721
isl::id basic_map::range_tuple_id() const
8722
{
8723
  return isl::map(*this).range_tuple_id();
8724
}
8725
 
8726
isl::basic_map basic_map::reverse() const
8727
{
8728
  auto res = isl_basic_map_reverse(copy());
8729
  return manage(res);
8730
}
8731
 
8732
isl::basic_map basic_map::sample() const
8733
{
8734
  auto res = isl_basic_map_sample(copy());
8735
  return manage(res);
8736
}
8737
 
8738
isl::map basic_map::set_domain_tuple(const isl::id &id) const
8739
{
8740
  return isl::map(*this).set_domain_tuple(id);
8741
}
8742
 
8743
isl::map basic_map::set_domain_tuple(const std::string &id) const
8744
{
8745
  return this->set_domain_tuple(isl::id(ctx(), id));
8746
}
8747
 
8748
isl::map basic_map::set_range_tuple(const isl::id &id) const
8749
{
8750
  return isl::map(*this).set_range_tuple(id);
8751
}
8752
 
8753
isl::map basic_map::set_range_tuple(const std::string &id) const
8754
{
8755
  return this->set_range_tuple(isl::id(ctx(), id));
8756
}
8757
 
8758
isl::map basic_map::set_tuple_id(isl::dim type, const isl::id &id) const
8759
{
8760
  return isl::map(*this).set_tuple_id(type, id);
8761
}
8762
 
8763
isl::map basic_map::set_tuple_id(isl::dim type, const std::string &id) const
8764
{
8765
  return this->set_tuple_id(type, isl::id(ctx(), id));
8766
}
8767
 
8768
isl::space basic_map::space() const
8769
{
8770
  return isl::map(*this).space();
8771
}
8772
 
8773
isl::map basic_map::subtract(const isl::map &map2) const
8774
{
8775
  return isl::map(*this).subtract(map2);
8776
}
8777
 
8778
isl::union_map basic_map::subtract(const isl::union_map &umap2) const
8779
{
8780
  return isl::map(*this).subtract(umap2);
8781
}
8782
 
8783
isl::union_map basic_map::subtract_domain(const isl::union_set &dom) const
8784
{
8785
  return isl::map(*this).subtract_domain(dom);
8786
}
8787
 
8788
isl::union_map basic_map::subtract_range(const isl::union_set &dom) const
8789
{
8790
  return isl::map(*this).subtract_range(dom);
8791
}
8792
 
8793
isl::map basic_map::sum(const isl::map &map2) const
8794
{
8795
  return isl::map(*this).sum(map2);
8796
}
8797
 
8798
isl::basic_map_list basic_map::to_list() const
8799
{
8800
  auto res = isl_basic_map_to_list(copy());
8801
  return manage(res);
8802
}
8803
 
8804
isl::union_map basic_map::to_union_map() const
8805
{
8806
  return isl::map(*this).to_union_map();
8807
}
8808
 
8809
isl::id basic_map::tuple_id(isl::dim type) const
8810
{
8811
  return isl::map(*this).tuple_id(type);
8812
}
8813
 
8814
isl::map basic_map::uncurry() const
8815
{
8816
  return isl::map(*this).uncurry();
8817
}
8818
 
8819
isl::map basic_map::unite(isl::basic_map bmap2) const
8820
{
8821
  auto res = isl_basic_map_union(copy(), bmap2.release());
8822
  return manage(res);
8823
}
8824
 
8825
isl::map basic_map::unite(const isl::map &map2) const
8826
{
8827
  return isl::map(*this).unite(map2);
8828
}
8829
 
8830
isl::union_map basic_map::unite(const isl::union_map &umap2) const
8831
{
8832
  return isl::map(*this).unite(umap2);
8833
}
8834
 
8835
isl::basic_map basic_map::universe(isl::space space)
8836
{
8837
  auto res = isl_basic_map_universe(space.release());
8838
  return manage(res);
8839
}
8840
 
8841
isl::basic_map basic_map::unshifted_simple_hull() const
8842
{
8843
  return isl::map(*this).unshifted_simple_hull();
8844
}
8845
 
8846
isl::map basic_map::upper_bound(const isl::multi_pw_aff &upper) const
8847
{
8848
  return isl::map(*this).upper_bound(upper);
8849
}
8850
 
8851
isl::map basic_map::upper_bound_si(isl::dim type, unsigned int pos, int value) const
8852
{
8853
  return isl::map(*this).upper_bound_si(type, pos, value);
8854
}
8855
 
8856
isl::set basic_map::wrap() const
8857
{
8858
  return isl::map(*this).wrap();
8859
}
8860
 
8861
isl::map basic_map::zip() const
8862
{
8863
  return isl::map(*this).zip();
8864
}
8865
 
8866
inline std::ostream &operator<<(std::ostream &os, const basic_map &obj)
8867
{
8868
  char *str = isl_basic_map_to_str(obj.get());
8869
  if (!str) {
8870
    os.setstate(std::ios_base::badbit);
8871
    return os;
8872
  }
8873
  os << str;
8874
  free(str);
8875
  return os;
8876
}
8877
 
8878
// implementations for isl::basic_map_list
8879
basic_map_list manage(__isl_take isl_basic_map_list *ptr) {
8880
  return basic_map_list(ptr);
8881
}
8882
basic_map_list manage_copy(__isl_keep isl_basic_map_list *ptr) {
8883
  ptr = isl_basic_map_list_copy(ptr);
8884
  return basic_map_list(ptr);
8885
}
8886
 
8887
basic_map_list::basic_map_list()
8888
    : ptr(nullptr) {}
8889
 
8890
basic_map_list::basic_map_list(const basic_map_list &obj)
8891
    : ptr(nullptr)
8892
{
8893
  ptr = obj.copy();
8894
}
8895
 
8896
basic_map_list::basic_map_list(__isl_take isl_basic_map_list *ptr)
8897
    : ptr(ptr) {}
8898
 
8899
basic_map_list::basic_map_list(isl::ctx ctx, int n)
8900
{
8901
  auto res = isl_basic_map_list_alloc(ctx.release(), n);
8902
  ptr = res;
8903
}
8904
 
8905
basic_map_list::basic_map_list(isl::basic_map el)
8906
{
8907
  auto res = isl_basic_map_list_from_basic_map(el.release());
8908
  ptr = res;
8909
}
8910
 
8911
basic_map_list &basic_map_list::operator=(basic_map_list obj) {
8912
  std::swap(this->ptr, obj.ptr);
8913
  return *this;
8914
}
8915
 
8916
basic_map_list::~basic_map_list() {
8917
  if (ptr)
8918
    isl_basic_map_list_free(ptr);
8919
}
8920
 
8921
__isl_give isl_basic_map_list *basic_map_list::copy() const & {
8922
  return isl_basic_map_list_copy(ptr);
8923
}
8924
 
8925
__isl_keep isl_basic_map_list *basic_map_list::get() const {
8926
  return ptr;
8927
}
8928
 
8929
__isl_give isl_basic_map_list *basic_map_list::release() {
8930
  isl_basic_map_list *tmp = ptr;
8931
  ptr = nullptr;
8932
  return tmp;
8933
}
8934
 
8935
bool basic_map_list::is_null() const {
8936
  return ptr == nullptr;
8937
}
8938
 
8939
isl::ctx basic_map_list::ctx() const {
8940
  return isl::ctx(isl_basic_map_list_get_ctx(ptr));
8941
}
8942
 
8943
isl::basic_map_list basic_map_list::add(isl::basic_map el) const
8944
{
8945
  auto res = isl_basic_map_list_add(copy(), el.release());
8946
  return manage(res);
8947
}
8948
 
8949
isl::basic_map basic_map_list::at(int index) const
8950
{
8951
  auto res = isl_basic_map_list_get_at(get(), index);
8952
  return manage(res);
8953
}
8954
 
8955
isl::basic_map basic_map_list::get_at(int index) const
8956
{
8957
  return at(index);
8958
}
8959
 
8960
isl::basic_map_list basic_map_list::clear() const
8961
{
8962
  auto res = isl_basic_map_list_clear(copy());
8963
  return manage(res);
8964
}
8965
 
8966
isl::basic_map_list basic_map_list::concat(isl::basic_map_list list2) const
8967
{
8968
  auto res = isl_basic_map_list_concat(copy(), list2.release());
8969
  return manage(res);
8970
}
8971
 
8972
isl::basic_map_list basic_map_list::drop(unsigned int first, unsigned int n) const
8973
{
8974
  auto res = isl_basic_map_list_drop(copy(), first, n);
8975
  return manage(res);
8976
}
8977
 
8978
stat basic_map_list::foreach(const std::function<stat(isl::basic_map)> &fn) const
8979
{
8980
  struct fn_data {
8981
    std::function<stat(isl::basic_map)> func;
8982
  } fn_data = { fn };
8983
  auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
8984
    auto *data = static_cast<struct fn_data *>(arg_1);
8985
    auto ret = (data->func)(manage(arg_0));
8986
    return ret.release();
8987
  };
8988
  auto res = isl_basic_map_list_foreach(get(), fn_lambda, &fn_data);
8989
  return manage(res);
8990
}
8991
 
8992
isl::basic_map_list basic_map_list::insert(unsigned int pos, isl::basic_map el) const
8993
{
8994
  auto res = isl_basic_map_list_insert(copy(), pos, el.release());
8995
  return manage(res);
8996
}
8997
 
8998
class size basic_map_list::size() const
8999
{
9000
  auto res = isl_basic_map_list_size(get());
9001
  return manage(res);
9002
}
9003
 
9004
inline std::ostream &operator<<(std::ostream &os, const basic_map_list &obj)
9005
{
9006
  char *str = isl_basic_map_list_to_str(obj.get());
9007
  if (!str) {
9008
    os.setstate(std::ios_base::badbit);
9009
    return os;
9010
  }
9011
  os << str;
9012
  free(str);
9013
  return os;
9014
}
9015
 
9016
// implementations for isl::basic_set
9017
basic_set manage(__isl_take isl_basic_set *ptr) {
9018
  return basic_set(ptr);
9019
}
9020
basic_set manage_copy(__isl_keep isl_basic_set *ptr) {
9021
  ptr = isl_basic_set_copy(ptr);
9022
  return basic_set(ptr);
9023
}
9024
 
9025
basic_set::basic_set()
9026
    : ptr(nullptr) {}
9027
 
9028
basic_set::basic_set(const basic_set &obj)
9029
    : ptr(nullptr)
9030
{
9031
  ptr = obj.copy();
9032
}
9033
 
9034
basic_set::basic_set(__isl_take isl_basic_set *ptr)
9035
    : ptr(ptr) {}
9036
 
9037
basic_set::basic_set(isl::point pnt)
9038
{
9039
  auto res = isl_basic_set_from_point(pnt.release());
9040
  ptr = res;
9041
}
9042
 
9043
basic_set::basic_set(isl::ctx ctx, const std::string &str)
9044
{
9045
  auto res = isl_basic_set_read_from_str(ctx.release(), str.c_str());
9046
  ptr = res;
9047
}
9048
 
9049
basic_set &basic_set::operator=(basic_set obj) {
9050
  std::swap(this->ptr, obj.ptr);
9051
  return *this;
9052
}
9053
 
9054
basic_set::~basic_set() {
9055
  if (ptr)
9056
    isl_basic_set_free(ptr);
9057
}
9058
 
9059
__isl_give isl_basic_set *basic_set::copy() const & {
9060
  return isl_basic_set_copy(ptr);
9061
}
9062
 
9063
__isl_keep isl_basic_set *basic_set::get() const {
9064
  return ptr;
9065
}
9066
 
9067
__isl_give isl_basic_set *basic_set::release() {
9068
  isl_basic_set *tmp = ptr;
9069
  ptr = nullptr;
9070
  return tmp;
9071
}
9072
 
9073
bool basic_set::is_null() const {
9074
  return ptr == nullptr;
9075
}
9076
 
9077
isl::ctx basic_set::ctx() const {
9078
  return isl::ctx(isl_basic_set_get_ctx(ptr));
9079
}
9080
 
9081
isl::set basic_set::add_constraint(const isl::constraint &constraint) const
9082
{
9083
  return isl::set(*this).add_constraint(constraint);
9084
}
9085
 
9086
isl::set basic_set::add_dims(isl::dim type, unsigned int n) const
9087
{
9088
  return isl::set(*this).add_dims(type, n);
9089
}
9090
 
9091
isl::basic_set basic_set::affine_hull() const
9092
{
9093
  auto res = isl_basic_set_affine_hull(copy());
9094
  return manage(res);
9095
}
9096
 
9097
isl::set basic_set::align_params(const isl::space &model) const
9098
{
9099
  return isl::set(*this).align_params(model);
9100
}
9101
 
9102
isl::basic_set basic_set::apply(isl::basic_map bmap) const
9103
{
9104
  auto res = isl_basic_set_apply(copy(), bmap.release());
9105
  return manage(res);
9106
}
9107
 
9108
isl::set basic_set::apply(const isl::map &map) const
9109
{
9110
  return isl::set(*this).apply(map);
9111
}
9112
 
9113
isl::union_set basic_set::apply(const isl::union_map &umap) const
9114
{
9115
  return isl::set(*this).apply(umap);
9116
}
9117
 
9118
isl::pw_multi_aff basic_set::as_pw_multi_aff() const
9119
{
9120
  return isl::set(*this).as_pw_multi_aff();
9121
}
9122
 
9123
isl::set basic_set::as_set() const
9124
{
9125
  return isl::set(*this).as_set();
9126
}
9127
 
9128
isl::basic_set_list basic_set::basic_set_list() const
9129
{
9130
  return isl::set(*this).basic_set_list();
9131
}
9132
 
9133
isl::set basic_set::bind(const isl::multi_id &tuple) const
9134
{
9135
  return isl::set(*this).bind(tuple);
9136
}
9137
 
9138
isl::set basic_set::coalesce() const
9139
{
9140
  return isl::set(*this).coalesce();
9141
}
9142
 
9143
isl::set basic_set::complement() const
9144
{
9145
  return isl::set(*this).complement();
9146
}
9147
 
9148
isl::union_set basic_set::compute_divs() const
9149
{
9150
  return isl::set(*this).compute_divs();
9151
}
9152
 
9153
boolean basic_set::contains(const isl::space &space) const
9154
{
9155
  return isl::set(*this).contains(space);
9156
}
9157
 
9158
isl::basic_set basic_set::convex_hull() const
9159
{
9160
  return isl::set(*this).convex_hull();
9161
}
9162
 
9163
isl::basic_set basic_set::detect_equalities() const
9164
{
9165
  auto res = isl_basic_set_detect_equalities(copy());
9166
  return manage(res);
9167
}
9168
 
9169
class size basic_set::dim(isl::dim type) const
9170
{
9171
  auto res = isl_basic_set_dim(get(), static_cast<enum isl_dim_type>(type));
9172
  return manage(res);
9173
}
9174
 
9175
boolean basic_set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const
9176
{
9177
  return isl::set(*this).dim_has_any_lower_bound(type, pos);
9178
}
9179
 
9180
isl::id basic_set::dim_id(isl::dim type, unsigned int pos) const
9181
{
9182
  return isl::set(*this).dim_id(type, pos);
9183
}
9184
 
9185
isl::pw_aff basic_set::dim_max(int pos) const
9186
{
9187
  return isl::set(*this).dim_max(pos);
9188
}
9189
 
9190
isl::val basic_set::dim_max_val(int pos) const
9191
{
9192
  auto res = isl_basic_set_dim_max_val(copy(), pos);
9193
  return manage(res);
9194
}
9195
 
9196
isl::pw_aff basic_set::dim_min(int pos) const
9197
{
9198
  return isl::set(*this).dim_min(pos);
9199
}
9200
 
9201
isl::val basic_set::dim_min_val(int pos) const
9202
{
9203
  return isl::set(*this).dim_min_val(pos);
9204
}
9205
 
9206
std::string basic_set::dim_name(isl::dim type, unsigned int pos) const
9207
{
9208
  return isl::set(*this).dim_name(type, pos);
9209
}
9210
 
9211
isl::aff basic_set::div(int pos) const
9212
{
9213
  auto res = isl_basic_set_get_div(get(), pos);
9214
  return manage(res);
9215
}
9216
 
9217
isl::aff basic_set::get_div(int pos) const
9218
{
9219
  return div(pos);
9220
}
9221
 
9222
isl::set basic_set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const
9223
{
9224
  return isl::set(*this).drop_constraints_involving_dims(type, first, n);
9225
}
9226
 
9227
isl::set basic_set::eliminate(isl::dim type, unsigned int first, unsigned int n) const
9228
{
9229
  return isl::set(*this).eliminate(type, first, n);
9230
}
9231
 
9232
boolean basic_set::every_set(const std::function<boolean(isl::set)> &test) const
9233
{
9234
  return isl::set(*this).every_set(test);
9235
}
9236
 
9237
isl::set basic_set::extract_set(const isl::space &space) const
9238
{
9239
  return isl::set(*this).extract_set(space);
9240
}
9241
 
9242
int basic_set::find_dim_by_id(isl::dim type, const isl::id &id) const
9243
{
9244
  return isl::set(*this).find_dim_by_id(type, id);
9245
}
9246
 
9247
int basic_set::find_dim_by_id(isl::dim type, const std::string &id) const
9248
{
9249
  return this->find_dim_by_id(type, isl::id(ctx(), id));
9250
}
9251
 
9252
isl::basic_set basic_set::fix_si(isl::dim type, unsigned int pos, int value) const
9253
{
9254
  auto res = isl_basic_set_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
9255
  return manage(res);
9256
}
9257
 
9258
isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, isl::val v) const
9259
{
9260
  auto res = isl_basic_set_fix_val(copy(), static_cast<enum isl_dim_type>(type), pos, v.release());
9261
  return manage(res);
9262
}
9263
 
9264
isl::basic_set basic_set::fix_val(isl::dim type, unsigned int pos, long v) const
9265
{
9266
  return this->fix_val(type, pos, isl::val(ctx(), v));
9267
}
9268
 
9269
isl::basic_set basic_set::flatten() const
9270
{
9271
  auto res = isl_basic_set_flatten(copy());
9272
  return manage(res);
9273
}
9274
 
9275
stat basic_set::foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const
9276
{
9277
  return isl::set(*this).foreach_basic_set(fn);
9278
}
9279
 
9280
stat basic_set::foreach_point(const std::function<stat(isl::point)> &fn) const
9281
{
9282
  return isl::set(*this).foreach_point(fn);
9283
}
9284
 
9285
stat basic_set::foreach_set(const std::function<stat(isl::set)> &fn) const
9286
{
9287
  return isl::set(*this).foreach_set(fn);
9288
}
9289
 
9290
isl::basic_set basic_set::gist(isl::basic_set context) const
9291
{
9292
  auto res = isl_basic_set_gist(copy(), context.release());
9293
  return manage(res);
9294
}
9295
 
9296
isl::set basic_set::gist(const isl::set &context) const
9297
{
9298
  return isl::set(*this).gist(context);
9299
}
9300
 
9301
isl::union_set basic_set::gist(const isl::union_set &context) const
9302
{
9303
  return isl::set(*this).gist(context);
9304
}
9305
 
9306
isl::basic_set basic_set::gist(const isl::point &context) const
9307
{
9308
  return this->gist(isl::basic_set(context));
9309
}
9310
 
9311
isl::set basic_set::gist_params(const isl::set &context) const
9312
{
9313
  return isl::set(*this).gist_params(context);
9314
}
9315
 
9316
boolean basic_set::has_equal_space(const isl::set &set2) const
9317
{
9318
  return isl::set(*this).has_equal_space(set2);
9319
}
9320
 
9321
isl::map basic_set::identity() const
9322
{
9323
  return isl::set(*this).identity();
9324
}
9325
 
9326
isl::union_pw_multi_aff basic_set::identity_union_pw_multi_aff() const
9327
{
9328
  return isl::set(*this).identity_union_pw_multi_aff();
9329
}
9330
 
9331
isl::pw_aff basic_set::indicator_function() const
9332
{
9333
  return isl::set(*this).indicator_function();
9334
}
9335
 
9336
isl::set basic_set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
9337
{
9338
  return isl::set(*this).insert_dims(type, pos, n);
9339
}
9340
 
9341
isl::map basic_set::insert_domain(const isl::space &domain) const
9342
{
9343
  return isl::set(*this).insert_domain(domain);
9344
}
9345
 
9346
isl::basic_set basic_set::intersect(isl::basic_set bset2) const
9347
{
9348
  auto res = isl_basic_set_intersect(copy(), bset2.release());
9349
  return manage(res);
9350
}
9351
 
9352
isl::set basic_set::intersect(const isl::set &set2) const
9353
{
9354
  return isl::set(*this).intersect(set2);
9355
}
9356
 
9357
isl::union_set basic_set::intersect(const isl::union_set &uset2) const
9358
{
9359
  return isl::set(*this).intersect(uset2);
9360
}
9361
 
9362
isl::basic_set basic_set::intersect(const isl::point &bset2) const
9363
{
9364
  return this->intersect(isl::basic_set(bset2));
9365
}
9366
 
9367
isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const
9368
{
9369
  auto res = isl_basic_set_intersect_params(copy(), bset2.release());
9370
  return manage(res);
9371
}
9372
 
9373
isl::set basic_set::intersect_params(const isl::set &params) const
9374
{
9375
  return isl::set(*this).intersect_params(params);
9376
}
9377
 
9378
isl::basic_set basic_set::intersect_params(const isl::point &bset2) const
9379
{
9380
  return this->intersect_params(isl::basic_set(bset2));
9381
}
9382
 
9383
boolean basic_set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
9384
{
9385
  return isl::set(*this).involves_dims(type, first, n);
9386
}
9387
 
9388
boolean basic_set::involves_locals() const
9389
{
9390
  return isl::set(*this).involves_locals();
9391
}
9392
 
9393
boolean basic_set::is_bounded() const
9394
{
9395
  auto res = isl_basic_set_is_bounded(get());
9396
  return manage(res);
9397
}
9398
 
9399
boolean basic_set::is_disjoint(const isl::set &set2) const
9400
{
9401
  return isl::set(*this).is_disjoint(set2);
9402
}
9403
 
9404
boolean basic_set::is_disjoint(const isl::union_set &uset2) const
9405
{
9406
  return isl::set(*this).is_disjoint(uset2);
9407
}
9408
 
9409
boolean basic_set::is_empty() const
9410
{
9411
  auto res = isl_basic_set_is_empty(get());
9412
  return manage(res);
9413
}
9414
 
9415
boolean basic_set::is_equal(const isl::basic_set &bset2) const
9416
{
9417
  auto res = isl_basic_set_is_equal(get(), bset2.get());
9418
  return manage(res);
9419
}
9420
 
9421
boolean basic_set::is_equal(const isl::set &set2) const
9422
{
9423
  return isl::set(*this).is_equal(set2);
9424
}
9425
 
9426
boolean basic_set::is_equal(const isl::union_set &uset2) const
9427
{
9428
  return isl::set(*this).is_equal(uset2);
9429
}
9430
 
9431
boolean basic_set::is_equal(const isl::point &bset2) const
9432
{
9433
  return this->is_equal(isl::basic_set(bset2));
9434
}
9435
 
9436
boolean basic_set::is_params() const
9437
{
9438
  return isl::set(*this).is_params();
9439
}
9440
 
9441
boolean basic_set::is_singleton() const
9442
{
9443
  return isl::set(*this).is_singleton();
9444
}
9445
 
9446
boolean basic_set::is_strict_subset(const isl::set &set2) const
9447
{
9448
  return isl::set(*this).is_strict_subset(set2);
9449
}
9450
 
9451
boolean basic_set::is_strict_subset(const isl::union_set &uset2) const
9452
{
9453
  return isl::set(*this).is_strict_subset(uset2);
9454
}
9455
 
9456
boolean basic_set::is_subset(const isl::basic_set &bset2) const
9457
{
9458
  auto res = isl_basic_set_is_subset(get(), bset2.get());
9459
  return manage(res);
9460
}
9461
 
9462
boolean basic_set::is_subset(const isl::set &set2) const
9463
{
9464
  return isl::set(*this).is_subset(set2);
9465
}
9466
 
9467
boolean basic_set::is_subset(const isl::union_set &uset2) const
9468
{
9469
  return isl::set(*this).is_subset(uset2);
9470
}
9471
 
9472
boolean basic_set::is_subset(const isl::point &bset2) const
9473
{
9474
  return this->is_subset(isl::basic_set(bset2));
9475
}
9476
 
9477
boolean basic_set::is_wrapping() const
9478
{
9479
  auto res = isl_basic_set_is_wrapping(get());
9480
  return manage(res);
9481
}
9482
 
9483
boolean basic_set::isa_set() const
9484
{
9485
  return isl::set(*this).isa_set();
9486
}
9487
 
9488
isl::set basic_set::lexmax() const
9489
{
9490
  auto res = isl_basic_set_lexmax(copy());
9491
  return manage(res);
9492
}
9493
 
9494
isl::pw_multi_aff basic_set::lexmax_pw_multi_aff() const
9495
{
9496
  return isl::set(*this).lexmax_pw_multi_aff();
9497
}
9498
 
9499
isl::set basic_set::lexmin() const
9500
{
9501
  auto res = isl_basic_set_lexmin(copy());
9502
  return manage(res);
9503
}
9504
 
9505
isl::pw_multi_aff basic_set::lexmin_pw_multi_aff() const
9506
{
9507
  return isl::set(*this).lexmin_pw_multi_aff();
9508
}
9509
 
9510
isl::set basic_set::lower_bound(const isl::multi_pw_aff &lower) const
9511
{
9512
  return isl::set(*this).lower_bound(lower);
9513
}
9514
 
9515
isl::set basic_set::lower_bound(const isl::multi_val &lower) const
9516
{
9517
  return isl::set(*this).lower_bound(lower);
9518
}
9519
 
9520
isl::set basic_set::lower_bound_si(isl::dim type, unsigned int pos, int value) const
9521
{
9522
  return isl::set(*this).lower_bound_si(type, pos, value);
9523
}
9524
 
9525
isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
9526
{
9527
  return isl::set(*this).lower_bound_val(type, pos, value);
9528
}
9529
 
9530
isl::set basic_set::lower_bound_val(isl::dim type, unsigned int pos, long value) const
9531
{
9532
  return this->lower_bound_val(type, pos, isl::val(ctx(), value));
9533
}
9534
 
9535
isl::multi_pw_aff basic_set::max_multi_pw_aff() const
9536
{
9537
  return isl::set(*this).max_multi_pw_aff();
9538
}
9539
 
9540
isl::val basic_set::max_val(const isl::aff &obj) const
9541
{
9542
  return isl::set(*this).max_val(obj);
9543
}
9544
 
9545
isl::multi_pw_aff basic_set::min_multi_pw_aff() const
9546
{
9547
  return isl::set(*this).min_multi_pw_aff();
9548
}
9549
 
9550
isl::val basic_set::min_val(const isl::aff &obj) const
9551
{
9552
  return isl::set(*this).min_val(obj);
9553
}
9554
 
9555
class size basic_set::n_basic_set() const
9556
{
9557
  return isl::set(*this).n_basic_set();
9558
}
9559
 
9560
isl::basic_set basic_set::params() const
9561
{
9562
  auto res = isl_basic_set_params(copy());
9563
  return manage(res);
9564
}
9565
 
9566
isl::val basic_set::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
9567
{
9568
  return isl::set(*this).plain_get_val_if_fixed(type, pos);
9569
}
9570
 
9571
isl::multi_val basic_set::plain_multi_val_if_fixed() const
9572
{
9573
  return isl::set(*this).plain_multi_val_if_fixed();
9574
}
9575
 
9576
isl::basic_set basic_set::polyhedral_hull() const
9577
{
9578
  return isl::set(*this).polyhedral_hull();
9579
}
9580
 
9581
isl::set basic_set::preimage(const isl::multi_aff &ma) const
9582
{
9583
  return isl::set(*this).preimage(ma);
9584
}
9585
 
9586
isl::set basic_set::preimage(const isl::multi_pw_aff &mpa) const
9587
{
9588
  return isl::set(*this).preimage(mpa);
9589
}
9590
 
9591
isl::set basic_set::preimage(const isl::pw_multi_aff &pma) const
9592
{
9593
  return isl::set(*this).preimage(pma);
9594
}
9595
 
9596
isl::union_set basic_set::preimage(const isl::union_pw_multi_aff &upma) const
9597
{
9598
  return isl::set(*this).preimage(upma);
9599
}
9600
 
9601
isl::set basic_set::product(const isl::set &set2) const
9602
{
9603
  return isl::set(*this).product(set2);
9604
}
9605
 
9606
isl::basic_set basic_set::project_out(isl::dim type, unsigned int first, unsigned int n) const
9607
{
9608
  auto res = isl_basic_set_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
9609
  return manage(res);
9610
}
9611
 
9612
isl::set basic_set::project_out_all_params() const
9613
{
9614
  return isl::set(*this).project_out_all_params();
9615
}
9616
 
9617
isl::set basic_set::project_out_param(const isl::id &id) const
9618
{
9619
  return isl::set(*this).project_out_param(id);
9620
}
9621
 
9622
isl::set basic_set::project_out_param(const std::string &id) const
9623
{
9624
  return this->project_out_param(isl::id(ctx(), id));
9625
}
9626
 
9627
isl::set basic_set::project_out_param(const isl::id_list &list) const
9628
{
9629
  return isl::set(*this).project_out_param(list);
9630
}
9631
 
9632
isl::pw_multi_aff basic_set::pw_multi_aff_on_domain(const isl::multi_val &mv) const
9633
{
9634
  return isl::set(*this).pw_multi_aff_on_domain(mv);
9635
}
9636
 
9637
isl::set basic_set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
9638
{
9639
  return isl::set(*this).remove_dims(type, first, n);
9640
}
9641
 
9642
isl::set basic_set::remove_divs() const
9643
{
9644
  return isl::set(*this).remove_divs();
9645
}
9646
 
9647
isl::set basic_set::remove_redundancies() const
9648
{
9649
  return isl::set(*this).remove_redundancies();
9650
}
9651
 
9652
isl::set basic_set::reset_tuple_id() const
9653
{
9654
  return isl::set(*this).reset_tuple_id();
9655
}
9656
 
9657
isl::basic_set basic_set::sample() const
9658
{
9659
  auto res = isl_basic_set_sample(copy());
9660
  return manage(res);
9661
}
9662
 
9663
isl::point basic_set::sample_point() const
9664
{
9665
  auto res = isl_basic_set_sample_point(copy());
9666
  return manage(res);
9667
}
9668
 
9669
isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const
9670
{
9671
  return isl::set(*this).set_dim_id(type, pos, id);
9672
}
9673
 
9674
isl::set basic_set::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
9675
{
9676
  return this->set_dim_id(type, pos, isl::id(ctx(), id));
9677
}
9678
 
9679
isl::set_list basic_set::set_list() const
9680
{
9681
  return isl::set(*this).set_list();
9682
}
9683
 
9684
isl::set basic_set::set_tuple_id(const isl::id &id) const
9685
{
9686
  return isl::set(*this).set_tuple_id(id);
9687
}
9688
 
9689
isl::set basic_set::set_tuple_id(const std::string &id) const
9690
{
9691
  return this->set_tuple_id(isl::id(ctx(), id));
9692
}
9693
 
9694
isl::fixed_box basic_set::simple_fixed_box_hull() const
9695
{
9696
  return isl::set(*this).simple_fixed_box_hull();
9697
}
9698
 
9699
isl::basic_set basic_set::simple_hull() const
9700
{
9701
  return isl::set(*this).simple_hull();
9702
}
9703
 
9704
isl::space basic_set::space() const
9705
{
9706
  auto res = isl_basic_set_get_space(get());
9707
  return manage(res);
9708
}
9709
 
9710
isl::space basic_set::get_space() const
9711
{
9712
  return space();
9713
}
9714
 
9715
isl::val basic_set::stride(int pos) const
9716
{
9717
  return isl::set(*this).stride(pos);
9718
}
9719
 
9720
isl::set basic_set::subtract(const isl::set &set2) const
9721
{
9722
  return isl::set(*this).subtract(set2);
9723
}
9724
 
9725
isl::union_set basic_set::subtract(const isl::union_set &uset2) const
9726
{
9727
  return isl::set(*this).subtract(uset2);
9728
}
9729
 
9730
isl::basic_set_list basic_set::to_list() const
9731
{
9732
  auto res = isl_basic_set_to_list(copy());
9733
  return manage(res);
9734
}
9735
 
9736
isl::set basic_set::to_set() const
9737
{
9738
  auto res = isl_basic_set_to_set(copy());
9739
  return manage(res);
9740
}
9741
 
9742
isl::union_set basic_set::to_union_set() const
9743
{
9744
  return isl::set(*this).to_union_set();
9745
}
9746
 
9747
isl::map basic_set::translation() const
9748
{
9749
  return isl::set(*this).translation();
9750
}
9751
 
9752
class size basic_set::tuple_dim() const
9753
{
9754
  return isl::set(*this).tuple_dim();
9755
}
9756
 
9757
isl::id basic_set::tuple_id() const
9758
{
9759
  return isl::set(*this).tuple_id();
9760
}
9761
 
9762
std::string basic_set::tuple_name() const
9763
{
9764
  return isl::set(*this).tuple_name();
9765
}
9766
 
9767
isl::set basic_set::unbind_params(const isl::multi_id &tuple) const
9768
{
9769
  return isl::set(*this).unbind_params(tuple);
9770
}
9771
 
9772
isl::map basic_set::unbind_params_insert_domain(const isl::multi_id &domain) const
9773
{
9774
  return isl::set(*this).unbind_params_insert_domain(domain);
9775
}
9776
 
9777
isl::set basic_set::unite(isl::basic_set bset2) const
9778
{
9779
  auto res = isl_basic_set_union(copy(), bset2.release());
9780
  return manage(res);
9781
}
9782
 
9783
isl::set basic_set::unite(const isl::set &set2) const
9784
{
9785
  return isl::set(*this).unite(set2);
9786
}
9787
 
9788
isl::union_set basic_set::unite(const isl::union_set &uset2) const
9789
{
9790
  return isl::set(*this).unite(uset2);
9791
}
9792
 
9793
isl::set basic_set::unite(const isl::point &bset2) const
9794
{
9795
  return this->unite(isl::basic_set(bset2));
9796
}
9797
 
9798
isl::basic_set basic_set::universe(isl::space space)
9799
{
9800
  auto res = isl_basic_set_universe(space.release());
9801
  return manage(res);
9802
}
9803
 
9804
isl::basic_set basic_set::unshifted_simple_hull() const
9805
{
9806
  return isl::set(*this).unshifted_simple_hull();
9807
}
9808
 
9809
isl::map basic_set::unwrap() const
9810
{
9811
  return isl::set(*this).unwrap();
9812
}
9813
 
9814
isl::set basic_set::upper_bound(const isl::multi_pw_aff &upper) const
9815
{
9816
  return isl::set(*this).upper_bound(upper);
9817
}
9818
 
9819
isl::set basic_set::upper_bound(const isl::multi_val &upper) const
9820
{
9821
  return isl::set(*this).upper_bound(upper);
9822
}
9823
 
9824
isl::set basic_set::upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
9825
{
9826
  return isl::set(*this).upper_bound_val(type, pos, value);
9827
}
9828
 
9829
isl::set basic_set::upper_bound_val(isl::dim type, unsigned int pos, long value) const
9830
{
9831
  return this->upper_bound_val(type, pos, isl::val(ctx(), value));
9832
}
9833
 
9834
inline std::ostream &operator<<(std::ostream &os, const basic_set &obj)
9835
{
9836
  char *str = isl_basic_set_to_str(obj.get());
9837
  if (!str) {
9838
    os.setstate(std::ios_base::badbit);
9839
    return os;
9840
  }
9841
  os << str;
9842
  free(str);
9843
  return os;
9844
}
9845
 
9846
// implementations for isl::basic_set_list
9847
basic_set_list manage(__isl_take isl_basic_set_list *ptr) {
9848
  return basic_set_list(ptr);
9849
}
9850
basic_set_list manage_copy(__isl_keep isl_basic_set_list *ptr) {
9851
  ptr = isl_basic_set_list_copy(ptr);
9852
  return basic_set_list(ptr);
9853
}
9854
 
9855
basic_set_list::basic_set_list()
9856
    : ptr(nullptr) {}
9857
 
9858
basic_set_list::basic_set_list(const basic_set_list &obj)
9859
    : ptr(nullptr)
9860
{
9861
  ptr = obj.copy();
9862
}
9863
 
9864
basic_set_list::basic_set_list(__isl_take isl_basic_set_list *ptr)
9865
    : ptr(ptr) {}
9866
 
9867
basic_set_list::basic_set_list(isl::ctx ctx, int n)
9868
{
9869
  auto res = isl_basic_set_list_alloc(ctx.release(), n);
9870
  ptr = res;
9871
}
9872
 
9873
basic_set_list::basic_set_list(isl::basic_set el)
9874
{
9875
  auto res = isl_basic_set_list_from_basic_set(el.release());
9876
  ptr = res;
9877
}
9878
 
9879
basic_set_list &basic_set_list::operator=(basic_set_list obj) {
9880
  std::swap(this->ptr, obj.ptr);
9881
  return *this;
9882
}
9883
 
9884
basic_set_list::~basic_set_list() {
9885
  if (ptr)
9886
    isl_basic_set_list_free(ptr);
9887
}
9888
 
9889
__isl_give isl_basic_set_list *basic_set_list::copy() const & {
9890
  return isl_basic_set_list_copy(ptr);
9891
}
9892
 
9893
__isl_keep isl_basic_set_list *basic_set_list::get() const {
9894
  return ptr;
9895
}
9896
 
9897
__isl_give isl_basic_set_list *basic_set_list::release() {
9898
  isl_basic_set_list *tmp = ptr;
9899
  ptr = nullptr;
9900
  return tmp;
9901
}
9902
 
9903
bool basic_set_list::is_null() const {
9904
  return ptr == nullptr;
9905
}
9906
 
9907
isl::ctx basic_set_list::ctx() const {
9908
  return isl::ctx(isl_basic_set_list_get_ctx(ptr));
9909
}
9910
 
9911
isl::basic_set_list basic_set_list::add(isl::basic_set el) const
9912
{
9913
  auto res = isl_basic_set_list_add(copy(), el.release());
9914
  return manage(res);
9915
}
9916
 
9917
isl::basic_set basic_set_list::at(int index) const
9918
{
9919
  auto res = isl_basic_set_list_get_at(get(), index);
9920
  return manage(res);
9921
}
9922
 
9923
isl::basic_set basic_set_list::get_at(int index) const
9924
{
9925
  return at(index);
9926
}
9927
 
9928
isl::basic_set_list basic_set_list::clear() const
9929
{
9930
  auto res = isl_basic_set_list_clear(copy());
9931
  return manage(res);
9932
}
9933
 
9934
isl::basic_set_list basic_set_list::concat(isl::basic_set_list list2) const
9935
{
9936
  auto res = isl_basic_set_list_concat(copy(), list2.release());
9937
  return manage(res);
9938
}
9939
 
9940
isl::basic_set_list basic_set_list::drop(unsigned int first, unsigned int n) const
9941
{
9942
  auto res = isl_basic_set_list_drop(copy(), first, n);
9943
  return manage(res);
9944
}
9945
 
9946
stat basic_set_list::foreach(const std::function<stat(isl::basic_set)> &fn) const
9947
{
9948
  struct fn_data {
9949
    std::function<stat(isl::basic_set)> func;
9950
  } fn_data = { fn };
9951
  auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat {
9952
    auto *data = static_cast<struct fn_data *>(arg_1);
9953
    auto ret = (data->func)(manage(arg_0));
9954
    return ret.release();
9955
  };
9956
  auto res = isl_basic_set_list_foreach(get(), fn_lambda, &fn_data);
9957
  return manage(res);
9958
}
9959
 
9960
isl::basic_set_list basic_set_list::insert(unsigned int pos, isl::basic_set el) const
9961
{
9962
  auto res = isl_basic_set_list_insert(copy(), pos, el.release());
9963
  return manage(res);
9964
}
9965
 
9966
class size basic_set_list::size() const
9967
{
9968
  auto res = isl_basic_set_list_size(get());
9969
  return manage(res);
9970
}
9971
 
9972
inline std::ostream &operator<<(std::ostream &os, const basic_set_list &obj)
9973
{
9974
  char *str = isl_basic_set_list_to_str(obj.get());
9975
  if (!str) {
9976
    os.setstate(std::ios_base::badbit);
9977
    return os;
9978
  }
9979
  os << str;
9980
  free(str);
9981
  return os;
9982
}
9983
 
9984
// implementations for isl::constraint
9985
constraint manage(__isl_take isl_constraint *ptr) {
9986
  return constraint(ptr);
9987
}
9988
constraint manage_copy(__isl_keep isl_constraint *ptr) {
9989
  ptr = isl_constraint_copy(ptr);
9990
  return constraint(ptr);
9991
}
9992
 
9993
constraint::constraint()
9994
    : ptr(nullptr) {}
9995
 
9996
constraint::constraint(const constraint &obj)
9997
    : ptr(nullptr)
9998
{
9999
  ptr = obj.copy();
10000
}
10001
 
10002
constraint::constraint(__isl_take isl_constraint *ptr)
10003
    : ptr(ptr) {}
10004
 
10005
constraint &constraint::operator=(constraint obj) {
10006
  std::swap(this->ptr, obj.ptr);
10007
  return *this;
10008
}
10009
 
10010
constraint::~constraint() {
10011
  if (ptr)
10012
    isl_constraint_free(ptr);
10013
}
10014
 
10015
__isl_give isl_constraint *constraint::copy() const & {
10016
  return isl_constraint_copy(ptr);
10017
}
10018
 
10019
__isl_keep isl_constraint *constraint::get() const {
10020
  return ptr;
10021
}
10022
 
10023
__isl_give isl_constraint *constraint::release() {
10024
  isl_constraint *tmp = ptr;
10025
  ptr = nullptr;
10026
  return tmp;
10027
}
10028
 
10029
bool constraint::is_null() const {
10030
  return ptr == nullptr;
10031
}
10032
 
10033
isl::ctx constraint::ctx() const {
10034
  return isl::ctx(isl_constraint_get_ctx(ptr));
10035
}
10036
 
10037
isl::constraint constraint::alloc_equality(isl::local_space ls)
10038
{
10039
  auto res = isl_constraint_alloc_equality(ls.release());
10040
  return manage(res);
10041
}
10042
 
10043
isl::constraint constraint::alloc_inequality(isl::local_space ls)
10044
{
10045
  auto res = isl_constraint_alloc_inequality(ls.release());
10046
  return manage(res);
10047
}
10048
 
10049
isl::constraint constraint::set_coefficient_si(isl::dim type, int pos, int v) const
10050
{
10051
  auto res = isl_constraint_set_coefficient_si(copy(), static_cast<enum isl_dim_type>(type), pos, v);
10052
  return manage(res);
10053
}
10054
 
10055
isl::constraint constraint::set_constant_si(int v) const
10056
{
10057
  auto res = isl_constraint_set_constant_si(copy(), v);
10058
  return manage(res);
10059
}
10060
 
10061
isl::constraint constraint::set_constant_val(isl::val v) const
10062
{
10063
  auto res = isl_constraint_set_constant_val(copy(), v.release());
10064
  return manage(res);
10065
}
10066
 
10067
isl::constraint constraint::set_constant_val(long v) const
10068
{
10069
  return this->set_constant_val(isl::val(ctx(), v));
10070
}
10071
 
10072
// implementations for isl::fixed_box
10073
fixed_box manage(__isl_take isl_fixed_box *ptr) {
10074
  return fixed_box(ptr);
10075
}
10076
fixed_box manage_copy(__isl_keep isl_fixed_box *ptr) {
10077
  ptr = isl_fixed_box_copy(ptr);
10078
  return fixed_box(ptr);
10079
}
10080
 
10081
fixed_box::fixed_box()
10082
    : ptr(nullptr) {}
10083
 
10084
fixed_box::fixed_box(const fixed_box &obj)
10085
    : ptr(nullptr)
10086
{
10087
  ptr = obj.copy();
10088
}
10089
 
10090
fixed_box::fixed_box(__isl_take isl_fixed_box *ptr)
10091
    : ptr(ptr) {}
10092
 
10093
fixed_box &fixed_box::operator=(fixed_box obj) {
10094
  std::swap(this->ptr, obj.ptr);
10095
  return *this;
10096
}
10097
 
10098
fixed_box::~fixed_box() {
10099
  if (ptr)
10100
    isl_fixed_box_free(ptr);
10101
}
10102
 
10103
__isl_give isl_fixed_box *fixed_box::copy() const & {
10104
  return isl_fixed_box_copy(ptr);
10105
}
10106
 
10107
__isl_keep isl_fixed_box *fixed_box::get() const {
10108
  return ptr;
10109
}
10110
 
10111
__isl_give isl_fixed_box *fixed_box::release() {
10112
  isl_fixed_box *tmp = ptr;
10113
  ptr = nullptr;
10114
  return tmp;
10115
}
10116
 
10117
bool fixed_box::is_null() const {
10118
  return ptr == nullptr;
10119
}
10120
 
10121
isl::ctx fixed_box::ctx() const {
10122
  return isl::ctx(isl_fixed_box_get_ctx(ptr));
10123
}
10124
 
10125
boolean fixed_box::is_valid() const
10126
{
10127
  auto res = isl_fixed_box_is_valid(get());
10128
  return manage(res);
10129
}
10130
 
10131
isl::multi_aff fixed_box::offset() const
10132
{
10133
  auto res = isl_fixed_box_get_offset(get());
10134
  return manage(res);
10135
}
10136
 
10137
isl::multi_aff fixed_box::get_offset() const
10138
{
10139
  return offset();
10140
}
10141
 
10142
isl::multi_val fixed_box::size() const
10143
{
10144
  auto res = isl_fixed_box_get_size(get());
10145
  return manage(res);
10146
}
10147
 
10148
isl::multi_val fixed_box::get_size() const
10149
{
10150
  return size();
10151
}
10152
 
10153
isl::space fixed_box::space() const
10154
{
10155
  auto res = isl_fixed_box_get_space(get());
10156
  return manage(res);
10157
}
10158
 
10159
isl::space fixed_box::get_space() const
10160
{
10161
  return space();
10162
}
10163
 
10164
inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj)
10165
{
10166
  char *str = isl_fixed_box_to_str(obj.get());
10167
  if (!str) {
10168
    os.setstate(std::ios_base::badbit);
10169
    return os;
10170
  }
10171
  os << str;
10172
  free(str);
10173
  return os;
10174
}
10175
 
10176
// implementations for isl::id
10177
id manage(__isl_take isl_id *ptr) {
10178
  return id(ptr);
10179
}
10180
id manage_copy(__isl_keep isl_id *ptr) {
10181
  ptr = isl_id_copy(ptr);
10182
  return id(ptr);
10183
}
10184
 
10185
id::id()
10186
    : ptr(nullptr) {}
10187
 
10188
id::id(const id &obj)
10189
    : ptr(nullptr)
10190
{
10191
  ptr = obj.copy();
10192
}
10193
 
10194
id::id(__isl_take isl_id *ptr)
10195
    : ptr(ptr) {}
10196
 
10197
id::id(isl::ctx ctx, const std::string &str)
10198
{
10199
  auto res = isl_id_read_from_str(ctx.release(), str.c_str());
10200
  ptr = res;
10201
}
10202
 
10203
id &id::operator=(id obj) {
10204
  std::swap(this->ptr, obj.ptr);
10205
  return *this;
10206
}
10207
 
10208
id::~id() {
10209
  if (ptr)
10210
    isl_id_free(ptr);
10211
}
10212
 
10213
__isl_give isl_id *id::copy() const & {
10214
  return isl_id_copy(ptr);
10215
}
10216
 
10217
__isl_keep isl_id *id::get() const {
10218
  return ptr;
10219
}
10220
 
10221
__isl_give isl_id *id::release() {
10222
  isl_id *tmp = ptr;
10223
  ptr = nullptr;
10224
  return tmp;
10225
}
10226
 
10227
bool id::is_null() const {
10228
  return ptr == nullptr;
10229
}
10230
 
10231
isl::ctx id::ctx() const {
10232
  return isl::ctx(isl_id_get_ctx(ptr));
10233
}
10234
 
10235
isl::id id::alloc(isl::ctx ctx, const std::string &name, void * user)
10236
{
10237
  auto res = isl_id_alloc(ctx.release(), name.c_str(), user);
10238
  return manage(res);
10239
}
10240
 
10241
std::string id::name() const
10242
{
10243
  auto res = isl_id_get_name(get());
10244
  std::string tmp(res);
10245
  return tmp;
10246
}
10247
 
10248
std::string id::get_name() const
10249
{
10250
  return name();
10251
}
10252
 
10253
isl::id_list id::to_list() const
10254
{
10255
  auto res = isl_id_to_list(copy());
10256
  return manage(res);
10257
}
10258
 
10259
void * id::user() const
10260
{
10261
  auto res = isl_id_get_user(get());
10262
  return res;
10263
}
10264
 
10265
void * id::get_user() const
10266
{
10267
  return user();
10268
}
10269
 
10270
inline std::ostream &operator<<(std::ostream &os, const id &obj)
10271
{
10272
  char *str = isl_id_to_str(obj.get());
10273
  if (!str) {
10274
    os.setstate(std::ios_base::badbit);
10275
    return os;
10276
  }
10277
  os << str;
10278
  free(str);
10279
  return os;
10280
}
10281
 
10282
// implementations for isl::id_list
10283
id_list manage(__isl_take isl_id_list *ptr) {
10284
  return id_list(ptr);
10285
}
10286
id_list manage_copy(__isl_keep isl_id_list *ptr) {
10287
  ptr = isl_id_list_copy(ptr);
10288
  return id_list(ptr);
10289
}
10290
 
10291
id_list::id_list()
10292
    : ptr(nullptr) {}
10293
 
10294
id_list::id_list(const id_list &obj)
10295
    : ptr(nullptr)
10296
{
10297
  ptr = obj.copy();
10298
}
10299
 
10300
id_list::id_list(__isl_take isl_id_list *ptr)
10301
    : ptr(ptr) {}
10302
 
10303
id_list::id_list(isl::ctx ctx, int n)
10304
{
10305
  auto res = isl_id_list_alloc(ctx.release(), n);
10306
  ptr = res;
10307
}
10308
 
10309
id_list::id_list(isl::id el)
10310
{
10311
  auto res = isl_id_list_from_id(el.release());
10312
  ptr = res;
10313
}
10314
 
10315
id_list::id_list(isl::ctx ctx, const std::string &str)
10316
{
10317
  auto res = isl_id_list_read_from_str(ctx.release(), str.c_str());
10318
  ptr = res;
10319
}
10320
 
10321
id_list &id_list::operator=(id_list obj) {
10322
  std::swap(this->ptr, obj.ptr);
10323
  return *this;
10324
}
10325
 
10326
id_list::~id_list() {
10327
  if (ptr)
10328
    isl_id_list_free(ptr);
10329
}
10330
 
10331
__isl_give isl_id_list *id_list::copy() const & {
10332
  return isl_id_list_copy(ptr);
10333
}
10334
 
10335
__isl_keep isl_id_list *id_list::get() const {
10336
  return ptr;
10337
}
10338
 
10339
__isl_give isl_id_list *id_list::release() {
10340
  isl_id_list *tmp = ptr;
10341
  ptr = nullptr;
10342
  return tmp;
10343
}
10344
 
10345
bool id_list::is_null() const {
10346
  return ptr == nullptr;
10347
}
10348
 
10349
isl::ctx id_list::ctx() const {
10350
  return isl::ctx(isl_id_list_get_ctx(ptr));
10351
}
10352
 
10353
isl::id_list id_list::add(isl::id el) const
10354
{
10355
  auto res = isl_id_list_add(copy(), el.release());
10356
  return manage(res);
10357
}
10358
 
10359
isl::id_list id_list::add(const std::string &el) const
10360
{
10361
  return this->add(isl::id(ctx(), el));
10362
}
10363
 
10364
isl::id id_list::at(int index) const
10365
{
10366
  auto res = isl_id_list_get_at(get(), index);
10367
  return manage(res);
10368
}
10369
 
10370
isl::id id_list::get_at(int index) const
10371
{
10372
  return at(index);
10373
}
10374
 
10375
isl::id_list id_list::clear() const
10376
{
10377
  auto res = isl_id_list_clear(copy());
10378
  return manage(res);
10379
}
10380
 
10381
isl::id_list id_list::concat(isl::id_list list2) const
10382
{
10383
  auto res = isl_id_list_concat(copy(), list2.release());
10384
  return manage(res);
10385
}
10386
 
10387
isl::id_list id_list::drop(unsigned int first, unsigned int n) const
10388
{
10389
  auto res = isl_id_list_drop(copy(), first, n);
10390
  return manage(res);
10391
}
10392
 
10393
stat id_list::foreach(const std::function<stat(isl::id)> &fn) const
10394
{
10395
  struct fn_data {
10396
    std::function<stat(isl::id)> func;
10397
  } fn_data = { fn };
10398
  auto fn_lambda = [](isl_id *arg_0, void *arg_1) -> isl_stat {
10399
    auto *data = static_cast<struct fn_data *>(arg_1);
10400
    auto ret = (data->func)(manage(arg_0));
10401
    return ret.release();
10402
  };
10403
  auto res = isl_id_list_foreach(get(), fn_lambda, &fn_data);
10404
  return manage(res);
10405
}
10406
 
10407
isl::id_list id_list::insert(unsigned int pos, isl::id el) const
10408
{
10409
  auto res = isl_id_list_insert(copy(), pos, el.release());
10410
  return manage(res);
10411
}
10412
 
10413
isl::id_list id_list::insert(unsigned int pos, const std::string &el) const
10414
{
10415
  return this->insert(pos, isl::id(ctx(), el));
10416
}
10417
 
10418
class size id_list::size() const
10419
{
10420
  auto res = isl_id_list_size(get());
10421
  return manage(res);
10422
}
10423
 
10424
inline std::ostream &operator<<(std::ostream &os, const id_list &obj)
10425
{
10426
  char *str = isl_id_list_to_str(obj.get());
10427
  if (!str) {
10428
    os.setstate(std::ios_base::badbit);
10429
    return os;
10430
  }
10431
  os << str;
10432
  free(str);
10433
  return os;
10434
}
10435
 
10436
// implementations for isl::id_to_ast_expr
10437
id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr) {
10438
  return id_to_ast_expr(ptr);
10439
}
10440
id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr) {
10441
  ptr = isl_id_to_ast_expr_copy(ptr);
10442
  return id_to_ast_expr(ptr);
10443
}
10444
 
10445
id_to_ast_expr::id_to_ast_expr()
10446
    : ptr(nullptr) {}
10447
 
10448
id_to_ast_expr::id_to_ast_expr(const id_to_ast_expr &obj)
10449
    : ptr(nullptr)
10450
{
10451
  ptr = obj.copy();
10452
}
10453
 
10454
id_to_ast_expr::id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr)
10455
    : ptr(ptr) {}
10456
 
10457
id_to_ast_expr &id_to_ast_expr::operator=(id_to_ast_expr obj) {
10458
  std::swap(this->ptr, obj.ptr);
10459
  return *this;
10460
}
10461
 
10462
id_to_ast_expr::~id_to_ast_expr() {
10463
  if (ptr)
10464
    isl_id_to_ast_expr_free(ptr);
10465
}
10466
 
10467
__isl_give isl_id_to_ast_expr *id_to_ast_expr::copy() const & {
10468
  return isl_id_to_ast_expr_copy(ptr);
10469
}
10470
 
10471
__isl_keep isl_id_to_ast_expr *id_to_ast_expr::get() const {
10472
  return ptr;
10473
}
10474
 
10475
__isl_give isl_id_to_ast_expr *id_to_ast_expr::release() {
10476
  isl_id_to_ast_expr *tmp = ptr;
10477
  ptr = nullptr;
10478
  return tmp;
10479
}
10480
 
10481
bool id_to_ast_expr::is_null() const {
10482
  return ptr == nullptr;
10483
}
10484
 
10485
isl::ctx id_to_ast_expr::ctx() const {
10486
  return isl::ctx(isl_id_to_ast_expr_get_ctx(ptr));
10487
}
10488
 
10489
isl::id_to_ast_expr id_to_ast_expr::alloc(isl::ctx ctx, int min_size)
10490
{
10491
  auto res = isl_id_to_ast_expr_alloc(ctx.release(), min_size);
10492
  return manage(res);
10493
}
10494
 
10495
isl::id_to_ast_expr id_to_ast_expr::set(isl::id key, isl::ast_expr val) const
10496
{
10497
  auto res = isl_id_to_ast_expr_set(copy(), key.release(), val.release());
10498
  return manage(res);
10499
}
10500
 
10501
isl::id_to_ast_expr id_to_ast_expr::set(const std::string &key, const isl::ast_expr &val) const
10502
{
10503
  return this->set(isl::id(ctx(), key), val);
10504
}
10505
 
10506
// implementations for isl::local_space
10507
local_space manage(__isl_take isl_local_space *ptr) {
10508
  return local_space(ptr);
10509
}
10510
local_space manage_copy(__isl_keep isl_local_space *ptr) {
10511
  ptr = isl_local_space_copy(ptr);
10512
  return local_space(ptr);
10513
}
10514
 
10515
local_space::local_space()
10516
    : ptr(nullptr) {}
10517
 
10518
local_space::local_space(const local_space &obj)
10519
    : ptr(nullptr)
10520
{
10521
  ptr = obj.copy();
10522
}
10523
 
10524
local_space::local_space(__isl_take isl_local_space *ptr)
10525
    : ptr(ptr) {}
10526
 
10527
local_space::local_space(isl::space space)
10528
{
10529
  auto res = isl_local_space_from_space(space.release());
10530
  ptr = res;
10531
}
10532
 
10533
local_space &local_space::operator=(local_space obj) {
10534
  std::swap(this->ptr, obj.ptr);
10535
  return *this;
10536
}
10537
 
10538
local_space::~local_space() {
10539
  if (ptr)
10540
    isl_local_space_free(ptr);
10541
}
10542
 
10543
__isl_give isl_local_space *local_space::copy() const & {
10544
  return isl_local_space_copy(ptr);
10545
}
10546
 
10547
__isl_keep isl_local_space *local_space::get() const {
10548
  return ptr;
10549
}
10550
 
10551
__isl_give isl_local_space *local_space::release() {
10552
  isl_local_space *tmp = ptr;
10553
  ptr = nullptr;
10554
  return tmp;
10555
}
10556
 
10557
bool local_space::is_null() const {
10558
  return ptr == nullptr;
10559
}
10560
 
10561
isl::ctx local_space::ctx() const {
10562
  return isl::ctx(isl_local_space_get_ctx(ptr));
10563
}
10564
 
10565
// implementations for isl::map
10566
map manage(__isl_take isl_map *ptr) {
10567
  return map(ptr);
10568
}
10569
map manage_copy(__isl_keep isl_map *ptr) {
10570
  ptr = isl_map_copy(ptr);
10571
  return map(ptr);
10572
}
10573
 
10574
map::map()
10575
    : ptr(nullptr) {}
10576
 
10577
map::map(const map &obj)
10578
    : ptr(nullptr)
10579
{
10580
  ptr = obj.copy();
10581
}
10582
 
10583
map::map(__isl_take isl_map *ptr)
10584
    : ptr(ptr) {}
10585
 
10586
map::map(isl::basic_map bmap)
10587
{
10588
  auto res = isl_map_from_basic_map(bmap.release());
10589
  ptr = res;
10590
}
10591
 
10592
map::map(isl::ctx ctx, const std::string &str)
10593
{
10594
  auto res = isl_map_read_from_str(ctx.release(), str.c_str());
10595
  ptr = res;
10596
}
10597
 
10598
map &map::operator=(map obj) {
10599
  std::swap(this->ptr, obj.ptr);
10600
  return *this;
10601
}
10602
 
10603
map::~map() {
10604
  if (ptr)
10605
    isl_map_free(ptr);
10606
}
10607
 
10608
__isl_give isl_map *map::copy() const & {
10609
  return isl_map_copy(ptr);
10610
}
10611
 
10612
__isl_keep isl_map *map::get() const {
10613
  return ptr;
10614
}
10615
 
10616
__isl_give isl_map *map::release() {
10617
  isl_map *tmp = ptr;
10618
  ptr = nullptr;
10619
  return tmp;
10620
}
10621
 
10622
bool map::is_null() const {
10623
  return ptr == nullptr;
10624
}
10625
 
10626
isl::ctx map::ctx() const {
10627
  return isl::ctx(isl_map_get_ctx(ptr));
10628
}
10629
 
10630
isl::map map::add_constraint(isl::constraint constraint) const
10631
{
10632
  auto res = isl_map_add_constraint(copy(), constraint.release());
10633
  return manage(res);
10634
}
10635
 
10636
isl::map map::add_dims(isl::dim type, unsigned int n) const
10637
{
10638
  auto res = isl_map_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
10639
  return manage(res);
10640
}
10641
 
10642
isl::basic_map map::affine_hull() const
10643
{
10644
  auto res = isl_map_affine_hull(copy());
10645
  return manage(res);
10646
}
10647
 
10648
isl::map map::align_params(isl::space model) const
10649
{
10650
  auto res = isl_map_align_params(copy(), model.release());
10651
  return manage(res);
10652
}
10653
 
10654
isl::map map::apply_domain(isl::map map2) const
10655
{
10656
  auto res = isl_map_apply_domain(copy(), map2.release());
10657
  return manage(res);
10658
}
10659
 
10660
isl::union_map map::apply_domain(const isl::union_map &umap2) const
10661
{
10662
  return isl::union_map(*this).apply_domain(umap2);
10663
}
10664
 
10665
isl::map map::apply_domain(const isl::basic_map &map2) const
10666
{
10667
  return this->apply_domain(isl::map(map2));
10668
}
10669
 
10670
isl::map map::apply_range(isl::map map2) const
10671
{
10672
  auto res = isl_map_apply_range(copy(), map2.release());
10673
  return manage(res);
10674
}
10675
 
10676
isl::union_map map::apply_range(const isl::union_map &umap2) const
10677
{
10678
  return isl::union_map(*this).apply_range(umap2);
10679
}
10680
 
10681
isl::map map::apply_range(const isl::basic_map &map2) const
10682
{
10683
  return this->apply_range(isl::map(map2));
10684
}
10685
 
10686
isl::map map::as_map() const
10687
{
10688
  return isl::union_map(*this).as_map();
10689
}
10690
 
10691
isl::multi_union_pw_aff map::as_multi_union_pw_aff() const
10692
{
10693
  return isl::union_map(*this).as_multi_union_pw_aff();
10694
}
10695
 
10696
isl::pw_multi_aff map::as_pw_multi_aff() const
10697
{
10698
  auto res = isl_map_as_pw_multi_aff(copy());
10699
  return manage(res);
10700
}
10701
 
10702
isl::union_pw_multi_aff map::as_union_pw_multi_aff() const
10703
{
10704
  return isl::union_map(*this).as_union_pw_multi_aff();
10705
}
10706
 
10707
isl::basic_map_list map::basic_map_list() const
10708
{
10709
  auto res = isl_map_get_basic_map_list(get());
10710
  return manage(res);
10711
}
10712
 
10713
isl::basic_map_list map::get_basic_map_list() const
10714
{
10715
  return basic_map_list();
10716
}
10717
 
10718
isl::set map::bind_domain(isl::multi_id tuple) const
10719
{
10720
  auto res = isl_map_bind_domain(copy(), tuple.release());
10721
  return manage(res);
10722
}
10723
 
10724
isl::set map::bind_range(isl::multi_id tuple) const
10725
{
10726
  auto res = isl_map_bind_range(copy(), tuple.release());
10727
  return manage(res);
10728
}
10729
 
10730
boolean map::can_curry() const
10731
{
10732
  auto res = isl_map_can_curry(get());
10733
  return manage(res);
10734
}
10735
 
10736
isl::map map::coalesce() const
10737
{
10738
  auto res = isl_map_coalesce(copy());
10739
  return manage(res);
10740
}
10741
 
10742
isl::map map::complement() const
10743
{
10744
  auto res = isl_map_complement(copy());
10745
  return manage(res);
10746
}
10747
 
10748
isl::union_map map::compute_divs() const
10749
{
10750
  return isl::union_map(*this).compute_divs();
10751
}
10752
 
10753
isl::map map::curry() const
10754
{
10755
  auto res = isl_map_curry(copy());
10756
  return manage(res);
10757
}
10758
 
10759
isl::set map::deltas() const
10760
{
10761
  auto res = isl_map_deltas(copy());
10762
  return manage(res);
10763
}
10764
 
10765
isl::map map::detect_equalities() const
10766
{
10767
  auto res = isl_map_detect_equalities(copy());
10768
  return manage(res);
10769
}
10770
 
10771
class size map::dim(isl::dim type) const
10772
{
10773
  auto res = isl_map_dim(get(), static_cast<enum isl_dim_type>(type));
10774
  return manage(res);
10775
}
10776
 
10777
isl::pw_aff map::dim_max(int pos) const
10778
{
10779
  auto res = isl_map_dim_max(copy(), pos);
10780
  return manage(res);
10781
}
10782
 
10783
isl::pw_aff map::dim_min(int pos) const
10784
{
10785
  auto res = isl_map_dim_min(copy(), pos);
10786
  return manage(res);
10787
}
10788
 
10789
isl::set map::domain() const
10790
{
10791
  auto res = isl_map_domain(copy());
10792
  return manage(res);
10793
}
10794
 
10795
isl::map map::domain_factor_domain() const
10796
{
10797
  auto res = isl_map_domain_factor_domain(copy());
10798
  return manage(res);
10799
}
10800
 
10801
isl::map map::domain_factor_range() const
10802
{
10803
  auto res = isl_map_domain_factor_range(copy());
10804
  return manage(res);
10805
}
10806
 
10807
isl::map map::domain_map() const
10808
{
10809
  auto res = isl_map_domain_map(copy());
10810
  return manage(res);
10811
}
10812
 
10813
isl::union_pw_multi_aff map::domain_map_union_pw_multi_aff() const
10814
{
10815
  return isl::union_map(*this).domain_map_union_pw_multi_aff();
10816
}
10817
 
10818
isl::map map::domain_product(isl::map map2) const
10819
{
10820
  auto res = isl_map_domain_product(copy(), map2.release());
10821
  return manage(res);
10822
}
10823
 
10824
isl::union_map map::domain_product(const isl::union_map &umap2) const
10825
{
10826
  return isl::union_map(*this).domain_product(umap2);
10827
}
10828
 
10829
isl::map map::domain_product(const isl::basic_map &map2) const
10830
{
10831
  return this->domain_product(isl::map(map2));
10832
}
10833
 
10834
class size map::domain_tuple_dim() const
10835
{
10836
  auto res = isl_map_domain_tuple_dim(get());
10837
  return manage(res);
10838
}
10839
 
10840
isl::id map::domain_tuple_id() const
10841
{
10842
  auto res = isl_map_get_domain_tuple_id(get());
10843
  return manage(res);
10844
}
10845
 
10846
isl::id map::get_domain_tuple_id() const
10847
{
10848
  return domain_tuple_id();
10849
}
10850
 
10851
isl::map map::empty(isl::space space)
10852
{
10853
  auto res = isl_map_empty(space.release());
10854
  return manage(res);
10855
}
10856
 
10857
isl::map map::eq_at(isl::multi_pw_aff mpa) const
10858
{
10859
  auto res = isl_map_eq_at_multi_pw_aff(copy(), mpa.release());
10860
  return manage(res);
10861
}
10862
 
10863
isl::union_map map::eq_at(const isl::multi_union_pw_aff &mupa) const
10864
{
10865
  return isl::union_map(*this).eq_at(mupa);
10866
}
10867
 
10868
isl::map map::eq_at(const isl::aff &mpa) const
10869
{
10870
  return this->eq_at(isl::multi_pw_aff(mpa));
10871
}
10872
 
10873
isl::map map::eq_at(const isl::multi_aff &mpa) const
10874
{
10875
  return this->eq_at(isl::multi_pw_aff(mpa));
10876
}
10877
 
10878
isl::map map::eq_at(const isl::pw_aff &mpa) const
10879
{
10880
  return this->eq_at(isl::multi_pw_aff(mpa));
10881
}
10882
 
10883
isl::map map::eq_at(const isl::pw_multi_aff &mpa) const
10884
{
10885
  return this->eq_at(isl::multi_pw_aff(mpa));
10886
}
10887
 
10888
isl::map map::equate(isl::dim type1, int pos1, isl::dim type2, int pos2) const
10889
{
10890
  auto res = isl_map_equate(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
10891
  return manage(res);
10892
}
10893
 
10894
boolean map::every_map(const std::function<boolean(isl::map)> &test) const
10895
{
10896
  return isl::union_map(*this).every_map(test);
10897
}
10898
 
10899
isl::map map::extract_map(const isl::space &space) const
10900
{
10901
  return isl::union_map(*this).extract_map(space);
10902
}
10903
 
10904
isl::map map::factor_domain() const
10905
{
10906
  auto res = isl_map_factor_domain(copy());
10907
  return manage(res);
10908
}
10909
 
10910
isl::map map::factor_range() const
10911
{
10912
  auto res = isl_map_factor_range(copy());
10913
  return manage(res);
10914
}
10915
 
10916
isl::map map::fix_si(isl::dim type, unsigned int pos, int value) const
10917
{
10918
  auto res = isl_map_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
10919
  return manage(res);
10920
}
10921
 
10922
isl::union_map map::fixed_power(const isl::val &exp) const
10923
{
10924
  return isl::union_map(*this).fixed_power(exp);
10925
}
10926
 
10927
isl::union_map map::fixed_power(long exp) const
10928
{
10929
  return this->fixed_power(isl::val(ctx(), exp));
10930
}
10931
 
10932
isl::map map::flat_range_product(isl::map map2) const
10933
{
10934
  auto res = isl_map_flat_range_product(copy(), map2.release());
10935
  return manage(res);
10936
}
10937
 
10938
isl::union_map map::flat_range_product(const isl::union_map &umap2) const
10939
{
10940
  return isl::union_map(*this).flat_range_product(umap2);
10941
}
10942
 
10943
isl::map map::flat_range_product(const isl::basic_map &map2) const
10944
{
10945
  return this->flat_range_product(isl::map(map2));
10946
}
10947
 
10948
isl::map map::flatten() const
10949
{
10950
  auto res = isl_map_flatten(copy());
10951
  return manage(res);
10952
}
10953
 
10954
isl::map map::flatten_domain() const
10955
{
10956
  auto res = isl_map_flatten_domain(copy());
10957
  return manage(res);
10958
}
10959
 
10960
isl::map map::flatten_range() const
10961
{
10962
  auto res = isl_map_flatten_range(copy());
10963
  return manage(res);
10964
}
10965
 
10966
isl::map map::floordiv_val(isl::val d) const
10967
{
10968
  auto res = isl_map_floordiv_val(copy(), d.release());
10969
  return manage(res);
10970
}
10971
 
10972
isl::map map::floordiv_val(long d) const
10973
{
10974
  return this->floordiv_val(isl::val(ctx(), d));
10975
}
10976
 
10977
stat map::foreach_basic_map(const std::function<stat(isl::basic_map)> &fn) const
10978
{
10979
  struct fn_data {
10980
    std::function<stat(isl::basic_map)> func;
10981
  } fn_data = { fn };
10982
  auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat {
10983
    auto *data = static_cast<struct fn_data *>(arg_1);
10984
    auto ret = (data->func)(manage(arg_0));
10985
    return ret.release();
10986
  };
10987
  auto res = isl_map_foreach_basic_map(get(), fn_lambda, &fn_data);
10988
  return manage(res);
10989
}
10990
 
10991
stat map::foreach_map(const std::function<stat(isl::map)> &fn) const
10992
{
10993
  return isl::union_map(*this).foreach_map(fn);
10994
}
10995
 
10996
isl::map map::from_aff(isl::aff aff)
10997
{
10998
  auto res = isl_map_from_aff(aff.release());
10999
  return manage(res);
11000
}
11001
 
11002
isl::map map::from_domain(isl::set set)
11003
{
11004
  auto res = isl_map_from_domain(set.release());
11005
  return manage(res);
11006
}
11007
 
11008
isl::map map::from_domain_and_range(isl::set domain, isl::set range)
11009
{
11010
  auto res = isl_map_from_domain_and_range(domain.release(), range.release());
11011
  return manage(res);
11012
}
11013
 
11014
isl::map map::from_multi_aff(isl::multi_aff maff)
11015
{
11016
  auto res = isl_map_from_multi_aff(maff.release());
11017
  return manage(res);
11018
}
11019
 
11020
isl::map map::from_pw_aff(isl::pw_aff pwaff)
11021
{
11022
  auto res = isl_map_from_pw_aff(pwaff.release());
11023
  return manage(res);
11024
}
11025
 
11026
isl::map map::from_range(isl::set set)
11027
{
11028
  auto res = isl_map_from_range(set.release());
11029
  return manage(res);
11030
}
11031
 
11032
isl::map map::from_union_map(isl::union_map umap)
11033
{
11034
  auto res = isl_map_from_union_map(umap.release());
11035
  return manage(res);
11036
}
11037
 
11038
isl::map map::gist(isl::map context) const
11039
{
11040
  auto res = isl_map_gist(copy(), context.release());
11041
  return manage(res);
11042
}
11043
 
11044
isl::union_map map::gist(const isl::union_map &context) const
11045
{
11046
  return isl::union_map(*this).gist(context);
11047
}
11048
 
11049
isl::map map::gist(const isl::basic_map &context) const
11050
{
11051
  return this->gist(isl::map(context));
11052
}
11053
 
11054
isl::map map::gist_domain(isl::set context) const
11055
{
11056
  auto res = isl_map_gist_domain(copy(), context.release());
11057
  return manage(res);
11058
}
11059
 
11060
isl::union_map map::gist_domain(const isl::union_set &uset) const
11061
{
11062
  return isl::union_map(*this).gist_domain(uset);
11063
}
11064
 
11065
isl::map map::gist_domain(const isl::basic_set &context) const
11066
{
11067
  return this->gist_domain(isl::set(context));
11068
}
11069
 
11070
isl::map map::gist_domain(const isl::point &context) const
11071
{
11072
  return this->gist_domain(isl::set(context));
11073
}
11074
 
11075
isl::map map::gist_params(isl::set context) const
11076
{
11077
  auto res = isl_map_gist_params(copy(), context.release());
11078
  return manage(res);
11079
}
11080
 
11081
isl::union_map map::gist_range(const isl::union_set &uset) const
11082
{
11083
  return isl::union_map(*this).gist_range(uset);
11084
}
11085
 
11086
boolean map::has_domain_tuple_id() const
11087
{
11088
  auto res = isl_map_has_domain_tuple_id(get());
11089
  return manage(res);
11090
}
11091
 
11092
boolean map::has_equal_space(const isl::map &map2) const
11093
{
11094
  auto res = isl_map_has_equal_space(get(), map2.get());
11095
  return manage(res);
11096
}
11097
 
11098
boolean map::has_range_tuple_id() const
11099
{
11100
  auto res = isl_map_has_range_tuple_id(get());
11101
  return manage(res);
11102
}
11103
 
11104
boolean map::has_tuple_id(isl::dim type) const
11105
{
11106
  auto res = isl_map_has_tuple_id(get(), static_cast<enum isl_dim_type>(type));
11107
  return manage(res);
11108
}
11109
 
11110
boolean map::has_tuple_name(isl::dim type) const
11111
{
11112
  auto res = isl_map_has_tuple_name(get(), static_cast<enum isl_dim_type>(type));
11113
  return manage(res);
11114
}
11115
 
11116
isl::map map::identity(isl::space space)
11117
{
11118
  auto res = isl_map_identity(space.release());
11119
  return manage(res);
11120
}
11121
 
11122
isl::map map::intersect(isl::map map2) const
11123
{
11124
  auto res = isl_map_intersect(copy(), map2.release());
11125
  return manage(res);
11126
}
11127
 
11128
isl::union_map map::intersect(const isl::union_map &umap2) const
11129
{
11130
  return isl::union_map(*this).intersect(umap2);
11131
}
11132
 
11133
isl::map map::intersect(const isl::basic_map &map2) const
11134
{
11135
  return this->intersect(isl::map(map2));
11136
}
11137
 
11138
isl::map map::intersect_domain(isl::set set) const
11139
{
11140
  auto res = isl_map_intersect_domain(copy(), set.release());
11141
  return manage(res);
11142
}
11143
 
11144
isl::union_map map::intersect_domain(const isl::space &space) const
11145
{
11146
  return isl::union_map(*this).intersect_domain(space);
11147
}
11148
 
11149
isl::union_map map::intersect_domain(const isl::union_set &uset) const
11150
{
11151
  return isl::union_map(*this).intersect_domain(uset);
11152
}
11153
 
11154
isl::map map::intersect_domain(const isl::basic_set &set) const
11155
{
11156
  return this->intersect_domain(isl::set(set));
11157
}
11158
 
11159
isl::map map::intersect_domain(const isl::point &set) const
11160
{
11161
  return this->intersect_domain(isl::set(set));
11162
}
11163
 
11164
isl::map map::intersect_domain_factor_domain(isl::map factor) const
11165
{
11166
  auto res = isl_map_intersect_domain_factor_domain(copy(), factor.release());
11167
  return manage(res);
11168
}
11169
 
11170
isl::union_map map::intersect_domain_factor_domain(const isl::union_map &factor) const
11171
{
11172
  return isl::union_map(*this).intersect_domain_factor_domain(factor);
11173
}
11174
 
11175
isl::map map::intersect_domain_factor_domain(const isl::basic_map &factor) const
11176
{
11177
  return this->intersect_domain_factor_domain(isl::map(factor));
11178
}
11179
 
11180
isl::map map::intersect_domain_factor_range(isl::map factor) const
11181
{
11182
  auto res = isl_map_intersect_domain_factor_range(copy(), factor.release());
11183
  return manage(res);
11184
}
11185
 
11186
isl::union_map map::intersect_domain_factor_range(const isl::union_map &factor) const
11187
{
11188
  return isl::union_map(*this).intersect_domain_factor_range(factor);
11189
}
11190
 
11191
isl::map map::intersect_domain_factor_range(const isl::basic_map &factor) const
11192
{
11193
  return this->intersect_domain_factor_range(isl::map(factor));
11194
}
11195
 
11196
isl::map map::intersect_params(isl::set params) const
11197
{
11198
  auto res = isl_map_intersect_params(copy(), params.release());
11199
  return manage(res);
11200
}
11201
 
11202
isl::map map::intersect_range(isl::set set) const
11203
{
11204
  auto res = isl_map_intersect_range(copy(), set.release());
11205
  return manage(res);
11206
}
11207
 
11208
isl::union_map map::intersect_range(const isl::space &space) const
11209
{
11210
  return isl::union_map(*this).intersect_range(space);
11211
}
11212
 
11213
isl::union_map map::intersect_range(const isl::union_set &uset) const
11214
{
11215
  return isl::union_map(*this).intersect_range(uset);
11216
}
11217
 
11218
isl::map map::intersect_range(const isl::basic_set &set) const
11219
{
11220
  return this->intersect_range(isl::set(set));
11221
}
11222
 
11223
isl::map map::intersect_range(const isl::point &set) const
11224
{
11225
  return this->intersect_range(isl::set(set));
11226
}
11227
 
11228
isl::map map::intersect_range_factor_domain(isl::map factor) const
11229
{
11230
  auto res = isl_map_intersect_range_factor_domain(copy(), factor.release());
11231
  return manage(res);
11232
}
11233
 
11234
isl::union_map map::intersect_range_factor_domain(const isl::union_map &factor) const
11235
{
11236
  return isl::union_map(*this).intersect_range_factor_domain(factor);
11237
}
11238
 
11239
isl::map map::intersect_range_factor_domain(const isl::basic_map &factor) const
11240
{
11241
  return this->intersect_range_factor_domain(isl::map(factor));
11242
}
11243
 
11244
isl::map map::intersect_range_factor_range(isl::map factor) const
11245
{
11246
  auto res = isl_map_intersect_range_factor_range(copy(), factor.release());
11247
  return manage(res);
11248
}
11249
 
11250
isl::union_map map::intersect_range_factor_range(const isl::union_map &factor) const
11251
{
11252
  return isl::union_map(*this).intersect_range_factor_range(factor);
11253
}
11254
 
11255
isl::map map::intersect_range_factor_range(const isl::basic_map &factor) const
11256
{
11257
  return this->intersect_range_factor_range(isl::map(factor));
11258
}
11259
 
11260
boolean map::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
11261
{
11262
  auto res = isl_map_involves_dims(get(), static_cast<enum isl_dim_type>(type), first, n);
11263
  return manage(res);
11264
}
11265
 
11266
boolean map::is_bijective() const
11267
{
11268
  auto res = isl_map_is_bijective(get());
11269
  return manage(res);
11270
}
11271
 
11272
boolean map::is_disjoint(const isl::map &map2) const
11273
{
11274
  auto res = isl_map_is_disjoint(get(), map2.get());
11275
  return manage(res);
11276
}
11277
 
11278
boolean map::is_disjoint(const isl::union_map &umap2) const
11279
{
11280
  return isl::union_map(*this).is_disjoint(umap2);
11281
}
11282
 
11283
boolean map::is_disjoint(const isl::basic_map &map2) const
11284
{
11285
  return this->is_disjoint(isl::map(map2));
11286
}
11287
 
11288
boolean map::is_empty() const
11289
{
11290
  auto res = isl_map_is_empty(get());
11291
  return manage(res);
11292
}
11293
 
11294
boolean map::is_equal(const isl::map &map2) const
11295
{
11296
  auto res = isl_map_is_equal(get(), map2.get());
11297
  return manage(res);
11298
}
11299
 
11300
boolean map::is_equal(const isl::union_map &umap2) const
11301
{
11302
  return isl::union_map(*this).is_equal(umap2);
11303
}
11304
 
11305
boolean map::is_equal(const isl::basic_map &map2) const
11306
{
11307
  return this->is_equal(isl::map(map2));
11308
}
11309
 
11310
boolean map::is_injective() const
11311
{
11312
  auto res = isl_map_is_injective(get());
11313
  return manage(res);
11314
}
11315
 
11316
boolean map::is_single_valued() const
11317
{
11318
  auto res = isl_map_is_single_valued(get());
11319
  return manage(res);
11320
}
11321
 
11322
boolean map::is_strict_subset(const isl::map &map2) const
11323
{
11324
  auto res = isl_map_is_strict_subset(get(), map2.get());
11325
  return manage(res);
11326
}
11327
 
11328
boolean map::is_strict_subset(const isl::union_map &umap2) const
11329
{
11330
  return isl::union_map(*this).is_strict_subset(umap2);
11331
}
11332
 
11333
boolean map::is_strict_subset(const isl::basic_map &map2) const
11334
{
11335
  return this->is_strict_subset(isl::map(map2));
11336
}
11337
 
11338
boolean map::is_subset(const isl::map &map2) const
11339
{
11340
  auto res = isl_map_is_subset(get(), map2.get());
11341
  return manage(res);
11342
}
11343
 
11344
boolean map::is_subset(const isl::union_map &umap2) const
11345
{
11346
  return isl::union_map(*this).is_subset(umap2);
11347
}
11348
 
11349
boolean map::is_subset(const isl::basic_map &map2) const
11350
{
11351
  return this->is_subset(isl::map(map2));
11352
}
11353
 
11354
boolean map::isa_map() const
11355
{
11356
  return isl::union_map(*this).isa_map();
11357
}
11358
 
11359
isl::map map::lex_ge(isl::space set_space)
11360
{
11361
  auto res = isl_map_lex_ge(set_space.release());
11362
  return manage(res);
11363
}
11364
 
11365
isl::map map::lex_ge_at(isl::multi_pw_aff mpa) const
11366
{
11367
  auto res = isl_map_lex_ge_at_multi_pw_aff(copy(), mpa.release());
11368
  return manage(res);
11369
}
11370
 
11371
isl::map map::lex_gt(isl::space set_space)
11372
{
11373
  auto res = isl_map_lex_gt(set_space.release());
11374
  return manage(res);
11375
}
11376
 
11377
isl::map map::lex_gt_at(isl::multi_pw_aff mpa) const
11378
{
11379
  auto res = isl_map_lex_gt_at_multi_pw_aff(copy(), mpa.release());
11380
  return manage(res);
11381
}
11382
 
11383
isl::map map::lex_le(isl::space set_space)
11384
{
11385
  auto res = isl_map_lex_le(set_space.release());
11386
  return manage(res);
11387
}
11388
 
11389
isl::map map::lex_le_at(isl::multi_pw_aff mpa) const
11390
{
11391
  auto res = isl_map_lex_le_at_multi_pw_aff(copy(), mpa.release());
11392
  return manage(res);
11393
}
11394
 
11395
isl::map map::lex_lt(isl::space set_space)
11396
{
11397
  auto res = isl_map_lex_lt(set_space.release());
11398
  return manage(res);
11399
}
11400
 
11401
isl::map map::lex_lt_at(isl::multi_pw_aff mpa) const
11402
{
11403
  auto res = isl_map_lex_lt_at_multi_pw_aff(copy(), mpa.release());
11404
  return manage(res);
11405
}
11406
 
11407
isl::map map::lexmax() const
11408
{
11409
  auto res = isl_map_lexmax(copy());
11410
  return manage(res);
11411
}
11412
 
11413
isl::pw_multi_aff map::lexmax_pw_multi_aff() const
11414
{
11415
  auto res = isl_map_lexmax_pw_multi_aff(copy());
11416
  return manage(res);
11417
}
11418
 
11419
isl::map map::lexmin() const
11420
{
11421
  auto res = isl_map_lexmin(copy());
11422
  return manage(res);
11423
}
11424
 
11425
isl::pw_multi_aff map::lexmin_pw_multi_aff() const
11426
{
11427
  auto res = isl_map_lexmin_pw_multi_aff(copy());
11428
  return manage(res);
11429
}
11430
 
11431
isl::map map::lower_bound(isl::multi_pw_aff lower) const
11432
{
11433
  auto res = isl_map_lower_bound_multi_pw_aff(copy(), lower.release());
11434
  return manage(res);
11435
}
11436
 
11437
isl::map map::lower_bound_si(isl::dim type, unsigned int pos, int value) const
11438
{
11439
  auto res = isl_map_lower_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
11440
  return manage(res);
11441
}
11442
 
11443
isl::map_list map::map_list() const
11444
{
11445
  return isl::union_map(*this).map_list();
11446
}
11447
 
11448
isl::multi_pw_aff map::max_multi_pw_aff() const
11449
{
11450
  auto res = isl_map_max_multi_pw_aff(copy());
11451
  return manage(res);
11452
}
11453
 
11454
isl::multi_pw_aff map::min_multi_pw_aff() const
11455
{
11456
  auto res = isl_map_min_multi_pw_aff(copy());
11457
  return manage(res);
11458
}
11459
 
11460
isl::map map::move_dims(isl::dim dst_type, unsigned int dst_pos, isl::dim src_type, unsigned int src_pos, unsigned int n) const
11461
{
11462
  auto res = isl_map_move_dims(copy(), static_cast<enum isl_dim_type>(dst_type), dst_pos, static_cast<enum isl_dim_type>(src_type), src_pos, n);
11463
  return manage(res);
11464
}
11465
 
11466
class size map::n_basic_map() const
11467
{
11468
  auto res = isl_map_n_basic_map(get());
11469
  return manage(res);
11470
}
11471
 
11472
isl::map map::order_lt(isl::dim type1, int pos1, isl::dim type2, int pos2) const
11473
{
11474
  auto res = isl_map_order_lt(copy(), static_cast<enum isl_dim_type>(type1), pos1, static_cast<enum isl_dim_type>(type2), pos2);
11475
  return manage(res);
11476
}
11477
 
11478
isl::set map::params() const
11479
{
11480
  return isl::union_map(*this).params();
11481
}
11482
 
11483
isl::basic_map map::polyhedral_hull() const
11484
{
11485
  auto res = isl_map_polyhedral_hull(copy());
11486
  return manage(res);
11487
}
11488
 
11489
isl::map map::preimage_domain(isl::multi_aff ma) const
11490
{
11491
  auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release());
11492
  return manage(res);
11493
}
11494
 
11495
isl::map map::preimage_domain(isl::multi_pw_aff mpa) const
11496
{
11497
  auto res = isl_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
11498
  return manage(res);
11499
}
11500
 
11501
isl::map map::preimage_domain(isl::pw_multi_aff pma) const
11502
{
11503
  auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release());
11504
  return manage(res);
11505
}
11506
 
11507
isl::union_map map::preimage_domain(const isl::union_pw_multi_aff &upma) const
11508
{
11509
  return isl::union_map(*this).preimage_domain(upma);
11510
}
11511
 
11512
isl::map map::preimage_range(isl::multi_aff ma) const
11513
{
11514
  auto res = isl_map_preimage_range_multi_aff(copy(), ma.release());
11515
  return manage(res);
11516
}
11517
 
11518
isl::map map::preimage_range(isl::pw_multi_aff pma) const
11519
{
11520
  auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release());
11521
  return manage(res);
11522
}
11523
 
11524
isl::union_map map::preimage_range(const isl::union_pw_multi_aff &upma) const
11525
{
11526
  return isl::union_map(*this).preimage_range(upma);
11527
}
11528
 
11529
isl::map map::product(isl::map map2) const
11530
{
11531
  auto res = isl_map_product(copy(), map2.release());
11532
  return manage(res);
11533
}
11534
 
11535
isl::union_map map::product(const isl::union_map &umap2) const
11536
{
11537
  return isl::union_map(*this).product(umap2);
11538
}
11539
 
11540
isl::map map::product(const isl::basic_map &map2) const
11541
{
11542
  return this->product(isl::map(map2));
11543
}
11544
 
11545
isl::map map::project_out(isl::dim type, unsigned int first, unsigned int n) const
11546
{
11547
  auto res = isl_map_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
11548
  return manage(res);
11549
}
11550
 
11551
isl::map map::project_out_all_params() const
11552
{
11553
  auto res = isl_map_project_out_all_params(copy());
11554
  return manage(res);
11555
}
11556
 
11557
isl::set map::range() const
11558
{
11559
  auto res = isl_map_range(copy());
11560
  return manage(res);
11561
}
11562
 
11563
isl::map map::range_factor_domain() const
11564
{
11565
  auto res = isl_map_range_factor_domain(copy());
11566
  return manage(res);
11567
}
11568
 
11569
isl::map map::range_factor_range() const
11570
{
11571
  auto res = isl_map_range_factor_range(copy());
11572
  return manage(res);
11573
}
11574
 
11575
isl::fixed_box map::range_lattice_tile() const
11576
{
11577
  auto res = isl_map_get_range_lattice_tile(get());
11578
  return manage(res);
11579
}
11580
 
11581
isl::fixed_box map::get_range_lattice_tile() const
11582
{
11583
  return range_lattice_tile();
11584
}
11585
 
11586
isl::map map::range_map() const
11587
{
11588
  auto res = isl_map_range_map(copy());
11589
  return manage(res);
11590
}
11591
 
11592
isl::map map::range_product(isl::map map2) const
11593
{
11594
  auto res = isl_map_range_product(copy(), map2.release());
11595
  return manage(res);
11596
}
11597
 
11598
isl::union_map map::range_product(const isl::union_map &umap2) const
11599
{
11600
  return isl::union_map(*this).range_product(umap2);
11601
}
11602
 
11603
isl::map map::range_product(const isl::basic_map &map2) const
11604
{
11605
  return this->range_product(isl::map(map2));
11606
}
11607
 
11608
isl::map map::range_reverse() const
11609
{
11610
  auto res = isl_map_range_reverse(copy());
11611
  return manage(res);
11612
}
11613
 
11614
isl::fixed_box map::range_simple_fixed_box_hull() const
11615
{
11616
  auto res = isl_map_get_range_simple_fixed_box_hull(get());
11617
  return manage(res);
11618
}
11619
 
11620
isl::fixed_box map::get_range_simple_fixed_box_hull() const
11621
{
11622
  return range_simple_fixed_box_hull();
11623
}
11624
 
11625
class size map::range_tuple_dim() const
11626
{
11627
  auto res = isl_map_range_tuple_dim(get());
11628
  return manage(res);
11629
}
11630
 
11631
isl::id map::range_tuple_id() const
11632
{
11633
  auto res = isl_map_get_range_tuple_id(get());
11634
  return manage(res);
11635
}
11636
 
11637
isl::id map::get_range_tuple_id() const
11638
{
11639
  return range_tuple_id();
11640
}
11641
 
11642
isl::map map::reverse() const
11643
{
11644
  auto res = isl_map_reverse(copy());
11645
  return manage(res);
11646
}
11647
 
11648
isl::basic_map map::sample() const
11649
{
11650
  auto res = isl_map_sample(copy());
11651
  return manage(res);
11652
}
11653
 
11654
isl::map map::set_domain_tuple(isl::id id) const
11655
{
11656
  auto res = isl_map_set_domain_tuple_id(copy(), id.release());
11657
  return manage(res);
11658
}
11659
 
11660
isl::map map::set_domain_tuple(const std::string &id) const
11661
{
11662
  return this->set_domain_tuple(isl::id(ctx(), id));
11663
}
11664
 
11665
isl::map map::set_range_tuple(isl::id id) const
11666
{
11667
  auto res = isl_map_set_range_tuple_id(copy(), id.release());
11668
  return manage(res);
11669
}
11670
 
11671
isl::map map::set_range_tuple(const std::string &id) const
11672
{
11673
  return this->set_range_tuple(isl::id(ctx(), id));
11674
}
11675
 
11676
isl::map map::set_tuple_id(isl::dim type, isl::id id) const
11677
{
11678
  auto res = isl_map_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
11679
  return manage(res);
11680
}
11681
 
11682
isl::map map::set_tuple_id(isl::dim type, const std::string &id) const
11683
{
11684
  return this->set_tuple_id(type, isl::id(ctx(), id));
11685
}
11686
 
11687
isl::space map::space() const
11688
{
11689
  auto res = isl_map_get_space(get());
11690
  return manage(res);
11691
}
11692
 
11693
isl::space map::get_space() const
11694
{
11695
  return space();
11696
}
11697
 
11698
isl::map map::subtract(isl::map map2) const
11699
{
11700
  auto res = isl_map_subtract(copy(), map2.release());
11701
  return manage(res);
11702
}
11703
 
11704
isl::union_map map::subtract(const isl::union_map &umap2) const
11705
{
11706
  return isl::union_map(*this).subtract(umap2);
11707
}
11708
 
11709
isl::map map::subtract(const isl::basic_map &map2) const
11710
{
11711
  return this->subtract(isl::map(map2));
11712
}
11713
 
11714
isl::union_map map::subtract_domain(const isl::union_set &dom) const
11715
{
11716
  return isl::union_map(*this).subtract_domain(dom);
11717
}
11718
 
11719
isl::union_map map::subtract_range(const isl::union_set &dom) const
11720
{
11721
  return isl::union_map(*this).subtract_range(dom);
11722
}
11723
 
11724
isl::map map::sum(isl::map map2) const
11725
{
11726
  auto res = isl_map_sum(copy(), map2.release());
11727
  return manage(res);
11728
}
11729
 
11730
isl::map_list map::to_list() const
11731
{
11732
  auto res = isl_map_to_list(copy());
11733
  return manage(res);
11734
}
11735
 
11736
isl::union_map map::to_union_map() const
11737
{
11738
  auto res = isl_map_to_union_map(copy());
11739
  return manage(res);
11740
}
11741
 
11742
isl::id map::tuple_id(isl::dim type) const
11743
{
11744
  auto res = isl_map_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
11745
  return manage(res);
11746
}
11747
 
11748
isl::id map::get_tuple_id(isl::dim type) const
11749
{
11750
  return tuple_id(type);
11751
}
11752
 
11753
isl::map map::uncurry() const
11754
{
11755
  auto res = isl_map_uncurry(copy());
11756
  return manage(res);
11757
}
11758
 
11759
isl::map map::unite(isl::map map2) const
11760
{
11761
  auto res = isl_map_union(copy(), map2.release());
11762
  return manage(res);
11763
}
11764
 
11765
isl::union_map map::unite(const isl::union_map &umap2) const
11766
{
11767
  return isl::union_map(*this).unite(umap2);
11768
}
11769
 
11770
isl::map map::unite(const isl::basic_map &map2) const
11771
{
11772
  return this->unite(isl::map(map2));
11773
}
11774
 
11775
isl::map map::universe(isl::space space)
11776
{
11777
  auto res = isl_map_universe(space.release());
11778
  return manage(res);
11779
}
11780
 
11781
isl::basic_map map::unshifted_simple_hull() const
11782
{
11783
  auto res = isl_map_unshifted_simple_hull(copy());
11784
  return manage(res);
11785
}
11786
 
11787
isl::map map::upper_bound(isl::multi_pw_aff upper) const
11788
{
11789
  auto res = isl_map_upper_bound_multi_pw_aff(copy(), upper.release());
11790
  return manage(res);
11791
}
11792
 
11793
isl::map map::upper_bound_si(isl::dim type, unsigned int pos, int value) const
11794
{
11795
  auto res = isl_map_upper_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
11796
  return manage(res);
11797
}
11798
 
11799
isl::set map::wrap() const
11800
{
11801
  auto res = isl_map_wrap(copy());
11802
  return manage(res);
11803
}
11804
 
11805
isl::map map::zip() const
11806
{
11807
  auto res = isl_map_zip(copy());
11808
  return manage(res);
11809
}
11810
 
11811
inline std::ostream &operator<<(std::ostream &os, const map &obj)
11812
{
11813
  char *str = isl_map_to_str(obj.get());
11814
  if (!str) {
11815
    os.setstate(std::ios_base::badbit);
11816
    return os;
11817
  }
11818
  os << str;
11819
  free(str);
11820
  return os;
11821
}
11822
 
11823
// implementations for isl::map_list
11824
map_list manage(__isl_take isl_map_list *ptr) {
11825
  return map_list(ptr);
11826
}
11827
map_list manage_copy(__isl_keep isl_map_list *ptr) {
11828
  ptr = isl_map_list_copy(ptr);
11829
  return map_list(ptr);
11830
}
11831
 
11832
map_list::map_list()
11833
    : ptr(nullptr) {}
11834
 
11835
map_list::map_list(const map_list &obj)
11836
    : ptr(nullptr)
11837
{
11838
  ptr = obj.copy();
11839
}
11840
 
11841
map_list::map_list(__isl_take isl_map_list *ptr)
11842
    : ptr(ptr) {}
11843
 
11844
map_list::map_list(isl::ctx ctx, int n)
11845
{
11846
  auto res = isl_map_list_alloc(ctx.release(), n);
11847
  ptr = res;
11848
}
11849
 
11850
map_list::map_list(isl::map el)
11851
{
11852
  auto res = isl_map_list_from_map(el.release());
11853
  ptr = res;
11854
}
11855
 
11856
map_list::map_list(isl::ctx ctx, const std::string &str)
11857
{
11858
  auto res = isl_map_list_read_from_str(ctx.release(), str.c_str());
11859
  ptr = res;
11860
}
11861
 
11862
map_list &map_list::operator=(map_list obj) {
11863
  std::swap(this->ptr, obj.ptr);
11864
  return *this;
11865
}
11866
 
11867
map_list::~map_list() {
11868
  if (ptr)
11869
    isl_map_list_free(ptr);
11870
}
11871
 
11872
__isl_give isl_map_list *map_list::copy() const & {
11873
  return isl_map_list_copy(ptr);
11874
}
11875
 
11876
__isl_keep isl_map_list *map_list::get() const {
11877
  return ptr;
11878
}
11879
 
11880
__isl_give isl_map_list *map_list::release() {
11881
  isl_map_list *tmp = ptr;
11882
  ptr = nullptr;
11883
  return tmp;
11884
}
11885
 
11886
bool map_list::is_null() const {
11887
  return ptr == nullptr;
11888
}
11889
 
11890
isl::ctx map_list::ctx() const {
11891
  return isl::ctx(isl_map_list_get_ctx(ptr));
11892
}
11893
 
11894
isl::map_list map_list::add(isl::map el) const
11895
{
11896
  auto res = isl_map_list_add(copy(), el.release());
11897
  return manage(res);
11898
}
11899
 
11900
isl::map map_list::at(int index) const
11901
{
11902
  auto res = isl_map_list_get_at(get(), index);
11903
  return manage(res);
11904
}
11905
 
11906
isl::map map_list::get_at(int index) const
11907
{
11908
  return at(index);
11909
}
11910
 
11911
isl::map_list map_list::clear() const
11912
{
11913
  auto res = isl_map_list_clear(copy());
11914
  return manage(res);
11915
}
11916
 
11917
isl::map_list map_list::concat(isl::map_list list2) const
11918
{
11919
  auto res = isl_map_list_concat(copy(), list2.release());
11920
  return manage(res);
11921
}
11922
 
11923
isl::map_list map_list::drop(unsigned int first, unsigned int n) const
11924
{
11925
  auto res = isl_map_list_drop(copy(), first, n);
11926
  return manage(res);
11927
}
11928
 
11929
stat map_list::foreach(const std::function<stat(isl::map)> &fn) const
11930
{
11931
  struct fn_data {
11932
    std::function<stat(isl::map)> func;
11933
  } fn_data = { fn };
11934
  auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
11935
    auto *data = static_cast<struct fn_data *>(arg_1);
11936
    auto ret = (data->func)(manage(arg_0));
11937
    return ret.release();
11938
  };
11939
  auto res = isl_map_list_foreach(get(), fn_lambda, &fn_data);
11940
  return manage(res);
11941
}
11942
 
11943
isl::map_list map_list::insert(unsigned int pos, isl::map el) const
11944
{
11945
  auto res = isl_map_list_insert(copy(), pos, el.release());
11946
  return manage(res);
11947
}
11948
 
11949
class size map_list::size() const
11950
{
11951
  auto res = isl_map_list_size(get());
11952
  return manage(res);
11953
}
11954
 
11955
inline std::ostream &operator<<(std::ostream &os, const map_list &obj)
11956
{
11957
  char *str = isl_map_list_to_str(obj.get());
11958
  if (!str) {
11959
    os.setstate(std::ios_base::badbit);
11960
    return os;
11961
  }
11962
  os << str;
11963
  free(str);
11964
  return os;
11965
}
11966
 
11967
// implementations for isl::multi_aff
11968
multi_aff manage(__isl_take isl_multi_aff *ptr) {
11969
  return multi_aff(ptr);
11970
}
11971
multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) {
11972
  ptr = isl_multi_aff_copy(ptr);
11973
  return multi_aff(ptr);
11974
}
11975
 
11976
multi_aff::multi_aff()
11977
    : ptr(nullptr) {}
11978
 
11979
multi_aff::multi_aff(const multi_aff &obj)
11980
    : ptr(nullptr)
11981
{
11982
  ptr = obj.copy();
11983
}
11984
 
11985
multi_aff::multi_aff(__isl_take isl_multi_aff *ptr)
11986
    : ptr(ptr) {}
11987
 
11988
multi_aff::multi_aff(isl::aff aff)
11989
{
11990
  auto res = isl_multi_aff_from_aff(aff.release());
11991
  ptr = res;
11992
}
11993
 
11994
multi_aff::multi_aff(isl::space space, isl::aff_list list)
11995
{
11996
  auto res = isl_multi_aff_from_aff_list(space.release(), list.release());
11997
  ptr = res;
11998
}
11999
 
12000
multi_aff::multi_aff(isl::ctx ctx, const std::string &str)
12001
{
12002
  auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str());
12003
  ptr = res;
12004
}
12005
 
12006
multi_aff &multi_aff::operator=(multi_aff obj) {
12007
  std::swap(this->ptr, obj.ptr);
12008
  return *this;
12009
}
12010
 
12011
multi_aff::~multi_aff() {
12012
  if (ptr)
12013
    isl_multi_aff_free(ptr);
12014
}
12015
 
12016
__isl_give isl_multi_aff *multi_aff::copy() const & {
12017
  return isl_multi_aff_copy(ptr);
12018
}
12019
 
12020
__isl_keep isl_multi_aff *multi_aff::get() const {
12021
  return ptr;
12022
}
12023
 
12024
__isl_give isl_multi_aff *multi_aff::release() {
12025
  isl_multi_aff *tmp = ptr;
12026
  ptr = nullptr;
12027
  return tmp;
12028
}
12029
 
12030
bool multi_aff::is_null() const {
12031
  return ptr == nullptr;
12032
}
12033
 
12034
isl::ctx multi_aff::ctx() const {
12035
  return isl::ctx(isl_multi_aff_get_ctx(ptr));
12036
}
12037
 
12038
isl::multi_aff multi_aff::add(isl::multi_aff multi2) const
12039
{
12040
  auto res = isl_multi_aff_add(copy(), multi2.release());
12041
  return manage(res);
12042
}
12043
 
12044
isl::multi_pw_aff multi_aff::add(const isl::multi_pw_aff &multi2) const
12045
{
12046
  return isl::pw_multi_aff(*this).add(multi2);
12047
}
12048
 
12049
isl::multi_union_pw_aff multi_aff::add(const isl::multi_union_pw_aff &multi2) const
12050
{
12051
  return isl::pw_multi_aff(*this).add(multi2);
12052
}
12053
 
12054
isl::pw_multi_aff multi_aff::add(const isl::pw_multi_aff &pma2) const
12055
{
12056
  return isl::pw_multi_aff(*this).add(pma2);
12057
}
12058
 
12059
isl::union_pw_multi_aff multi_aff::add(const isl::union_pw_multi_aff &upma2) const
12060
{
12061
  return isl::pw_multi_aff(*this).add(upma2);
12062
}
12063
 
12064
isl::multi_aff multi_aff::add(const isl::aff &multi2) const
12065
{
12066
  return this->add(isl::multi_aff(multi2));
12067
}
12068
 
12069
isl::multi_aff multi_aff::add_constant(isl::multi_val mv) const
12070
{
12071
  auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release());
12072
  return manage(res);
12073
}
12074
 
12075
isl::multi_aff multi_aff::add_constant(isl::val v) const
12076
{
12077
  auto res = isl_multi_aff_add_constant_val(copy(), v.release());
12078
  return manage(res);
12079
}
12080
 
12081
isl::multi_aff multi_aff::add_constant(long v) const
12082
{
12083
  return this->add_constant(isl::val(ctx(), v));
12084
}
12085
 
12086
isl::union_pw_multi_aff multi_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
12087
{
12088
  return isl::pw_multi_aff(*this).add_pw_multi_aff(pma);
12089
}
12090
 
12091
isl::union_pw_multi_aff multi_aff::apply(const isl::union_pw_multi_aff &upma2) const
12092
{
12093
  return isl::pw_multi_aff(*this).apply(upma2);
12094
}
12095
 
12096
isl::map multi_aff::as_map() const
12097
{
12098
  auto res = isl_multi_aff_as_map(copy());
12099
  return manage(res);
12100
}
12101
 
12102
isl::multi_aff multi_aff::as_multi_aff() const
12103
{
12104
  return isl::pw_multi_aff(*this).as_multi_aff();
12105
}
12106
 
12107
isl::multi_union_pw_aff multi_aff::as_multi_union_pw_aff() const
12108
{
12109
  return isl::pw_multi_aff(*this).as_multi_union_pw_aff();
12110
}
12111
 
12112
isl::pw_multi_aff multi_aff::as_pw_multi_aff() const
12113
{
12114
  return isl::pw_multi_aff(*this).as_pw_multi_aff();
12115
}
12116
 
12117
isl::set multi_aff::as_set() const
12118
{
12119
  auto res = isl_multi_aff_as_set(copy());
12120
  return manage(res);
12121
}
12122
 
12123
isl::union_map multi_aff::as_union_map() const
12124
{
12125
  return isl::pw_multi_aff(*this).as_union_map();
12126
}
12127
 
12128
isl::aff multi_aff::at(int pos) const
12129
{
12130
  auto res = isl_multi_aff_get_at(get(), pos);
12131
  return manage(res);
12132
}
12133
 
12134
isl::aff multi_aff::get_at(int pos) const
12135
{
12136
  return at(pos);
12137
}
12138
 
12139
isl::basic_set multi_aff::bind(isl::multi_id tuple) const
12140
{
12141
  auto res = isl_multi_aff_bind(copy(), tuple.release());
12142
  return manage(res);
12143
}
12144
 
12145
isl::multi_aff multi_aff::bind_domain(isl::multi_id tuple) const
12146
{
12147
  auto res = isl_multi_aff_bind_domain(copy(), tuple.release());
12148
  return manage(res);
12149
}
12150
 
12151
isl::multi_aff multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
12152
{
12153
  auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
12154
  return manage(res);
12155
}
12156
 
12157
isl::pw_multi_aff multi_aff::coalesce() const
12158
{
12159
  return isl::pw_multi_aff(*this).coalesce();
12160
}
12161
 
12162
isl::multi_val multi_aff::constant_multi_val() const
12163
{
12164
  auto res = isl_multi_aff_get_constant_multi_val(get());
12165
  return manage(res);
12166
}
12167
 
12168
isl::multi_val multi_aff::get_constant_multi_val() const
12169
{
12170
  return constant_multi_val();
12171
}
12172
 
12173
class size multi_aff::dim(isl::dim type) const
12174
{
12175
  auto res = isl_multi_aff_dim(get(), static_cast<enum isl_dim_type>(type));
12176
  return manage(res);
12177
}
12178
 
12179
isl::set multi_aff::domain() const
12180
{
12181
  return isl::pw_multi_aff(*this).domain();
12182
}
12183
 
12184
isl::multi_aff multi_aff::domain_map(isl::space space)
12185
{
12186
  auto res = isl_multi_aff_domain_map(space.release());
12187
  return manage(res);
12188
}
12189
 
12190
isl::pw_multi_aff multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
12191
{
12192
  return isl::pw_multi_aff(*this).drop_dims(type, first, n);
12193
}
12194
 
12195
isl::pw_multi_aff multi_aff::extract_pw_multi_aff(const isl::space &space) const
12196
{
12197
  return isl::pw_multi_aff(*this).extract_pw_multi_aff(space);
12198
}
12199
 
12200
isl::multi_aff multi_aff::flat_range_product(isl::multi_aff multi2) const
12201
{
12202
  auto res = isl_multi_aff_flat_range_product(copy(), multi2.release());
12203
  return manage(res);
12204
}
12205
 
12206
isl::multi_pw_aff multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
12207
{
12208
  return isl::pw_multi_aff(*this).flat_range_product(multi2);
12209
}
12210
 
12211
isl::multi_union_pw_aff multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
12212
{
12213
  return isl::pw_multi_aff(*this).flat_range_product(multi2);
12214
}
12215
 
12216
isl::pw_multi_aff multi_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
12217
{
12218
  return isl::pw_multi_aff(*this).flat_range_product(pma2);
12219
}
12220
 
12221
isl::union_pw_multi_aff multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
12222
{
12223
  return isl::pw_multi_aff(*this).flat_range_product(upma2);
12224
}
12225
 
12226
isl::multi_aff multi_aff::flat_range_product(const isl::aff &multi2) const
12227
{
12228
  return this->flat_range_product(isl::multi_aff(multi2));
12229
}
12230
 
12231
isl::multi_aff multi_aff::floor() const
12232
{
12233
  auto res = isl_multi_aff_floor(copy());
12234
  return manage(res);
12235
}
12236
 
12237
stat multi_aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
12238
{
12239
  return isl::pw_multi_aff(*this).foreach_piece(fn);
12240
}
12241
 
12242
isl::multi_aff multi_aff::gist(isl::set context) const
12243
{
12244
  auto res = isl_multi_aff_gist(copy(), context.release());
12245
  return manage(res);
12246
}
12247
 
12248
isl::union_pw_multi_aff multi_aff::gist(const isl::union_set &context) const
12249
{
12250
  return isl::pw_multi_aff(*this).gist(context);
12251
}
12252
 
12253
isl::multi_aff multi_aff::gist(const isl::basic_set &context) const
12254
{
12255
  return this->gist(isl::set(context));
12256
}
12257
 
12258
isl::multi_aff multi_aff::gist(const isl::point &context) const
12259
{
12260
  return this->gist(isl::set(context));
12261
}
12262
 
12263
boolean multi_aff::has_range_tuple_id() const
12264
{
12265
  auto res = isl_multi_aff_has_range_tuple_id(get());
12266
  return manage(res);
12267
}
12268
 
12269
isl::multi_aff multi_aff::identity(isl::space space)
12270
{
12271
  auto res = isl_multi_aff_identity(space.release());
12272
  return manage(res);
12273
}
12274
 
12275
isl::multi_aff multi_aff::identity() const
12276
{
12277
  auto res = isl_multi_aff_identity_multi_aff(copy());
12278
  return manage(res);
12279
}
12280
 
12281
isl::multi_aff multi_aff::identity_on_domain(isl::space space)
12282
{
12283
  auto res = isl_multi_aff_identity_on_domain_space(space.release());
12284
  return manage(res);
12285
}
12286
 
12287
isl::multi_aff multi_aff::insert_domain(isl::space domain) const
12288
{
12289
  auto res = isl_multi_aff_insert_domain(copy(), domain.release());
12290
  return manage(res);
12291
}
12292
 
12293
isl::pw_multi_aff multi_aff::intersect_domain(const isl::set &set) const
12294
{
12295
  return isl::pw_multi_aff(*this).intersect_domain(set);
12296
}
12297
 
12298
isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::space &space) const
12299
{
12300
  return isl::pw_multi_aff(*this).intersect_domain(space);
12301
}
12302
 
12303
isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::union_set &uset) const
12304
{
12305
  return isl::pw_multi_aff(*this).intersect_domain(uset);
12306
}
12307
 
12308
isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
12309
{
12310
  return isl::pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
12311
}
12312
 
12313
isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
12314
{
12315
  return isl::pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
12316
}
12317
 
12318
isl::pw_multi_aff multi_aff::intersect_params(const isl::set &set) const
12319
{
12320
  return isl::pw_multi_aff(*this).intersect_params(set);
12321
}
12322
 
12323
boolean multi_aff::involves_locals() const
12324
{
12325
  auto res = isl_multi_aff_involves_locals(get());
12326
  return manage(res);
12327
}
12328
 
12329
boolean multi_aff::involves_nan() const
12330
{
12331
  auto res = isl_multi_aff_involves_nan(get());
12332
  return manage(res);
12333
}
12334
 
12335
boolean multi_aff::involves_param(const isl::id &id) const
12336
{
12337
  return isl::pw_multi_aff(*this).involves_param(id);
12338
}
12339
 
12340
boolean multi_aff::involves_param(const std::string &id) const
12341
{
12342
  return this->involves_param(isl::id(ctx(), id));
12343
}
12344
 
12345
boolean multi_aff::involves_param(const isl::id_list &list) const
12346
{
12347
  return isl::pw_multi_aff(*this).involves_param(list);
12348
}
12349
 
12350
boolean multi_aff::isa_multi_aff() const
12351
{
12352
  return isl::pw_multi_aff(*this).isa_multi_aff();
12353
}
12354
 
12355
boolean multi_aff::isa_pw_multi_aff() const
12356
{
12357
  return isl::pw_multi_aff(*this).isa_pw_multi_aff();
12358
}
12359
 
12360
isl::aff_list multi_aff::list() const
12361
{
12362
  auto res = isl_multi_aff_get_list(get());
12363
  return manage(res);
12364
}
12365
 
12366
isl::aff_list multi_aff::get_list() const
12367
{
12368
  return list();
12369
}
12370
 
12371
isl::multi_pw_aff multi_aff::max(const isl::multi_pw_aff &multi2) const
12372
{
12373
  return isl::pw_multi_aff(*this).max(multi2);
12374
}
12375
 
12376
isl::multi_val multi_aff::max_multi_val() const
12377
{
12378
  return isl::pw_multi_aff(*this).max_multi_val();
12379
}
12380
 
12381
isl::multi_pw_aff multi_aff::min(const isl::multi_pw_aff &multi2) const
12382
{
12383
  return isl::pw_multi_aff(*this).min(multi2);
12384
}
12385
 
12386
isl::multi_val multi_aff::min_multi_val() const
12387
{
12388
  return isl::pw_multi_aff(*this).min_multi_val();
12389
}
12390
 
12391
isl::multi_aff multi_aff::multi_val_on_domain(isl::space space, isl::multi_val mv)
12392
{
12393
  auto res = isl_multi_aff_multi_val_on_domain_space(space.release(), mv.release());
12394
  return manage(res);
12395
}
12396
 
12397
class size multi_aff::n_piece() const
12398
{
12399
  return isl::pw_multi_aff(*this).n_piece();
12400
}
12401
 
12402
isl::multi_aff multi_aff::neg() const
12403
{
12404
  auto res = isl_multi_aff_neg(copy());
12405
  return manage(res);
12406
}
12407
 
12408
boolean multi_aff::plain_is_empty() const
12409
{
12410
  return isl::pw_multi_aff(*this).plain_is_empty();
12411
}
12412
 
12413
boolean multi_aff::plain_is_equal(const isl::multi_aff &multi2) const
12414
{
12415
  auto res = isl_multi_aff_plain_is_equal(get(), multi2.get());
12416
  return manage(res);
12417
}
12418
 
12419
boolean multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
12420
{
12421
  return isl::pw_multi_aff(*this).plain_is_equal(multi2);
12422
}
12423
 
12424
boolean multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
12425
{
12426
  return isl::pw_multi_aff(*this).plain_is_equal(multi2);
12427
}
12428
 
12429
boolean multi_aff::plain_is_equal(const isl::aff &multi2) const
12430
{
12431
  return this->plain_is_equal(isl::multi_aff(multi2));
12432
}
12433
 
12434
isl::pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
12435
{
12436
  return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
12437
}
12438
 
12439
isl::union_pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
12440
{
12441
  return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
12442
}
12443
 
12444
isl::multi_aff multi_aff::product(isl::multi_aff multi2) const
12445
{
12446
  auto res = isl_multi_aff_product(copy(), multi2.release());
12447
  return manage(res);
12448
}
12449
 
12450
isl::multi_pw_aff multi_aff::product(const isl::multi_pw_aff &multi2) const
12451
{
12452
  return isl::pw_multi_aff(*this).product(multi2);
12453
}
12454
 
12455
isl::pw_multi_aff multi_aff::product(const isl::pw_multi_aff &pma2) const
12456
{
12457
  return isl::pw_multi_aff(*this).product(pma2);
12458
}
12459
 
12460
isl::multi_aff multi_aff::product(const isl::aff &multi2) const
12461
{
12462
  return this->product(isl::multi_aff(multi2));
12463
}
12464
 
12465
isl::multi_aff multi_aff::pullback(isl::multi_aff ma2) const
12466
{
12467
  auto res = isl_multi_aff_pullback_multi_aff(copy(), ma2.release());
12468
  return manage(res);
12469
}
12470
 
12471
isl::multi_pw_aff multi_aff::pullback(const isl::multi_pw_aff &mpa2) const
12472
{
12473
  return isl::pw_multi_aff(*this).pullback(mpa2);
12474
}
12475
 
12476
isl::pw_multi_aff multi_aff::pullback(const isl::pw_multi_aff &pma2) const
12477
{
12478
  return isl::pw_multi_aff(*this).pullback(pma2);
12479
}
12480
 
12481
isl::union_pw_multi_aff multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
12482
{
12483
  return isl::pw_multi_aff(*this).pullback(upma2);
12484
}
12485
 
12486
isl::multi_aff multi_aff::pullback(const isl::aff &ma2) const
12487
{
12488
  return this->pullback(isl::multi_aff(ma2));
12489
}
12490
 
12491
isl::pw_multi_aff_list multi_aff::pw_multi_aff_list() const
12492
{
12493
  return isl::pw_multi_aff(*this).pw_multi_aff_list();
12494
}
12495
 
12496
isl::pw_multi_aff multi_aff::range_factor_domain() const
12497
{
12498
  return isl::pw_multi_aff(*this).range_factor_domain();
12499
}
12500
 
12501
isl::pw_multi_aff multi_aff::range_factor_range() const
12502
{
12503
  return isl::pw_multi_aff(*this).range_factor_range();
12504
}
12505
 
12506
isl::multi_aff multi_aff::range_map(isl::space space)
12507
{
12508
  auto res = isl_multi_aff_range_map(space.release());
12509
  return manage(res);
12510
}
12511
 
12512
isl::multi_aff multi_aff::range_product(isl::multi_aff multi2) const
12513
{
12514
  auto res = isl_multi_aff_range_product(copy(), multi2.release());
12515
  return manage(res);
12516
}
12517
 
12518
isl::multi_pw_aff multi_aff::range_product(const isl::multi_pw_aff &multi2) const
12519
{
12520
  return isl::pw_multi_aff(*this).range_product(multi2);
12521
}
12522
 
12523
isl::multi_union_pw_aff multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
12524
{
12525
  return isl::pw_multi_aff(*this).range_product(multi2);
12526
}
12527
 
12528
isl::pw_multi_aff multi_aff::range_product(const isl::pw_multi_aff &pma2) const
12529
{
12530
  return isl::pw_multi_aff(*this).range_product(pma2);
12531
}
12532
 
12533
isl::union_pw_multi_aff multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
12534
{
12535
  return isl::pw_multi_aff(*this).range_product(upma2);
12536
}
12537
 
12538
isl::multi_aff multi_aff::range_product(const isl::aff &multi2) const
12539
{
12540
  return this->range_product(isl::multi_aff(multi2));
12541
}
12542
 
12543
isl::id multi_aff::range_tuple_id() const
12544
{
12545
  auto res = isl_multi_aff_get_range_tuple_id(get());
12546
  return manage(res);
12547
}
12548
 
12549
isl::id multi_aff::get_range_tuple_id() const
12550
{
12551
  return range_tuple_id();
12552
}
12553
 
12554
isl::multi_aff multi_aff::reset_range_tuple_id() const
12555
{
12556
  auto res = isl_multi_aff_reset_range_tuple_id(copy());
12557
  return manage(res);
12558
}
12559
 
12560
isl::multi_aff multi_aff::reset_tuple_id(isl::dim type) const
12561
{
12562
  auto res = isl_multi_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
12563
  return manage(res);
12564
}
12565
 
12566
isl::multi_aff multi_aff::scale(isl::multi_val mv) const
12567
{
12568
  auto res = isl_multi_aff_scale_multi_val(copy(), mv.release());
12569
  return manage(res);
12570
}
12571
 
12572
isl::multi_aff multi_aff::scale(isl::val v) const
12573
{
12574
  auto res = isl_multi_aff_scale_val(copy(), v.release());
12575
  return manage(res);
12576
}
12577
 
12578
isl::multi_aff multi_aff::scale(long v) const
12579
{
12580
  return this->scale(isl::val(ctx(), v));
12581
}
12582
 
12583
isl::multi_aff multi_aff::scale_down(isl::multi_val mv) const
12584
{
12585
  auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release());
12586
  return manage(res);
12587
}
12588
 
12589
isl::multi_aff multi_aff::scale_down(isl::val v) const
12590
{
12591
  auto res = isl_multi_aff_scale_down_val(copy(), v.release());
12592
  return manage(res);
12593
}
12594
 
12595
isl::multi_aff multi_aff::scale_down(long v) const
12596
{
12597
  return this->scale_down(isl::val(ctx(), v));
12598
}
12599
 
12600
isl::multi_aff multi_aff::set_aff(int pos, isl::aff el) const
12601
{
12602
  auto res = isl_multi_aff_set_aff(copy(), pos, el.release());
12603
  return manage(res);
12604
}
12605
 
12606
isl::multi_aff multi_aff::set_at(int pos, isl::aff el) const
12607
{
12608
  auto res = isl_multi_aff_set_at(copy(), pos, el.release());
12609
  return manage(res);
12610
}
12611
 
12612
isl::multi_pw_aff multi_aff::set_at(int pos, const isl::pw_aff &el) const
12613
{
12614
  return isl::pw_multi_aff(*this).set_at(pos, el);
12615
}
12616
 
12617
isl::multi_union_pw_aff multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
12618
{
12619
  return isl::pw_multi_aff(*this).set_at(pos, el);
12620
}
12621
 
12622
isl::multi_pw_aff multi_aff::set_pw_aff(int pos, const isl::pw_aff &el) const
12623
{
12624
  return isl::pw_multi_aff(*this).set_pw_aff(pos, el);
12625
}
12626
 
12627
isl::pw_multi_aff multi_aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const
12628
{
12629
  return isl::pw_multi_aff(*this).set_pw_aff(pos, pa);
12630
}
12631
 
12632
isl::multi_aff multi_aff::set_range_tuple(isl::id id) const
12633
{
12634
  auto res = isl_multi_aff_set_range_tuple_id(copy(), id.release());
12635
  return manage(res);
12636
}
12637
 
12638
isl::multi_aff multi_aff::set_range_tuple(const std::string &id) const
12639
{
12640
  return this->set_range_tuple(isl::id(ctx(), id));
12641
}
12642
 
12643
isl::multi_union_pw_aff multi_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
12644
{
12645
  return isl::pw_multi_aff(*this).set_union_pw_aff(pos, el);
12646
}
12647
 
12648
class size multi_aff::size() const
12649
{
12650
  auto res = isl_multi_aff_size(get());
12651
  return manage(res);
12652
}
12653
 
12654
isl::space multi_aff::space() const
12655
{
12656
  auto res = isl_multi_aff_get_space(get());
12657
  return manage(res);
12658
}
12659
 
12660
isl::space multi_aff::get_space() const
12661
{
12662
  return space();
12663
}
12664
 
12665
isl::multi_aff multi_aff::sub(isl::multi_aff multi2) const
12666
{
12667
  auto res = isl_multi_aff_sub(copy(), multi2.release());
12668
  return manage(res);
12669
}
12670
 
12671
isl::multi_pw_aff multi_aff::sub(const isl::multi_pw_aff &multi2) const
12672
{
12673
  return isl::pw_multi_aff(*this).sub(multi2);
12674
}
12675
 
12676
isl::multi_union_pw_aff multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
12677
{
12678
  return isl::pw_multi_aff(*this).sub(multi2);
12679
}
12680
 
12681
isl::pw_multi_aff multi_aff::sub(const isl::pw_multi_aff &pma2) const
12682
{
12683
  return isl::pw_multi_aff(*this).sub(pma2);
12684
}
12685
 
12686
isl::union_pw_multi_aff multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
12687
{
12688
  return isl::pw_multi_aff(*this).sub(upma2);
12689
}
12690
 
12691
isl::multi_aff multi_aff::sub(const isl::aff &multi2) const
12692
{
12693
  return this->sub(isl::multi_aff(multi2));
12694
}
12695
 
12696
isl::pw_multi_aff multi_aff::subtract_domain(const isl::set &set) const
12697
{
12698
  return isl::pw_multi_aff(*this).subtract_domain(set);
12699
}
12700
 
12701
isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::space &space) const
12702
{
12703
  return isl::pw_multi_aff(*this).subtract_domain(space);
12704
}
12705
 
12706
isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::union_set &uset) const
12707
{
12708
  return isl::pw_multi_aff(*this).subtract_domain(uset);
12709
}
12710
 
12711
isl::pw_multi_aff_list multi_aff::to_list() const
12712
{
12713
  return isl::pw_multi_aff(*this).to_list();
12714
}
12715
 
12716
isl::multi_pw_aff multi_aff::to_multi_pw_aff() const
12717
{
12718
  auto res = isl_multi_aff_to_multi_pw_aff(copy());
12719
  return manage(res);
12720
}
12721
 
12722
isl::multi_union_pw_aff multi_aff::to_multi_union_pw_aff() const
12723
{
12724
  auto res = isl_multi_aff_to_multi_union_pw_aff(copy());
12725
  return manage(res);
12726
}
12727
 
12728
isl::pw_multi_aff multi_aff::to_pw_multi_aff() const
12729
{
12730
  auto res = isl_multi_aff_to_pw_multi_aff(copy());
12731
  return manage(res);
12732
}
12733
 
12734
isl::union_pw_multi_aff multi_aff::to_union_pw_multi_aff() const
12735
{
12736
  return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
12737
}
12738
 
12739
isl::id multi_aff::tuple_id(isl::dim type) const
12740
{
12741
  return isl::pw_multi_aff(*this).tuple_id(type);
12742
}
12743
 
12744
isl::multi_aff multi_aff::unbind_params_insert_domain(isl::multi_id domain) const
12745
{
12746
  auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release());
12747
  return manage(res);
12748
}
12749
 
12750
isl::multi_pw_aff multi_aff::union_add(const isl::multi_pw_aff &mpa2) const
12751
{
12752
  return isl::pw_multi_aff(*this).union_add(mpa2);
12753
}
12754
 
12755
isl::multi_union_pw_aff multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
12756
{
12757
  return isl::pw_multi_aff(*this).union_add(mupa2);
12758
}
12759
 
12760
isl::pw_multi_aff multi_aff::union_add(const isl::pw_multi_aff &pma2) const
12761
{
12762
  return isl::pw_multi_aff(*this).union_add(pma2);
12763
}
12764
 
12765
isl::union_pw_multi_aff multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
12766
{
12767
  return isl::pw_multi_aff(*this).union_add(upma2);
12768
}
12769
 
12770
isl::multi_aff multi_aff::zero(isl::space space)
12771
{
12772
  auto res = isl_multi_aff_zero(space.release());
12773
  return manage(res);
12774
}
12775
 
12776
inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj)
12777
{
12778
  char *str = isl_multi_aff_to_str(obj.get());
12779
  if (!str) {
12780
    os.setstate(std::ios_base::badbit);
12781
    return os;
12782
  }
12783
  os << str;
12784
  free(str);
12785
  return os;
12786
}
12787
 
12788
// implementations for isl::multi_id
12789
multi_id manage(__isl_take isl_multi_id *ptr) {
12790
  return multi_id(ptr);
12791
}
12792
multi_id manage_copy(__isl_keep isl_multi_id *ptr) {
12793
  ptr = isl_multi_id_copy(ptr);
12794
  return multi_id(ptr);
12795
}
12796
 
12797
multi_id::multi_id()
12798
    : ptr(nullptr) {}
12799
 
12800
multi_id::multi_id(const multi_id &obj)
12801
    : ptr(nullptr)
12802
{
12803
  ptr = obj.copy();
12804
}
12805
 
12806
multi_id::multi_id(__isl_take isl_multi_id *ptr)
12807
    : ptr(ptr) {}
12808
 
12809
multi_id::multi_id(isl::space space, isl::id_list list)
12810
{
12811
  auto res = isl_multi_id_from_id_list(space.release(), list.release());
12812
  ptr = res;
12813
}
12814
 
12815
multi_id::multi_id(isl::ctx ctx, const std::string &str)
12816
{
12817
  auto res = isl_multi_id_read_from_str(ctx.release(), str.c_str());
12818
  ptr = res;
12819
}
12820
 
12821
multi_id &multi_id::operator=(multi_id obj) {
12822
  std::swap(this->ptr, obj.ptr);
12823
  return *this;
12824
}
12825
 
12826
multi_id::~multi_id() {
12827
  if (ptr)
12828
    isl_multi_id_free(ptr);
12829
}
12830
 
12831
__isl_give isl_multi_id *multi_id::copy() const & {
12832
  return isl_multi_id_copy(ptr);
12833
}
12834
 
12835
__isl_keep isl_multi_id *multi_id::get() const {
12836
  return ptr;
12837
}
12838
 
12839
__isl_give isl_multi_id *multi_id::release() {
12840
  isl_multi_id *tmp = ptr;
12841
  ptr = nullptr;
12842
  return tmp;
12843
}
12844
 
12845
bool multi_id::is_null() const {
12846
  return ptr == nullptr;
12847
}
12848
 
12849
isl::ctx multi_id::ctx() const {
12850
  return isl::ctx(isl_multi_id_get_ctx(ptr));
12851
}
12852
 
12853
isl::id multi_id::at(int pos) const
12854
{
12855
  auto res = isl_multi_id_get_at(get(), pos);
12856
  return manage(res);
12857
}
12858
 
12859
isl::id multi_id::get_at(int pos) const
12860
{
12861
  return at(pos);
12862
}
12863
 
12864
isl::multi_id multi_id::flat_range_product(isl::multi_id multi2) const
12865
{
12866
  auto res = isl_multi_id_flat_range_product(copy(), multi2.release());
12867
  return manage(res);
12868
}
12869
 
12870
isl::id_list multi_id::list() const
12871
{
12872
  auto res = isl_multi_id_get_list(get());
12873
  return manage(res);
12874
}
12875
 
12876
isl::id_list multi_id::get_list() const
12877
{
12878
  return list();
12879
}
12880
 
12881
boolean multi_id::plain_is_equal(const isl::multi_id &multi2) const
12882
{
12883
  auto res = isl_multi_id_plain_is_equal(get(), multi2.get());
12884
  return manage(res);
12885
}
12886
 
12887
isl::multi_id multi_id::range_product(isl::multi_id multi2) const
12888
{
12889
  auto res = isl_multi_id_range_product(copy(), multi2.release());
12890
  return manage(res);
12891
}
12892
 
12893
isl::multi_id multi_id::set_at(int pos, isl::id el) const
12894
{
12895
  auto res = isl_multi_id_set_at(copy(), pos, el.release());
12896
  return manage(res);
12897
}
12898
 
12899
isl::multi_id multi_id::set_at(int pos, const std::string &el) const
12900
{
12901
  return this->set_at(pos, isl::id(ctx(), el));
12902
}
12903
 
12904
isl::multi_id multi_id::set_id(int pos, isl::id el) const
12905
{
12906
  auto res = isl_multi_id_set_id(copy(), pos, el.release());
12907
  return manage(res);
12908
}
12909
 
12910
isl::multi_id multi_id::set_id(int pos, const std::string &el) const
12911
{
12912
  return this->set_id(pos, isl::id(ctx(), el));
12913
}
12914
 
12915
class size multi_id::size() const
12916
{
12917
  auto res = isl_multi_id_size(get());
12918
  return manage(res);
12919
}
12920
 
12921
isl::space multi_id::space() const
12922
{
12923
  auto res = isl_multi_id_get_space(get());
12924
  return manage(res);
12925
}
12926
 
12927
isl::space multi_id::get_space() const
12928
{
12929
  return space();
12930
}
12931
 
12932
inline std::ostream &operator<<(std::ostream &os, const multi_id &obj)
12933
{
12934
  char *str = isl_multi_id_to_str(obj.get());
12935
  if (!str) {
12936
    os.setstate(std::ios_base::badbit);
12937
    return os;
12938
  }
12939
  os << str;
12940
  free(str);
12941
  return os;
12942
}
12943
 
12944
// implementations for isl::multi_pw_aff
12945
multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr) {
12946
  return multi_pw_aff(ptr);
12947
}
12948
multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr) {
12949
  ptr = isl_multi_pw_aff_copy(ptr);
12950
  return multi_pw_aff(ptr);
12951
}
12952
 
12953
multi_pw_aff::multi_pw_aff()
12954
    : ptr(nullptr) {}
12955
 
12956
multi_pw_aff::multi_pw_aff(const multi_pw_aff &obj)
12957
    : ptr(nullptr)
12958
{
12959
  ptr = obj.copy();
12960
}
12961
 
12962
multi_pw_aff::multi_pw_aff(__isl_take isl_multi_pw_aff *ptr)
12963
    : ptr(ptr) {}
12964
 
12965
multi_pw_aff::multi_pw_aff(isl::aff aff)
12966
{
12967
  auto res = isl_multi_pw_aff_from_aff(aff.release());
12968
  ptr = res;
12969
}
12970
 
12971
multi_pw_aff::multi_pw_aff(isl::multi_aff ma)
12972
{
12973
  auto res = isl_multi_pw_aff_from_multi_aff(ma.release());
12974
  ptr = res;
12975
}
12976
 
12977
multi_pw_aff::multi_pw_aff(isl::pw_aff pa)
12978
{
12979
  auto res = isl_multi_pw_aff_from_pw_aff(pa.release());
12980
  ptr = res;
12981
}
12982
 
12983
multi_pw_aff::multi_pw_aff(isl::space space, isl::pw_aff_list list)
12984
{
12985
  auto res = isl_multi_pw_aff_from_pw_aff_list(space.release(), list.release());
12986
  ptr = res;
12987
}
12988
 
12989
multi_pw_aff::multi_pw_aff(isl::pw_multi_aff pma)
12990
{
12991
  auto res = isl_multi_pw_aff_from_pw_multi_aff(pma.release());
12992
  ptr = res;
12993
}
12994
 
12995
multi_pw_aff::multi_pw_aff(isl::ctx ctx, const std::string &str)
12996
{
12997
  auto res = isl_multi_pw_aff_read_from_str(ctx.release(), str.c_str());
12998
  ptr = res;
12999
}
13000
 
13001
multi_pw_aff &multi_pw_aff::operator=(multi_pw_aff obj) {
13002
  std::swap(this->ptr, obj.ptr);
13003
  return *this;
13004
}
13005
 
13006
multi_pw_aff::~multi_pw_aff() {
13007
  if (ptr)
13008
    isl_multi_pw_aff_free(ptr);
13009
}
13010
 
13011
__isl_give isl_multi_pw_aff *multi_pw_aff::copy() const & {
13012
  return isl_multi_pw_aff_copy(ptr);
13013
}
13014
 
13015
__isl_keep isl_multi_pw_aff *multi_pw_aff::get() const {
13016
  return ptr;
13017
}
13018
 
13019
__isl_give isl_multi_pw_aff *multi_pw_aff::release() {
13020
  isl_multi_pw_aff *tmp = ptr;
13021
  ptr = nullptr;
13022
  return tmp;
13023
}
13024
 
13025
bool multi_pw_aff::is_null() const {
13026
  return ptr == nullptr;
13027
}
13028
 
13029
isl::ctx multi_pw_aff::ctx() const {
13030
  return isl::ctx(isl_multi_pw_aff_get_ctx(ptr));
13031
}
13032
 
13033
isl::multi_pw_aff multi_pw_aff::add(isl::multi_pw_aff multi2) const
13034
{
13035
  auto res = isl_multi_pw_aff_add(copy(), multi2.release());
13036
  return manage(res);
13037
}
13038
 
13039
isl::multi_union_pw_aff multi_pw_aff::add(const isl::multi_union_pw_aff &multi2) const
13040
{
13041
  return isl::multi_union_pw_aff(*this).add(multi2);
13042
}
13043
 
13044
isl::multi_pw_aff multi_pw_aff::add(const isl::aff &multi2) const
13045
{
13046
  return this->add(isl::multi_pw_aff(multi2));
13047
}
13048
 
13049
isl::multi_pw_aff multi_pw_aff::add(const isl::multi_aff &multi2) const
13050
{
13051
  return this->add(isl::multi_pw_aff(multi2));
13052
}
13053
 
13054
isl::multi_pw_aff multi_pw_aff::add(const isl::pw_aff &multi2) const
13055
{
13056
  return this->add(isl::multi_pw_aff(multi2));
13057
}
13058
 
13059
isl::multi_pw_aff multi_pw_aff::add(const isl::pw_multi_aff &multi2) const
13060
{
13061
  return this->add(isl::multi_pw_aff(multi2));
13062
}
13063
 
13064
isl::multi_pw_aff multi_pw_aff::add_constant(isl::multi_val mv) const
13065
{
13066
  auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release());
13067
  return manage(res);
13068
}
13069
 
13070
isl::multi_pw_aff multi_pw_aff::add_constant(isl::val v) const
13071
{
13072
  auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release());
13073
  return manage(res);
13074
}
13075
 
13076
isl::multi_pw_aff multi_pw_aff::add_constant(long v) const
13077
{
13078
  return this->add_constant(isl::val(ctx(), v));
13079
}
13080
 
13081
isl::map multi_pw_aff::as_map() const
13082
{
13083
  auto res = isl_multi_pw_aff_as_map(copy());
13084
  return manage(res);
13085
}
13086
 
13087
isl::multi_aff multi_pw_aff::as_multi_aff() const
13088
{
13089
  auto res = isl_multi_pw_aff_as_multi_aff(copy());
13090
  return manage(res);
13091
}
13092
 
13093
isl::set multi_pw_aff::as_set() const
13094
{
13095
  auto res = isl_multi_pw_aff_as_set(copy());
13096
  return manage(res);
13097
}
13098
 
13099
isl::pw_aff multi_pw_aff::at(int pos) const
13100
{
13101
  auto res = isl_multi_pw_aff_get_at(get(), pos);
13102
  return manage(res);
13103
}
13104
 
13105
isl::pw_aff multi_pw_aff::get_at(int pos) const
13106
{
13107
  return at(pos);
13108
}
13109
 
13110
isl::set multi_pw_aff::bind(isl::multi_id tuple) const
13111
{
13112
  auto res = isl_multi_pw_aff_bind(copy(), tuple.release());
13113
  return manage(res);
13114
}
13115
 
13116
isl::multi_pw_aff multi_pw_aff::bind_domain(isl::multi_id tuple) const
13117
{
13118
  auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release());
13119
  return manage(res);
13120
}
13121
 
13122
isl::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
13123
{
13124
  auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
13125
  return manage(res);
13126
}
13127
 
13128
isl::multi_pw_aff multi_pw_aff::coalesce() const
13129
{
13130
  auto res = isl_multi_pw_aff_coalesce(copy());
13131
  return manage(res);
13132
}
13133
 
13134
class size multi_pw_aff::dim(isl::dim type) const
13135
{
13136
  auto res = isl_multi_pw_aff_dim(get(), static_cast<enum isl_dim_type>(type));
13137
  return manage(res);
13138
}
13139
 
13140
isl::set multi_pw_aff::domain() const
13141
{
13142
  auto res = isl_multi_pw_aff_domain(copy());
13143
  return manage(res);
13144
}
13145
 
13146
isl::multi_pw_aff multi_pw_aff::flat_range_product(isl::multi_pw_aff multi2) const
13147
{
13148
  auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release());
13149
  return manage(res);
13150
}
13151
 
13152
isl::multi_union_pw_aff multi_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
13153
{
13154
  return isl::multi_union_pw_aff(*this).flat_range_product(multi2);
13155
}
13156
 
13157
isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::aff &multi2) const
13158
{
13159
  return this->flat_range_product(isl::multi_pw_aff(multi2));
13160
}
13161
 
13162
isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::multi_aff &multi2) const
13163
{
13164
  return this->flat_range_product(isl::multi_pw_aff(multi2));
13165
}
13166
 
13167
isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_aff &multi2) const
13168
{
13169
  return this->flat_range_product(isl::multi_pw_aff(multi2));
13170
}
13171
 
13172
isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_multi_aff &multi2) const
13173
{
13174
  return this->flat_range_product(isl::multi_pw_aff(multi2));
13175
}
13176
 
13177
isl::multi_pw_aff multi_pw_aff::gist(isl::set set) const
13178
{
13179
  auto res = isl_multi_pw_aff_gist(copy(), set.release());
13180
  return manage(res);
13181
}
13182
 
13183
isl::multi_union_pw_aff multi_pw_aff::gist(const isl::union_set &context) const
13184
{
13185
  return isl::multi_union_pw_aff(*this).gist(context);
13186
}
13187
 
13188
isl::multi_pw_aff multi_pw_aff::gist(const isl::basic_set &set) const
13189
{
13190
  return this->gist(isl::set(set));
13191
}
13192
 
13193
isl::multi_pw_aff multi_pw_aff::gist(const isl::point &set) const
13194
{
13195
  return this->gist(isl::set(set));
13196
}
13197
 
13198
boolean multi_pw_aff::has_range_tuple_id() const
13199
{
13200
  auto res = isl_multi_pw_aff_has_range_tuple_id(get());
13201
  return manage(res);
13202
}
13203
 
13204
isl::multi_pw_aff multi_pw_aff::identity(isl::space space)
13205
{
13206
  auto res = isl_multi_pw_aff_identity(space.release());
13207
  return manage(res);
13208
}
13209
 
13210
isl::multi_pw_aff multi_pw_aff::identity() const
13211
{
13212
  auto res = isl_multi_pw_aff_identity_multi_pw_aff(copy());
13213
  return manage(res);
13214
}
13215
 
13216
isl::multi_pw_aff multi_pw_aff::identity_on_domain(isl::space space)
13217
{
13218
  auto res = isl_multi_pw_aff_identity_on_domain_space(space.release());
13219
  return manage(res);
13220
}
13221
 
13222
isl::multi_pw_aff multi_pw_aff::insert_domain(isl::space domain) const
13223
{
13224
  auto res = isl_multi_pw_aff_insert_domain(copy(), domain.release());
13225
  return manage(res);
13226
}
13227
 
13228
isl::multi_pw_aff multi_pw_aff::intersect_domain(isl::set domain) const
13229
{
13230
  auto res = isl_multi_pw_aff_intersect_domain(copy(), domain.release());
13231
  return manage(res);
13232
}
13233
 
13234
isl::multi_union_pw_aff multi_pw_aff::intersect_domain(const isl::union_set &uset) const
13235
{
13236
  return isl::multi_union_pw_aff(*this).intersect_domain(uset);
13237
}
13238
 
13239
isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::basic_set &domain) const
13240
{
13241
  return this->intersect_domain(isl::set(domain));
13242
}
13243
 
13244
isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::point &domain) const
13245
{
13246
  return this->intersect_domain(isl::set(domain));
13247
}
13248
 
13249
isl::multi_pw_aff multi_pw_aff::intersect_params(isl::set set) const
13250
{
13251
  auto res = isl_multi_pw_aff_intersect_params(copy(), set.release());
13252
  return manage(res);
13253
}
13254
 
13255
boolean multi_pw_aff::involves_nan() const
13256
{
13257
  auto res = isl_multi_pw_aff_involves_nan(get());
13258
  return manage(res);
13259
}
13260
 
13261
boolean multi_pw_aff::involves_param(const isl::id &id) const
13262
{
13263
  auto res = isl_multi_pw_aff_involves_param_id(get(), id.get());
13264
  return manage(res);
13265
}
13266
 
13267
boolean multi_pw_aff::involves_param(const std::string &id) const
13268
{
13269
  return this->involves_param(isl::id(ctx(), id));
13270
}
13271
 
13272
boolean multi_pw_aff::involves_param(const isl::id_list &list) const
13273
{
13274
  auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get());
13275
  return manage(res);
13276
}
13277
 
13278
boolean multi_pw_aff::isa_multi_aff() const
13279
{
13280
  auto res = isl_multi_pw_aff_isa_multi_aff(get());
13281
  return manage(res);
13282
}
13283
 
13284
isl::pw_aff_list multi_pw_aff::list() const
13285
{
13286
  auto res = isl_multi_pw_aff_get_list(get());
13287
  return manage(res);
13288
}
13289
 
13290
isl::pw_aff_list multi_pw_aff::get_list() const
13291
{
13292
  return list();
13293
}
13294
 
13295
isl::multi_pw_aff multi_pw_aff::max(isl::multi_pw_aff multi2) const
13296
{
13297
  auto res = isl_multi_pw_aff_max(copy(), multi2.release());
13298
  return manage(res);
13299
}
13300
 
13301
isl::multi_val multi_pw_aff::max_multi_val() const
13302
{
13303
  auto res = isl_multi_pw_aff_max_multi_val(copy());
13304
  return manage(res);
13305
}
13306
 
13307
isl::multi_pw_aff multi_pw_aff::min(isl::multi_pw_aff multi2) const
13308
{
13309
  auto res = isl_multi_pw_aff_min(copy(), multi2.release());
13310
  return manage(res);
13311
}
13312
 
13313
isl::multi_val multi_pw_aff::min_multi_val() const
13314
{
13315
  auto res = isl_multi_pw_aff_min_multi_val(copy());
13316
  return manage(res);
13317
}
13318
 
13319
isl::multi_pw_aff multi_pw_aff::neg() const
13320
{
13321
  auto res = isl_multi_pw_aff_neg(copy());
13322
  return manage(res);
13323
}
13324
 
13325
boolean multi_pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
13326
{
13327
  auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get());
13328
  return manage(res);
13329
}
13330
 
13331
boolean multi_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
13332
{
13333
  return isl::multi_union_pw_aff(*this).plain_is_equal(multi2);
13334
}
13335
 
13336
boolean multi_pw_aff::plain_is_equal(const isl::aff &multi2) const
13337
{
13338
  return this->plain_is_equal(isl::multi_pw_aff(multi2));
13339
}
13340
 
13341
boolean multi_pw_aff::plain_is_equal(const isl::multi_aff &multi2) const
13342
{
13343
  return this->plain_is_equal(isl::multi_pw_aff(multi2));
13344
}
13345
 
13346
boolean multi_pw_aff::plain_is_equal(const isl::pw_aff &multi2) const
13347
{
13348
  return this->plain_is_equal(isl::multi_pw_aff(multi2));
13349
}
13350
 
13351
boolean multi_pw_aff::plain_is_equal(const isl::pw_multi_aff &multi2) const
13352
{
13353
  return this->plain_is_equal(isl::multi_pw_aff(multi2));
13354
}
13355
 
13356
isl::multi_pw_aff multi_pw_aff::product(isl::multi_pw_aff multi2) const
13357
{
13358
  auto res = isl_multi_pw_aff_product(copy(), multi2.release());
13359
  return manage(res);
13360
}
13361
 
13362
isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_aff ma) const
13363
{
13364
  auto res = isl_multi_pw_aff_pullback_multi_aff(copy(), ma.release());
13365
  return manage(res);
13366
}
13367
 
13368
isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_pw_aff mpa2) const
13369
{
13370
  auto res = isl_multi_pw_aff_pullback_multi_pw_aff(copy(), mpa2.release());
13371
  return manage(res);
13372
}
13373
 
13374
isl::multi_pw_aff multi_pw_aff::pullback(isl::pw_multi_aff pma) const
13375
{
13376
  auto res = isl_multi_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
13377
  return manage(res);
13378
}
13379
 
13380
isl::multi_union_pw_aff multi_pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
13381
{
13382
  return isl::multi_union_pw_aff(*this).pullback(upma);
13383
}
13384
 
13385
isl::multi_pw_aff multi_pw_aff::range_product(isl::multi_pw_aff multi2) const
13386
{
13387
  auto res = isl_multi_pw_aff_range_product(copy(), multi2.release());
13388
  return manage(res);
13389
}
13390
 
13391
isl::multi_union_pw_aff multi_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
13392
{
13393
  return isl::multi_union_pw_aff(*this).range_product(multi2);
13394
}
13395
 
13396
isl::multi_pw_aff multi_pw_aff::range_product(const isl::aff &multi2) const
13397
{
13398
  return this->range_product(isl::multi_pw_aff(multi2));
13399
}
13400
 
13401
isl::multi_pw_aff multi_pw_aff::range_product(const isl::multi_aff &multi2) const
13402
{
13403
  return this->range_product(isl::multi_pw_aff(multi2));
13404
}
13405
 
13406
isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_aff &multi2) const
13407
{
13408
  return this->range_product(isl::multi_pw_aff(multi2));
13409
}
13410
 
13411
isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_multi_aff &multi2) const
13412
{
13413
  return this->range_product(isl::multi_pw_aff(multi2));
13414
}
13415
 
13416
isl::id multi_pw_aff::range_tuple_id() const
13417
{
13418
  auto res = isl_multi_pw_aff_get_range_tuple_id(get());
13419
  return manage(res);
13420
}
13421
 
13422
isl::id multi_pw_aff::get_range_tuple_id() const
13423
{
13424
  return range_tuple_id();
13425
}
13426
 
13427
isl::multi_pw_aff multi_pw_aff::reset_range_tuple_id() const
13428
{
13429
  auto res = isl_multi_pw_aff_reset_range_tuple_id(copy());
13430
  return manage(res);
13431
}
13432
 
13433
isl::multi_pw_aff multi_pw_aff::reset_tuple_id(isl::dim type) const
13434
{
13435
  auto res = isl_multi_pw_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
13436
  return manage(res);
13437
}
13438
 
13439
isl::multi_pw_aff multi_pw_aff::scale(isl::multi_val mv) const
13440
{
13441
  auto res = isl_multi_pw_aff_scale_multi_val(copy(), mv.release());
13442
  return manage(res);
13443
}
13444
 
13445
isl::multi_pw_aff multi_pw_aff::scale(isl::val v) const
13446
{
13447
  auto res = isl_multi_pw_aff_scale_val(copy(), v.release());
13448
  return manage(res);
13449
}
13450
 
13451
isl::multi_pw_aff multi_pw_aff::scale(long v) const
13452
{
13453
  return this->scale(isl::val(ctx(), v));
13454
}
13455
 
13456
isl::multi_pw_aff multi_pw_aff::scale_down(isl::multi_val mv) const
13457
{
13458
  auto res = isl_multi_pw_aff_scale_down_multi_val(copy(), mv.release());
13459
  return manage(res);
13460
}
13461
 
13462
isl::multi_pw_aff multi_pw_aff::scale_down(isl::val v) const
13463
{
13464
  auto res = isl_multi_pw_aff_scale_down_val(copy(), v.release());
13465
  return manage(res);
13466
}
13467
 
13468
isl::multi_pw_aff multi_pw_aff::scale_down(long v) const
13469
{
13470
  return this->scale_down(isl::val(ctx(), v));
13471
}
13472
 
13473
isl::multi_pw_aff multi_pw_aff::set_at(int pos, isl::pw_aff el) const
13474
{
13475
  auto res = isl_multi_pw_aff_set_at(copy(), pos, el.release());
13476
  return manage(res);
13477
}
13478
 
13479
isl::multi_union_pw_aff multi_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
13480
{
13481
  return isl::multi_union_pw_aff(*this).set_at(pos, el);
13482
}
13483
 
13484
isl::multi_pw_aff multi_pw_aff::set_pw_aff(int pos, isl::pw_aff el) const
13485
{
13486
  auto res = isl_multi_pw_aff_set_pw_aff(copy(), pos, el.release());
13487
  return manage(res);
13488
}
13489
 
13490
isl::multi_pw_aff multi_pw_aff::set_range_tuple(isl::id id) const
13491
{
13492
  auto res = isl_multi_pw_aff_set_range_tuple_id(copy(), id.release());
13493
  return manage(res);
13494
}
13495
 
13496
isl::multi_pw_aff multi_pw_aff::set_range_tuple(const std::string &id) const
13497
{
13498
  return this->set_range_tuple(isl::id(ctx(), id));
13499
}
13500
 
13501
isl::multi_union_pw_aff multi_pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
13502
{
13503
  return isl::multi_union_pw_aff(*this).set_union_pw_aff(pos, el);
13504
}
13505
 
13506
class size multi_pw_aff::size() const
13507
{
13508
  auto res = isl_multi_pw_aff_size(get());
13509
  return manage(res);
13510
}
13511
 
13512
isl::space multi_pw_aff::space() const
13513
{
13514
  auto res = isl_multi_pw_aff_get_space(get());
13515
  return manage(res);
13516
}
13517
 
13518
isl::space multi_pw_aff::get_space() const
13519
{
13520
  return space();
13521
}
13522
 
13523
isl::multi_pw_aff multi_pw_aff::sub(isl::multi_pw_aff multi2) const
13524
{
13525
  auto res = isl_multi_pw_aff_sub(copy(), multi2.release());
13526
  return manage(res);
13527
}
13528
 
13529
isl::multi_union_pw_aff multi_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
13530
{
13531
  return isl::multi_union_pw_aff(*this).sub(multi2);
13532
}
13533
 
13534
isl::multi_pw_aff multi_pw_aff::sub(const isl::aff &multi2) const
13535
{
13536
  return this->sub(isl::multi_pw_aff(multi2));
13537
}
13538
 
13539
isl::multi_pw_aff multi_pw_aff::sub(const isl::multi_aff &multi2) const
13540
{
13541
  return this->sub(isl::multi_pw_aff(multi2));
13542
}
13543
 
13544
isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_aff &multi2) const
13545
{
13546
  return this->sub(isl::multi_pw_aff(multi2));
13547
}
13548
 
13549
isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_multi_aff &multi2) const
13550
{
13551
  return this->sub(isl::multi_pw_aff(multi2));
13552
}
13553
 
13554
isl::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::multi_id domain) const
13555
{
13556
  auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release());
13557
  return manage(res);
13558
}
13559
 
13560
isl::multi_pw_aff multi_pw_aff::union_add(isl::multi_pw_aff mpa2) const
13561
{
13562
  auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release());
13563
  return manage(res);
13564
}
13565
 
13566
isl::multi_union_pw_aff multi_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
13567
{
13568
  return isl::multi_union_pw_aff(*this).union_add(mupa2);
13569
}
13570
 
13571
isl::multi_pw_aff multi_pw_aff::union_add(const isl::aff &mpa2) const
13572
{
13573
  return this->union_add(isl::multi_pw_aff(mpa2));
13574
}
13575
 
13576
isl::multi_pw_aff multi_pw_aff::union_add(const isl::multi_aff &mpa2) const
13577
{
13578
  return this->union_add(isl::multi_pw_aff(mpa2));
13579
}
13580
 
13581
isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_aff &mpa2) const
13582
{
13583
  return this->union_add(isl::multi_pw_aff(mpa2));
13584
}
13585
 
13586
isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_multi_aff &mpa2) const
13587
{
13588
  return this->union_add(isl::multi_pw_aff(mpa2));
13589
}
13590
 
13591
isl::multi_pw_aff multi_pw_aff::zero(isl::space space)
13592
{
13593
  auto res = isl_multi_pw_aff_zero(space.release());
13594
  return manage(res);
13595
}
13596
 
13597
inline std::ostream &operator<<(std::ostream &os, const multi_pw_aff &obj)
13598
{
13599
  char *str = isl_multi_pw_aff_to_str(obj.get());
13600
  if (!str) {
13601
    os.setstate(std::ios_base::badbit);
13602
    return os;
13603
  }
13604
  os << str;
13605
  free(str);
13606
  return os;
13607
}
13608
 
13609
// implementations for isl::multi_union_pw_aff
13610
multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr) {
13611
  return multi_union_pw_aff(ptr);
13612
}
13613
multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr) {
13614
  ptr = isl_multi_union_pw_aff_copy(ptr);
13615
  return multi_union_pw_aff(ptr);
13616
}
13617
 
13618
multi_union_pw_aff::multi_union_pw_aff()
13619
    : ptr(nullptr) {}
13620
 
13621
multi_union_pw_aff::multi_union_pw_aff(const multi_union_pw_aff &obj)
13622
    : ptr(nullptr)
13623
{
13624
  ptr = obj.copy();
13625
}
13626
 
13627
multi_union_pw_aff::multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr)
13628
    : ptr(ptr) {}
13629
 
13630
multi_union_pw_aff::multi_union_pw_aff(isl::multi_pw_aff mpa)
13631
{
13632
  auto res = isl_multi_union_pw_aff_from_multi_pw_aff(mpa.release());
13633
  ptr = res;
13634
}
13635
 
13636
multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_aff upa)
13637
{
13638
  auto res = isl_multi_union_pw_aff_from_union_pw_aff(upa.release());
13639
  ptr = res;
13640
}
13641
 
13642
multi_union_pw_aff::multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list)
13643
{
13644
  auto res = isl_multi_union_pw_aff_from_union_pw_aff_list(space.release(), list.release());
13645
  ptr = res;
13646
}
13647
 
13648
multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_multi_aff upma)
13649
{
13650
  auto res = isl_multi_union_pw_aff_from_union_pw_multi_aff(upma.release());
13651
  ptr = res;
13652
}
13653
 
13654
multi_union_pw_aff::multi_union_pw_aff(isl::ctx ctx, const std::string &str)
13655
{
13656
  auto res = isl_multi_union_pw_aff_read_from_str(ctx.release(), str.c_str());
13657
  ptr = res;
13658
}
13659
 
13660
multi_union_pw_aff &multi_union_pw_aff::operator=(multi_union_pw_aff obj) {
13661
  std::swap(this->ptr, obj.ptr);
13662
  return *this;
13663
}
13664
 
13665
multi_union_pw_aff::~multi_union_pw_aff() {
13666
  if (ptr)
13667
    isl_multi_union_pw_aff_free(ptr);
13668
}
13669
 
13670
__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::copy() const & {
13671
  return isl_multi_union_pw_aff_copy(ptr);
13672
}
13673
 
13674
__isl_keep isl_multi_union_pw_aff *multi_union_pw_aff::get() const {
13675
  return ptr;
13676
}
13677
 
13678
__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::release() {
13679
  isl_multi_union_pw_aff *tmp = ptr;
13680
  ptr = nullptr;
13681
  return tmp;
13682
}
13683
 
13684
bool multi_union_pw_aff::is_null() const {
13685
  return ptr == nullptr;
13686
}
13687
 
13688
isl::ctx multi_union_pw_aff::ctx() const {
13689
  return isl::ctx(isl_multi_union_pw_aff_get_ctx(ptr));
13690
}
13691
 
13692
isl::multi_union_pw_aff multi_union_pw_aff::add(isl::multi_union_pw_aff multi2) const
13693
{
13694
  auto res = isl_multi_union_pw_aff_add(copy(), multi2.release());
13695
  return manage(res);
13696
}
13697
 
13698
isl::union_pw_aff multi_union_pw_aff::at(int pos) const
13699
{
13700
  auto res = isl_multi_union_pw_aff_get_at(get(), pos);
13701
  return manage(res);
13702
}
13703
 
13704
isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const
13705
{
13706
  return at(pos);
13707
}
13708
 
13709
isl::union_set multi_union_pw_aff::bind(isl::multi_id tuple) const
13710
{
13711
  auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release());
13712
  return manage(res);
13713
}
13714
 
13715
isl::multi_union_pw_aff multi_union_pw_aff::coalesce() const
13716
{
13717
  auto res = isl_multi_union_pw_aff_coalesce(copy());
13718
  return manage(res);
13719
}
13720
 
13721
class size multi_union_pw_aff::dim(isl::dim type) const
13722
{
13723
  auto res = isl_multi_union_pw_aff_dim(get(), static_cast<enum isl_dim_type>(type));
13724
  return manage(res);
13725
}
13726
 
13727
isl::union_set multi_union_pw_aff::domain() const
13728
{
13729
  auto res = isl_multi_union_pw_aff_domain(copy());
13730
  return manage(res);
13731
}
13732
 
13733
isl::multi_union_pw_aff multi_union_pw_aff::flat_range_product(isl::multi_union_pw_aff multi2) const
13734
{
13735
  auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release());
13736
  return manage(res);
13737
}
13738
 
13739
isl::multi_union_pw_aff multi_union_pw_aff::from_union_map(isl::union_map umap)
13740
{
13741
  auto res = isl_multi_union_pw_aff_from_union_map(umap.release());
13742
  return manage(res);
13743
}
13744
 
13745
isl::multi_union_pw_aff multi_union_pw_aff::gist(isl::union_set context) const
13746
{
13747
  auto res = isl_multi_union_pw_aff_gist(copy(), context.release());
13748
  return manage(res);
13749
}
13750
 
13751
boolean multi_union_pw_aff::has_range_tuple_id() const
13752
{
13753
  auto res = isl_multi_union_pw_aff_has_range_tuple_id(get());
13754
  return manage(res);
13755
}
13756
 
13757
isl::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::union_set uset) const
13758
{
13759
  auto res = isl_multi_union_pw_aff_intersect_domain(copy(), uset.release());
13760
  return manage(res);
13761
}
13762
 
13763
isl::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::set params) const
13764
{
13765
  auto res = isl_multi_union_pw_aff_intersect_params(copy(), params.release());
13766
  return manage(res);
13767
}
13768
 
13769
boolean multi_union_pw_aff::involves_nan() const
13770
{
13771
  auto res = isl_multi_union_pw_aff_involves_nan(get());
13772
  return manage(res);
13773
}
13774
 
13775
isl::union_pw_aff_list multi_union_pw_aff::list() const
13776
{
13777
  auto res = isl_multi_union_pw_aff_get_list(get());
13778
  return manage(res);
13779
}
13780
 
13781
isl::union_pw_aff_list multi_union_pw_aff::get_list() const
13782
{
13783
  return list();
13784
}
13785
 
13786
isl::multi_union_pw_aff multi_union_pw_aff::neg() const
13787
{
13788
  auto res = isl_multi_union_pw_aff_neg(copy());
13789
  return manage(res);
13790
}
13791
 
13792
boolean multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
13793
{
13794
  auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get());
13795
  return manage(res);
13796
}
13797
 
13798
isl::multi_union_pw_aff multi_union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
13799
{
13800
  auto res = isl_multi_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
13801
  return manage(res);
13802
}
13803
 
13804
isl::multi_union_pw_aff multi_union_pw_aff::range_product(isl::multi_union_pw_aff multi2) const
13805
{
13806
  auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release());
13807
  return manage(res);
13808
}
13809
 
13810
isl::id multi_union_pw_aff::range_tuple_id() const
13811
{
13812
  auto res = isl_multi_union_pw_aff_get_range_tuple_id(get());
13813
  return manage(res);
13814
}
13815
 
13816
isl::id multi_union_pw_aff::get_range_tuple_id() const
13817
{
13818
  return range_tuple_id();
13819
}
13820
 
13821
isl::multi_union_pw_aff multi_union_pw_aff::reset_range_tuple_id() const
13822
{
13823
  auto res = isl_multi_union_pw_aff_reset_range_tuple_id(copy());
13824
  return manage(res);
13825
}
13826
 
13827
isl::multi_union_pw_aff multi_union_pw_aff::reset_tuple_id(isl::dim type) const
13828
{
13829
  auto res = isl_multi_union_pw_aff_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
13830
  return manage(res);
13831
}
13832
 
13833
isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::multi_val mv) const
13834
{
13835
  auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release());
13836
  return manage(res);
13837
}
13838
 
13839
isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::val v) const
13840
{
13841
  auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release());
13842
  return manage(res);
13843
}
13844
 
13845
isl::multi_union_pw_aff multi_union_pw_aff::scale(long v) const
13846
{
13847
  return this->scale(isl::val(ctx(), v));
13848
}
13849
 
13850
isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::multi_val mv) const
13851
{
13852
  auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release());
13853
  return manage(res);
13854
}
13855
 
13856
isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::val v) const
13857
{
13858
  auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release());
13859
  return manage(res);
13860
}
13861
 
13862
isl::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const
13863
{
13864
  return this->scale_down(isl::val(ctx(), v));
13865
}
13866
 
13867
isl::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::union_pw_aff el) const
13868
{
13869
  auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release());
13870
  return manage(res);
13871
}
13872
 
13873
isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(isl::id id) const
13874
{
13875
  auto res = isl_multi_union_pw_aff_set_range_tuple_id(copy(), id.release());
13876
  return manage(res);
13877
}
13878
 
13879
isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(const std::string &id) const
13880
{
13881
  return this->set_range_tuple(isl::id(ctx(), id));
13882
}
13883
 
13884
isl::multi_union_pw_aff multi_union_pw_aff::set_union_pw_aff(int pos, isl::union_pw_aff el) const
13885
{
13886
  auto res = isl_multi_union_pw_aff_set_union_pw_aff(copy(), pos, el.release());
13887
  return manage(res);
13888
}
13889
 
13890
class size multi_union_pw_aff::size() const
13891
{
13892
  auto res = isl_multi_union_pw_aff_size(get());
13893
  return manage(res);
13894
}
13895
 
13896
isl::space multi_union_pw_aff::space() const
13897
{
13898
  auto res = isl_multi_union_pw_aff_get_space(get());
13899
  return manage(res);
13900
}
13901
 
13902
isl::space multi_union_pw_aff::get_space() const
13903
{
13904
  return space();
13905
}
13906
 
13907
isl::multi_union_pw_aff multi_union_pw_aff::sub(isl::multi_union_pw_aff multi2) const
13908
{
13909
  auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release());
13910
  return manage(res);
13911
}
13912
 
13913
isl::multi_union_pw_aff multi_union_pw_aff::union_add(isl::multi_union_pw_aff mupa2) const
13914
{
13915
  auto res = isl_multi_union_pw_aff_union_add(copy(), mupa2.release());
13916
  return manage(res);
13917
}
13918
 
13919
isl::multi_union_pw_aff multi_union_pw_aff::zero(isl::space space)
13920
{
13921
  auto res = isl_multi_union_pw_aff_zero(space.release());
13922
  return manage(res);
13923
}
13924
 
13925
inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj)
13926
{
13927
  char *str = isl_multi_union_pw_aff_to_str(obj.get());
13928
  if (!str) {
13929
    os.setstate(std::ios_base::badbit);
13930
    return os;
13931
  }
13932
  os << str;
13933
  free(str);
13934
  return os;
13935
}
13936
 
13937
// implementations for isl::multi_val
13938
multi_val manage(__isl_take isl_multi_val *ptr) {
13939
  return multi_val(ptr);
13940
}
13941
multi_val manage_copy(__isl_keep isl_multi_val *ptr) {
13942
  ptr = isl_multi_val_copy(ptr);
13943
  return multi_val(ptr);
13944
}
13945
 
13946
multi_val::multi_val()
13947
    : ptr(nullptr) {}
13948
 
13949
multi_val::multi_val(const multi_val &obj)
13950
    : ptr(nullptr)
13951
{
13952
  ptr = obj.copy();
13953
}
13954
 
13955
multi_val::multi_val(__isl_take isl_multi_val *ptr)
13956
    : ptr(ptr) {}
13957
 
13958
multi_val::multi_val(isl::space space, isl::val_list list)
13959
{
13960
  auto res = isl_multi_val_from_val_list(space.release(), list.release());
13961
  ptr = res;
13962
}
13963
 
13964
multi_val::multi_val(isl::ctx ctx, const std::string &str)
13965
{
13966
  auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str());
13967
  ptr = res;
13968
}
13969
 
13970
multi_val &multi_val::operator=(multi_val obj) {
13971
  std::swap(this->ptr, obj.ptr);
13972
  return *this;
13973
}
13974
 
13975
multi_val::~multi_val() {
13976
  if (ptr)
13977
    isl_multi_val_free(ptr);
13978
}
13979
 
13980
__isl_give isl_multi_val *multi_val::copy() const & {
13981
  return isl_multi_val_copy(ptr);
13982
}
13983
 
13984
__isl_keep isl_multi_val *multi_val::get() const {
13985
  return ptr;
13986
}
13987
 
13988
__isl_give isl_multi_val *multi_val::release() {
13989
  isl_multi_val *tmp = ptr;
13990
  ptr = nullptr;
13991
  return tmp;
13992
}
13993
 
13994
bool multi_val::is_null() const {
13995
  return ptr == nullptr;
13996
}
13997
 
13998
isl::ctx multi_val::ctx() const {
13999
  return isl::ctx(isl_multi_val_get_ctx(ptr));
14000
}
14001
 
14002
isl::multi_val multi_val::add(isl::multi_val multi2) const
14003
{
14004
  auto res = isl_multi_val_add(copy(), multi2.release());
14005
  return manage(res);
14006
}
14007
 
14008
isl::multi_val multi_val::add(isl::val v) const
14009
{
14010
  auto res = isl_multi_val_add_val(copy(), v.release());
14011
  return manage(res);
14012
}
14013
 
14014
isl::multi_val multi_val::add(long v) const
14015
{
14016
  return this->add(isl::val(ctx(), v));
14017
}
14018
 
14019
isl::val multi_val::at(int pos) const
14020
{
14021
  auto res = isl_multi_val_get_at(get(), pos);
14022
  return manage(res);
14023
}
14024
 
14025
isl::val multi_val::get_at(int pos) const
14026
{
14027
  return at(pos);
14028
}
14029
 
14030
class size multi_val::dim(isl::dim type) const
14031
{
14032
  auto res = isl_multi_val_dim(get(), static_cast<enum isl_dim_type>(type));
14033
  return manage(res);
14034
}
14035
 
14036
isl::multi_val multi_val::flat_range_product(isl::multi_val multi2) const
14037
{
14038
  auto res = isl_multi_val_flat_range_product(copy(), multi2.release());
14039
  return manage(res);
14040
}
14041
 
14042
boolean multi_val::has_range_tuple_id() const
14043
{
14044
  auto res = isl_multi_val_has_range_tuple_id(get());
14045
  return manage(res);
14046
}
14047
 
14048
boolean multi_val::involves_nan() const
14049
{
14050
  auto res = isl_multi_val_involves_nan(get());
14051
  return manage(res);
14052
}
14053
 
14054
isl::val_list multi_val::list() const
14055
{
14056
  auto res = isl_multi_val_get_list(get());
14057
  return manage(res);
14058
}
14059
 
14060
isl::val_list multi_val::get_list() const
14061
{
14062
  return list();
14063
}
14064
 
14065
isl::multi_val multi_val::max(isl::multi_val multi2) const
14066
{
14067
  auto res = isl_multi_val_max(copy(), multi2.release());
14068
  return manage(res);
14069
}
14070
 
14071
isl::multi_val multi_val::min(isl::multi_val multi2) const
14072
{
14073
  auto res = isl_multi_val_min(copy(), multi2.release());
14074
  return manage(res);
14075
}
14076
 
14077
isl::multi_val multi_val::neg() const
14078
{
14079
  auto res = isl_multi_val_neg(copy());
14080
  return manage(res);
14081
}
14082
 
14083
boolean multi_val::plain_is_equal(const isl::multi_val &multi2) const
14084
{
14085
  auto res = isl_multi_val_plain_is_equal(get(), multi2.get());
14086
  return manage(res);
14087
}
14088
 
14089
isl::multi_val multi_val::product(isl::multi_val multi2) const
14090
{
14091
  auto res = isl_multi_val_product(copy(), multi2.release());
14092
  return manage(res);
14093
}
14094
 
14095
isl::multi_val multi_val::range_product(isl::multi_val multi2) const
14096
{
14097
  auto res = isl_multi_val_range_product(copy(), multi2.release());
14098
  return manage(res);
14099
}
14100
 
14101
isl::id multi_val::range_tuple_id() const
14102
{
14103
  auto res = isl_multi_val_get_range_tuple_id(get());
14104
  return manage(res);
14105
}
14106
 
14107
isl::id multi_val::get_range_tuple_id() const
14108
{
14109
  return range_tuple_id();
14110
}
14111
 
14112
isl::multi_val multi_val::reset_range_tuple_id() const
14113
{
14114
  auto res = isl_multi_val_reset_range_tuple_id(copy());
14115
  return manage(res);
14116
}
14117
 
14118
isl::multi_val multi_val::reset_tuple_id(isl::dim type) const
14119
{
14120
  auto res = isl_multi_val_reset_tuple_id(copy(), static_cast<enum isl_dim_type>(type));
14121
  return manage(res);
14122
}
14123
 
14124
isl::multi_val multi_val::scale(isl::multi_val mv) const
14125
{
14126
  auto res = isl_multi_val_scale_multi_val(copy(), mv.release());
14127
  return manage(res);
14128
}
14129
 
14130
isl::multi_val multi_val::scale(isl::val v) const
14131
{
14132
  auto res = isl_multi_val_scale_val(copy(), v.release());
14133
  return manage(res);
14134
}
14135
 
14136
isl::multi_val multi_val::scale(long v) const
14137
{
14138
  return this->scale(isl::val(ctx(), v));
14139
}
14140
 
14141
isl::multi_val multi_val::scale_down(isl::multi_val mv) const
14142
{
14143
  auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release());
14144
  return manage(res);
14145
}
14146
 
14147
isl::multi_val multi_val::scale_down(isl::val v) const
14148
{
14149
  auto res = isl_multi_val_scale_down_val(copy(), v.release());
14150
  return manage(res);
14151
}
14152
 
14153
isl::multi_val multi_val::scale_down(long v) const
14154
{
14155
  return this->scale_down(isl::val(ctx(), v));
14156
}
14157
 
14158
isl::multi_val multi_val::set_at(int pos, isl::val el) const
14159
{
14160
  auto res = isl_multi_val_set_at(copy(), pos, el.release());
14161
  return manage(res);
14162
}
14163
 
14164
isl::multi_val multi_val::set_at(int pos, long el) const
14165
{
14166
  return this->set_at(pos, isl::val(ctx(), el));
14167
}
14168
 
14169
isl::multi_val multi_val::set_range_tuple(isl::id id) const
14170
{
14171
  auto res = isl_multi_val_set_range_tuple_id(copy(), id.release());
14172
  return manage(res);
14173
}
14174
 
14175
isl::multi_val multi_val::set_range_tuple(const std::string &id) const
14176
{
14177
  return this->set_range_tuple(isl::id(ctx(), id));
14178
}
14179
 
14180
isl::multi_val multi_val::set_val(int pos, isl::val el) const
14181
{
14182
  auto res = isl_multi_val_set_val(copy(), pos, el.release());
14183
  return manage(res);
14184
}
14185
 
14186
isl::multi_val multi_val::set_val(int pos, long el) const
14187
{
14188
  return this->set_val(pos, isl::val(ctx(), el));
14189
}
14190
 
14191
class size multi_val::size() const
14192
{
14193
  auto res = isl_multi_val_size(get());
14194
  return manage(res);
14195
}
14196
 
14197
isl::space multi_val::space() const
14198
{
14199
  auto res = isl_multi_val_get_space(get());
14200
  return manage(res);
14201
}
14202
 
14203
isl::space multi_val::get_space() const
14204
{
14205
  return space();
14206
}
14207
 
14208
isl::multi_val multi_val::sub(isl::multi_val multi2) const
14209
{
14210
  auto res = isl_multi_val_sub(copy(), multi2.release());
14211
  return manage(res);
14212
}
14213
 
14214
isl::multi_val multi_val::zero(isl::space space)
14215
{
14216
  auto res = isl_multi_val_zero(space.release());
14217
  return manage(res);
14218
}
14219
 
14220
inline std::ostream &operator<<(std::ostream &os, const multi_val &obj)
14221
{
14222
  char *str = isl_multi_val_to_str(obj.get());
14223
  if (!str) {
14224
    os.setstate(std::ios_base::badbit);
14225
    return os;
14226
  }
14227
  os << str;
14228
  free(str);
14229
  return os;
14230
}
14231
 
14232
// implementations for isl::point
14233
point manage(__isl_take isl_point *ptr) {
14234
  return point(ptr);
14235
}
14236
point manage_copy(__isl_keep isl_point *ptr) {
14237
  ptr = isl_point_copy(ptr);
14238
  return point(ptr);
14239
}
14240
 
14241
point::point()
14242
    : ptr(nullptr) {}
14243
 
14244
point::point(const point &obj)
14245
    : ptr(nullptr)
14246
{
14247
  ptr = obj.copy();
14248
}
14249
 
14250
point::point(__isl_take isl_point *ptr)
14251
    : ptr(ptr) {}
14252
 
14253
point::point(isl::space space)
14254
{
14255
  auto res = isl_point_zero(space.release());
14256
  ptr = res;
14257
}
14258
 
14259
point &point::operator=(point obj) {
14260
  std::swap(this->ptr, obj.ptr);
14261
  return *this;
14262
}
14263
 
14264
point::~point() {
14265
  if (ptr)
14266
    isl_point_free(ptr);
14267
}
14268
 
14269
__isl_give isl_point *point::copy() const & {
14270
  return isl_point_copy(ptr);
14271
}
14272
 
14273
__isl_keep isl_point *point::get() const {
14274
  return ptr;
14275
}
14276
 
14277
__isl_give isl_point *point::release() {
14278
  isl_point *tmp = ptr;
14279
  ptr = nullptr;
14280
  return tmp;
14281
}
14282
 
14283
bool point::is_null() const {
14284
  return ptr == nullptr;
14285
}
14286
 
14287
isl::ctx point::ctx() const {
14288
  return isl::ctx(isl_point_get_ctx(ptr));
14289
}
14290
 
14291
isl::set point::add_constraint(const isl::constraint &constraint) const
14292
{
14293
  return isl::basic_set(*this).add_constraint(constraint);
14294
}
14295
 
14296
isl::set point::add_dims(isl::dim type, unsigned int n) const
14297
{
14298
  return isl::basic_set(*this).add_dims(type, n);
14299
}
14300
 
14301
isl::basic_set point::affine_hull() const
14302
{
14303
  return isl::basic_set(*this).affine_hull();
14304
}
14305
 
14306
isl::set point::align_params(const isl::space &model) const
14307
{
14308
  return isl::basic_set(*this).align_params(model);
14309
}
14310
 
14311
isl::basic_set point::apply(const isl::basic_map &bmap) const
14312
{
14313
  return isl::basic_set(*this).apply(bmap);
14314
}
14315
 
14316
isl::set point::apply(const isl::map &map) const
14317
{
14318
  return isl::basic_set(*this).apply(map);
14319
}
14320
 
14321
isl::union_set point::apply(const isl::union_map &umap) const
14322
{
14323
  return isl::basic_set(*this).apply(umap);
14324
}
14325
 
14326
isl::pw_multi_aff point::as_pw_multi_aff() const
14327
{
14328
  return isl::basic_set(*this).as_pw_multi_aff();
14329
}
14330
 
14331
isl::set point::as_set() const
14332
{
14333
  return isl::basic_set(*this).as_set();
14334
}
14335
 
14336
isl::basic_set_list point::basic_set_list() const
14337
{
14338
  return isl::basic_set(*this).basic_set_list();
14339
}
14340
 
14341
isl::set point::bind(const isl::multi_id &tuple) const
14342
{
14343
  return isl::basic_set(*this).bind(tuple);
14344
}
14345
 
14346
isl::set point::coalesce() const
14347
{
14348
  return isl::basic_set(*this).coalesce();
14349
}
14350
 
14351
isl::set point::complement() const
14352
{
14353
  return isl::basic_set(*this).complement();
14354
}
14355
 
14356
isl::union_set point::compute_divs() const
14357
{
14358
  return isl::basic_set(*this).compute_divs();
14359
}
14360
 
14361
boolean point::contains(const isl::space &space) const
14362
{
14363
  return isl::basic_set(*this).contains(space);
14364
}
14365
 
14366
isl::basic_set point::convex_hull() const
14367
{
14368
  return isl::basic_set(*this).convex_hull();
14369
}
14370
 
14371
isl::val point::coordinate_val(isl::dim type, int pos) const
14372
{
14373
  auto res = isl_point_get_coordinate_val(get(), static_cast<enum isl_dim_type>(type), pos);
14374
  return manage(res);
14375
}
14376
 
14377
isl::val point::get_coordinate_val(isl::dim type, int pos) const
14378
{
14379
  return coordinate_val(type, pos);
14380
}
14381
 
14382
isl::basic_set point::detect_equalities() const
14383
{
14384
  return isl::basic_set(*this).detect_equalities();
14385
}
14386
 
14387
class size point::dim(isl::dim type) const
14388
{
14389
  return isl::basic_set(*this).dim(type);
14390
}
14391
 
14392
boolean point::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const
14393
{
14394
  return isl::basic_set(*this).dim_has_any_lower_bound(type, pos);
14395
}
14396
 
14397
isl::id point::dim_id(isl::dim type, unsigned int pos) const
14398
{
14399
  return isl::basic_set(*this).dim_id(type, pos);
14400
}
14401
 
14402
isl::pw_aff point::dim_max(int pos) const
14403
{
14404
  return isl::basic_set(*this).dim_max(pos);
14405
}
14406
 
14407
isl::val point::dim_max_val(int pos) const
14408
{
14409
  return isl::basic_set(*this).dim_max_val(pos);
14410
}
14411
 
14412
isl::pw_aff point::dim_min(int pos) const
14413
{
14414
  return isl::basic_set(*this).dim_min(pos);
14415
}
14416
 
14417
isl::val point::dim_min_val(int pos) const
14418
{
14419
  return isl::basic_set(*this).dim_min_val(pos);
14420
}
14421
 
14422
std::string point::dim_name(isl::dim type, unsigned int pos) const
14423
{
14424
  return isl::basic_set(*this).dim_name(type, pos);
14425
}
14426
 
14427
isl::aff point::div(int pos) const
14428
{
14429
  return isl::basic_set(*this).div(pos);
14430
}
14431
 
14432
isl::set point::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const
14433
{
14434
  return isl::basic_set(*this).drop_constraints_involving_dims(type, first, n);
14435
}
14436
 
14437
isl::set point::eliminate(isl::dim type, unsigned int first, unsigned int n) const
14438
{
14439
  return isl::basic_set(*this).eliminate(type, first, n);
14440
}
14441
 
14442
boolean point::every_set(const std::function<boolean(isl::set)> &test) const
14443
{
14444
  return isl::basic_set(*this).every_set(test);
14445
}
14446
 
14447
isl::set point::extract_set(const isl::space &space) const
14448
{
14449
  return isl::basic_set(*this).extract_set(space);
14450
}
14451
 
14452
int point::find_dim_by_id(isl::dim type, const isl::id &id) const
14453
{
14454
  return isl::basic_set(*this).find_dim_by_id(type, id);
14455
}
14456
 
14457
int point::find_dim_by_id(isl::dim type, const std::string &id) const
14458
{
14459
  return this->find_dim_by_id(type, isl::id(ctx(), id));
14460
}
14461
 
14462
isl::basic_set point::fix_si(isl::dim type, unsigned int pos, int value) const
14463
{
14464
  return isl::basic_set(*this).fix_si(type, pos, value);
14465
}
14466
 
14467
isl::basic_set point::fix_val(isl::dim type, unsigned int pos, const isl::val &v) const
14468
{
14469
  return isl::basic_set(*this).fix_val(type, pos, v);
14470
}
14471
 
14472
isl::basic_set point::fix_val(isl::dim type, unsigned int pos, long v) const
14473
{
14474
  return this->fix_val(type, pos, isl::val(ctx(), v));
14475
}
14476
 
14477
isl::basic_set point::flatten() const
14478
{
14479
  return isl::basic_set(*this).flatten();
14480
}
14481
 
14482
stat point::foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const
14483
{
14484
  return isl::basic_set(*this).foreach_basic_set(fn);
14485
}
14486
 
14487
stat point::foreach_point(const std::function<stat(isl::point)> &fn) const
14488
{
14489
  return isl::basic_set(*this).foreach_point(fn);
14490
}
14491
 
14492
stat point::foreach_set(const std::function<stat(isl::set)> &fn) const
14493
{
14494
  return isl::basic_set(*this).foreach_set(fn);
14495
}
14496
 
14497
isl::basic_set point::gist(const isl::basic_set &context) const
14498
{
14499
  return isl::basic_set(*this).gist(context);
14500
}
14501
 
14502
isl::set point::gist(const isl::set &context) const
14503
{
14504
  return isl::basic_set(*this).gist(context);
14505
}
14506
 
14507
isl::union_set point::gist(const isl::union_set &context) const
14508
{
14509
  return isl::basic_set(*this).gist(context);
14510
}
14511
 
14512
isl::set point::gist_params(const isl::set &context) const
14513
{
14514
  return isl::basic_set(*this).gist_params(context);
14515
}
14516
 
14517
boolean point::has_equal_space(const isl::set &set2) const
14518
{
14519
  return isl::basic_set(*this).has_equal_space(set2);
14520
}
14521
 
14522
isl::map point::identity() const
14523
{
14524
  return isl::basic_set(*this).identity();
14525
}
14526
 
14527
isl::union_pw_multi_aff point::identity_union_pw_multi_aff() const
14528
{
14529
  return isl::basic_set(*this).identity_union_pw_multi_aff();
14530
}
14531
 
14532
isl::pw_aff point::indicator_function() const
14533
{
14534
  return isl::basic_set(*this).indicator_function();
14535
}
14536
 
14537
isl::set point::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
14538
{
14539
  return isl::basic_set(*this).insert_dims(type, pos, n);
14540
}
14541
 
14542
isl::map point::insert_domain(const isl::space &domain) const
14543
{
14544
  return isl::basic_set(*this).insert_domain(domain);
14545
}
14546
 
14547
isl::basic_set point::intersect(const isl::basic_set &bset2) const
14548
{
14549
  return isl::basic_set(*this).intersect(bset2);
14550
}
14551
 
14552
isl::set point::intersect(const isl::set &set2) const
14553
{
14554
  return isl::basic_set(*this).intersect(set2);
14555
}
14556
 
14557
isl::union_set point::intersect(const isl::union_set &uset2) const
14558
{
14559
  return isl::basic_set(*this).intersect(uset2);
14560
}
14561
 
14562
isl::basic_set point::intersect_params(const isl::basic_set &bset2) const
14563
{
14564
  return isl::basic_set(*this).intersect_params(bset2);
14565
}
14566
 
14567
isl::set point::intersect_params(const isl::set &params) const
14568
{
14569
  return isl::basic_set(*this).intersect_params(params);
14570
}
14571
 
14572
boolean point::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
14573
{
14574
  return isl::basic_set(*this).involves_dims(type, first, n);
14575
}
14576
 
14577
boolean point::involves_locals() const
14578
{
14579
  return isl::basic_set(*this).involves_locals();
14580
}
14581
 
14582
boolean point::is_bounded() const
14583
{
14584
  return isl::basic_set(*this).is_bounded();
14585
}
14586
 
14587
boolean point::is_disjoint(const isl::set &set2) const
14588
{
14589
  return isl::basic_set(*this).is_disjoint(set2);
14590
}
14591
 
14592
boolean point::is_disjoint(const isl::union_set &uset2) const
14593
{
14594
  return isl::basic_set(*this).is_disjoint(uset2);
14595
}
14596
 
14597
boolean point::is_empty() const
14598
{
14599
  return isl::basic_set(*this).is_empty();
14600
}
14601
 
14602
boolean point::is_equal(const isl::basic_set &bset2) const
14603
{
14604
  return isl::basic_set(*this).is_equal(bset2);
14605
}
14606
 
14607
boolean point::is_equal(const isl::set &set2) const
14608
{
14609
  return isl::basic_set(*this).is_equal(set2);
14610
}
14611
 
14612
boolean point::is_equal(const isl::union_set &uset2) const
14613
{
14614
  return isl::basic_set(*this).is_equal(uset2);
14615
}
14616
 
14617
boolean point::is_params() const
14618
{
14619
  return isl::basic_set(*this).is_params();
14620
}
14621
 
14622
boolean point::is_singleton() const
14623
{
14624
  return isl::basic_set(*this).is_singleton();
14625
}
14626
 
14627
boolean point::is_strict_subset(const isl::set &set2) const
14628
{
14629
  return isl::basic_set(*this).is_strict_subset(set2);
14630
}
14631
 
14632
boolean point::is_strict_subset(const isl::union_set &uset2) const
14633
{
14634
  return isl::basic_set(*this).is_strict_subset(uset2);
14635
}
14636
 
14637
boolean point::is_subset(const isl::basic_set &bset2) const
14638
{
14639
  return isl::basic_set(*this).is_subset(bset2);
14640
}
14641
 
14642
boolean point::is_subset(const isl::set &set2) const
14643
{
14644
  return isl::basic_set(*this).is_subset(set2);
14645
}
14646
 
14647
boolean point::is_subset(const isl::union_set &uset2) const
14648
{
14649
  return isl::basic_set(*this).is_subset(uset2);
14650
}
14651
 
14652
boolean point::is_wrapping() const
14653
{
14654
  return isl::basic_set(*this).is_wrapping();
14655
}
14656
 
14657
boolean point::isa_set() const
14658
{
14659
  return isl::basic_set(*this).isa_set();
14660
}
14661
 
14662
isl::set point::lexmax() const
14663
{
14664
  return isl::basic_set(*this).lexmax();
14665
}
14666
 
14667
isl::pw_multi_aff point::lexmax_pw_multi_aff() const
14668
{
14669
  return isl::basic_set(*this).lexmax_pw_multi_aff();
14670
}
14671
 
14672
isl::set point::lexmin() const
14673
{
14674
  return isl::basic_set(*this).lexmin();
14675
}
14676
 
14677
isl::pw_multi_aff point::lexmin_pw_multi_aff() const
14678
{
14679
  return isl::basic_set(*this).lexmin_pw_multi_aff();
14680
}
14681
 
14682
isl::set point::lower_bound(const isl::multi_pw_aff &lower) const
14683
{
14684
  return isl::basic_set(*this).lower_bound(lower);
14685
}
14686
 
14687
isl::set point::lower_bound(const isl::multi_val &lower) const
14688
{
14689
  return isl::basic_set(*this).lower_bound(lower);
14690
}
14691
 
14692
isl::set point::lower_bound_si(isl::dim type, unsigned int pos, int value) const
14693
{
14694
  return isl::basic_set(*this).lower_bound_si(type, pos, value);
14695
}
14696
 
14697
isl::set point::lower_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
14698
{
14699
  return isl::basic_set(*this).lower_bound_val(type, pos, value);
14700
}
14701
 
14702
isl::set point::lower_bound_val(isl::dim type, unsigned int pos, long value) const
14703
{
14704
  return this->lower_bound_val(type, pos, isl::val(ctx(), value));
14705
}
14706
 
14707
isl::multi_pw_aff point::max_multi_pw_aff() const
14708
{
14709
  return isl::basic_set(*this).max_multi_pw_aff();
14710
}
14711
 
14712
isl::val point::max_val(const isl::aff &obj) const
14713
{
14714
  return isl::basic_set(*this).max_val(obj);
14715
}
14716
 
14717
isl::multi_pw_aff point::min_multi_pw_aff() const
14718
{
14719
  return isl::basic_set(*this).min_multi_pw_aff();
14720
}
14721
 
14722
isl::val point::min_val(const isl::aff &obj) const
14723
{
14724
  return isl::basic_set(*this).min_val(obj);
14725
}
14726
 
14727
isl::multi_val point::multi_val() const
14728
{
14729
  auto res = isl_point_get_multi_val(get());
14730
  return manage(res);
14731
}
14732
 
14733
isl::multi_val point::get_multi_val() const
14734
{
14735
  return multi_val();
14736
}
14737
 
14738
class size point::n_basic_set() const
14739
{
14740
  return isl::basic_set(*this).n_basic_set();
14741
}
14742
 
14743
isl::basic_set point::params() const
14744
{
14745
  return isl::basic_set(*this).params();
14746
}
14747
 
14748
isl::val point::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
14749
{
14750
  return isl::basic_set(*this).plain_get_val_if_fixed(type, pos);
14751
}
14752
 
14753
isl::multi_val point::plain_multi_val_if_fixed() const
14754
{
14755
  return isl::basic_set(*this).plain_multi_val_if_fixed();
14756
}
14757
 
14758
isl::basic_set point::polyhedral_hull() const
14759
{
14760
  return isl::basic_set(*this).polyhedral_hull();
14761
}
14762
 
14763
isl::set point::preimage(const isl::multi_aff &ma) const
14764
{
14765
  return isl::basic_set(*this).preimage(ma);
14766
}
14767
 
14768
isl::set point::preimage(const isl::multi_pw_aff &mpa) const
14769
{
14770
  return isl::basic_set(*this).preimage(mpa);
14771
}
14772
 
14773
isl::set point::preimage(const isl::pw_multi_aff &pma) const
14774
{
14775
  return isl::basic_set(*this).preimage(pma);
14776
}
14777
 
14778
isl::union_set point::preimage(const isl::union_pw_multi_aff &upma) const
14779
{
14780
  return isl::basic_set(*this).preimage(upma);
14781
}
14782
 
14783
isl::set point::product(const isl::set &set2) const
14784
{
14785
  return isl::basic_set(*this).product(set2);
14786
}
14787
 
14788
isl::basic_set point::project_out(isl::dim type, unsigned int first, unsigned int n) const
14789
{
14790
  return isl::basic_set(*this).project_out(type, first, n);
14791
}
14792
 
14793
isl::set point::project_out_all_params() const
14794
{
14795
  return isl::basic_set(*this).project_out_all_params();
14796
}
14797
 
14798
isl::set point::project_out_param(const isl::id &id) const
14799
{
14800
  return isl::basic_set(*this).project_out_param(id);
14801
}
14802
 
14803
isl::set point::project_out_param(const std::string &id) const
14804
{
14805
  return this->project_out_param(isl::id(ctx(), id));
14806
}
14807
 
14808
isl::set point::project_out_param(const isl::id_list &list) const
14809
{
14810
  return isl::basic_set(*this).project_out_param(list);
14811
}
14812
 
14813
isl::pw_multi_aff point::pw_multi_aff_on_domain(const isl::multi_val &mv) const
14814
{
14815
  return isl::basic_set(*this).pw_multi_aff_on_domain(mv);
14816
}
14817
 
14818
isl::set point::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
14819
{
14820
  return isl::basic_set(*this).remove_dims(type, first, n);
14821
}
14822
 
14823
isl::set point::remove_divs() const
14824
{
14825
  return isl::basic_set(*this).remove_divs();
14826
}
14827
 
14828
isl::set point::remove_redundancies() const
14829
{
14830
  return isl::basic_set(*this).remove_redundancies();
14831
}
14832
 
14833
isl::set point::reset_tuple_id() const
14834
{
14835
  return isl::basic_set(*this).reset_tuple_id();
14836
}
14837
 
14838
isl::basic_set point::sample() const
14839
{
14840
  return isl::basic_set(*this).sample();
14841
}
14842
 
14843
isl::point point::sample_point() const
14844
{
14845
  return isl::basic_set(*this).sample_point();
14846
}
14847
 
14848
isl::set point::set_dim_id(isl::dim type, unsigned int pos, const isl::id &id) const
14849
{
14850
  return isl::basic_set(*this).set_dim_id(type, pos, id);
14851
}
14852
 
14853
isl::set point::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
14854
{
14855
  return this->set_dim_id(type, pos, isl::id(ctx(), id));
14856
}
14857
 
14858
isl::set_list point::set_list() const
14859
{
14860
  return isl::basic_set(*this).set_list();
14861
}
14862
 
14863
isl::set point::set_tuple_id(const isl::id &id) const
14864
{
14865
  return isl::basic_set(*this).set_tuple_id(id);
14866
}
14867
 
14868
isl::set point::set_tuple_id(const std::string &id) const
14869
{
14870
  return this->set_tuple_id(isl::id(ctx(), id));
14871
}
14872
 
14873
isl::fixed_box point::simple_fixed_box_hull() const
14874
{
14875
  return isl::basic_set(*this).simple_fixed_box_hull();
14876
}
14877
 
14878
isl::basic_set point::simple_hull() const
14879
{
14880
  return isl::basic_set(*this).simple_hull();
14881
}
14882
 
14883
isl::space point::space() const
14884
{
14885
  return isl::basic_set(*this).space();
14886
}
14887
 
14888
isl::val point::stride(int pos) const
14889
{
14890
  return isl::basic_set(*this).stride(pos);
14891
}
14892
 
14893
isl::set point::subtract(const isl::set &set2) const
14894
{
14895
  return isl::basic_set(*this).subtract(set2);
14896
}
14897
 
14898
isl::union_set point::subtract(const isl::union_set &uset2) const
14899
{
14900
  return isl::basic_set(*this).subtract(uset2);
14901
}
14902
 
14903
isl::basic_set_list point::to_list() const
14904
{
14905
  return isl::basic_set(*this).to_list();
14906
}
14907
 
14908
isl::set point::to_set() const
14909
{
14910
  auto res = isl_point_to_set(copy());
14911
  return manage(res);
14912
}
14913
 
14914
isl::union_set point::to_union_set() const
14915
{
14916
  return isl::basic_set(*this).to_union_set();
14917
}
14918
 
14919
isl::map point::translation() const
14920
{
14921
  return isl::basic_set(*this).translation();
14922
}
14923
 
14924
class size point::tuple_dim() const
14925
{
14926
  return isl::basic_set(*this).tuple_dim();
14927
}
14928
 
14929
isl::id point::tuple_id() const
14930
{
14931
  return isl::basic_set(*this).tuple_id();
14932
}
14933
 
14934
std::string point::tuple_name() const
14935
{
14936
  return isl::basic_set(*this).tuple_name();
14937
}
14938
 
14939
isl::set point::unbind_params(const isl::multi_id &tuple) const
14940
{
14941
  return isl::basic_set(*this).unbind_params(tuple);
14942
}
14943
 
14944
isl::map point::unbind_params_insert_domain(const isl::multi_id &domain) const
14945
{
14946
  return isl::basic_set(*this).unbind_params_insert_domain(domain);
14947
}
14948
 
14949
isl::set point::unite(const isl::basic_set &bset2) const
14950
{
14951
  return isl::basic_set(*this).unite(bset2);
14952
}
14953
 
14954
isl::set point::unite(const isl::set &set2) const
14955
{
14956
  return isl::basic_set(*this).unite(set2);
14957
}
14958
 
14959
isl::union_set point::unite(const isl::union_set &uset2) const
14960
{
14961
  return isl::basic_set(*this).unite(uset2);
14962
}
14963
 
14964
isl::basic_set point::unshifted_simple_hull() const
14965
{
14966
  return isl::basic_set(*this).unshifted_simple_hull();
14967
}
14968
 
14969
isl::map point::unwrap() const
14970
{
14971
  return isl::basic_set(*this).unwrap();
14972
}
14973
 
14974
isl::set point::upper_bound(const isl::multi_pw_aff &upper) const
14975
{
14976
  return isl::basic_set(*this).upper_bound(upper);
14977
}
14978
 
14979
isl::set point::upper_bound(const isl::multi_val &upper) const
14980
{
14981
  return isl::basic_set(*this).upper_bound(upper);
14982
}
14983
 
14984
isl::set point::upper_bound_val(isl::dim type, unsigned int pos, const isl::val &value) const
14985
{
14986
  return isl::basic_set(*this).upper_bound_val(type, pos, value);
14987
}
14988
 
14989
isl::set point::upper_bound_val(isl::dim type, unsigned int pos, long value) const
14990
{
14991
  return this->upper_bound_val(type, pos, isl::val(ctx(), value));
14992
}
14993
 
14994
inline std::ostream &operator<<(std::ostream &os, const point &obj)
14995
{
14996
  char *str = isl_point_to_str(obj.get());
14997
  if (!str) {
14998
    os.setstate(std::ios_base::badbit);
14999
    return os;
15000
  }
15001
  os << str;
15002
  free(str);
15003
  return os;
15004
}
15005
 
15006
// implementations for isl::pw_aff
15007
pw_aff manage(__isl_take isl_pw_aff *ptr) {
15008
  return pw_aff(ptr);
15009
}
15010
pw_aff manage_copy(__isl_keep isl_pw_aff *ptr) {
15011
  ptr = isl_pw_aff_copy(ptr);
15012
  return pw_aff(ptr);
15013
}
15014
 
15015
pw_aff::pw_aff()
15016
    : ptr(nullptr) {}
15017
 
15018
pw_aff::pw_aff(const pw_aff &obj)
15019
    : ptr(nullptr)
15020
{
15021
  ptr = obj.copy();
15022
}
15023
 
15024
pw_aff::pw_aff(__isl_take isl_pw_aff *ptr)
15025
    : ptr(ptr) {}
15026
 
15027
pw_aff::pw_aff(isl::aff aff)
15028
{
15029
  auto res = isl_pw_aff_from_aff(aff.release());
15030
  ptr = res;
15031
}
15032
 
15033
pw_aff::pw_aff(isl::ctx ctx, const std::string &str)
15034
{
15035
  auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str());
15036
  ptr = res;
15037
}
15038
 
15039
pw_aff::pw_aff(isl::set domain, isl::val v)
15040
{
15041
  auto res = isl_pw_aff_val_on_domain(domain.release(), v.release());
15042
  ptr = res;
15043
}
15044
 
15045
pw_aff::pw_aff(isl::local_space ls)
15046
{
15047
  auto res = isl_pw_aff_zero_on_domain(ls.release());
15048
  ptr = res;
15049
}
15050
 
15051
pw_aff &pw_aff::operator=(pw_aff obj) {
15052
  std::swap(this->ptr, obj.ptr);
15053
  return *this;
15054
}
15055
 
15056
pw_aff::~pw_aff() {
15057
  if (ptr)
15058
    isl_pw_aff_free(ptr);
15059
}
15060
 
15061
__isl_give isl_pw_aff *pw_aff::copy() const & {
15062
  return isl_pw_aff_copy(ptr);
15063
}
15064
 
15065
__isl_keep isl_pw_aff *pw_aff::get() const {
15066
  return ptr;
15067
}
15068
 
15069
__isl_give isl_pw_aff *pw_aff::release() {
15070
  isl_pw_aff *tmp = ptr;
15071
  ptr = nullptr;
15072
  return tmp;
15073
}
15074
 
15075
bool pw_aff::is_null() const {
15076
  return ptr == nullptr;
15077
}
15078
 
15079
isl::ctx pw_aff::ctx() const {
15080
  return isl::ctx(isl_pw_aff_get_ctx(ptr));
15081
}
15082
 
15083
isl::multi_pw_aff pw_aff::add(const isl::multi_pw_aff &multi2) const
15084
{
15085
  return isl::pw_multi_aff(*this).add(multi2);
15086
}
15087
 
15088
isl::multi_union_pw_aff pw_aff::add(const isl::multi_union_pw_aff &multi2) const
15089
{
15090
  return isl::union_pw_aff(*this).add(multi2);
15091
}
15092
 
15093
isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const
15094
{
15095
  auto res = isl_pw_aff_add(copy(), pwaff2.release());
15096
  return manage(res);
15097
}
15098
 
15099
isl::pw_multi_aff pw_aff::add(const isl::pw_multi_aff &pma2) const
15100
{
15101
  return isl::pw_multi_aff(*this).add(pma2);
15102
}
15103
 
15104
isl::union_pw_aff pw_aff::add(const isl::union_pw_aff &upa2) const
15105
{
15106
  return isl::union_pw_aff(*this).add(upa2);
15107
}
15108
 
15109
isl::union_pw_multi_aff pw_aff::add(const isl::union_pw_multi_aff &upma2) const
15110
{
15111
  return isl::union_pw_aff(*this).add(upma2);
15112
}
15113
 
15114
isl::pw_aff pw_aff::add(const isl::aff &pwaff2) const
15115
{
15116
  return this->add(isl::pw_aff(pwaff2));
15117
}
15118
 
15119
isl::pw_aff pw_aff::add_constant(isl::val v) const
15120
{
15121
  auto res = isl_pw_aff_add_constant_val(copy(), v.release());
15122
  return manage(res);
15123
}
15124
 
15125
isl::pw_aff pw_aff::add_constant(long v) const
15126
{
15127
  return this->add_constant(isl::val(ctx(), v));
15128
}
15129
 
15130
isl::pw_multi_aff pw_aff::add_constant(const isl::multi_val &mv) const
15131
{
15132
  return isl::pw_multi_aff(*this).add_constant(mv);
15133
}
15134
 
15135
isl::pw_aff pw_aff::add_dims(isl::dim type, unsigned int n) const
15136
{
15137
  auto res = isl_pw_aff_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
15138
  return manage(res);
15139
}
15140
 
15141
isl::union_pw_multi_aff pw_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
15142
{
15143
  return isl::union_pw_aff(*this).add_pw_multi_aff(pma);
15144
}
15145
 
15146
isl::union_pw_multi_aff pw_aff::apply(const isl::union_pw_multi_aff &upma2) const
15147
{
15148
  return isl::union_pw_aff(*this).apply(upma2);
15149
}
15150
 
15151
isl::aff pw_aff::as_aff() const
15152
{
15153
  auto res = isl_pw_aff_as_aff(copy());
15154
  return manage(res);
15155
}
15156
 
15157
isl::map pw_aff::as_map() const
15158
{
15159
  auto res = isl_pw_aff_as_map(copy());
15160
  return manage(res);
15161
}
15162
 
15163
isl::multi_aff pw_aff::as_multi_aff() const
15164
{
15165
  return isl::pw_multi_aff(*this).as_multi_aff();
15166
}
15167
 
15168
isl::multi_union_pw_aff pw_aff::as_multi_union_pw_aff() const
15169
{
15170
  return isl::union_pw_aff(*this).as_multi_union_pw_aff();
15171
}
15172
 
15173
isl::pw_multi_aff pw_aff::as_pw_multi_aff() const
15174
{
15175
  return isl::union_pw_aff(*this).as_pw_multi_aff();
15176
}
15177
 
15178
isl::set pw_aff::as_set() const
15179
{
15180
  return isl::pw_multi_aff(*this).as_set();
15181
}
15182
 
15183
isl::union_map pw_aff::as_union_map() const
15184
{
15185
  return isl::union_pw_aff(*this).as_union_map();
15186
}
15187
 
15188
isl::pw_aff pw_aff::at(int pos) const
15189
{
15190
  return isl::pw_multi_aff(*this).at(pos);
15191
}
15192
 
15193
isl::set pw_aff::bind(const isl::multi_id &tuple) const
15194
{
15195
  return isl::multi_pw_aff(*this).bind(tuple);
15196
}
15197
 
15198
isl::set pw_aff::bind(isl::id id) const
15199
{
15200
  auto res = isl_pw_aff_bind_id(copy(), id.release());
15201
  return manage(res);
15202
}
15203
 
15204
isl::set pw_aff::bind(const std::string &id) const
15205
{
15206
  return this->bind(isl::id(ctx(), id));
15207
}
15208
 
15209
isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const
15210
{
15211
  auto res = isl_pw_aff_bind_domain(copy(), tuple.release());
15212
  return manage(res);
15213
}
15214
 
15215
isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
15216
{
15217
  auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release());
15218
  return manage(res);
15219
}
15220
 
15221
isl::pw_aff pw_aff::ceil() const
15222
{
15223
  auto res = isl_pw_aff_ceil(copy());
15224
  return manage(res);
15225
}
15226
 
15227
isl::pw_aff pw_aff::coalesce() const
15228
{
15229
  auto res = isl_pw_aff_coalesce(copy());
15230
  return manage(res);
15231
}
15232
 
15233
isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const
15234
{
15235
  auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release());
15236
  return manage(res);
15237
}
15238
 
15239
class size pw_aff::dim(isl::dim type) const
15240
{
15241
  return isl::pw_multi_aff(*this).dim(type);
15242
}
15243
 
15244
isl::id pw_aff::dim_id(isl::dim type, unsigned int pos) const
15245
{
15246
  auto res = isl_pw_aff_get_dim_id(get(), static_cast<enum isl_dim_type>(type), pos);
15247
  return manage(res);
15248
}
15249
 
15250
isl::id pw_aff::get_dim_id(isl::dim type, unsigned int pos) const
15251
{
15252
  return dim_id(type, pos);
15253
}
15254
 
15255
isl::pw_aff pw_aff::div(isl::pw_aff pa2) const
15256
{
15257
  auto res = isl_pw_aff_div(copy(), pa2.release());
15258
  return manage(res);
15259
}
15260
 
15261
isl::set pw_aff::domain() const
15262
{
15263
  auto res = isl_pw_aff_domain(copy());
15264
  return manage(res);
15265
}
15266
 
15267
isl::space pw_aff::domain_space() const
15268
{
15269
  auto res = isl_pw_aff_get_domain_space(get());
15270
  return manage(res);
15271
}
15272
 
15273
isl::space pw_aff::get_domain_space() const
15274
{
15275
  return domain_space();
15276
}
15277
 
15278
isl::pw_multi_aff pw_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
15279
{
15280
  return isl::pw_multi_aff(*this).drop_dims(type, first, n);
15281
}
15282
 
15283
isl::set pw_aff::eq_set(isl::pw_aff pwaff2) const
15284
{
15285
  auto res = isl_pw_aff_eq_set(copy(), pwaff2.release());
15286
  return manage(res);
15287
}
15288
 
15289
isl::val pw_aff::eval(isl::point pnt) const
15290
{
15291
  auto res = isl_pw_aff_eval(copy(), pnt.release());
15292
  return manage(res);
15293
}
15294
 
15295
isl::pw_multi_aff pw_aff::extract_pw_multi_aff(const isl::space &space) const
15296
{
15297
  return isl::union_pw_aff(*this).extract_pw_multi_aff(space);
15298
}
15299
 
15300
isl::multi_pw_aff pw_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
15301
{
15302
  return isl::pw_multi_aff(*this).flat_range_product(multi2);
15303
}
15304
 
15305
isl::multi_union_pw_aff pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
15306
{
15307
  return isl::union_pw_aff(*this).flat_range_product(multi2);
15308
}
15309
 
15310
isl::pw_multi_aff pw_aff::flat_range_product(const isl::pw_multi_aff &pma2) const
15311
{
15312
  return isl::pw_multi_aff(*this).flat_range_product(pma2);
15313
}
15314
 
15315
isl::union_pw_multi_aff pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
15316
{
15317
  return isl::union_pw_aff(*this).flat_range_product(upma2);
15318
}
15319
 
15320
isl::pw_aff pw_aff::floor() const
15321
{
15322
  auto res = isl_pw_aff_floor(copy());
15323
  return manage(res);
15324
}
15325
 
15326
stat pw_aff::foreach_piece(const std::function<stat(isl::set, isl::aff)> &fn) const
15327
{
15328
  struct fn_data {
15329
    std::function<stat(isl::set, isl::aff)> func;
15330
  } fn_data = { fn };
15331
  auto fn_lambda = [](isl_set *arg_0, isl_aff *arg_1, void *arg_2) -> isl_stat {
15332
    auto *data = static_cast<struct fn_data *>(arg_2);
15333
    auto ret = (data->func)(manage(arg_0), manage(arg_1));
15334
    return ret.release();
15335
  };
15336
  auto res = isl_pw_aff_foreach_piece(get(), fn_lambda, &fn_data);
15337
  return manage(res);
15338
}
15339
 
15340
stat pw_aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
15341
{
15342
  return isl::pw_multi_aff(*this).foreach_piece(fn);
15343
}
15344
 
15345
stat pw_aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
15346
{
15347
  return isl::union_pw_aff(*this).foreach_pw_aff(fn);
15348
}
15349
 
15350
isl::set pw_aff::ge_set(isl::pw_aff pwaff2) const
15351
{
15352
  auto res = isl_pw_aff_ge_set(copy(), pwaff2.release());
15353
  return manage(res);
15354
}
15355
 
15356
isl::pw_aff pw_aff::gist(isl::set context) const
15357
{
15358
  auto res = isl_pw_aff_gist(copy(), context.release());
15359
  return manage(res);
15360
}
15361
 
15362
isl::union_pw_aff pw_aff::gist(const isl::union_set &context) const
15363
{
15364
  return isl::union_pw_aff(*this).gist(context);
15365
}
15366
 
15367
isl::pw_aff pw_aff::gist(const isl::basic_set &context) const
15368
{
15369
  return this->gist(isl::set(context));
15370
}
15371
 
15372
isl::pw_aff pw_aff::gist(const isl::point &context) const
15373
{
15374
  return this->gist(isl::set(context));
15375
}
15376
 
15377
isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const
15378
{
15379
  auto res = isl_pw_aff_gt_set(copy(), pwaff2.release());
15380
  return manage(res);
15381
}
15382
 
15383
boolean pw_aff::has_range_tuple_id() const
15384
{
15385
  return isl::pw_multi_aff(*this).has_range_tuple_id();
15386
}
15387
 
15388
isl::multi_pw_aff pw_aff::identity() const
15389
{
15390
  return isl::pw_multi_aff(*this).identity();
15391
}
15392
 
15393
isl::pw_aff pw_aff::insert_domain(isl::space domain) const
15394
{
15395
  auto res = isl_pw_aff_insert_domain(copy(), domain.release());
15396
  return manage(res);
15397
}
15398
 
15399
isl::pw_aff pw_aff::intersect_domain(isl::set set) const
15400
{
15401
  auto res = isl_pw_aff_intersect_domain(copy(), set.release());
15402
  return manage(res);
15403
}
15404
 
15405
isl::union_pw_aff pw_aff::intersect_domain(const isl::space &space) const
15406
{
15407
  return isl::union_pw_aff(*this).intersect_domain(space);
15408
}
15409
 
15410
isl::union_pw_aff pw_aff::intersect_domain(const isl::union_set &uset) const
15411
{
15412
  return isl::union_pw_aff(*this).intersect_domain(uset);
15413
}
15414
 
15415
isl::pw_aff pw_aff::intersect_domain(const isl::basic_set &set) const
15416
{
15417
  return this->intersect_domain(isl::set(set));
15418
}
15419
 
15420
isl::pw_aff pw_aff::intersect_domain(const isl::point &set) const
15421
{
15422
  return this->intersect_domain(isl::set(set));
15423
}
15424
 
15425
isl::union_pw_aff pw_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
15426
{
15427
  return isl::union_pw_aff(*this).intersect_domain_wrapped_domain(uset);
15428
}
15429
 
15430
isl::union_pw_aff pw_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
15431
{
15432
  return isl::union_pw_aff(*this).intersect_domain_wrapped_range(uset);
15433
}
15434
 
15435
isl::pw_aff pw_aff::intersect_params(isl::set set) const
15436
{
15437
  auto res = isl_pw_aff_intersect_params(copy(), set.release());
15438
  return manage(res);
15439
}
15440
 
15441
boolean pw_aff::involves_locals() const
15442
{
15443
  return isl::pw_multi_aff(*this).involves_locals();
15444
}
15445
 
15446
boolean pw_aff::involves_nan() const
15447
{
15448
  return isl::multi_pw_aff(*this).involves_nan();
15449
}
15450
 
15451
boolean pw_aff::involves_param(const isl::id &id) const
15452
{
15453
  return isl::pw_multi_aff(*this).involves_param(id);
15454
}
15455
 
15456
boolean pw_aff::involves_param(const std::string &id) const
15457
{
15458
  return this->involves_param(isl::id(ctx(), id));
15459
}
15460
 
15461
boolean pw_aff::involves_param(const isl::id_list &list) const
15462
{
15463
  return isl::pw_multi_aff(*this).involves_param(list);
15464
}
15465
 
15466
boolean pw_aff::is_cst() const
15467
{
15468
  auto res = isl_pw_aff_is_cst(get());
15469
  return manage(res);
15470
}
15471
 
15472
boolean pw_aff::is_equal(const isl::pw_aff &pa2) const
15473
{
15474
  auto res = isl_pw_aff_is_equal(get(), pa2.get());
15475
  return manage(res);
15476
}
15477
 
15478
boolean pw_aff::isa_aff() const
15479
{
15480
  auto res = isl_pw_aff_isa_aff(get());
15481
  return manage(res);
15482
}
15483
 
15484
boolean pw_aff::isa_multi_aff() const
15485
{
15486
  return isl::pw_multi_aff(*this).isa_multi_aff();
15487
}
15488
 
15489
boolean pw_aff::isa_pw_multi_aff() const
15490
{
15491
  return isl::union_pw_aff(*this).isa_pw_multi_aff();
15492
}
15493
 
15494
isl::set pw_aff::le_set(isl::pw_aff pwaff2) const
15495
{
15496
  auto res = isl_pw_aff_le_set(copy(), pwaff2.release());
15497
  return manage(res);
15498
}
15499
 
15500
isl::pw_aff_list pw_aff::list() const
15501
{
15502
  return isl::multi_pw_aff(*this).list();
15503
}
15504
 
15505
isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const
15506
{
15507
  auto res = isl_pw_aff_lt_set(copy(), pwaff2.release());
15508
  return manage(res);
15509
}
15510
 
15511
isl::multi_pw_aff pw_aff::max(const isl::multi_pw_aff &multi2) const
15512
{
15513
  return isl::pw_multi_aff(*this).max(multi2);
15514
}
15515
 
15516
isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const
15517
{
15518
  auto res = isl_pw_aff_max(copy(), pwaff2.release());
15519
  return manage(res);
15520
}
15521
 
15522
isl::pw_aff pw_aff::max(const isl::aff &pwaff2) const
15523
{
15524
  return this->max(isl::pw_aff(pwaff2));
15525
}
15526
 
15527
isl::multi_val pw_aff::max_multi_val() const
15528
{
15529
  return isl::pw_multi_aff(*this).max_multi_val();
15530
}
15531
 
15532
isl::multi_pw_aff pw_aff::min(const isl::multi_pw_aff &multi2) const
15533
{
15534
  return isl::pw_multi_aff(*this).min(multi2);
15535
}
15536
 
15537
isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const
15538
{
15539
  auto res = isl_pw_aff_min(copy(), pwaff2.release());
15540
  return manage(res);
15541
}
15542
 
15543
isl::pw_aff pw_aff::min(const isl::aff &pwaff2) const
15544
{
15545
  return this->min(isl::pw_aff(pwaff2));
15546
}
15547
 
15548
isl::multi_val pw_aff::min_multi_val() const
15549
{
15550
  return isl::pw_multi_aff(*this).min_multi_val();
15551
}
15552
 
15553
isl::pw_aff pw_aff::mod(isl::val mod) const
15554
{
15555
  auto res = isl_pw_aff_mod_val(copy(), mod.release());
15556
  return manage(res);
15557
}
15558
 
15559
isl::pw_aff pw_aff::mod(long mod) const
15560
{
15561
  return this->mod(isl::val(ctx(), mod));
15562
}
15563
 
15564
isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const
15565
{
15566
  auto res = isl_pw_aff_mul(copy(), pwaff2.release());
15567
  return manage(res);
15568
}
15569
 
15570
class size pw_aff::n_piece() const
15571
{
15572
  return isl::pw_multi_aff(*this).n_piece();
15573
}
15574
 
15575
isl::set pw_aff::ne_set(isl::pw_aff pwaff2) const
15576
{
15577
  auto res = isl_pw_aff_ne_set(copy(), pwaff2.release());
15578
  return manage(res);
15579
}
15580
 
15581
isl::pw_aff pw_aff::neg() const
15582
{
15583
  auto res = isl_pw_aff_neg(copy());
15584
  return manage(res);
15585
}
15586
 
15587
isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id)
15588
{
15589
  auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release());
15590
  return manage(res);
15591
}
15592
 
15593
boolean pw_aff::plain_is_empty() const
15594
{
15595
  return isl::union_pw_aff(*this).plain_is_empty();
15596
}
15597
 
15598
boolean pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
15599
{
15600
  return isl::pw_multi_aff(*this).plain_is_equal(multi2);
15601
}
15602
 
15603
boolean pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
15604
{
15605
  return isl::union_pw_aff(*this).plain_is_equal(multi2);
15606
}
15607
 
15608
isl::pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const
15609
{
15610
  return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2);
15611
}
15612
 
15613
isl::union_pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
15614
{
15615
  return isl::union_pw_aff(*this).preimage_domain_wrapped_domain(upma2);
15616
}
15617
 
15618
isl::multi_pw_aff pw_aff::product(const isl::multi_pw_aff &multi2) const
15619
{
15620
  return isl::pw_multi_aff(*this).product(multi2);
15621
}
15622
 
15623
isl::pw_multi_aff pw_aff::product(const isl::pw_multi_aff &pma2) const
15624
{
15625
  return isl::pw_multi_aff(*this).product(pma2);
15626
}
15627
 
15628
isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const
15629
{
15630
  auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release());
15631
  return manage(res);
15632
}
15633
 
15634
isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const
15635
{
15636
  auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release());
15637
  return manage(res);
15638
}
15639
 
15640
isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const
15641
{
15642
  auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release());
15643
  return manage(res);
15644
}
15645
 
15646
isl::union_pw_aff pw_aff::pullback(const isl::union_pw_multi_aff &upma) const
15647
{
15648
  return isl::union_pw_aff(*this).pullback(upma);
15649
}
15650
 
15651
isl::pw_multi_aff_list pw_aff::pw_multi_aff_list() const
15652
{
15653
  return isl::union_pw_aff(*this).pw_multi_aff_list();
15654
}
15655
 
15656
isl::pw_multi_aff pw_aff::range_factor_domain() const
15657
{
15658
  return isl::pw_multi_aff(*this).range_factor_domain();
15659
}
15660
 
15661
isl::pw_multi_aff pw_aff::range_factor_range() const
15662
{
15663
  return isl::pw_multi_aff(*this).range_factor_range();
15664
}
15665
 
15666
isl::multi_pw_aff pw_aff::range_product(const isl::multi_pw_aff &multi2) const
15667
{
15668
  return isl::pw_multi_aff(*this).range_product(multi2);
15669
}
15670
 
15671
isl::multi_union_pw_aff pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
15672
{
15673
  return isl::union_pw_aff(*this).range_product(multi2);
15674
}
15675
 
15676
isl::pw_multi_aff pw_aff::range_product(const isl::pw_multi_aff &pma2) const
15677
{
15678
  return isl::pw_multi_aff(*this).range_product(pma2);
15679
}
15680
 
15681
isl::union_pw_multi_aff pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const
15682
{
15683
  return isl::union_pw_aff(*this).range_product(upma2);
15684
}
15685
 
15686
isl::id pw_aff::range_tuple_id() const
15687
{
15688
  return isl::pw_multi_aff(*this).range_tuple_id();
15689
}
15690
 
15691
isl::multi_pw_aff pw_aff::reset_range_tuple_id() const
15692
{
15693
  return isl::multi_pw_aff(*this).reset_range_tuple_id();
15694
}
15695
 
15696
isl::multi_pw_aff pw_aff::reset_tuple_id(isl::dim type) const
15697
{
15698
  return isl::multi_pw_aff(*this).reset_tuple_id(type);
15699
}
15700
 
15701
isl::multi_pw_aff pw_aff::scale(const isl::multi_val &mv) const
15702
{
15703
  return isl::multi_pw_aff(*this).scale(mv);
15704
}
15705
 
15706
isl::pw_aff pw_aff::scale(isl::val v) const
15707
{
15708
  auto res = isl_pw_aff_scale_val(copy(), v.release());
15709
  return manage(res);
15710
}
15711
 
15712
isl::pw_aff pw_aff::scale(long v) const
15713
{
15714
  return this->scale(isl::val(ctx(), v));
15715
}
15716
 
15717
isl::multi_pw_aff pw_aff::scale_down(const isl::multi_val &mv) const
15718
{
15719
  return isl::multi_pw_aff(*this).scale_down(mv);
15720
}
15721
 
15722
isl::pw_aff pw_aff::scale_down(isl::val f) const
15723
{
15724
  auto res = isl_pw_aff_scale_down_val(copy(), f.release());
15725
  return manage(res);
15726
}
15727
 
15728
isl::pw_aff pw_aff::scale_down(long f) const
15729
{
15730
  return this->scale_down(isl::val(ctx(), f));
15731
}
15732
 
15733
isl::multi_pw_aff pw_aff::set_at(int pos, const isl::pw_aff &el) const
15734
{
15735
  return isl::pw_multi_aff(*this).set_at(pos, el);
15736
}
15737
 
15738
isl::multi_union_pw_aff pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
15739
{
15740
  return isl::union_pw_aff(*this).set_at(pos, el);
15741
}
15742
 
15743
isl::multi_pw_aff pw_aff::set_pw_aff(int pos, const isl::pw_aff &el) const
15744
{
15745
  return isl::pw_multi_aff(*this).set_pw_aff(pos, el);
15746
}
15747
 
15748
isl::pw_multi_aff pw_aff::set_pw_aff(unsigned int pos, const isl::pw_aff &pa) const
15749
{
15750
  return isl::pw_multi_aff(*this).set_pw_aff(pos, pa);
15751
}
15752
 
15753
isl::pw_multi_aff pw_aff::set_range_tuple(const isl::id &id) const
15754
{
15755
  return isl::pw_multi_aff(*this).set_range_tuple(id);
15756
}
15757
 
15758
isl::pw_multi_aff pw_aff::set_range_tuple(const std::string &id) const
15759
{
15760
  return this->set_range_tuple(isl::id(ctx(), id));
15761
}
15762
 
15763
isl::pw_aff pw_aff::set_tuple_id(isl::dim type, isl::id id) const
15764
{
15765
  auto res = isl_pw_aff_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
15766
  return manage(res);
15767
}
15768
 
15769
isl::pw_aff pw_aff::set_tuple_id(isl::dim type, const std::string &id) const
15770
{
15771
  return this->set_tuple_id(type, isl::id(ctx(), id));
15772
}
15773
 
15774
isl::multi_union_pw_aff pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
15775
{
15776
  return isl::union_pw_aff(*this).set_union_pw_aff(pos, el);
15777
}
15778
 
15779
class size pw_aff::size() const
15780
{
15781
  return isl::multi_pw_aff(*this).size();
15782
}
15783
 
15784
isl::space pw_aff::space() const
15785
{
15786
  auto res = isl_pw_aff_get_space(get());
15787
  return manage(res);
15788
}
15789
 
15790
isl::space pw_aff::get_space() const
15791
{
15792
  return space();
15793
}
15794
 
15795
isl::multi_pw_aff pw_aff::sub(const isl::multi_pw_aff &multi2) const
15796
{
15797
  return isl::pw_multi_aff(*this).sub(multi2);
15798
}
15799
 
15800
isl::multi_union_pw_aff pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
15801
{
15802
  return isl::union_pw_aff(*this).sub(multi2);
15803
}
15804
 
15805
isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const
15806
{
15807
  auto res = isl_pw_aff_sub(copy(), pwaff2.release());
15808
  return manage(res);
15809
}
15810
 
15811
isl::pw_multi_aff pw_aff::sub(const isl::pw_multi_aff &pma2) const
15812
{
15813
  return isl::pw_multi_aff(*this).sub(pma2);
15814
}
15815
 
15816
isl::union_pw_aff pw_aff::sub(const isl::union_pw_aff &upa2) const
15817
{
15818
  return isl::union_pw_aff(*this).sub(upa2);
15819
}
15820
 
15821
isl::union_pw_multi_aff pw_aff::sub(const isl::union_pw_multi_aff &upma2) const
15822
{
15823
  return isl::union_pw_aff(*this).sub(upma2);
15824
}
15825
 
15826
isl::pw_aff pw_aff::sub(const isl::aff &pwaff2) const
15827
{
15828
  return this->sub(isl::pw_aff(pwaff2));
15829
}
15830
 
15831
isl::pw_aff pw_aff::subtract_domain(isl::set set) const
15832
{
15833
  auto res = isl_pw_aff_subtract_domain(copy(), set.release());
15834
  return manage(res);
15835
}
15836
 
15837
isl::union_pw_aff pw_aff::subtract_domain(const isl::space &space) const
15838
{
15839
  return isl::union_pw_aff(*this).subtract_domain(space);
15840
}
15841
 
15842
isl::union_pw_aff pw_aff::subtract_domain(const isl::union_set &uset) const
15843
{
15844
  return isl::union_pw_aff(*this).subtract_domain(uset);
15845
}
15846
 
15847
isl::pw_aff pw_aff::subtract_domain(const isl::basic_set &set) const
15848
{
15849
  return this->subtract_domain(isl::set(set));
15850
}
15851
 
15852
isl::pw_aff pw_aff::subtract_domain(const isl::point &set) const
15853
{
15854
  return this->subtract_domain(isl::set(set));
15855
}
15856
 
15857
isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const
15858
{
15859
  auto res = isl_pw_aff_tdiv_q(copy(), pa2.release());
15860
  return manage(res);
15861
}
15862
 
15863
isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const
15864
{
15865
  auto res = isl_pw_aff_tdiv_r(copy(), pa2.release());
15866
  return manage(res);
15867
}
15868
 
15869
isl::pw_aff_list pw_aff::to_list() const
15870
{
15871
  auto res = isl_pw_aff_to_list(copy());
15872
  return manage(res);
15873
}
15874
 
15875
isl::multi_pw_aff pw_aff::to_multi_pw_aff() const
15876
{
15877
  return isl::pw_multi_aff(*this).to_multi_pw_aff();
15878
}
15879
 
15880
isl::union_pw_aff pw_aff::to_union_pw_aff() const
15881
{
15882
  auto res = isl_pw_aff_to_union_pw_aff(copy());
15883
  return manage(res);
15884
}
15885
 
15886
isl::union_pw_multi_aff pw_aff::to_union_pw_multi_aff() const
15887
{
15888
  return isl::pw_multi_aff(*this).to_union_pw_multi_aff();
15889
}
15890
 
15891
isl::id pw_aff::tuple_id(isl::dim type) const
15892
{
15893
  auto res = isl_pw_aff_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
15894
  return manage(res);
15895
}
15896
 
15897
isl::id pw_aff::get_tuple_id(isl::dim type) const
15898
{
15899
  return tuple_id(type);
15900
}
15901
 
15902
isl::multi_pw_aff pw_aff::unbind_params_insert_domain(const isl::multi_id &domain) const
15903
{
15904
  return isl::pw_multi_aff(*this).unbind_params_insert_domain(domain);
15905
}
15906
 
15907
isl::multi_pw_aff pw_aff::union_add(const isl::multi_pw_aff &mpa2) const
15908
{
15909
  return isl::pw_multi_aff(*this).union_add(mpa2);
15910
}
15911
 
15912
isl::multi_union_pw_aff pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
15913
{
15914
  return isl::union_pw_aff(*this).union_add(mupa2);
15915
}
15916
 
15917
isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const
15918
{
15919
  auto res = isl_pw_aff_union_add(copy(), pwaff2.release());
15920
  return manage(res);
15921
}
15922
 
15923
isl::pw_multi_aff pw_aff::union_add(const isl::pw_multi_aff &pma2) const
15924
{
15925
  return isl::pw_multi_aff(*this).union_add(pma2);
15926
}
15927
 
15928
isl::union_pw_aff pw_aff::union_add(const isl::union_pw_aff &upa2) const
15929
{
15930
  return isl::union_pw_aff(*this).union_add(upa2);
15931
}
15932
 
15933
isl::union_pw_multi_aff pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const
15934
{
15935
  return isl::union_pw_aff(*this).union_add(upma2);
15936
}
15937
 
15938
isl::pw_aff pw_aff::union_add(const isl::aff &pwaff2) const
15939
{
15940
  return this->union_add(isl::pw_aff(pwaff2));
15941
}
15942
 
15943
isl::pw_aff pw_aff::var_on_domain(isl::local_space ls, isl::dim type, unsigned int pos)
15944
{
15945
  auto res = isl_pw_aff_var_on_domain(ls.release(), static_cast<enum isl_dim_type>(type), pos);
15946
  return manage(res);
15947
}
15948
 
15949
inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj)
15950
{
15951
  char *str = isl_pw_aff_to_str(obj.get());
15952
  if (!str) {
15953
    os.setstate(std::ios_base::badbit);
15954
    return os;
15955
  }
15956
  os << str;
15957
  free(str);
15958
  return os;
15959
}
15960
 
15961
// implementations for isl::pw_aff_list
15962
pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) {
15963
  return pw_aff_list(ptr);
15964
}
15965
pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) {
15966
  ptr = isl_pw_aff_list_copy(ptr);
15967
  return pw_aff_list(ptr);
15968
}
15969
 
15970
pw_aff_list::pw_aff_list()
15971
    : ptr(nullptr) {}
15972
 
15973
pw_aff_list::pw_aff_list(const pw_aff_list &obj)
15974
    : ptr(nullptr)
15975
{
15976
  ptr = obj.copy();
15977
}
15978
 
15979
pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr)
15980
    : ptr(ptr) {}
15981
 
15982
pw_aff_list::pw_aff_list(isl::ctx ctx, int n)
15983
{
15984
  auto res = isl_pw_aff_list_alloc(ctx.release(), n);
15985
  ptr = res;
15986
}
15987
 
15988
pw_aff_list::pw_aff_list(isl::pw_aff el)
15989
{
15990
  auto res = isl_pw_aff_list_from_pw_aff(el.release());
15991
  ptr = res;
15992
}
15993
 
15994
pw_aff_list::pw_aff_list(isl::ctx ctx, const std::string &str)
15995
{
15996
  auto res = isl_pw_aff_list_read_from_str(ctx.release(), str.c_str());
15997
  ptr = res;
15998
}
15999
 
16000
pw_aff_list &pw_aff_list::operator=(pw_aff_list obj) {
16001
  std::swap(this->ptr, obj.ptr);
16002
  return *this;
16003
}
16004
 
16005
pw_aff_list::~pw_aff_list() {
16006
  if (ptr)
16007
    isl_pw_aff_list_free(ptr);
16008
}
16009
 
16010
__isl_give isl_pw_aff_list *pw_aff_list::copy() const & {
16011
  return isl_pw_aff_list_copy(ptr);
16012
}
16013
 
16014
__isl_keep isl_pw_aff_list *pw_aff_list::get() const {
16015
  return ptr;
16016
}
16017
 
16018
__isl_give isl_pw_aff_list *pw_aff_list::release() {
16019
  isl_pw_aff_list *tmp = ptr;
16020
  ptr = nullptr;
16021
  return tmp;
16022
}
16023
 
16024
bool pw_aff_list::is_null() const {
16025
  return ptr == nullptr;
16026
}
16027
 
16028
isl::ctx pw_aff_list::ctx() const {
16029
  return isl::ctx(isl_pw_aff_list_get_ctx(ptr));
16030
}
16031
 
16032
isl::pw_aff_list pw_aff_list::add(isl::pw_aff el) const
16033
{
16034
  auto res = isl_pw_aff_list_add(copy(), el.release());
16035
  return manage(res);
16036
}
16037
 
16038
isl::pw_aff pw_aff_list::at(int index) const
16039
{
16040
  auto res = isl_pw_aff_list_get_at(get(), index);
16041
  return manage(res);
16042
}
16043
 
16044
isl::pw_aff pw_aff_list::get_at(int index) const
16045
{
16046
  return at(index);
16047
}
16048
 
16049
isl::pw_aff_list pw_aff_list::clear() const
16050
{
16051
  auto res = isl_pw_aff_list_clear(copy());
16052
  return manage(res);
16053
}
16054
 
16055
isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const
16056
{
16057
  auto res = isl_pw_aff_list_concat(copy(), list2.release());
16058
  return manage(res);
16059
}
16060
 
16061
isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const
16062
{
16063
  auto res = isl_pw_aff_list_drop(copy(), first, n);
16064
  return manage(res);
16065
}
16066
 
16067
stat pw_aff_list::foreach(const std::function<stat(isl::pw_aff)> &fn) const
16068
{
16069
  struct fn_data {
16070
    std::function<stat(isl::pw_aff)> func;
16071
  } fn_data = { fn };
16072
  auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat {
16073
    auto *data = static_cast<struct fn_data *>(arg_1);
16074
    auto ret = (data->func)(manage(arg_0));
16075
    return ret.release();
16076
  };
16077
  auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
16078
  return manage(res);
16079
}
16080
 
16081
isl::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::pw_aff el) const
16082
{
16083
  auto res = isl_pw_aff_list_insert(copy(), pos, el.release());
16084
  return manage(res);
16085
}
16086
 
16087
class size pw_aff_list::size() const
16088
{
16089
  auto res = isl_pw_aff_list_size(get());
16090
  return manage(res);
16091
}
16092
 
16093
inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj)
16094
{
16095
  char *str = isl_pw_aff_list_to_str(obj.get());
16096
  if (!str) {
16097
    os.setstate(std::ios_base::badbit);
16098
    return os;
16099
  }
16100
  os << str;
16101
  free(str);
16102
  return os;
16103
}
16104
 
16105
// implementations for isl::pw_multi_aff
16106
pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr) {
16107
  return pw_multi_aff(ptr);
16108
}
16109
pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr) {
16110
  ptr = isl_pw_multi_aff_copy(ptr);
16111
  return pw_multi_aff(ptr);
16112
}
16113
 
16114
pw_multi_aff::pw_multi_aff()
16115
    : ptr(nullptr) {}
16116
 
16117
pw_multi_aff::pw_multi_aff(const pw_multi_aff &obj)
16118
    : ptr(nullptr)
16119
{
16120
  ptr = obj.copy();
16121
}
16122
 
16123
pw_multi_aff::pw_multi_aff(__isl_take isl_pw_multi_aff *ptr)
16124
    : ptr(ptr) {}
16125
 
16126
pw_multi_aff::pw_multi_aff(isl::multi_aff ma)
16127
{
16128
  auto res = isl_pw_multi_aff_from_multi_aff(ma.release());
16129
  ptr = res;
16130
}
16131
 
16132
pw_multi_aff::pw_multi_aff(isl::pw_aff pa)
16133
{
16134
  auto res = isl_pw_multi_aff_from_pw_aff(pa.release());
16135
  ptr = res;
16136
}
16137
 
16138
pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str)
16139
{
16140
  auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
16141
  ptr = res;
16142
}
16143
 
16144
pw_multi_aff &pw_multi_aff::operator=(pw_multi_aff obj) {
16145
  std::swap(this->ptr, obj.ptr);
16146
  return *this;
16147
}
16148
 
16149
pw_multi_aff::~pw_multi_aff() {
16150
  if (ptr)
16151
    isl_pw_multi_aff_free(ptr);
16152
}
16153
 
16154
__isl_give isl_pw_multi_aff *pw_multi_aff::copy() const & {
16155
  return isl_pw_multi_aff_copy(ptr);
16156
}
16157
 
16158
__isl_keep isl_pw_multi_aff *pw_multi_aff::get() const {
16159
  return ptr;
16160
}
16161
 
16162
__isl_give isl_pw_multi_aff *pw_multi_aff::release() {
16163
  isl_pw_multi_aff *tmp = ptr;
16164
  ptr = nullptr;
16165
  return tmp;
16166
}
16167
 
16168
bool pw_multi_aff::is_null() const {
16169
  return ptr == nullptr;
16170
}
16171
 
16172
isl::ctx pw_multi_aff::ctx() const {
16173
  return isl::ctx(isl_pw_multi_aff_get_ctx(ptr));
16174
}
16175
 
16176
isl::multi_pw_aff pw_multi_aff::add(const isl::multi_pw_aff &multi2) const
16177
{
16178
  return isl::multi_pw_aff(*this).add(multi2);
16179
}
16180
 
16181
isl::multi_union_pw_aff pw_multi_aff::add(const isl::multi_union_pw_aff &multi2) const
16182
{
16183
  return isl::multi_pw_aff(*this).add(multi2);
16184
}
16185
 
16186
isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const
16187
{
16188
  auto res = isl_pw_multi_aff_add(copy(), pma2.release());
16189
  return manage(res);
16190
}
16191
 
16192
isl::union_pw_multi_aff pw_multi_aff::add(const isl::union_pw_multi_aff &upma2) const
16193
{
16194
  return isl::union_pw_multi_aff(*this).add(upma2);
16195
}
16196
 
16197
isl::pw_multi_aff pw_multi_aff::add(const isl::multi_aff &pma2) const
16198
{
16199
  return this->add(isl::pw_multi_aff(pma2));
16200
}
16201
 
16202
isl::pw_multi_aff pw_multi_aff::add(const isl::pw_aff &pma2) const
16203
{
16204
  return this->add(isl::pw_multi_aff(pma2));
16205
}
16206
 
16207
isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const
16208
{
16209
  auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release());
16210
  return manage(res);
16211
}
16212
 
16213
isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const
16214
{
16215
  auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release());
16216
  return manage(res);
16217
}
16218
 
16219
isl::pw_multi_aff pw_multi_aff::add_constant(long v) const
16220
{
16221
  return this->add_constant(isl::val(ctx(), v));
16222
}
16223
 
16224
isl::union_pw_multi_aff pw_multi_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
16225
{
16226
  return isl::union_pw_multi_aff(*this).add_pw_multi_aff(pma);
16227
}
16228
 
16229
isl::union_pw_multi_aff pw_multi_aff::apply(const isl::union_pw_multi_aff &upma2) const
16230
{
16231
  return isl::union_pw_multi_aff(*this).apply(upma2);
16232
}
16233
 
16234
isl::map pw_multi_aff::as_map() const
16235
{
16236
  auto res = isl_pw_multi_aff_as_map(copy());
16237
  return manage(res);
16238
}
16239
 
16240
isl::multi_aff pw_multi_aff::as_multi_aff() const
16241
{
16242
  auto res = isl_pw_multi_aff_as_multi_aff(copy());
16243
  return manage(res);
16244
}
16245
 
16246
isl::multi_union_pw_aff pw_multi_aff::as_multi_union_pw_aff() const
16247
{
16248
  return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff();
16249
}
16250
 
16251
isl::pw_multi_aff pw_multi_aff::as_pw_multi_aff() const
16252
{
16253
  return isl::union_pw_multi_aff(*this).as_pw_multi_aff();
16254
}
16255
 
16256
isl::set pw_multi_aff::as_set() const
16257
{
16258
  auto res = isl_pw_multi_aff_as_set(copy());
16259
  return manage(res);
16260
}
16261
 
16262
isl::union_map pw_multi_aff::as_union_map() const
16263
{
16264
  return isl::union_pw_multi_aff(*this).as_union_map();
16265
}
16266
 
16267
isl::pw_aff pw_multi_aff::at(int pos) const
16268
{
16269
  auto res = isl_pw_multi_aff_get_at(get(), pos);
16270
  return manage(res);
16271
}
16272
 
16273
isl::pw_aff pw_multi_aff::get_at(int pos) const
16274
{
16275
  return at(pos);
16276
}
16277
 
16278
isl::set pw_multi_aff::bind(const isl::multi_id &tuple) const
16279
{
16280
  return isl::multi_pw_aff(*this).bind(tuple);
16281
}
16282
 
16283
isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const
16284
{
16285
  auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release());
16286
  return manage(res);
16287
}
16288
 
16289
isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const
16290
{
16291
  auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release());
16292
  return manage(res);
16293
}
16294
 
16295
isl::pw_multi_aff pw_multi_aff::coalesce() const
16296
{
16297
  auto res = isl_pw_multi_aff_coalesce(copy());
16298
  return manage(res);
16299
}
16300
 
16301
class size pw_multi_aff::dim(isl::dim type) const
16302
{
16303
  auto res = isl_pw_multi_aff_dim(get(), static_cast<enum isl_dim_type>(type));
16304
  return manage(res);
16305
}
16306
 
16307
isl::set pw_multi_aff::domain() const
16308
{
16309
  auto res = isl_pw_multi_aff_domain(copy());
16310
  return manage(res);
16311
}
16312
 
16313
isl::pw_multi_aff pw_multi_aff::domain_map(isl::space space)
16314
{
16315
  auto res = isl_pw_multi_aff_domain_map(space.release());
16316
  return manage(res);
16317
}
16318
 
16319
isl::pw_multi_aff pw_multi_aff::drop_dims(isl::dim type, unsigned int first, unsigned int n) const
16320
{
16321
  auto res = isl_pw_multi_aff_drop_dims(copy(), static_cast<enum isl_dim_type>(type), first, n);
16322
  return manage(res);
16323
}
16324
 
16325
isl::pw_multi_aff pw_multi_aff::extract_pw_multi_aff(const isl::space &space) const
16326
{
16327
  return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space);
16328
}
16329
 
16330
isl::multi_pw_aff pw_multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const
16331
{
16332
  return isl::multi_pw_aff(*this).flat_range_product(multi2);
16333
}
16334
 
16335
isl::multi_union_pw_aff pw_multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
16336
{
16337
  return isl::multi_pw_aff(*this).flat_range_product(multi2);
16338
}
16339
 
16340
isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const
16341
{
16342
  auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release());
16343
  return manage(res);
16344
}
16345
 
16346
isl::union_pw_multi_aff pw_multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
16347
{
16348
  return isl::union_pw_multi_aff(*this).flat_range_product(upma2);
16349
}
16350
 
16351
isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::multi_aff &pma2) const
16352
{
16353
  return this->flat_range_product(isl::pw_multi_aff(pma2));
16354
}
16355
 
16356
isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::pw_aff &pma2) const
16357
{
16358
  return this->flat_range_product(isl::pw_multi_aff(pma2));
16359
}
16360
 
16361
stat pw_multi_aff::foreach_piece(const std::function<stat(isl::set, isl::multi_aff)> &fn) const
16362
{
16363
  struct fn_data {
16364
    std::function<stat(isl::set, isl::multi_aff)> func;
16365
  } fn_data = { fn };
16366
  auto fn_lambda = [](isl_set *arg_0, isl_multi_aff *arg_1, void *arg_2) -> isl_stat {
16367
    auto *data = static_cast<struct fn_data *>(arg_2);
16368
    auto ret = (data->func)(manage(arg_0), manage(arg_1));
16369
    return ret.release();
16370
  };
16371
  auto res = isl_pw_multi_aff_foreach_piece(get(), fn_lambda, &fn_data);
16372
  return manage(res);
16373
}
16374
 
16375
isl::pw_multi_aff pw_multi_aff::from_map(isl::map map)
16376
{
16377
  auto res = isl_pw_multi_aff_from_map(map.release());
16378
  return manage(res);
16379
}
16380
 
16381
isl::pw_multi_aff pw_multi_aff::gist(isl::set set) const
16382
{
16383
  auto res = isl_pw_multi_aff_gist(copy(), set.release());
16384
  return manage(res);
16385
}
16386
 
16387
isl::union_pw_multi_aff pw_multi_aff::gist(const isl::union_set &context) const
16388
{
16389
  return isl::union_pw_multi_aff(*this).gist(context);
16390
}
16391
 
16392
isl::pw_multi_aff pw_multi_aff::gist(const isl::basic_set &set) const
16393
{
16394
  return this->gist(isl::set(set));
16395
}
16396
 
16397
isl::pw_multi_aff pw_multi_aff::gist(const isl::point &set) const
16398
{
16399
  return this->gist(isl::set(set));
16400
}
16401
 
16402
boolean pw_multi_aff::has_range_tuple_id() const
16403
{
16404
  auto res = isl_pw_multi_aff_has_range_tuple_id(get());
16405
  return manage(res);
16406
}
16407
 
16408
isl::multi_pw_aff pw_multi_aff::identity() const
16409
{
16410
  return isl::multi_pw_aff(*this).identity();
16411
}
16412
 
16413
isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space)
16414
{
16415
  auto res = isl_pw_multi_aff_identity_on_domain_space(space.release());
16416
  return manage(res);
16417
}
16418
 
16419
isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) const
16420
{
16421
  auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release());
16422
  return manage(res);
16423
}
16424
 
16425
isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const
16426
{
16427
  auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release());
16428
  return manage(res);
16429
}
16430
 
16431
isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::space &space) const
16432
{
16433
  return isl::union_pw_multi_aff(*this).intersect_domain(space);
16434
}
16435
 
16436
isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::union_set &uset) const
16437
{
16438
  return isl::union_pw_multi_aff(*this).intersect_domain(uset);
16439
}
16440
 
16441
isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::basic_set &set) const
16442
{
16443
  return this->intersect_domain(isl::set(set));
16444
}
16445
 
16446
isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::point &set) const
16447
{
16448
  return this->intersect_domain(isl::set(set));
16449
}
16450
 
16451
isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const
16452
{
16453
  return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_domain(uset);
16454
}
16455
 
16456
isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const
16457
{
16458
  return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_range(uset);
16459
}
16460
 
16461
isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const
16462
{
16463
  auto res = isl_pw_multi_aff_intersect_params(copy(), set.release());
16464
  return manage(res);
16465
}
16466
 
16467
boolean pw_multi_aff::involves_locals() const
16468
{
16469
  auto res = isl_pw_multi_aff_involves_locals(get());
16470
  return manage(res);
16471
}
16472
 
16473
boolean pw_multi_aff::involves_nan() const
16474
{
16475
  return isl::multi_pw_aff(*this).involves_nan();
16476
}
16477
 
16478
boolean pw_multi_aff::involves_param(const isl::id &id) const
16479
{
16480
  return isl::multi_pw_aff(*this).involves_param(id);
16481
}
16482
 
16483
boolean pw_multi_aff::involves_param(const std::string &id) const
16484
{
16485
  return this->involves_param(isl::id(ctx(), id));
16486
}
16487
 
16488
boolean pw_multi_aff::involves_param(const isl::id_list &list) const
16489
{
16490
  return isl::multi_pw_aff(*this).involves_param(list);
16491
}
16492
 
16493
boolean pw_multi_aff::isa_multi_aff() const
16494
{
16495
  auto res = isl_pw_multi_aff_isa_multi_aff(get());
16496
  return manage(res);
16497
}
16498
 
16499
boolean pw_multi_aff::isa_pw_multi_aff() const
16500
{
16501
  return isl::union_pw_multi_aff(*this).isa_pw_multi_aff();
16502
}
16503
 
16504
isl::pw_aff_list pw_multi_aff::list() const
16505
{
16506
  return isl::multi_pw_aff(*this).list();
16507
}
16508
 
16509
isl::multi_pw_aff pw_multi_aff::max(const isl::multi_pw_aff &multi2) const
16510
{
16511
  return isl::multi_pw_aff(*this).max(multi2);
16512
}
16513
 
16514
isl::multi_val pw_multi_aff::max_multi_val() const
16515
{
16516
  auto res = isl_pw_multi_aff_max_multi_val(copy());
16517
  return manage(res);
16518
}
16519
 
16520
isl::multi_pw_aff pw_multi_aff::min(const isl::multi_pw_aff &multi2) const
16521
{
16522
  return isl::multi_pw_aff(*this).min(multi2);
16523
}
16524
 
16525
isl::multi_val pw_multi_aff::min_multi_val() const
16526
{
16527
  auto res = isl_pw_multi_aff_min_multi_val(copy());
16528
  return manage(res);
16529
}
16530
 
16531
isl::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::set domain, isl::multi_val mv)
16532
{
16533
  auto res = isl_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release());
16534
  return manage(res);
16535
}
16536
 
16537
class size pw_multi_aff::n_piece() const
16538
{
16539
  auto res = isl_pw_multi_aff_n_piece(get());
16540
  return manage(res);
16541
}
16542
 
16543
isl::multi_pw_aff pw_multi_aff::neg() const
16544
{
16545
  return isl::multi_pw_aff(*this).neg();
16546
}
16547
 
16548
boolean pw_multi_aff::plain_is_empty() const
16549
{
16550
  return isl::union_pw_multi_aff(*this).plain_is_empty();
16551
}
16552
 
16553
boolean pw_multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const
16554
{
16555
  return isl::multi_pw_aff(*this).plain_is_equal(multi2);
16556
}
16557
 
16558
boolean pw_multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
16559
{
16560
  return isl::multi_pw_aff(*this).plain_is_equal(multi2);
16561
}
16562
 
16563
isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const
16564
{
16565
  auto res = isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(copy(), pma2.release());
16566
  return manage(res);
16567
}
16568
 
16569
isl::union_pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
16570
{
16571
  return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
16572
}
16573
 
16574
isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const
16575
{
16576
  return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
16577
}
16578
 
16579
isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const
16580
{
16581
  return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2));
16582
}
16583
 
16584
isl::multi_pw_aff pw_multi_aff::product(const isl::multi_pw_aff &multi2) const
16585
{
16586
  return isl::multi_pw_aff(*this).product(multi2);
16587
}
16588
 
16589
isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const
16590
{
16591
  auto res = isl_pw_multi_aff_product(copy(), pma2.release());
16592
  return manage(res);
16593
}
16594
 
16595
isl::pw_multi_aff pw_multi_aff::product(const isl::multi_aff &pma2) const
16596
{
16597
  return this->product(isl::pw_multi_aff(pma2));
16598
}
16599
 
16600
isl::pw_multi_aff pw_multi_aff::product(const isl::pw_aff &pma2) const
16601
{
16602
  return this->product(isl::pw_multi_aff(pma2));
16603
}
16604
 
16605
isl::pw_multi_aff pw_multi_aff::project_out_map(isl::space space, isl::dim type, unsigned int first, unsigned int n)
16606
{
16607
  auto res = isl_pw_multi_aff_project_out_map(space.release(), static_cast<enum isl_dim_type>(type), first, n);
16608
  return manage(res);
16609
}
16610
 
16611
isl::multi_pw_aff pw_multi_aff::pullback(const isl::multi_pw_aff &mpa2) const
16612
{
16613
  return isl::multi_pw_aff(*this).pullback(mpa2);
16614
}
16615
 
16616
isl::pw_multi_aff pw_multi_aff::pullback(isl::multi_aff ma) const
16617
{
16618
  auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release());
16619
  return manage(res);
16620
}
16621
 
16622
isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const
16623
{
16624
  auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release());
16625
  return manage(res);
16626
}
16627
 
16628
isl::union_pw_multi_aff pw_multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const
16629
{
16630
  return isl::union_pw_multi_aff(*this).pullback(upma2);
16631
}
16632
 
16633
isl::pw_multi_aff_list pw_multi_aff::pw_multi_aff_list() const
16634
{
16635
  return isl::union_pw_multi_aff(*this).pw_multi_aff_list();
16636
}
16637
 
16638
isl::pw_multi_aff pw_multi_aff::range_factor_domain() const
16639
{
16640
  auto res = isl_pw_multi_aff_range_factor_domain(copy());
16641
  return manage(res);
16642
}
16643
 
16644
isl::pw_multi_aff pw_multi_aff::range_factor_range() const
16645
{
16646
  auto res = isl_pw_multi_aff_range_factor_range(copy());
16647
  return manage(res);
16648
}
16649
 
16650
isl::pw_multi_aff pw_multi_aff::range_map(isl::space space)
16651
{
16652
  auto res = isl_pw_multi_aff_range_map(space.release());
16653
  return manage(res);
16654
}
16655
 
16656
isl::multi_pw_aff pw_multi_aff::range_product(const isl::multi_pw_aff &multi2) const
16657
{
16658
  return isl::multi_pw_aff(*this).range_product(multi2);
16659
}
16660
 
16661
isl::multi_union_pw_aff pw_multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const
16662
{
16663
  return isl::multi_pw_aff(*this).range_product(multi2);
16664
}
16665
 
16666
isl::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const
16667
{
16668
  auto res = isl_pw_multi_aff_range_product(copy(), pma2.release());
16669
  return manage(res);
16670
}
16671
 
16672
isl::union_pw_multi_aff pw_multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const
16673
{
16674
  return isl::union_pw_multi_aff(*this).range_product(upma2);
16675
}
16676
 
16677
isl::pw_multi_aff pw_multi_aff::range_product(const isl::multi_aff &pma2) const
16678
{
16679
  return this->range_product(isl::pw_multi_aff(pma2));
16680
}
16681
 
16682
isl::pw_multi_aff pw_multi_aff::range_product(const isl::pw_aff &pma2) const
16683
{
16684
  return this->range_product(isl::pw_multi_aff(pma2));
16685
}
16686
 
16687
isl::id pw_multi_aff::range_tuple_id() const
16688
{
16689
  auto res = isl_pw_multi_aff_get_range_tuple_id(get());
16690
  return manage(res);
16691
}
16692
 
16693
isl::id pw_multi_aff::get_range_tuple_id() const
16694
{
16695
  return range_tuple_id();
16696
}
16697
 
16698
isl::multi_pw_aff pw_multi_aff::reset_range_tuple_id() const
16699
{
16700
  return isl::multi_pw_aff(*this).reset_range_tuple_id();
16701
}
16702
 
16703
isl::multi_pw_aff pw_multi_aff::reset_tuple_id(isl::dim type) const
16704
{
16705
  return isl::multi_pw_aff(*this).reset_tuple_id(type);
16706
}
16707
 
16708
isl::multi_pw_aff pw_multi_aff::scale(const isl::multi_val &mv) const
16709
{
16710
  return isl::multi_pw_aff(*this).scale(mv);
16711
}
16712
 
16713
isl::pw_multi_aff pw_multi_aff::scale(isl::val v) const
16714
{
16715
  auto res = isl_pw_multi_aff_scale_val(copy(), v.release());
16716
  return manage(res);
16717
}
16718
 
16719
isl::pw_multi_aff pw_multi_aff::scale(long v) const
16720
{
16721
  return this->scale(isl::val(ctx(), v));
16722
}
16723
 
16724
isl::multi_pw_aff pw_multi_aff::scale_down(const isl::multi_val &mv) const
16725
{
16726
  return isl::multi_pw_aff(*this).scale_down(mv);
16727
}
16728
 
16729
isl::pw_multi_aff pw_multi_aff::scale_down(isl::val v) const
16730
{
16731
  auto res = isl_pw_multi_aff_scale_down_val(copy(), v.release());
16732
  return manage(res);
16733
}
16734
 
16735
isl::pw_multi_aff pw_multi_aff::scale_down(long v) const
16736
{
16737
  return this->scale_down(isl::val(ctx(), v));
16738
}
16739
 
16740
isl::multi_pw_aff pw_multi_aff::set_at(int pos, const isl::pw_aff &el) const
16741
{
16742
  return isl::multi_pw_aff(*this).set_at(pos, el);
16743
}
16744
 
16745
isl::multi_union_pw_aff pw_multi_aff::set_at(int pos, const isl::union_pw_aff &el) const
16746
{
16747
  return isl::multi_pw_aff(*this).set_at(pos, el);
16748
}
16749
 
16750
isl::multi_pw_aff pw_multi_aff::set_pw_aff(int pos, const isl::pw_aff &el) const
16751
{
16752
  return isl::multi_pw_aff(*this).set_pw_aff(pos, el);
16753
}
16754
 
16755
isl::pw_multi_aff pw_multi_aff::set_pw_aff(unsigned int pos, isl::pw_aff pa) const
16756
{
16757
  auto res = isl_pw_multi_aff_set_pw_aff(copy(), pos, pa.release());
16758
  return manage(res);
16759
}
16760
 
16761
isl::pw_multi_aff pw_multi_aff::set_range_tuple(isl::id id) const
16762
{
16763
  auto res = isl_pw_multi_aff_set_range_tuple_id(copy(), id.release());
16764
  return manage(res);
16765
}
16766
 
16767
isl::pw_multi_aff pw_multi_aff::set_range_tuple(const std::string &id) const
16768
{
16769
  return this->set_range_tuple(isl::id(ctx(), id));
16770
}
16771
 
16772
isl::multi_union_pw_aff pw_multi_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
16773
{
16774
  return isl::multi_pw_aff(*this).set_union_pw_aff(pos, el);
16775
}
16776
 
16777
class size pw_multi_aff::size() const
16778
{
16779
  return isl::multi_pw_aff(*this).size();
16780
}
16781
 
16782
isl::space pw_multi_aff::space() const
16783
{
16784
  auto res = isl_pw_multi_aff_get_space(get());
16785
  return manage(res);
16786
}
16787
 
16788
isl::space pw_multi_aff::get_space() const
16789
{
16790
  return space();
16791
}
16792
 
16793
isl::multi_pw_aff pw_multi_aff::sub(const isl::multi_pw_aff &multi2) const
16794
{
16795
  return isl::multi_pw_aff(*this).sub(multi2);
16796
}
16797
 
16798
isl::multi_union_pw_aff pw_multi_aff::sub(const isl::multi_union_pw_aff &multi2) const
16799
{
16800
  return isl::multi_pw_aff(*this).sub(multi2);
16801
}
16802
 
16803
isl::pw_multi_aff pw_multi_aff::sub(isl::pw_multi_aff pma2) const
16804
{
16805
  auto res = isl_pw_multi_aff_sub(copy(), pma2.release());
16806
  return manage(res);
16807
}
16808
 
16809
isl::union_pw_multi_aff pw_multi_aff::sub(const isl::union_pw_multi_aff &upma2) const
16810
{
16811
  return isl::union_pw_multi_aff(*this).sub(upma2);
16812
}
16813
 
16814
isl::pw_multi_aff pw_multi_aff::sub(const isl::multi_aff &pma2) const
16815
{
16816
  return this->sub(isl::pw_multi_aff(pma2));
16817
}
16818
 
16819
isl::pw_multi_aff pw_multi_aff::sub(const isl::pw_aff &pma2) const
16820
{
16821
  return this->sub(isl::pw_multi_aff(pma2));
16822
}
16823
 
16824
isl::pw_multi_aff pw_multi_aff::subtract_domain(isl::set set) const
16825
{
16826
  auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release());
16827
  return manage(res);
16828
}
16829
 
16830
isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::space &space) const
16831
{
16832
  return isl::union_pw_multi_aff(*this).subtract_domain(space);
16833
}
16834
 
16835
isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::union_set &uset) const
16836
{
16837
  return isl::union_pw_multi_aff(*this).subtract_domain(uset);
16838
}
16839
 
16840
isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::basic_set &set) const
16841
{
16842
  return this->subtract_domain(isl::set(set));
16843
}
16844
 
16845
isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::point &set) const
16846
{
16847
  return this->subtract_domain(isl::set(set));
16848
}
16849
 
16850
isl::pw_multi_aff_list pw_multi_aff::to_list() const
16851
{
16852
  auto res = isl_pw_multi_aff_to_list(copy());
16853
  return manage(res);
16854
}
16855
 
16856
isl::multi_pw_aff pw_multi_aff::to_multi_pw_aff() const
16857
{
16858
  auto res = isl_pw_multi_aff_to_multi_pw_aff(copy());
16859
  return manage(res);
16860
}
16861
 
16862
isl::union_pw_multi_aff pw_multi_aff::to_union_pw_multi_aff() const
16863
{
16864
  auto res = isl_pw_multi_aff_to_union_pw_multi_aff(copy());
16865
  return manage(res);
16866
}
16867
 
16868
isl::id pw_multi_aff::tuple_id(isl::dim type) const
16869
{
16870
  auto res = isl_pw_multi_aff_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
16871
  return manage(res);
16872
}
16873
 
16874
isl::id pw_multi_aff::get_tuple_id(isl::dim type) const
16875
{
16876
  return tuple_id(type);
16877
}
16878
 
16879
isl::multi_pw_aff pw_multi_aff::unbind_params_insert_domain(const isl::multi_id &domain) const
16880
{
16881
  return isl::multi_pw_aff(*this).unbind_params_insert_domain(domain);
16882
}
16883
 
16884
isl::multi_pw_aff pw_multi_aff::union_add(const isl::multi_pw_aff &mpa2) const
16885
{
16886
  return isl::multi_pw_aff(*this).union_add(mpa2);
16887
}
16888
 
16889
isl::multi_union_pw_aff pw_multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
16890
{
16891
  return isl::multi_pw_aff(*this).union_add(mupa2);
16892
}
16893
 
16894
isl::pw_multi_aff pw_multi_aff::union_add(isl::pw_multi_aff pma2) const
16895
{
16896
  auto res = isl_pw_multi_aff_union_add(copy(), pma2.release());
16897
  return manage(res);
16898
}
16899
 
16900
isl::union_pw_multi_aff pw_multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const
16901
{
16902
  return isl::union_pw_multi_aff(*this).union_add(upma2);
16903
}
16904
 
16905
isl::pw_multi_aff pw_multi_aff::union_add(const isl::multi_aff &pma2) const
16906
{
16907
  return this->union_add(isl::pw_multi_aff(pma2));
16908
}
16909
 
16910
isl::pw_multi_aff pw_multi_aff::union_add(const isl::pw_aff &pma2) const
16911
{
16912
  return this->union_add(isl::pw_multi_aff(pma2));
16913
}
16914
 
16915
isl::pw_multi_aff pw_multi_aff::zero(isl::space space)
16916
{
16917
  auto res = isl_pw_multi_aff_zero(space.release());
16918
  return manage(res);
16919
}
16920
 
16921
inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff &obj)
16922
{
16923
  char *str = isl_pw_multi_aff_to_str(obj.get());
16924
  if (!str) {
16925
    os.setstate(std::ios_base::badbit);
16926
    return os;
16927
  }
16928
  os << str;
16929
  free(str);
16930
  return os;
16931
}
16932
 
16933
// implementations for isl::pw_multi_aff_list
16934
pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) {
16935
  return pw_multi_aff_list(ptr);
16936
}
16937
pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) {
16938
  ptr = isl_pw_multi_aff_list_copy(ptr);
16939
  return pw_multi_aff_list(ptr);
16940
}
16941
 
16942
pw_multi_aff_list::pw_multi_aff_list()
16943
    : ptr(nullptr) {}
16944
 
16945
pw_multi_aff_list::pw_multi_aff_list(const pw_multi_aff_list &obj)
16946
    : ptr(nullptr)
16947
{
16948
  ptr = obj.copy();
16949
}
16950
 
16951
pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr)
16952
    : ptr(ptr) {}
16953
 
16954
pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, int n)
16955
{
16956
  auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n);
16957
  ptr = res;
16958
}
16959
 
16960
pw_multi_aff_list::pw_multi_aff_list(isl::pw_multi_aff el)
16961
{
16962
  auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release());
16963
  ptr = res;
16964
}
16965
 
16966
pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, const std::string &str)
16967
{
16968
  auto res = isl_pw_multi_aff_list_read_from_str(ctx.release(), str.c_str());
16969
  ptr = res;
16970
}
16971
 
16972
pw_multi_aff_list &pw_multi_aff_list::operator=(pw_multi_aff_list obj) {
16973
  std::swap(this->ptr, obj.ptr);
16974
  return *this;
16975
}
16976
 
16977
pw_multi_aff_list::~pw_multi_aff_list() {
16978
  if (ptr)
16979
    isl_pw_multi_aff_list_free(ptr);
16980
}
16981
 
16982
__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & {
16983
  return isl_pw_multi_aff_list_copy(ptr);
16984
}
16985
 
16986
__isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const {
16987
  return ptr;
16988
}
16989
 
16990
__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() {
16991
  isl_pw_multi_aff_list *tmp = ptr;
16992
  ptr = nullptr;
16993
  return tmp;
16994
}
16995
 
16996
bool pw_multi_aff_list::is_null() const {
16997
  return ptr == nullptr;
16998
}
16999
 
17000
isl::ctx pw_multi_aff_list::ctx() const {
17001
  return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr));
17002
}
17003
 
17004
isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const
17005
{
17006
  auto res = isl_pw_multi_aff_list_add(copy(), el.release());
17007
  return manage(res);
17008
}
17009
 
17010
isl::pw_multi_aff pw_multi_aff_list::at(int index) const
17011
{
17012
  auto res = isl_pw_multi_aff_list_get_at(get(), index);
17013
  return manage(res);
17014
}
17015
 
17016
isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const
17017
{
17018
  return at(index);
17019
}
17020
 
17021
isl::pw_multi_aff_list pw_multi_aff_list::clear() const
17022
{
17023
  auto res = isl_pw_multi_aff_list_clear(copy());
17024
  return manage(res);
17025
}
17026
 
17027
isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const
17028
{
17029
  auto res = isl_pw_multi_aff_list_concat(copy(), list2.release());
17030
  return manage(res);
17031
}
17032
 
17033
isl::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const
17034
{
17035
  auto res = isl_pw_multi_aff_list_drop(copy(), first, n);
17036
  return manage(res);
17037
}
17038
 
17039
stat pw_multi_aff_list::foreach(const std::function<stat(isl::pw_multi_aff)> &fn) const
17040
{
17041
  struct fn_data {
17042
    std::function<stat(isl::pw_multi_aff)> func;
17043
  } fn_data = { fn };
17044
  auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat {
17045
    auto *data = static_cast<struct fn_data *>(arg_1);
17046
    auto ret = (data->func)(manage(arg_0));
17047
    return ret.release();
17048
  };
17049
  auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data);
17050
  return manage(res);
17051
}
17052
 
17053
isl::pw_multi_aff_list pw_multi_aff_list::insert(unsigned int pos, isl::pw_multi_aff el) const
17054
{
17055
  auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release());
17056
  return manage(res);
17057
}
17058
 
17059
class size pw_multi_aff_list::size() const
17060
{
17061
  auto res = isl_pw_multi_aff_list_size(get());
17062
  return manage(res);
17063
}
17064
 
17065
inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff_list &obj)
17066
{
17067
  char *str = isl_pw_multi_aff_list_to_str(obj.get());
17068
  if (!str) {
17069
    os.setstate(std::ios_base::badbit);
17070
    return os;
17071
  }
17072
  os << str;
17073
  free(str);
17074
  return os;
17075
}
17076
 
17077
// implementations for isl::schedule
17078
schedule manage(__isl_take isl_schedule *ptr) {
17079
  return schedule(ptr);
17080
}
17081
schedule manage_copy(__isl_keep isl_schedule *ptr) {
17082
  ptr = isl_schedule_copy(ptr);
17083
  return schedule(ptr);
17084
}
17085
 
17086
schedule::schedule()
17087
    : ptr(nullptr) {}
17088
 
17089
schedule::schedule(const schedule &obj)
17090
    : ptr(nullptr)
17091
{
17092
  ptr = obj.copy();
17093
}
17094
 
17095
schedule::schedule(__isl_take isl_schedule *ptr)
17096
    : ptr(ptr) {}
17097
 
17098
schedule::schedule(isl::ctx ctx, const std::string &str)
17099
{
17100
  auto res = isl_schedule_read_from_str(ctx.release(), str.c_str());
17101
  ptr = res;
17102
}
17103
 
17104
schedule &schedule::operator=(schedule obj) {
17105
  std::swap(this->ptr, obj.ptr);
17106
  return *this;
17107
}
17108
 
17109
schedule::~schedule() {
17110
  if (ptr)
17111
    isl_schedule_free(ptr);
17112
}
17113
 
17114
__isl_give isl_schedule *schedule::copy() const & {
17115
  return isl_schedule_copy(ptr);
17116
}
17117
 
17118
__isl_keep isl_schedule *schedule::get() const {
17119
  return ptr;
17120
}
17121
 
17122
__isl_give isl_schedule *schedule::release() {
17123
  isl_schedule *tmp = ptr;
17124
  ptr = nullptr;
17125
  return tmp;
17126
}
17127
 
17128
bool schedule::is_null() const {
17129
  return ptr == nullptr;
17130
}
17131
 
17132
isl::ctx schedule::ctx() const {
17133
  return isl::ctx(isl_schedule_get_ctx(ptr));
17134
}
17135
 
17136
isl::schedule schedule::align_params(isl::space space) const
17137
{
17138
  auto res = isl_schedule_align_params(copy(), space.release());
17139
  return manage(res);
17140
}
17141
 
17142
isl::union_set schedule::domain() const
17143
{
17144
  auto res = isl_schedule_get_domain(get());
17145
  return manage(res);
17146
}
17147
 
17148
isl::union_set schedule::get_domain() const
17149
{
17150
  return domain();
17151
}
17152
 
17153
isl::schedule schedule::from_domain(isl::union_set domain)
17154
{
17155
  auto res = isl_schedule_from_domain(domain.release());
17156
  return manage(res);
17157
}
17158
 
17159
isl::schedule schedule::gist_domain_params(isl::set context) const
17160
{
17161
  auto res = isl_schedule_gist_domain_params(copy(), context.release());
17162
  return manage(res);
17163
}
17164
 
17165
isl::schedule schedule::insert_partial_schedule(isl::multi_union_pw_aff partial) const
17166
{
17167
  auto res = isl_schedule_insert_partial_schedule(copy(), partial.release());
17168
  return manage(res);
17169
}
17170
 
17171
isl::schedule schedule::intersect_domain(isl::union_set domain) const
17172
{
17173
  auto res = isl_schedule_intersect_domain(copy(), domain.release());
17174
  return manage(res);
17175
}
17176
 
17177
isl::union_map schedule::map() const
17178
{
17179
  auto res = isl_schedule_get_map(get());
17180
  return manage(res);
17181
}
17182
 
17183
isl::union_map schedule::get_map() const
17184
{
17185
  return map();
17186
}
17187
 
17188
isl::schedule schedule::pullback(isl::union_pw_multi_aff upma) const
17189
{
17190
  auto res = isl_schedule_pullback_union_pw_multi_aff(copy(), upma.release());
17191
  return manage(res);
17192
}
17193
 
17194
isl::schedule_node schedule::root() const
17195
{
17196
  auto res = isl_schedule_get_root(get());
17197
  return manage(res);
17198
}
17199
 
17200
isl::schedule_node schedule::get_root() const
17201
{
17202
  return root();
17203
}
17204
 
17205
isl::schedule schedule::sequence(isl::schedule schedule2) const
17206
{
17207
  auto res = isl_schedule_sequence(copy(), schedule2.release());
17208
  return manage(res);
17209
}
17210
 
17211
inline std::ostream &operator<<(std::ostream &os, const schedule &obj)
17212
{
17213
  char *str = isl_schedule_to_str(obj.get());
17214
  if (!str) {
17215
    os.setstate(std::ios_base::badbit);
17216
    return os;
17217
  }
17218
  os << str;
17219
  free(str);
17220
  return os;
17221
}
17222
 
17223
// implementations for isl::schedule_constraints
17224
schedule_constraints manage(__isl_take isl_schedule_constraints *ptr) {
17225
  return schedule_constraints(ptr);
17226
}
17227
schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr) {
17228
  ptr = isl_schedule_constraints_copy(ptr);
17229
  return schedule_constraints(ptr);
17230
}
17231
 
17232
schedule_constraints::schedule_constraints()
17233
    : ptr(nullptr) {}
17234
 
17235
schedule_constraints::schedule_constraints(const schedule_constraints &obj)
17236
    : ptr(nullptr)
17237
{
17238
  ptr = obj.copy();
17239
}
17240
 
17241
schedule_constraints::schedule_constraints(__isl_take isl_schedule_constraints *ptr)
17242
    : ptr(ptr) {}
17243
 
17244
schedule_constraints::schedule_constraints(isl::ctx ctx, const std::string &str)
17245
{
17246
  auto res = isl_schedule_constraints_read_from_str(ctx.release(), str.c_str());
17247
  ptr = res;
17248
}
17249
 
17250
schedule_constraints &schedule_constraints::operator=(schedule_constraints obj) {
17251
  std::swap(this->ptr, obj.ptr);
17252
  return *this;
17253
}
17254
 
17255
schedule_constraints::~schedule_constraints() {
17256
  if (ptr)
17257
    isl_schedule_constraints_free(ptr);
17258
}
17259
 
17260
__isl_give isl_schedule_constraints *schedule_constraints::copy() const & {
17261
  return isl_schedule_constraints_copy(ptr);
17262
}
17263
 
17264
__isl_keep isl_schedule_constraints *schedule_constraints::get() const {
17265
  return ptr;
17266
}
17267
 
17268
__isl_give isl_schedule_constraints *schedule_constraints::release() {
17269
  isl_schedule_constraints *tmp = ptr;
17270
  ptr = nullptr;
17271
  return tmp;
17272
}
17273
 
17274
bool schedule_constraints::is_null() const {
17275
  return ptr == nullptr;
17276
}
17277
 
17278
isl::ctx schedule_constraints::ctx() const {
17279
  return isl::ctx(isl_schedule_constraints_get_ctx(ptr));
17280
}
17281
 
17282
isl::union_map schedule_constraints::coincidence() const
17283
{
17284
  auto res = isl_schedule_constraints_get_coincidence(get());
17285
  return manage(res);
17286
}
17287
 
17288
isl::union_map schedule_constraints::get_coincidence() const
17289
{
17290
  return coincidence();
17291
}
17292
 
17293
isl::schedule schedule_constraints::compute_schedule() const
17294
{
17295
  auto res = isl_schedule_constraints_compute_schedule(copy());
17296
  return manage(res);
17297
}
17298
 
17299
isl::union_map schedule_constraints::conditional_validity() const
17300
{
17301
  auto res = isl_schedule_constraints_get_conditional_validity(get());
17302
  return manage(res);
17303
}
17304
 
17305
isl::union_map schedule_constraints::get_conditional_validity() const
17306
{
17307
  return conditional_validity();
17308
}
17309
 
17310
isl::union_map schedule_constraints::conditional_validity_condition() const
17311
{
17312
  auto res = isl_schedule_constraints_get_conditional_validity_condition(get());
17313
  return manage(res);
17314
}
17315
 
17316
isl::union_map schedule_constraints::get_conditional_validity_condition() const
17317
{
17318
  return conditional_validity_condition();
17319
}
17320
 
17321
isl::set schedule_constraints::context() const
17322
{
17323
  auto res = isl_schedule_constraints_get_context(get());
17324
  return manage(res);
17325
}
17326
 
17327
isl::set schedule_constraints::get_context() const
17328
{
17329
  return context();
17330
}
17331
 
17332
isl::union_set schedule_constraints::domain() const
17333
{
17334
  auto res = isl_schedule_constraints_get_domain(get());
17335
  return manage(res);
17336
}
17337
 
17338
isl::union_set schedule_constraints::get_domain() const
17339
{
17340
  return domain();
17341
}
17342
 
17343
isl::schedule_constraints schedule_constraints::on_domain(isl::union_set domain)
17344
{
17345
  auto res = isl_schedule_constraints_on_domain(domain.release());
17346
  return manage(res);
17347
}
17348
 
17349
isl::union_map schedule_constraints::proximity() const
17350
{
17351
  auto res = isl_schedule_constraints_get_proximity(get());
17352
  return manage(res);
17353
}
17354
 
17355
isl::union_map schedule_constraints::get_proximity() const
17356
{
17357
  return proximity();
17358
}
17359
 
17360
isl::schedule_constraints schedule_constraints::set_coincidence(isl::union_map coincidence) const
17361
{
17362
  auto res = isl_schedule_constraints_set_coincidence(copy(), coincidence.release());
17363
  return manage(res);
17364
}
17365
 
17366
isl::schedule_constraints schedule_constraints::set_conditional_validity(isl::union_map condition, isl::union_map validity) const
17367
{
17368
  auto res = isl_schedule_constraints_set_conditional_validity(copy(), condition.release(), validity.release());
17369
  return manage(res);
17370
}
17371
 
17372
isl::schedule_constraints schedule_constraints::set_context(isl::set context) const
17373
{
17374
  auto res = isl_schedule_constraints_set_context(copy(), context.release());
17375
  return manage(res);
17376
}
17377
 
17378
isl::schedule_constraints schedule_constraints::set_proximity(isl::union_map proximity) const
17379
{
17380
  auto res = isl_schedule_constraints_set_proximity(copy(), proximity.release());
17381
  return manage(res);
17382
}
17383
 
17384
isl::schedule_constraints schedule_constraints::set_validity(isl::union_map validity) const
17385
{
17386
  auto res = isl_schedule_constraints_set_validity(copy(), validity.release());
17387
  return manage(res);
17388
}
17389
 
17390
isl::union_map schedule_constraints::validity() const
17391
{
17392
  auto res = isl_schedule_constraints_get_validity(get());
17393
  return manage(res);
17394
}
17395
 
17396
isl::union_map schedule_constraints::get_validity() const
17397
{
17398
  return validity();
17399
}
17400
 
17401
inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj)
17402
{
17403
  char *str = isl_schedule_constraints_to_str(obj.get());
17404
  if (!str) {
17405
    os.setstate(std::ios_base::badbit);
17406
    return os;
17407
  }
17408
  os << str;
17409
  free(str);
17410
  return os;
17411
}
17412
 
17413
// implementations for isl::schedule_node
17414
schedule_node manage(__isl_take isl_schedule_node *ptr) {
17415
  return schedule_node(ptr);
17416
}
17417
schedule_node manage_copy(__isl_keep isl_schedule_node *ptr) {
17418
  ptr = isl_schedule_node_copy(ptr);
17419
  return schedule_node(ptr);
17420
}
17421
 
17422
schedule_node::schedule_node()
17423
    : ptr(nullptr) {}
17424
 
17425
schedule_node::schedule_node(const schedule_node &obj)
17426
    : ptr(nullptr)
17427
{
17428
  ptr = obj.copy();
17429
}
17430
 
17431
schedule_node::schedule_node(__isl_take isl_schedule_node *ptr)
17432
    : ptr(ptr) {}
17433
 
17434
schedule_node &schedule_node::operator=(schedule_node obj) {
17435
  std::swap(this->ptr, obj.ptr);
17436
  return *this;
17437
}
17438
 
17439
schedule_node::~schedule_node() {
17440
  if (ptr)
17441
    isl_schedule_node_free(ptr);
17442
}
17443
 
17444
__isl_give isl_schedule_node *schedule_node::copy() const & {
17445
  return isl_schedule_node_copy(ptr);
17446
}
17447
 
17448
__isl_keep isl_schedule_node *schedule_node::get() const {
17449
  return ptr;
17450
}
17451
 
17452
__isl_give isl_schedule_node *schedule_node::release() {
17453
  isl_schedule_node *tmp = ptr;
17454
  ptr = nullptr;
17455
  return tmp;
17456
}
17457
 
17458
bool schedule_node::is_null() const {
17459
  return ptr == nullptr;
17460
}
17461
 
17462
template <typename T, typename>
17463
boolean schedule_node::isa_type(T subtype) const
17464
{
17465
  if (is_null())
17466
    return boolean();
17467
  return isl_schedule_node_get_type(get()) == subtype;
17468
}
17469
template <class T>
17470
boolean schedule_node::isa() const
17471
{
17472
  return isa_type<decltype(T::type)>(T::type);
17473
}
17474
template <class T>
17475
T schedule_node::as() const
17476
{
17477
 if (isa<T>().is_false())
17478
    isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T());
17479
  return T(copy());
17480
}
17481
 
17482
isl::ctx schedule_node::ctx() const {
17483
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
17484
}
17485
 
17486
isl::schedule_node schedule_node::ancestor(int generation) const
17487
{
17488
  auto res = isl_schedule_node_ancestor(copy(), generation);
17489
  return manage(res);
17490
}
17491
 
17492
class size schedule_node::ancestor_child_position(const isl::schedule_node &ancestor) const
17493
{
17494
  auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get());
17495
  return manage(res);
17496
}
17497
 
17498
class size schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const
17499
{
17500
  return ancestor_child_position(ancestor);
17501
}
17502
 
17503
isl::schedule_node schedule_node::child(int pos) const
17504
{
17505
  auto res = isl_schedule_node_child(copy(), pos);
17506
  return manage(res);
17507
}
17508
 
17509
class size schedule_node::child_position() const
17510
{
17511
  auto res = isl_schedule_node_get_child_position(get());
17512
  return manage(res);
17513
}
17514
 
17515
class size schedule_node::get_child_position() const
17516
{
17517
  return child_position();
17518
}
17519
 
17520
isl::union_set schedule_node::domain() const
17521
{
17522
  auto res = isl_schedule_node_get_domain(get());
17523
  return manage(res);
17524
}
17525
 
17526
isl::union_set schedule_node::get_domain() const
17527
{
17528
  return domain();
17529
}
17530
 
17531
boolean schedule_node::every_descendant(const std::function<boolean(isl::schedule_node)> &test) const
17532
{
17533
  struct test_data {
17534
    std::function<boolean(isl::schedule_node)> func;
17535
  } test_data = { test };
17536
  auto test_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
17537
    auto *data = static_cast<struct test_data *>(arg_1);
17538
    auto ret = (data->func)(manage_copy(arg_0));
17539
    return ret.release();
17540
  };
17541
  auto res = isl_schedule_node_every_descendant(get(), test_lambda, &test_data);
17542
  return manage(res);
17543
}
17544
 
17545
isl::schedule_node schedule_node::first_child() const
17546
{
17547
  auto res = isl_schedule_node_first_child(copy());
17548
  return manage(res);
17549
}
17550
 
17551
stat schedule_node::foreach_ancestor_top_down(const std::function<stat(isl::schedule_node)> &fn) const
17552
{
17553
  struct fn_data {
17554
    std::function<stat(isl::schedule_node)> func;
17555
  } fn_data = { fn };
17556
  auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_stat {
17557
    auto *data = static_cast<struct fn_data *>(arg_1);
17558
    auto ret = (data->func)(manage_copy(arg_0));
17559
    return ret.release();
17560
  };
17561
  auto res = isl_schedule_node_foreach_ancestor_top_down(get(), fn_lambda, &fn_data);
17562
  return manage(res);
17563
}
17564
 
17565
stat schedule_node::foreach_descendant_top_down(const std::function<boolean(isl::schedule_node)> &fn) const
17566
{
17567
  struct fn_data {
17568
    std::function<boolean(isl::schedule_node)> func;
17569
  } fn_data = { fn };
17570
  auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool {
17571
    auto *data = static_cast<struct fn_data *>(arg_1);
17572
    auto ret = (data->func)(manage_copy(arg_0));
17573
    return ret.release();
17574
  };
17575
  auto res = isl_schedule_node_foreach_descendant_top_down(get(), fn_lambda, &fn_data);
17576
  return manage(res);
17577
}
17578
 
17579
isl::schedule_node schedule_node::from_domain(isl::union_set domain)
17580
{
17581
  auto res = isl_schedule_node_from_domain(domain.release());
17582
  return manage(res);
17583
}
17584
 
17585
isl::schedule_node schedule_node::from_extension(isl::union_map extension)
17586
{
17587
  auto res = isl_schedule_node_from_extension(extension.release());
17588
  return manage(res);
17589
}
17590
 
17591
isl::schedule_node schedule_node::graft_after(isl::schedule_node graft) const
17592
{
17593
  auto res = isl_schedule_node_graft_after(copy(), graft.release());
17594
  return manage(res);
17595
}
17596
 
17597
isl::schedule_node schedule_node::graft_before(isl::schedule_node graft) const
17598
{
17599
  auto res = isl_schedule_node_graft_before(copy(), graft.release());
17600
  return manage(res);
17601
}
17602
 
17603
boolean schedule_node::has_children() const
17604
{
17605
  auto res = isl_schedule_node_has_children(get());
17606
  return manage(res);
17607
}
17608
 
17609
boolean schedule_node::has_next_sibling() const
17610
{
17611
  auto res = isl_schedule_node_has_next_sibling(get());
17612
  return manage(res);
17613
}
17614
 
17615
boolean schedule_node::has_parent() const
17616
{
17617
  auto res = isl_schedule_node_has_parent(get());
17618
  return manage(res);
17619
}
17620
 
17621
boolean schedule_node::has_previous_sibling() const
17622
{
17623
  auto res = isl_schedule_node_has_previous_sibling(get());
17624
  return manage(res);
17625
}
17626
 
17627
isl::schedule_node schedule_node::insert_context(isl::set context) const
17628
{
17629
  auto res = isl_schedule_node_insert_context(copy(), context.release());
17630
  return manage(res);
17631
}
17632
 
17633
isl::schedule_node schedule_node::insert_filter(isl::union_set filter) const
17634
{
17635
  auto res = isl_schedule_node_insert_filter(copy(), filter.release());
17636
  return manage(res);
17637
}
17638
 
17639
isl::schedule_node schedule_node::insert_guard(isl::set context) const
17640
{
17641
  auto res = isl_schedule_node_insert_guard(copy(), context.release());
17642
  return manage(res);
17643
}
17644
 
17645
isl::schedule_node schedule_node::insert_mark(isl::id mark) const
17646
{
17647
  auto res = isl_schedule_node_insert_mark(copy(), mark.release());
17648
  return manage(res);
17649
}
17650
 
17651
isl::schedule_node schedule_node::insert_mark(const std::string &mark) const
17652
{
17653
  return this->insert_mark(isl::id(ctx(), mark));
17654
}
17655
 
17656
isl::schedule_node schedule_node::insert_partial_schedule(isl::multi_union_pw_aff schedule) const
17657
{
17658
  auto res = isl_schedule_node_insert_partial_schedule(copy(), schedule.release());
17659
  return manage(res);
17660
}
17661
 
17662
isl::schedule_node schedule_node::insert_sequence(isl::union_set_list filters) const
17663
{
17664
  auto res = isl_schedule_node_insert_sequence(copy(), filters.release());
17665
  return manage(res);
17666
}
17667
 
17668
isl::schedule_node schedule_node::insert_set(isl::union_set_list filters) const
17669
{
17670
  auto res = isl_schedule_node_insert_set(copy(), filters.release());
17671
  return manage(res);
17672
}
17673
 
17674
boolean schedule_node::is_equal(const isl::schedule_node &node2) const
17675
{
17676
  auto res = isl_schedule_node_is_equal(get(), node2.get());
17677
  return manage(res);
17678
}
17679
 
17680
boolean schedule_node::is_subtree_anchored() const
17681
{
17682
  auto res = isl_schedule_node_is_subtree_anchored(get());
17683
  return manage(res);
17684
}
17685
 
17686
isl::schedule_node schedule_node::map_descendant_bottom_up(const std::function<isl::schedule_node(isl::schedule_node)> &fn) const
17687
{
17688
  struct fn_data {
17689
    std::function<isl::schedule_node(isl::schedule_node)> func;
17690
  } fn_data = { fn };
17691
  auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * {
17692
    auto *data = static_cast<struct fn_data *>(arg_1);
17693
    auto ret = (data->func)(manage(arg_0));
17694
    return ret.release();
17695
  };
17696
  auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data);
17697
  return manage(res);
17698
}
17699
 
17700
class size schedule_node::n_children() const
17701
{
17702
  auto res = isl_schedule_node_n_children(get());
17703
  return manage(res);
17704
}
17705
 
17706
isl::schedule_node schedule_node::next_sibling() const
17707
{
17708
  auto res = isl_schedule_node_next_sibling(copy());
17709
  return manage(res);
17710
}
17711
 
17712
isl::schedule_node schedule_node::order_after(isl::union_set filter) const
17713
{
17714
  auto res = isl_schedule_node_order_after(copy(), filter.release());
17715
  return manage(res);
17716
}
17717
 
17718
isl::schedule_node schedule_node::order_before(isl::union_set filter) const
17719
{
17720
  auto res = isl_schedule_node_order_before(copy(), filter.release());
17721
  return manage(res);
17722
}
17723
 
17724
isl::schedule_node schedule_node::parent() const
17725
{
17726
  auto res = isl_schedule_node_parent(copy());
17727
  return manage(res);
17728
}
17729
 
17730
isl::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const
17731
{
17732
  auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get());
17733
  return manage(res);
17734
}
17735
 
17736
isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const
17737
{
17738
  return prefix_schedule_multi_union_pw_aff();
17739
}
17740
 
17741
isl::union_map schedule_node::prefix_schedule_relation() const
17742
{
17743
  auto res = isl_schedule_node_get_prefix_schedule_relation(get());
17744
  return manage(res);
17745
}
17746
 
17747
isl::union_map schedule_node::get_prefix_schedule_relation() const
17748
{
17749
  return prefix_schedule_relation();
17750
}
17751
 
17752
isl::union_map schedule_node::prefix_schedule_union_map() const
17753
{
17754
  auto res = isl_schedule_node_get_prefix_schedule_union_map(get());
17755
  return manage(res);
17756
}
17757
 
17758
isl::union_map schedule_node::get_prefix_schedule_union_map() const
17759
{
17760
  return prefix_schedule_union_map();
17761
}
17762
 
17763
isl::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const
17764
{
17765
  auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get());
17766
  return manage(res);
17767
}
17768
 
17769
isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const
17770
{
17771
  return prefix_schedule_union_pw_multi_aff();
17772
}
17773
 
17774
isl::schedule_node schedule_node::previous_sibling() const
17775
{
17776
  auto res = isl_schedule_node_previous_sibling(copy());
17777
  return manage(res);
17778
}
17779
 
17780
isl::schedule_node schedule_node::root() const
17781
{
17782
  auto res = isl_schedule_node_root(copy());
17783
  return manage(res);
17784
}
17785
 
17786
isl::schedule schedule_node::schedule() const
17787
{
17788
  auto res = isl_schedule_node_get_schedule(get());
17789
  return manage(res);
17790
}
17791
 
17792
isl::schedule schedule_node::get_schedule() const
17793
{
17794
  return schedule();
17795
}
17796
 
17797
class size schedule_node::schedule_depth() const
17798
{
17799
  auto res = isl_schedule_node_get_schedule_depth(get());
17800
  return manage(res);
17801
}
17802
 
17803
class size schedule_node::get_schedule_depth() const
17804
{
17805
  return schedule_depth();
17806
}
17807
 
17808
isl::schedule_node schedule_node::shared_ancestor(const isl::schedule_node &node2) const
17809
{
17810
  auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get());
17811
  return manage(res);
17812
}
17813
 
17814
isl::schedule_node schedule_node::get_shared_ancestor(const isl::schedule_node &node2) const
17815
{
17816
  return shared_ancestor(node2);
17817
}
17818
 
17819
class size schedule_node::tree_depth() const
17820
{
17821
  auto res = isl_schedule_node_get_tree_depth(get());
17822
  return manage(res);
17823
}
17824
 
17825
class size schedule_node::get_tree_depth() const
17826
{
17827
  return tree_depth();
17828
}
17829
 
17830
isl::union_set schedule_node::universe_domain() const
17831
{
17832
  auto res = isl_schedule_node_get_universe_domain(get());
17833
  return manage(res);
17834
}
17835
 
17836
isl::union_set schedule_node::get_universe_domain() const
17837
{
17838
  return universe_domain();
17839
}
17840
 
17841
inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj)
17842
{
17843
  char *str = isl_schedule_node_to_str(obj.get());
17844
  if (!str) {
17845
    os.setstate(std::ios_base::badbit);
17846
    return os;
17847
  }
17848
  os << str;
17849
  free(str);
17850
  return os;
17851
}
17852
 
17853
// implementations for isl::schedule_node_band
17854
schedule_node_band::schedule_node_band()
17855
    : schedule_node() {}
17856
 
17857
schedule_node_band::schedule_node_band(const schedule_node_band &obj)
17858
    : schedule_node(obj)
17859
{
17860
}
17861
 
17862
schedule_node_band::schedule_node_band(__isl_take isl_schedule_node *ptr)
17863
    : schedule_node(ptr) {}
17864
 
17865
schedule_node_band &schedule_node_band::operator=(schedule_node_band obj) {
17866
  std::swap(this->ptr, obj.ptr);
17867
  return *this;
17868
}
17869
 
17870
isl::ctx schedule_node_band::ctx() const {
17871
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
17872
}
17873
 
17874
isl::union_set schedule_node_band::ast_build_options() const
17875
{
17876
  auto res = isl_schedule_node_band_get_ast_build_options(get());
17877
  return manage(res);
17878
}
17879
 
17880
isl::union_set schedule_node_band::get_ast_build_options() const
17881
{
17882
  return ast_build_options();
17883
}
17884
 
17885
isl::set schedule_node_band::ast_isolate_option() const
17886
{
17887
  auto res = isl_schedule_node_band_get_ast_isolate_option(get());
17888
  return manage(res);
17889
}
17890
 
17891
isl::set schedule_node_band::get_ast_isolate_option() const
17892
{
17893
  return ast_isolate_option();
17894
}
17895
 
17896
boolean schedule_node_band::member_get_coincident(int pos) const
17897
{
17898
  auto res = isl_schedule_node_band_member_get_coincident(get(), pos);
17899
  return manage(res);
17900
}
17901
 
17902
schedule_node_band schedule_node_band::member_set_coincident(int pos, int coincident) const
17903
{
17904
  auto res = isl_schedule_node_band_member_set_coincident(copy(), pos, coincident);
17905
  return manage(res).as<schedule_node_band>();
17906
}
17907
 
17908
schedule_node_band schedule_node_band::mod(isl::multi_val mv) const
17909
{
17910
  auto res = isl_schedule_node_band_mod(copy(), mv.release());
17911
  return manage(res).as<schedule_node_band>();
17912
}
17913
 
17914
class size schedule_node_band::n_member() const
17915
{
17916
  auto res = isl_schedule_node_band_n_member(get());
17917
  return manage(res);
17918
}
17919
 
17920
isl::multi_union_pw_aff schedule_node_band::partial_schedule() const
17921
{
17922
  auto res = isl_schedule_node_band_get_partial_schedule(get());
17923
  return manage(res);
17924
}
17925
 
17926
isl::multi_union_pw_aff schedule_node_band::get_partial_schedule() const
17927
{
17928
  return partial_schedule();
17929
}
17930
 
17931
boolean schedule_node_band::permutable() const
17932
{
17933
  auto res = isl_schedule_node_band_get_permutable(get());
17934
  return manage(res);
17935
}
17936
 
17937
boolean schedule_node_band::get_permutable() const
17938
{
17939
  return permutable();
17940
}
17941
 
17942
schedule_node_band schedule_node_band::scale(isl::multi_val mv) const
17943
{
17944
  auto res = isl_schedule_node_band_scale(copy(), mv.release());
17945
  return manage(res).as<schedule_node_band>();
17946
}
17947
 
17948
schedule_node_band schedule_node_band::scale_down(isl::multi_val mv) const
17949
{
17950
  auto res = isl_schedule_node_band_scale_down(copy(), mv.release());
17951
  return manage(res).as<schedule_node_band>();
17952
}
17953
 
17954
schedule_node_band schedule_node_band::set_ast_build_options(isl::union_set options) const
17955
{
17956
  auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release());
17957
  return manage(res).as<schedule_node_band>();
17958
}
17959
 
17960
schedule_node_band schedule_node_band::set_permutable(int permutable) const
17961
{
17962
  auto res = isl_schedule_node_band_set_permutable(copy(), permutable);
17963
  return manage(res).as<schedule_node_band>();
17964
}
17965
 
17966
schedule_node_band schedule_node_band::shift(isl::multi_union_pw_aff shift) const
17967
{
17968
  auto res = isl_schedule_node_band_shift(copy(), shift.release());
17969
  return manage(res).as<schedule_node_band>();
17970
}
17971
 
17972
schedule_node_band schedule_node_band::split(int pos) const
17973
{
17974
  auto res = isl_schedule_node_band_split(copy(), pos);
17975
  return manage(res).as<schedule_node_band>();
17976
}
17977
 
17978
schedule_node_band schedule_node_band::tile(isl::multi_val sizes) const
17979
{
17980
  auto res = isl_schedule_node_band_tile(copy(), sizes.release());
17981
  return manage(res).as<schedule_node_band>();
17982
}
17983
 
17984
schedule_node_band schedule_node_band::member_set_ast_loop_default(int pos) const
17985
{
17986
  auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_default);
17987
  return manage(res).as<schedule_node_band>();
17988
}
17989
 
17990
schedule_node_band schedule_node_band::member_set_ast_loop_atomic(int pos) const
17991
{
17992
  auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_atomic);
17993
  return manage(res).as<schedule_node_band>();
17994
}
17995
 
17996
schedule_node_band schedule_node_band::member_set_ast_loop_unroll(int pos) const
17997
{
17998
  auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_unroll);
17999
  return manage(res).as<schedule_node_band>();
18000
}
18001
 
18002
schedule_node_band schedule_node_band::member_set_ast_loop_separate(int pos) const
18003
{
18004
  auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_separate);
18005
  return manage(res).as<schedule_node_band>();
18006
}
18007
 
18008
inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj)
18009
{
18010
  char *str = isl_schedule_node_to_str(obj.get());
18011
  if (!str) {
18012
    os.setstate(std::ios_base::badbit);
18013
    return os;
18014
  }
18015
  os << str;
18016
  free(str);
18017
  return os;
18018
}
18019
 
18020
// implementations for isl::schedule_node_context
18021
schedule_node_context::schedule_node_context()
18022
    : schedule_node() {}
18023
 
18024
schedule_node_context::schedule_node_context(const schedule_node_context &obj)
18025
    : schedule_node(obj)
18026
{
18027
}
18028
 
18029
schedule_node_context::schedule_node_context(__isl_take isl_schedule_node *ptr)
18030
    : schedule_node(ptr) {}
18031
 
18032
schedule_node_context &schedule_node_context::operator=(schedule_node_context obj) {
18033
  std::swap(this->ptr, obj.ptr);
18034
  return *this;
18035
}
18036
 
18037
isl::ctx schedule_node_context::ctx() const {
18038
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
18039
}
18040
 
18041
isl::set schedule_node_context::context() const
18042
{
18043
  auto res = isl_schedule_node_context_get_context(get());
18044
  return manage(res);
18045
}
18046
 
18047
isl::set schedule_node_context::get_context() const
18048
{
18049
  return context();
18050
}
18051
 
18052
inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj)
18053
{
18054
  char *str = isl_schedule_node_to_str(obj.get());
18055
  if (!str) {
18056
    os.setstate(std::ios_base::badbit);
18057
    return os;
18058
  }
18059
  os << str;
18060
  free(str);
18061
  return os;
18062
}
18063
 
18064
// implementations for isl::schedule_node_domain
18065
schedule_node_domain::schedule_node_domain()
18066
    : schedule_node() {}
18067
 
18068
schedule_node_domain::schedule_node_domain(const schedule_node_domain &obj)
18069
    : schedule_node(obj)
18070
{
18071
}
18072
 
18073
schedule_node_domain::schedule_node_domain(__isl_take isl_schedule_node *ptr)
18074
    : schedule_node(ptr) {}
18075
 
18076
schedule_node_domain &schedule_node_domain::operator=(schedule_node_domain obj) {
18077
  std::swap(this->ptr, obj.ptr);
18078
  return *this;
18079
}
18080
 
18081
isl::ctx schedule_node_domain::ctx() const {
18082
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
18083
}
18084
 
18085
isl::union_set schedule_node_domain::domain() const
18086
{
18087
  auto res = isl_schedule_node_domain_get_domain(get());
18088
  return manage(res);
18089
}
18090
 
18091
isl::union_set schedule_node_domain::get_domain() const
18092
{
18093
  return domain();
18094
}
18095
 
18096
inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj)
18097
{
18098
  char *str = isl_schedule_node_to_str(obj.get());
18099
  if (!str) {
18100
    os.setstate(std::ios_base::badbit);
18101
    return os;
18102
  }
18103
  os << str;
18104
  free(str);
18105
  return os;
18106
}
18107
 
18108
// implementations for isl::schedule_node_expansion
18109
schedule_node_expansion::schedule_node_expansion()
18110
    : schedule_node() {}
18111
 
18112
schedule_node_expansion::schedule_node_expansion(const schedule_node_expansion &obj)
18113
    : schedule_node(obj)
18114
{
18115
}
18116
 
18117
schedule_node_expansion::schedule_node_expansion(__isl_take isl_schedule_node *ptr)
18118
    : schedule_node(ptr) {}
18119
 
18120
schedule_node_expansion &schedule_node_expansion::operator=(schedule_node_expansion obj) {
18121
  std::swap(this->ptr, obj.ptr);
18122
  return *this;
18123
}
18124
 
18125
isl::ctx schedule_node_expansion::ctx() const {
18126
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
18127
}
18128
 
18129
isl::union_pw_multi_aff schedule_node_expansion::contraction() const
18130
{
18131
  auto res = isl_schedule_node_expansion_get_contraction(get());
18132
  return manage(res);
18133
}
18134
 
18135
isl::union_pw_multi_aff schedule_node_expansion::get_contraction() const
18136
{
18137
  return contraction();
18138
}
18139
 
18140
isl::union_map schedule_node_expansion::expansion() const
18141
{
18142
  auto res = isl_schedule_node_expansion_get_expansion(get());
18143
  return manage(res);
18144
}
18145
 
18146
isl::union_map schedule_node_expansion::get_expansion() const
18147
{
18148
  return expansion();
18149
}
18150
 
18151
inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj)
18152
{
18153
  char *str = isl_schedule_node_to_str(obj.get());
18154
  if (!str) {
18155
    os.setstate(std::ios_base::badbit);
18156
    return os;
18157
  }
18158
  os << str;
18159
  free(str);
18160
  return os;
18161
}
18162
 
18163
// implementations for isl::schedule_node_extension
18164
schedule_node_extension::schedule_node_extension()
18165
    : schedule_node() {}
18166
 
18167
schedule_node_extension::schedule_node_extension(const schedule_node_extension &obj)
18168
    : schedule_node(obj)
18169
{
18170
}
18171
 
18172
schedule_node_extension::schedule_node_extension(__isl_take isl_schedule_node *ptr)
18173
    : schedule_node(ptr) {}
18174
 
18175
schedule_node_extension &schedule_node_extension::operator=(schedule_node_extension obj) {
18176
  std::swap(this->ptr, obj.ptr);
18177
  return *this;
18178
}
18179
 
18180
isl::ctx schedule_node_extension::ctx() const {
18181
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
18182
}
18183
 
18184
isl::union_map schedule_node_extension::extension() const
18185
{
18186
  auto res = isl_schedule_node_extension_get_extension(get());
18187
  return manage(res);
18188
}
18189
 
18190
isl::union_map schedule_node_extension::get_extension() const
18191
{
18192
  return extension();
18193
}
18194
 
18195
inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj)
18196
{
18197
  char *str = isl_schedule_node_to_str(obj.get());
18198
  if (!str) {
18199
    os.setstate(std::ios_base::badbit);
18200
    return os;
18201
  }
18202
  os << str;
18203
  free(str);
18204
  return os;
18205
}
18206
 
18207
// implementations for isl::schedule_node_filter
18208
schedule_node_filter::schedule_node_filter()
18209
    : schedule_node() {}
18210
 
18211
schedule_node_filter::schedule_node_filter(const schedule_node_filter &obj)
18212
    : schedule_node(obj)
18213
{
18214
}
18215
 
18216
schedule_node_filter::schedule_node_filter(__isl_take isl_schedule_node *ptr)
18217
    : schedule_node(ptr) {}
18218
 
18219
schedule_node_filter &schedule_node_filter::operator=(schedule_node_filter obj) {
18220
  std::swap(this->ptr, obj.ptr);
18221
  return *this;
18222
}
18223
 
18224
isl::ctx schedule_node_filter::ctx() const {
18225
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
18226
}
18227
 
18228
isl::union_set schedule_node_filter::filter() const
18229
{
18230
  auto res = isl_schedule_node_filter_get_filter(get());
18231
  return manage(res);
18232
}
18233
 
18234
isl::union_set schedule_node_filter::get_filter() const
18235
{
18236
  return filter();
18237
}
18238
 
18239
inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj)
18240
{
18241
  char *str = isl_schedule_node_to_str(obj.get());
18242
  if (!str) {
18243
    os.setstate(std::ios_base::badbit);
18244
    return os;
18245
  }
18246
  os << str;
18247
  free(str);
18248
  return os;
18249
}
18250
 
18251
// implementations for isl::schedule_node_guard
18252
schedule_node_guard::schedule_node_guard()
18253
    : schedule_node() {}
18254
 
18255
schedule_node_guard::schedule_node_guard(const schedule_node_guard &obj)
18256
    : schedule_node(obj)
18257
{
18258
}
18259
 
18260
schedule_node_guard::schedule_node_guard(__isl_take isl_schedule_node *ptr)
18261
    : schedule_node(ptr) {}
18262
 
18263
schedule_node_guard &schedule_node_guard::operator=(schedule_node_guard obj) {
18264
  std::swap(this->ptr, obj.ptr);
18265
  return *this;
18266
}
18267
 
18268
isl::ctx schedule_node_guard::ctx() const {
18269
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
18270
}
18271
 
18272
isl::set schedule_node_guard::guard() const
18273
{
18274
  auto res = isl_schedule_node_guard_get_guard(get());
18275
  return manage(res);
18276
}
18277
 
18278
isl::set schedule_node_guard::get_guard() const
18279
{
18280
  return guard();
18281
}
18282
 
18283
inline std::ostream &operator<<(std::ostream &os, const schedule_node_guard &obj)
18284
{
18285
  char *str = isl_schedule_node_to_str(obj.get());
18286
  if (!str) {
18287
    os.setstate(std::ios_base::badbit);
18288
    return os;
18289
  }
18290
  os << str;
18291
  free(str);
18292
  return os;
18293
}
18294
 
18295
// implementations for isl::schedule_node_leaf
18296
schedule_node_leaf::schedule_node_leaf()
18297
    : schedule_node() {}
18298
 
18299
schedule_node_leaf::schedule_node_leaf(const schedule_node_leaf &obj)
18300
    : schedule_node(obj)
18301
{
18302
}
18303
 
18304
schedule_node_leaf::schedule_node_leaf(__isl_take isl_schedule_node *ptr)
18305
    : schedule_node(ptr) {}
18306
 
18307
schedule_node_leaf &schedule_node_leaf::operator=(schedule_node_leaf obj) {
18308
  std::swap(this->ptr, obj.ptr);
18309
  return *this;
18310
}
18311
 
18312
isl::ctx schedule_node_leaf::ctx() const {
18313
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
18314
}
18315
 
18316
inline std::ostream &operator<<(std::ostream &os, const schedule_node_leaf &obj)
18317
{
18318
  char *str = isl_schedule_node_to_str(obj.get());
18319
  if (!str) {
18320
    os.setstate(std::ios_base::badbit);
18321
    return os;
18322
  }
18323
  os << str;
18324
  free(str);
18325
  return os;
18326
}
18327
 
18328
// implementations for isl::schedule_node_mark
18329
schedule_node_mark::schedule_node_mark()
18330
    : schedule_node() {}
18331
 
18332
schedule_node_mark::schedule_node_mark(const schedule_node_mark &obj)
18333
    : schedule_node(obj)
18334
{
18335
}
18336
 
18337
schedule_node_mark::schedule_node_mark(__isl_take isl_schedule_node *ptr)
18338
    : schedule_node(ptr) {}
18339
 
18340
schedule_node_mark &schedule_node_mark::operator=(schedule_node_mark obj) {
18341
  std::swap(this->ptr, obj.ptr);
18342
  return *this;
18343
}
18344
 
18345
isl::ctx schedule_node_mark::ctx() const {
18346
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
18347
}
18348
 
18349
isl::id schedule_node_mark::id() const
18350
{
18351
  auto res = isl_schedule_node_mark_get_id(get());
18352
  return manage(res);
18353
}
18354
 
18355
isl::id schedule_node_mark::get_id() const
18356
{
18357
  return id();
18358
}
18359
 
18360
inline std::ostream &operator<<(std::ostream &os, const schedule_node_mark &obj)
18361
{
18362
  char *str = isl_schedule_node_to_str(obj.get());
18363
  if (!str) {
18364
    os.setstate(std::ios_base::badbit);
18365
    return os;
18366
  }
18367
  os << str;
18368
  free(str);
18369
  return os;
18370
}
18371
 
18372
// implementations for isl::schedule_node_sequence
18373
schedule_node_sequence::schedule_node_sequence()
18374
    : schedule_node() {}
18375
 
18376
schedule_node_sequence::schedule_node_sequence(const schedule_node_sequence &obj)
18377
    : schedule_node(obj)
18378
{
18379
}
18380
 
18381
schedule_node_sequence::schedule_node_sequence(__isl_take isl_schedule_node *ptr)
18382
    : schedule_node(ptr) {}
18383
 
18384
schedule_node_sequence &schedule_node_sequence::operator=(schedule_node_sequence obj) {
18385
  std::swap(this->ptr, obj.ptr);
18386
  return *this;
18387
}
18388
 
18389
isl::ctx schedule_node_sequence::ctx() const {
18390
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
18391
}
18392
 
18393
inline std::ostream &operator<<(std::ostream &os, const schedule_node_sequence &obj)
18394
{
18395
  char *str = isl_schedule_node_to_str(obj.get());
18396
  if (!str) {
18397
    os.setstate(std::ios_base::badbit);
18398
    return os;
18399
  }
18400
  os << str;
18401
  free(str);
18402
  return os;
18403
}
18404
 
18405
// implementations for isl::schedule_node_set
18406
schedule_node_set::schedule_node_set()
18407
    : schedule_node() {}
18408
 
18409
schedule_node_set::schedule_node_set(const schedule_node_set &obj)
18410
    : schedule_node(obj)
18411
{
18412
}
18413
 
18414
schedule_node_set::schedule_node_set(__isl_take isl_schedule_node *ptr)
18415
    : schedule_node(ptr) {}
18416
 
18417
schedule_node_set &schedule_node_set::operator=(schedule_node_set obj) {
18418
  std::swap(this->ptr, obj.ptr);
18419
  return *this;
18420
}
18421
 
18422
isl::ctx schedule_node_set::ctx() const {
18423
  return isl::ctx(isl_schedule_node_get_ctx(ptr));
18424
}
18425
 
18426
inline std::ostream &operator<<(std::ostream &os, const schedule_node_set &obj)
18427
{
18428
  char *str = isl_schedule_node_to_str(obj.get());
18429
  if (!str) {
18430
    os.setstate(std::ios_base::badbit);
18431
    return os;
18432
  }
18433
  os << str;
18434
  free(str);
18435
  return os;
18436
}
18437
 
18438
// implementations for isl::set
18439
set manage(__isl_take isl_set *ptr) {
18440
  return set(ptr);
18441
}
18442
set manage_copy(__isl_keep isl_set *ptr) {
18443
  ptr = isl_set_copy(ptr);
18444
  return set(ptr);
18445
}
18446
 
18447
set::set()
18448
    : ptr(nullptr) {}
18449
 
18450
set::set(const set &obj)
18451
    : ptr(nullptr)
18452
{
18453
  ptr = obj.copy();
18454
}
18455
 
18456
set::set(__isl_take isl_set *ptr)
18457
    : ptr(ptr) {}
18458
 
18459
set::set(isl::basic_set bset)
18460
{
18461
  auto res = isl_set_from_basic_set(bset.release());
18462
  ptr = res;
18463
}
18464
 
18465
set::set(isl::point pnt)
18466
{
18467
  auto res = isl_set_from_point(pnt.release());
18468
  ptr = res;
18469
}
18470
 
18471
set::set(isl::union_set uset)
18472
{
18473
  auto res = isl_set_from_union_set(uset.release());
18474
  ptr = res;
18475
}
18476
 
18477
set::set(isl::ctx ctx, const std::string &str)
18478
{
18479
  auto res = isl_set_read_from_str(ctx.release(), str.c_str());
18480
  ptr = res;
18481
}
18482
 
18483
set &set::operator=(set obj) {
18484
  std::swap(this->ptr, obj.ptr);
18485
  return *this;
18486
}
18487
 
18488
set::~set() {
18489
  if (ptr)
18490
    isl_set_free(ptr);
18491
}
18492
 
18493
__isl_give isl_set *set::copy() const & {
18494
  return isl_set_copy(ptr);
18495
}
18496
 
18497
__isl_keep isl_set *set::get() const {
18498
  return ptr;
18499
}
18500
 
18501
__isl_give isl_set *set::release() {
18502
  isl_set *tmp = ptr;
18503
  ptr = nullptr;
18504
  return tmp;
18505
}
18506
 
18507
bool set::is_null() const {
18508
  return ptr == nullptr;
18509
}
18510
 
18511
isl::ctx set::ctx() const {
18512
  return isl::ctx(isl_set_get_ctx(ptr));
18513
}
18514
 
18515
isl::set set::add_constraint(isl::constraint constraint) const
18516
{
18517
  auto res = isl_set_add_constraint(copy(), constraint.release());
18518
  return manage(res);
18519
}
18520
 
18521
isl::set set::add_dims(isl::dim type, unsigned int n) const
18522
{
18523
  auto res = isl_set_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
18524
  return manage(res);
18525
}
18526
 
18527
isl::basic_set set::affine_hull() const
18528
{
18529
  auto res = isl_set_affine_hull(copy());
18530
  return manage(res);
18531
}
18532
 
18533
isl::set set::align_params(isl::space model) const
18534
{
18535
  auto res = isl_set_align_params(copy(), model.release());
18536
  return manage(res);
18537
}
18538
 
18539
isl::set set::apply(isl::map map) const
18540
{
18541
  auto res = isl_set_apply(copy(), map.release());
18542
  return manage(res);
18543
}
18544
 
18545
isl::union_set set::apply(const isl::union_map &umap) const
18546
{
18547
  return isl::union_set(*this).apply(umap);
18548
}
18549
 
18550
isl::set set::apply(const isl::basic_map &map) const
18551
{
18552
  return this->apply(isl::map(map));
18553
}
18554
 
18555
isl::pw_multi_aff set::as_pw_multi_aff() const
18556
{
18557
  auto res = isl_set_as_pw_multi_aff(copy());
18558
  return manage(res);
18559
}
18560
 
18561
isl::set set::as_set() const
18562
{
18563
  return isl::union_set(*this).as_set();
18564
}
18565
 
18566
isl::basic_set_list set::basic_set_list() const
18567
{
18568
  auto res = isl_set_get_basic_set_list(get());
18569
  return manage(res);
18570
}
18571
 
18572
isl::basic_set_list set::get_basic_set_list() const
18573
{
18574
  return basic_set_list();
18575
}
18576
 
18577
isl::set set::bind(isl::multi_id tuple) const
18578
{
18579
  auto res = isl_set_bind(copy(), tuple.release());
18580
  return manage(res);
18581
}
18582
 
18583
isl::set set::coalesce() const
18584
{
18585
  auto res = isl_set_coalesce(copy());
18586
  return manage(res);
18587
}
18588
 
18589
isl::set set::complement() const
18590
{
18591
  auto res = isl_set_complement(copy());
18592
  return manage(res);
18593
}
18594
 
18595
isl::union_set set::compute_divs() const
18596
{
18597
  return isl::union_set(*this).compute_divs();
18598
}
18599
 
18600
boolean set::contains(const isl::space &space) const
18601
{
18602
  return isl::union_set(*this).contains(space);
18603
}
18604
 
18605
isl::basic_set set::convex_hull() const
18606
{
18607
  auto res = isl_set_convex_hull(copy());
18608
  return manage(res);
18609
}
18610
 
18611
isl::set set::detect_equalities() const
18612
{
18613
  auto res = isl_set_detect_equalities(copy());
18614
  return manage(res);
18615
}
18616
 
18617
class size set::dim(isl::dim type) const
18618
{
18619
  auto res = isl_set_dim(get(), static_cast<enum isl_dim_type>(type));
18620
  return manage(res);
18621
}
18622
 
18623
boolean set::dim_has_any_lower_bound(isl::dim type, unsigned int pos) const
18624
{
18625
  auto res = isl_set_dim_has_any_lower_bound(get(), static_cast<enum isl_dim_type>(type), pos);
18626
  return manage(res);
18627
}
18628
 
18629
isl::id set::dim_id(isl::dim type, unsigned int pos) const
18630
{
18631
  auto res = isl_set_get_dim_id(get(), static_cast<enum isl_dim_type>(type), pos);
18632
  return manage(res);
18633
}
18634
 
18635
isl::id set::get_dim_id(isl::dim type, unsigned int pos) const
18636
{
18637
  return dim_id(type, pos);
18638
}
18639
 
18640
isl::pw_aff set::dim_max(int pos) const
18641
{
18642
  auto res = isl_set_dim_max(copy(), pos);
18643
  return manage(res);
18644
}
18645
 
18646
isl::val set::dim_max_val(int pos) const
18647
{
18648
  auto res = isl_set_dim_max_val(copy(), pos);
18649
  return manage(res);
18650
}
18651
 
18652
isl::pw_aff set::dim_min(int pos) const
18653
{
18654
  auto res = isl_set_dim_min(copy(), pos);
18655
  return manage(res);
18656
}
18657
 
18658
isl::val set::dim_min_val(int pos) const
18659
{
18660
  auto res = isl_set_dim_min_val(copy(), pos);
18661
  return manage(res);
18662
}
18663
 
18664
std::string set::dim_name(isl::dim type, unsigned int pos) const
18665
{
18666
  auto res = isl_set_get_dim_name(get(), static_cast<enum isl_dim_type>(type), pos);
18667
  std::string tmp(res);
18668
  return tmp;
18669
}
18670
 
18671
std::string set::get_dim_name(isl::dim type, unsigned int pos) const
18672
{
18673
  return dim_name(type, pos);
18674
}
18675
 
18676
isl::set set::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const
18677
{
18678
  auto res = isl_set_drop_constraints_involving_dims(copy(), static_cast<enum isl_dim_type>(type), first, n);
18679
  return manage(res);
18680
}
18681
 
18682
isl::set set::eliminate(isl::dim type, unsigned int first, unsigned int n) const
18683
{
18684
  auto res = isl_set_eliminate(copy(), static_cast<enum isl_dim_type>(type), first, n);
18685
  return manage(res);
18686
}
18687
 
18688
isl::set set::empty(isl::space space)
18689
{
18690
  auto res = isl_set_empty(space.release());
18691
  return manage(res);
18692
}
18693
 
18694
boolean set::every_set(const std::function<boolean(isl::set)> &test) const
18695
{
18696
  return isl::union_set(*this).every_set(test);
18697
}
18698
 
18699
isl::set set::extract_set(const isl::space &space) const
18700
{
18701
  return isl::union_set(*this).extract_set(space);
18702
}
18703
 
18704
int set::find_dim_by_id(isl::dim type, const isl::id &id) const
18705
{
18706
  auto res = isl_set_find_dim_by_id(get(), static_cast<enum isl_dim_type>(type), id.get());
18707
  return res;
18708
}
18709
 
18710
int set::find_dim_by_id(isl::dim type, const std::string &id) const
18711
{
18712
  return this->find_dim_by_id(type, isl::id(ctx(), id));
18713
}
18714
 
18715
isl::set set::fix_si(isl::dim type, unsigned int pos, int value) const
18716
{
18717
  auto res = isl_set_fix_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
18718
  return manage(res);
18719
}
18720
 
18721
isl::set set::flatten() const
18722
{
18723
  auto res = isl_set_flatten(copy());
18724
  return manage(res);
18725
}
18726
 
18727
stat set::foreach_basic_set(const std::function<stat(isl::basic_set)> &fn) const
18728
{
18729
  struct fn_data {
18730
    std::function<stat(isl::basic_set)> func;
18731
  } fn_data = { fn };
18732
  auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat {
18733
    auto *data = static_cast<struct fn_data *>(arg_1);
18734
    auto ret = (data->func)(manage(arg_0));
18735
    return ret.release();
18736
  };
18737
  auto res = isl_set_foreach_basic_set(get(), fn_lambda, &fn_data);
18738
  return manage(res);
18739
}
18740
 
18741
stat set::foreach_point(const std::function<stat(isl::point)> &fn) const
18742
{
18743
  struct fn_data {
18744
    std::function<stat(isl::point)> func;
18745
  } fn_data = { fn };
18746
  auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat {
18747
    auto *data = static_cast<struct fn_data *>(arg_1);
18748
    auto ret = (data->func)(manage(arg_0));
18749
    return ret.release();
18750
  };
18751
  auto res = isl_set_foreach_point(get(), fn_lambda, &fn_data);
18752
  return manage(res);
18753
}
18754
 
18755
stat set::foreach_set(const std::function<stat(isl::set)> &fn) const
18756
{
18757
  return isl::union_set(*this).foreach_set(fn);
18758
}
18759
 
18760
isl::set set::gist(isl::set context) const
18761
{
18762
  auto res = isl_set_gist(copy(), context.release());
18763
  return manage(res);
18764
}
18765
 
18766
isl::union_set set::gist(const isl::union_set &context) const
18767
{
18768
  return isl::union_set(*this).gist(context);
18769
}
18770
 
18771
isl::set set::gist(const isl::basic_set &context) const
18772
{
18773
  return this->gist(isl::set(context));
18774
}
18775
 
18776
isl::set set::gist(const isl::point &context) const
18777
{
18778
  return this->gist(isl::set(context));
18779
}
18780
 
18781
isl::set set::gist_params(isl::set context) const
18782
{
18783
  auto res = isl_set_gist_params(copy(), context.release());
18784
  return manage(res);
18785
}
18786
 
18787
boolean set::has_equal_space(const isl::set &set2) const
18788
{
18789
  auto res = isl_set_has_equal_space(get(), set2.get());
18790
  return manage(res);
18791
}
18792
 
18793
isl::map set::identity() const
18794
{
18795
  auto res = isl_set_identity(copy());
18796
  return manage(res);
18797
}
18798
 
18799
isl::union_pw_multi_aff set::identity_union_pw_multi_aff() const
18800
{
18801
  return isl::union_set(*this).identity_union_pw_multi_aff();
18802
}
18803
 
18804
isl::pw_aff set::indicator_function() const
18805
{
18806
  auto res = isl_set_indicator_function(copy());
18807
  return manage(res);
18808
}
18809
 
18810
isl::set set::insert_dims(isl::dim type, unsigned int pos, unsigned int n) const
18811
{
18812
  auto res = isl_set_insert_dims(copy(), static_cast<enum isl_dim_type>(type), pos, n);
18813
  return manage(res);
18814
}
18815
 
18816
isl::map set::insert_domain(isl::space domain) const
18817
{
18818
  auto res = isl_set_insert_domain(copy(), domain.release());
18819
  return manage(res);
18820
}
18821
 
18822
isl::set set::intersect(isl::set set2) const
18823
{
18824
  auto res = isl_set_intersect(copy(), set2.release());
18825
  return manage(res);
18826
}
18827
 
18828
isl::union_set set::intersect(const isl::union_set &uset2) const
18829
{
18830
  return isl::union_set(*this).intersect(uset2);
18831
}
18832
 
18833
isl::set set::intersect(const isl::basic_set &set2) const
18834
{
18835
  return this->intersect(isl::set(set2));
18836
}
18837
 
18838
isl::set set::intersect(const isl::point &set2) const
18839
{
18840
  return this->intersect(isl::set(set2));
18841
}
18842
 
18843
isl::set set::intersect_params(isl::set params) const
18844
{
18845
  auto res = isl_set_intersect_params(copy(), params.release());
18846
  return manage(res);
18847
}
18848
 
18849
boolean set::involves_dims(isl::dim type, unsigned int first, unsigned int n) const
18850
{
18851
  auto res = isl_set_involves_dims(get(), static_cast<enum isl_dim_type>(type), first, n);
18852
  return manage(res);
18853
}
18854
 
18855
boolean set::involves_locals() const
18856
{
18857
  auto res = isl_set_involves_locals(get());
18858
  return manage(res);
18859
}
18860
 
18861
boolean set::is_bounded() const
18862
{
18863
  auto res = isl_set_is_bounded(get());
18864
  return manage(res);
18865
}
18866
 
18867
boolean set::is_disjoint(const isl::set &set2) const
18868
{
18869
  auto res = isl_set_is_disjoint(get(), set2.get());
18870
  return manage(res);
18871
}
18872
 
18873
boolean set::is_disjoint(const isl::union_set &uset2) const
18874
{
18875
  return isl::union_set(*this).is_disjoint(uset2);
18876
}
18877
 
18878
boolean set::is_disjoint(const isl::basic_set &set2) const
18879
{
18880
  return this->is_disjoint(isl::set(set2));
18881
}
18882
 
18883
boolean set::is_disjoint(const isl::point &set2) const
18884
{
18885
  return this->is_disjoint(isl::set(set2));
18886
}
18887
 
18888
boolean set::is_empty() const
18889
{
18890
  auto res = isl_set_is_empty(get());
18891
  return manage(res);
18892
}
18893
 
18894
boolean set::is_equal(const isl::set &set2) const
18895
{
18896
  auto res = isl_set_is_equal(get(), set2.get());
18897
  return manage(res);
18898
}
18899
 
18900
boolean set::is_equal(const isl::union_set &uset2) const
18901
{
18902
  return isl::union_set(*this).is_equal(uset2);
18903
}
18904
 
18905
boolean set::is_equal(const isl::basic_set &set2) const
18906
{
18907
  return this->is_equal(isl::set(set2));
18908
}
18909
 
18910
boolean set::is_equal(const isl::point &set2) const
18911
{
18912
  return this->is_equal(isl::set(set2));
18913
}
18914
 
18915
boolean set::is_params() const
18916
{
18917
  auto res = isl_set_is_params(get());
18918
  return manage(res);
18919
}
18920
 
18921
boolean set::is_singleton() const
18922
{
18923
  auto res = isl_set_is_singleton(get());
18924
  return manage(res);
18925
}
18926
 
18927
boolean set::is_strict_subset(const isl::set &set2) const
18928
{
18929
  auto res = isl_set_is_strict_subset(get(), set2.get());
18930
  return manage(res);
18931
}
18932
 
18933
boolean set::is_strict_subset(const isl::union_set &uset2) const
18934
{
18935
  return isl::union_set(*this).is_strict_subset(uset2);
18936
}
18937
 
18938
boolean set::is_strict_subset(const isl::basic_set &set2) const
18939
{
18940
  return this->is_strict_subset(isl::set(set2));
18941
}
18942
 
18943
boolean set::is_strict_subset(const isl::point &set2) const
18944
{
18945
  return this->is_strict_subset(isl::set(set2));
18946
}
18947
 
18948
boolean set::is_subset(const isl::set &set2) const
18949
{
18950
  auto res = isl_set_is_subset(get(), set2.get());
18951
  return manage(res);
18952
}
18953
 
18954
boolean set::is_subset(const isl::union_set &uset2) const
18955
{
18956
  return isl::union_set(*this).is_subset(uset2);
18957
}
18958
 
18959
boolean set::is_subset(const isl::basic_set &set2) const
18960
{
18961
  return this->is_subset(isl::set(set2));
18962
}
18963
 
18964
boolean set::is_subset(const isl::point &set2) const
18965
{
18966
  return this->is_subset(isl::set(set2));
18967
}
18968
 
18969
boolean set::is_wrapping() const
18970
{
18971
  auto res = isl_set_is_wrapping(get());
18972
  return manage(res);
18973
}
18974
 
18975
boolean set::isa_set() const
18976
{
18977
  return isl::union_set(*this).isa_set();
18978
}
18979
 
18980
isl::set set::lexmax() const
18981
{
18982
  auto res = isl_set_lexmax(copy());
18983
  return manage(res);
18984
}
18985
 
18986
isl::pw_multi_aff set::lexmax_pw_multi_aff() const
18987
{
18988
  auto res = isl_set_lexmax_pw_multi_aff(copy());
18989
  return manage(res);
18990
}
18991
 
18992
isl::set set::lexmin() const
18993
{
18994
  auto res = isl_set_lexmin(copy());
18995
  return manage(res);
18996
}
18997
 
18998
isl::pw_multi_aff set::lexmin_pw_multi_aff() const
18999
{
19000
  auto res = isl_set_lexmin_pw_multi_aff(copy());
19001
  return manage(res);
19002
}
19003
 
19004
isl::set set::lower_bound(isl::multi_pw_aff lower) const
19005
{
19006
  auto res = isl_set_lower_bound_multi_pw_aff(copy(), lower.release());
19007
  return manage(res);
19008
}
19009
 
19010
isl::set set::lower_bound(isl::multi_val lower) const
19011
{
19012
  auto res = isl_set_lower_bound_multi_val(copy(), lower.release());
19013
  return manage(res);
19014
}
19015
 
19016
isl::set set::lower_bound_si(isl::dim type, unsigned int pos, int value) const
19017
{
19018
  auto res = isl_set_lower_bound_si(copy(), static_cast<enum isl_dim_type>(type), pos, value);
19019
  return manage(res);
19020
}
19021
 
19022
isl::set set::lower_bound_val(isl::dim type, unsigned int pos, isl::val value) const
19023
{
19024
  auto res = isl_set_lower_bound_val(copy(), static_cast<enum isl_dim_type>(type), pos, value.release());
19025
  return manage(res);
19026
}
19027
 
19028
isl::set set::lower_bound_val(isl::dim type, unsigned int pos, long value) const
19029
{
19030
  return this->lower_bound_val(type, pos, isl::val(ctx(), value));
19031
}
19032
 
19033
isl::multi_pw_aff set::max_multi_pw_aff() const
19034
{
19035
  auto res = isl_set_max_multi_pw_aff(copy());
19036
  return manage(res);
19037
}
19038
 
19039
isl::val set::max_val(const isl::aff &obj) const
19040
{
19041
  auto res = isl_set_max_val(get(), obj.get());
19042
  return manage(res);
19043
}
19044
 
19045
isl::multi_pw_aff set::min_multi_pw_aff() const
19046
{
19047
  auto res = isl_set_min_multi_pw_aff(copy());
19048
  return manage(res);
19049
}
19050
 
19051
isl::val set::min_val(const isl::aff &obj) const
19052
{
19053
  auto res = isl_set_min_val(get(), obj.get());
19054
  return manage(res);
19055
}
19056
 
19057
class size set::n_basic_set() const
19058
{
19059
  auto res = isl_set_n_basic_set(get());
19060
  return manage(res);
19061
}
19062
 
19063
isl::set set::params() const
19064
{
19065
  auto res = isl_set_params(copy());
19066
  return manage(res);
19067
}
19068
 
19069
isl::val set::plain_get_val_if_fixed(isl::dim type, unsigned int pos) const
19070
{
19071
  auto res = isl_set_plain_get_val_if_fixed(get(), static_cast<enum isl_dim_type>(type), pos);
19072
  return manage(res);
19073
}
19074
 
19075
isl::multi_val set::plain_multi_val_if_fixed() const
19076
{
19077
  auto res = isl_set_get_plain_multi_val_if_fixed(get());
19078
  return manage(res);
19079
}
19080
 
19081
isl::multi_val set::get_plain_multi_val_if_fixed() const
19082
{
19083
  return plain_multi_val_if_fixed();
19084
}
19085
 
19086
isl::basic_set set::polyhedral_hull() const
19087
{
19088
  auto res = isl_set_polyhedral_hull(copy());
19089
  return manage(res);
19090
}
19091
 
19092
isl::set set::preimage(isl::multi_aff ma) const
19093
{
19094
  auto res = isl_set_preimage_multi_aff(copy(), ma.release());
19095
  return manage(res);
19096
}
19097
 
19098
isl::set set::preimage(isl::multi_pw_aff mpa) const
19099
{
19100
  auto res = isl_set_preimage_multi_pw_aff(copy(), mpa.release());
19101
  return manage(res);
19102
}
19103
 
19104
isl::set set::preimage(isl::pw_multi_aff pma) const
19105
{
19106
  auto res = isl_set_preimage_pw_multi_aff(copy(), pma.release());
19107
  return manage(res);
19108
}
19109
 
19110
isl::union_set set::preimage(const isl::union_pw_multi_aff &upma) const
19111
{
19112
  return isl::union_set(*this).preimage(upma);
19113
}
19114
 
19115
isl::set set::product(isl::set set2) const
19116
{
19117
  auto res = isl_set_product(copy(), set2.release());
19118
  return manage(res);
19119
}
19120
 
19121
isl::set set::project_out(isl::dim type, unsigned int first, unsigned int n) const
19122
{
19123
  auto res = isl_set_project_out(copy(), static_cast<enum isl_dim_type>(type), first, n);
19124
  return manage(res);
19125
}
19126
 
19127
isl::set set::project_out_all_params() const
19128
{
19129
  auto res = isl_set_project_out_all_params(copy());
19130
  return manage(res);
19131
}
19132
 
19133
isl::set set::project_out_param(isl::id id) const
19134
{
19135
  auto res = isl_set_project_out_param_id(copy(), id.release());
19136
  return manage(res);
19137
}
19138
 
19139
isl::set set::project_out_param(const std::string &id) const
19140
{
19141
  return this->project_out_param(isl::id(ctx(), id));
19142
}
19143
 
19144
isl::set set::project_out_param(isl::id_list list) const
19145
{
19146
  auto res = isl_set_project_out_param_id_list(copy(), list.release());
19147
  return manage(res);
19148
}
19149
 
19150
isl::pw_multi_aff set::pw_multi_aff_on_domain(isl::multi_val mv) const
19151
{
19152
  auto res = isl_set_pw_multi_aff_on_domain_multi_val(copy(), mv.release());
19153
  return manage(res);
19154
}
19155
 
19156
isl::set set::remove_dims(isl::dim type, unsigned int first, unsigned int n) const
19157
{
19158
  auto res = isl_set_remove_dims(copy(), static_cast<enum isl_dim_type>(type), first, n);
19159
  return manage(res);
19160
}
19161
 
19162
isl::set set::remove_divs() const
19163
{
19164
  auto res = isl_set_remove_divs(copy());
19165
  return manage(res);
19166
}
19167
 
19168
isl::set set::remove_redundancies() const
19169
{
19170
  auto res = isl_set_remove_redundancies(copy());
19171
  return manage(res);
19172
}
19173
 
19174
isl::set set::reset_tuple_id() const
19175
{
19176
  auto res = isl_set_reset_tuple_id(copy());
19177
  return manage(res);
19178
}
19179
 
19180
isl::basic_set set::sample() const
19181
{
19182
  auto res = isl_set_sample(copy());
19183
  return manage(res);
19184
}
19185
 
19186
isl::point set::sample_point() const
19187
{
19188
  auto res = isl_set_sample_point(copy());
19189
  return manage(res);
19190
}
19191
 
19192
isl::set set::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const
19193
{
19194
  auto res = isl_set_set_dim_id(copy(), static_cast<enum isl_dim_type>(type), pos, id.release());
19195
  return manage(res);
19196
}
19197
 
19198
isl::set set::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
19199
{
19200
  return this->set_dim_id(type, pos, isl::id(ctx(), id));
19201
}
19202
 
19203
isl::set_list set::set_list() const
19204
{
19205
  return isl::union_set(*this).set_list();
19206
}
19207
 
19208
isl::set set::set_tuple_id(isl::id id) const
19209
{
19210
  auto res = isl_set_set_tuple_id(copy(), id.release());
19211
  return manage(res);
19212
}
19213
 
19214
isl::set set::set_tuple_id(const std::string &id) const
19215
{
19216
  return this->set_tuple_id(isl::id(ctx(), id));
19217
}
19218
 
19219
isl::fixed_box set::simple_fixed_box_hull() const
19220
{
19221
  auto res = isl_set_get_simple_fixed_box_hull(get());
19222
  return manage(res);
19223
}
19224
 
19225
isl::fixed_box set::get_simple_fixed_box_hull() const
19226
{
19227
  return simple_fixed_box_hull();
19228
}
19229
 
19230
isl::basic_set set::simple_hull() const
19231
{
19232
  auto res = isl_set_simple_hull(copy());
19233
  return manage(res);
19234
}
19235
 
19236
isl::space set::space() const
19237
{
19238
  auto res = isl_set_get_space(get());
19239
  return manage(res);
19240
}
19241
 
19242
isl::space set::get_space() const
19243
{
19244
  return space();
19245
}
19246
 
19247
isl::val set::stride(int pos) const
19248
{
19249
  auto res = isl_set_get_stride(get(), pos);
19250
  return manage(res);
19251
}
19252
 
19253
isl::val set::get_stride(int pos) const
19254
{
19255
  return stride(pos);
19256
}
19257
 
19258
isl::set set::subtract(isl::set set2) const
19259
{
19260
  auto res = isl_set_subtract(copy(), set2.release());
19261
  return manage(res);
19262
}
19263
 
19264
isl::union_set set::subtract(const isl::union_set &uset2) const
19265
{
19266
  return isl::union_set(*this).subtract(uset2);
19267
}
19268
 
19269
isl::set set::subtract(const isl::basic_set &set2) const
19270
{
19271
  return this->subtract(isl::set(set2));
19272
}
19273
 
19274
isl::set set::subtract(const isl::point &set2) const
19275
{
19276
  return this->subtract(isl::set(set2));
19277
}
19278
 
19279
isl::set_list set::to_list() const
19280
{
19281
  auto res = isl_set_to_list(copy());
19282
  return manage(res);
19283
}
19284
 
19285
isl::union_set set::to_union_set() const
19286
{
19287
  auto res = isl_set_to_union_set(copy());
19288
  return manage(res);
19289
}
19290
 
19291
isl::map set::translation() const
19292
{
19293
  auto res = isl_set_translation(copy());
19294
  return manage(res);
19295
}
19296
 
19297
class size set::tuple_dim() const
19298
{
19299
  auto res = isl_set_tuple_dim(get());
19300
  return manage(res);
19301
}
19302
 
19303
isl::id set::tuple_id() const
19304
{
19305
  auto res = isl_set_get_tuple_id(get());
19306
  return manage(res);
19307
}
19308
 
19309
isl::id set::get_tuple_id() const
19310
{
19311
  return tuple_id();
19312
}
19313
 
19314
std::string set::tuple_name() const
19315
{
19316
  auto res = isl_set_get_tuple_name(get());
19317
  std::string tmp(res);
19318
  return tmp;
19319
}
19320
 
19321
std::string set::get_tuple_name() const
19322
{
19323
  return tuple_name();
19324
}
19325
 
19326
isl::set set::unbind_params(isl::multi_id tuple) const
19327
{
19328
  auto res = isl_set_unbind_params(copy(), tuple.release());
19329
  return manage(res);
19330
}
19331
 
19332
isl::map set::unbind_params_insert_domain(isl::multi_id domain) const
19333
{
19334
  auto res = isl_set_unbind_params_insert_domain(copy(), domain.release());
19335
  return manage(res);
19336
}
19337
 
19338
isl::set set::unite(isl::set set2) const
19339
{
19340
  auto res = isl_set_union(copy(), set2.release());
19341
  return manage(res);
19342
}
19343
 
19344
isl::union_set set::unite(const isl::union_set &uset2) const
19345
{
19346
  return isl::union_set(*this).unite(uset2);
19347
}
19348
 
19349
isl::set set::unite(const isl::basic_set &set2) const
19350
{
19351
  return this->unite(isl::set(set2));
19352
}
19353
 
19354
isl::set set::unite(const isl::point &set2) const
19355
{
19356
  return this->unite(isl::set(set2));
19357
}
19358
 
19359
isl::set set::universe(isl::space space)
19360
{
19361
  auto res = isl_set_universe(space.release());
19362
  return manage(res);
19363
}
19364
 
19365
isl::basic_set set::unshifted_simple_hull() const
19366
{
19367
  auto res = isl_set_unshifted_simple_hull(copy());
19368
  return manage(res);
19369
}
19370
 
19371
isl::map set::unwrap() const
19372
{
19373
  auto res = isl_set_unwrap(copy());
19374
  return manage(res);
19375
}
19376
 
19377
isl::set set::upper_bound(isl::multi_pw_aff upper) const
19378
{
19379
  auto res = isl_set_upper_bound_multi_pw_aff(copy(), upper.release());
19380
  return manage(res);
19381
}
19382
 
19383
isl::set set::upper_bound(isl::multi_val upper) const
19384
{
19385
  auto res = isl_set_upper_bound_multi_val(copy(), upper.release());
19386
  return manage(res);
19387
}
19388
 
19389
isl::set set::upper_bound_val(isl::dim type, unsigned int pos, isl::val value) const
19390
{
19391
  auto res = isl_set_upper_bound_val(copy(), static_cast<enum isl_dim_type>(type), pos, value.release());
19392
  return manage(res);
19393
}
19394
 
19395
isl::set set::upper_bound_val(isl::dim type, unsigned int pos, long value) const
19396
{
19397
  return this->upper_bound_val(type, pos, isl::val(ctx(), value));
19398
}
19399
 
19400
inline std::ostream &operator<<(std::ostream &os, const set &obj)
19401
{
19402
  char *str = isl_set_to_str(obj.get());
19403
  if (!str) {
19404
    os.setstate(std::ios_base::badbit);
19405
    return os;
19406
  }
19407
  os << str;
19408
  free(str);
19409
  return os;
19410
}
19411
 
19412
// implementations for isl::set_list
19413
set_list manage(__isl_take isl_set_list *ptr) {
19414
  return set_list(ptr);
19415
}
19416
set_list manage_copy(__isl_keep isl_set_list *ptr) {
19417
  ptr = isl_set_list_copy(ptr);
19418
  return set_list(ptr);
19419
}
19420
 
19421
set_list::set_list()
19422
    : ptr(nullptr) {}
19423
 
19424
set_list::set_list(const set_list &obj)
19425
    : ptr(nullptr)
19426
{
19427
  ptr = obj.copy();
19428
}
19429
 
19430
set_list::set_list(__isl_take isl_set_list *ptr)
19431
    : ptr(ptr) {}
19432
 
19433
set_list::set_list(isl::ctx ctx, int n)
19434
{
19435
  auto res = isl_set_list_alloc(ctx.release(), n);
19436
  ptr = res;
19437
}
19438
 
19439
set_list::set_list(isl::set el)
19440
{
19441
  auto res = isl_set_list_from_set(el.release());
19442
  ptr = res;
19443
}
19444
 
19445
set_list::set_list(isl::ctx ctx, const std::string &str)
19446
{
19447
  auto res = isl_set_list_read_from_str(ctx.release(), str.c_str());
19448
  ptr = res;
19449
}
19450
 
19451
set_list &set_list::operator=(set_list obj) {
19452
  std::swap(this->ptr, obj.ptr);
19453
  return *this;
19454
}
19455
 
19456
set_list::~set_list() {
19457
  if (ptr)
19458
    isl_set_list_free(ptr);
19459
}
19460
 
19461
__isl_give isl_set_list *set_list::copy() const & {
19462
  return isl_set_list_copy(ptr);
19463
}
19464
 
19465
__isl_keep isl_set_list *set_list::get() const {
19466
  return ptr;
19467
}
19468
 
19469
__isl_give isl_set_list *set_list::release() {
19470
  isl_set_list *tmp = ptr;
19471
  ptr = nullptr;
19472
  return tmp;
19473
}
19474
 
19475
bool set_list::is_null() const {
19476
  return ptr == nullptr;
19477
}
19478
 
19479
isl::ctx set_list::ctx() const {
19480
  return isl::ctx(isl_set_list_get_ctx(ptr));
19481
}
19482
 
19483
isl::set_list set_list::add(isl::set el) const
19484
{
19485
  auto res = isl_set_list_add(copy(), el.release());
19486
  return manage(res);
19487
}
19488
 
19489
isl::set set_list::at(int index) const
19490
{
19491
  auto res = isl_set_list_get_at(get(), index);
19492
  return manage(res);
19493
}
19494
 
19495
isl::set set_list::get_at(int index) const
19496
{
19497
  return at(index);
19498
}
19499
 
19500
isl::set_list set_list::clear() const
19501
{
19502
  auto res = isl_set_list_clear(copy());
19503
  return manage(res);
19504
}
19505
 
19506
isl::set_list set_list::concat(isl::set_list list2) const
19507
{
19508
  auto res = isl_set_list_concat(copy(), list2.release());
19509
  return manage(res);
19510
}
19511
 
19512
isl::set_list set_list::drop(unsigned int first, unsigned int n) const
19513
{
19514
  auto res = isl_set_list_drop(copy(), first, n);
19515
  return manage(res);
19516
}
19517
 
19518
stat set_list::foreach(const std::function<stat(isl::set)> &fn) const
19519
{
19520
  struct fn_data {
19521
    std::function<stat(isl::set)> func;
19522
  } fn_data = { fn };
19523
  auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat {
19524
    auto *data = static_cast<struct fn_data *>(arg_1);
19525
    auto ret = (data->func)(manage(arg_0));
19526
    return ret.release();
19527
  };
19528
  auto res = isl_set_list_foreach(get(), fn_lambda, &fn_data);
19529
  return manage(res);
19530
}
19531
 
19532
isl::set_list set_list::insert(unsigned int pos, isl::set el) const
19533
{
19534
  auto res = isl_set_list_insert(copy(), pos, el.release());
19535
  return manage(res);
19536
}
19537
 
19538
class size set_list::size() const
19539
{
19540
  auto res = isl_set_list_size(get());
19541
  return manage(res);
19542
}
19543
 
19544
inline std::ostream &operator<<(std::ostream &os, const set_list &obj)
19545
{
19546
  char *str = isl_set_list_to_str(obj.get());
19547
  if (!str) {
19548
    os.setstate(std::ios_base::badbit);
19549
    return os;
19550
  }
19551
  os << str;
19552
  free(str);
19553
  return os;
19554
}
19555
 
19556
// implementations for isl::space
19557
space manage(__isl_take isl_space *ptr) {
19558
  return space(ptr);
19559
}
19560
space manage_copy(__isl_keep isl_space *ptr) {
19561
  ptr = isl_space_copy(ptr);
19562
  return space(ptr);
19563
}
19564
 
19565
space::space()
19566
    : ptr(nullptr) {}
19567
 
19568
space::space(const space &obj)
19569
    : ptr(nullptr)
19570
{
19571
  ptr = obj.copy();
19572
}
19573
 
19574
space::space(__isl_take isl_space *ptr)
19575
    : ptr(ptr) {}
19576
 
19577
space::space(isl::ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out)
19578
{
19579
  auto res = isl_space_alloc(ctx.release(), nparam, n_in, n_out);
19580
  ptr = res;
19581
}
19582
 
19583
space::space(isl::ctx ctx, unsigned int nparam, unsigned int dim)
19584
{
19585
  auto res = isl_space_set_alloc(ctx.release(), nparam, dim);
19586
  ptr = res;
19587
}
19588
 
19589
space &space::operator=(space obj) {
19590
  std::swap(this->ptr, obj.ptr);
19591
  return *this;
19592
}
19593
 
19594
space::~space() {
19595
  if (ptr)
19596
    isl_space_free(ptr);
19597
}
19598
 
19599
__isl_give isl_space *space::copy() const & {
19600
  return isl_space_copy(ptr);
19601
}
19602
 
19603
__isl_keep isl_space *space::get() const {
19604
  return ptr;
19605
}
19606
 
19607
__isl_give isl_space *space::release() {
19608
  isl_space *tmp = ptr;
19609
  ptr = nullptr;
19610
  return tmp;
19611
}
19612
 
19613
bool space::is_null() const {
19614
  return ptr == nullptr;
19615
}
19616
 
19617
isl::ctx space::ctx() const {
19618
  return isl::ctx(isl_space_get_ctx(ptr));
19619
}
19620
 
19621
isl::space space::add_dims(isl::dim type, unsigned int n) const
19622
{
19623
  auto res = isl_space_add_dims(copy(), static_cast<enum isl_dim_type>(type), n);
19624
  return manage(res);
19625
}
19626
 
19627
isl::space space::add_named_tuple(isl::id tuple_id, unsigned int dim) const
19628
{
19629
  auto res = isl_space_add_named_tuple_id_ui(copy(), tuple_id.release(), dim);
19630
  return manage(res);
19631
}
19632
 
19633
isl::space space::add_named_tuple(const std::string &tuple_id, unsigned int dim) const
19634
{
19635
  return this->add_named_tuple(isl::id(ctx(), tuple_id), dim);
19636
}
19637
 
19638
isl::space space::add_param(isl::id id) const
19639
{
19640
  auto res = isl_space_add_param_id(copy(), id.release());
19641
  return manage(res);
19642
}
19643
 
19644
isl::space space::add_param(const std::string &id) const
19645
{
19646
  return this->add_param(isl::id(ctx(), id));
19647
}
19648
 
19649
isl::space space::add_unnamed_tuple(unsigned int dim) const
19650
{
19651
  auto res = isl_space_add_unnamed_tuple_ui(copy(), dim);
19652
  return manage(res);
19653
}
19654
 
19655
isl::space space::align_params(isl::space space2) const
19656
{
19657
  auto res = isl_space_align_params(copy(), space2.release());
19658
  return manage(res);
19659
}
19660
 
19661
isl::space space::curry() const
19662
{
19663
  auto res = isl_space_curry(copy());
19664
  return manage(res);
19665
}
19666
 
19667
class size space::dim(isl::dim type) const
19668
{
19669
  auto res = isl_space_dim(get(), static_cast<enum isl_dim_type>(type));
19670
  return manage(res);
19671
}
19672
 
19673
isl::id space::dim_id(isl::dim type, unsigned int pos) const
19674
{
19675
  auto res = isl_space_get_dim_id(get(), static_cast<enum isl_dim_type>(type), pos);
19676
  return manage(res);
19677
}
19678
 
19679
isl::id space::get_dim_id(isl::dim type, unsigned int pos) const
19680
{
19681
  return dim_id(type, pos);
19682
}
19683
 
19684
isl::space space::domain() const
19685
{
19686
  auto res = isl_space_domain(copy());
19687
  return manage(res);
19688
}
19689
 
19690
isl::multi_aff space::domain_map_multi_aff() const
19691
{
19692
  auto res = isl_space_domain_map_multi_aff(copy());
19693
  return manage(res);
19694
}
19695
 
19696
isl::pw_multi_aff space::domain_map_pw_multi_aff() const
19697
{
19698
  auto res = isl_space_domain_map_pw_multi_aff(copy());
19699
  return manage(res);
19700
}
19701
 
19702
isl::id space::domain_tuple_id() const
19703
{
19704
  auto res = isl_space_get_domain_tuple_id(get());
19705
  return manage(res);
19706
}
19707
 
19708
isl::id space::get_domain_tuple_id() const
19709
{
19710
  return domain_tuple_id();
19711
}
19712
 
19713
isl::space space::drop_dims(isl::dim type, unsigned int first, unsigned int num) const
19714
{
19715
  auto res = isl_space_drop_dims(copy(), static_cast<enum isl_dim_type>(type), first, num);
19716
  return manage(res);
19717
}
19718
 
19719
int space::find_dim_by_id(isl::dim type, const isl::id &id) const
19720
{
19721
  auto res = isl_space_find_dim_by_id(get(), static_cast<enum isl_dim_type>(type), id.get());
19722
  return res;
19723
}
19724
 
19725
int space::find_dim_by_id(isl::dim type, const std::string &id) const
19726
{
19727
  return this->find_dim_by_id(type, isl::id(ctx(), id));
19728
}
19729
 
19730
isl::space space::flatten_domain() const
19731
{
19732
  auto res = isl_space_flatten_domain(copy());
19733
  return manage(res);
19734
}
19735
 
19736
isl::space space::flatten_range() const
19737
{
19738
  auto res = isl_space_flatten_range(copy());
19739
  return manage(res);
19740
}
19741
 
19742
boolean space::has_domain_tuple_id() const
19743
{
19744
  auto res = isl_space_has_domain_tuple_id(get());
19745
  return manage(res);
19746
}
19747
 
19748
boolean space::has_equal_tuples(const isl::space &space2) const
19749
{
19750
  auto res = isl_space_has_equal_tuples(get(), space2.get());
19751
  return manage(res);
19752
}
19753
 
19754
boolean space::has_range_tuple_id() const
19755
{
19756
  auto res = isl_space_has_range_tuple_id(get());
19757
  return manage(res);
19758
}
19759
 
19760
boolean space::has_tuple_id(isl::dim type) const
19761
{
19762
  auto res = isl_space_has_tuple_id(get(), static_cast<enum isl_dim_type>(type));
19763
  return manage(res);
19764
}
19765
 
19766
boolean space::has_tuple_name(isl::dim type) const
19767
{
19768
  auto res = isl_space_has_tuple_name(get(), static_cast<enum isl_dim_type>(type));
19769
  return manage(res);
19770
}
19771
 
19772
isl::multi_aff space::identity_multi_aff_on_domain() const
19773
{
19774
  auto res = isl_space_identity_multi_aff_on_domain(copy());
19775
  return manage(res);
19776
}
19777
 
19778
isl::multi_pw_aff space::identity_multi_pw_aff_on_domain() const
19779
{
19780
  auto res = isl_space_identity_multi_pw_aff_on_domain(copy());
19781
  return manage(res);
19782
}
19783
 
19784
isl::pw_multi_aff space::identity_pw_multi_aff_on_domain() const
19785
{
19786
  auto res = isl_space_identity_pw_multi_aff_on_domain(copy());
19787
  return manage(res);
19788
}
19789
 
19790
boolean space::is_equal(const isl::space &space2) const
19791
{
19792
  auto res = isl_space_is_equal(get(), space2.get());
19793
  return manage(res);
19794
}
19795
 
19796
boolean space::is_params() const
19797
{
19798
  auto res = isl_space_is_params(get());
19799
  return manage(res);
19800
}
19801
 
19802
boolean space::is_set() const
19803
{
19804
  auto res = isl_space_is_set(get());
19805
  return manage(res);
19806
}
19807
 
19808
boolean space::is_wrapping() const
19809
{
19810
  auto res = isl_space_is_wrapping(get());
19811
  return manage(res);
19812
}
19813
 
19814
isl::space space::map_from_domain_and_range(isl::space range) const
19815
{
19816
  auto res = isl_space_map_from_domain_and_range(copy(), range.release());
19817
  return manage(res);
19818
}
19819
 
19820
isl::space space::map_from_set() const
19821
{
19822
  auto res = isl_space_map_from_set(copy());
19823
  return manage(res);
19824
}
19825
 
19826
isl::multi_aff space::multi_aff(isl::aff_list list) const
19827
{
19828
  auto res = isl_space_multi_aff(copy(), list.release());
19829
  return manage(res);
19830
}
19831
 
19832
isl::multi_aff space::multi_aff_on_domain(isl::multi_val mv) const
19833
{
19834
  auto res = isl_space_multi_aff_on_domain_multi_val(copy(), mv.release());
19835
  return manage(res);
19836
}
19837
 
19838
isl::multi_id space::multi_id(isl::id_list list) const
19839
{
19840
  auto res = isl_space_multi_id(copy(), list.release());
19841
  return manage(res);
19842
}
19843
 
19844
isl::multi_pw_aff space::multi_pw_aff(isl::pw_aff_list list) const
19845
{
19846
  auto res = isl_space_multi_pw_aff(copy(), list.release());
19847
  return manage(res);
19848
}
19849
 
19850
isl::multi_union_pw_aff space::multi_union_pw_aff(isl::union_pw_aff_list list) const
19851
{
19852
  auto res = isl_space_multi_union_pw_aff(copy(), list.release());
19853
  return manage(res);
19854
}
19855
 
19856
isl::multi_val space::multi_val(isl::val_list list) const
19857
{
19858
  auto res = isl_space_multi_val(copy(), list.release());
19859
  return manage(res);
19860
}
19861
 
19862
isl::aff space::param_aff_on_domain(isl::id id) const
19863
{
19864
  auto res = isl_space_param_aff_on_domain_id(copy(), id.release());
19865
  return manage(res);
19866
}
19867
 
19868
isl::aff space::param_aff_on_domain(const std::string &id) const
19869
{
19870
  return this->param_aff_on_domain(isl::id(ctx(), id));
19871
}
19872
 
19873
isl::space space::params() const
19874
{
19875
  auto res = isl_space_params(copy());
19876
  return manage(res);
19877
}
19878
 
19879
isl::space space::params_alloc(isl::ctx ctx, unsigned int nparam)
19880
{
19881
  auto res = isl_space_params_alloc(ctx.release(), nparam);
19882
  return manage(res);
19883
}
19884
 
19885
isl::space space::product(isl::space right) const
19886
{
19887
  auto res = isl_space_product(copy(), right.release());
19888
  return manage(res);
19889
}
19890
 
19891
isl::space space::range() const
19892
{
19893
  auto res = isl_space_range(copy());
19894
  return manage(res);
19895
}
19896
 
19897
isl::multi_aff space::range_map_multi_aff() const
19898
{
19899
  auto res = isl_space_range_map_multi_aff(copy());
19900
  return manage(res);
19901
}
19902
 
19903
isl::pw_multi_aff space::range_map_pw_multi_aff() const
19904
{
19905
  auto res = isl_space_range_map_pw_multi_aff(copy());
19906
  return manage(res);
19907
}
19908
 
19909
isl::space space::range_reverse() const
19910
{
19911
  auto res = isl_space_range_reverse(copy());
19912
  return manage(res);
19913
}
19914
 
19915
isl::id space::range_tuple_id() const
19916
{
19917
  auto res = isl_space_get_range_tuple_id(get());
19918
  return manage(res);
19919
}
19920
 
19921
isl::id space::get_range_tuple_id() const
19922
{
19923
  return range_tuple_id();
19924
}
19925
 
19926
isl::space space::reverse() const
19927
{
19928
  auto res = isl_space_reverse(copy());
19929
  return manage(res);
19930
}
19931
 
19932
isl::space space::set_dim_id(isl::dim type, unsigned int pos, isl::id id) const
19933
{
19934
  auto res = isl_space_set_dim_id(copy(), static_cast<enum isl_dim_type>(type), pos, id.release());
19935
  return manage(res);
19936
}
19937
 
19938
isl::space space::set_dim_id(isl::dim type, unsigned int pos, const std::string &id) const
19939
{
19940
  return this->set_dim_id(type, pos, isl::id(ctx(), id));
19941
}
19942
 
19943
isl::space space::set_domain_tuple(isl::id id) const
19944
{
19945
  auto res = isl_space_set_domain_tuple_id(copy(), id.release());
19946
  return manage(res);
19947
}
19948
 
19949
isl::space space::set_domain_tuple(const std::string &id) const
19950
{
19951
  return this->set_domain_tuple(isl::id(ctx(), id));
19952
}
19953
 
19954
isl::space space::set_from_params() const
19955
{
19956
  auto res = isl_space_set_from_params(copy());
19957
  return manage(res);
19958
}
19959
 
19960
isl::space space::set_range_tuple(isl::id id) const
19961
{
19962
  auto res = isl_space_set_range_tuple_id(copy(), id.release());
19963
  return manage(res);
19964
}
19965
 
19966
isl::space space::set_range_tuple(const std::string &id) const
19967
{
19968
  return this->set_range_tuple(isl::id(ctx(), id));
19969
}
19970
 
19971
isl::space space::set_tuple_id(isl::dim type, isl::id id) const
19972
{
19973
  auto res = isl_space_set_tuple_id(copy(), static_cast<enum isl_dim_type>(type), id.release());
19974
  return manage(res);
19975
}
19976
 
19977
isl::space space::set_tuple_id(isl::dim type, const std::string &id) const
19978
{
19979
  return this->set_tuple_id(type, isl::id(ctx(), id));
19980
}
19981
 
19982
isl::id space::tuple_id(isl::dim type) const
19983
{
19984
  auto res = isl_space_get_tuple_id(get(), static_cast<enum isl_dim_type>(type));
19985
  return manage(res);
19986
}
19987
 
19988
isl::id space::get_tuple_id(isl::dim type) const
19989
{
19990
  return tuple_id(type);
19991
}
19992
 
19993
std::string space::tuple_name(isl::dim type) const
19994
{
19995
  auto res = isl_space_get_tuple_name(get(), static_cast<enum isl_dim_type>(type));
19996
  std::string tmp(res);
19997
  return tmp;
19998
}
19999
 
20000
std::string space::get_tuple_name(isl::dim type) const
20001
{
20002
  return tuple_name(type);
20003
}
20004
 
20005
isl::space space::uncurry() const
20006
{
20007
  auto res = isl_space_uncurry(copy());
20008
  return manage(res);
20009
}
20010
 
20011
isl::space space::unit(isl::ctx ctx)
20012
{
20013
  auto res = isl_space_unit(ctx.release());
20014
  return manage(res);
20015
}
20016
 
20017
isl::map space::universe_map() const
20018
{
20019
  auto res = isl_space_universe_map(copy());
20020
  return manage(res);
20021
}
20022
 
20023
isl::set space::universe_set() const
20024
{
20025
  auto res = isl_space_universe_set(copy());
20026
  return manage(res);
20027
}
20028
 
20029
isl::space space::unwrap() const
20030
{
20031
  auto res = isl_space_unwrap(copy());
20032
  return manage(res);
20033
}
20034
 
20035
isl::space space::wrap() const
20036
{
20037
  auto res = isl_space_wrap(copy());
20038
  return manage(res);
20039
}
20040
 
20041
isl::aff space::zero_aff_on_domain() const
20042
{
20043
  auto res = isl_space_zero_aff_on_domain(copy());
20044
  return manage(res);
20045
}
20046
 
20047
isl::multi_aff space::zero_multi_aff() const
20048
{
20049
  auto res = isl_space_zero_multi_aff(copy());
20050
  return manage(res);
20051
}
20052
 
20053
isl::multi_pw_aff space::zero_multi_pw_aff() const
20054
{
20055
  auto res = isl_space_zero_multi_pw_aff(copy());
20056
  return manage(res);
20057
}
20058
 
20059
isl::multi_union_pw_aff space::zero_multi_union_pw_aff() const
20060
{
20061
  auto res = isl_space_zero_multi_union_pw_aff(copy());
20062
  return manage(res);
20063
}
20064
 
20065
isl::multi_val space::zero_multi_val() const
20066
{
20067
  auto res = isl_space_zero_multi_val(copy());
20068
  return manage(res);
20069
}
20070
 
20071
inline std::ostream &operator<<(std::ostream &os, const space &obj)
20072
{
20073
  char *str = isl_space_to_str(obj.get());
20074
  if (!str) {
20075
    os.setstate(std::ios_base::badbit);
20076
    return os;
20077
  }
20078
  os << str;
20079
  free(str);
20080
  return os;
20081
}
20082
 
20083
// implementations for isl::union_access_info
20084
union_access_info manage(__isl_take isl_union_access_info *ptr) {
20085
  return union_access_info(ptr);
20086
}
20087
union_access_info manage_copy(__isl_keep isl_union_access_info *ptr) {
20088
  ptr = isl_union_access_info_copy(ptr);
20089
  return union_access_info(ptr);
20090
}
20091
 
20092
union_access_info::union_access_info()
20093
    : ptr(nullptr) {}
20094
 
20095
union_access_info::union_access_info(const union_access_info &obj)
20096
    : ptr(nullptr)
20097
{
20098
  ptr = obj.copy();
20099
}
20100
 
20101
union_access_info::union_access_info(__isl_take isl_union_access_info *ptr)
20102
    : ptr(ptr) {}
20103
 
20104
union_access_info::union_access_info(isl::union_map sink)
20105
{
20106
  auto res = isl_union_access_info_from_sink(sink.release());
20107
  ptr = res;
20108
}
20109
 
20110
union_access_info &union_access_info::operator=(union_access_info obj) {
20111
  std::swap(this->ptr, obj.ptr);
20112
  return *this;
20113
}
20114
 
20115
union_access_info::~union_access_info() {
20116
  if (ptr)
20117
    isl_union_access_info_free(ptr);
20118
}
20119
 
20120
__isl_give isl_union_access_info *union_access_info::copy() const & {
20121
  return isl_union_access_info_copy(ptr);
20122
}
20123
 
20124
__isl_keep isl_union_access_info *union_access_info::get() const {
20125
  return ptr;
20126
}
20127
 
20128
__isl_give isl_union_access_info *union_access_info::release() {
20129
  isl_union_access_info *tmp = ptr;
20130
  ptr = nullptr;
20131
  return tmp;
20132
}
20133
 
20134
bool union_access_info::is_null() const {
20135
  return ptr == nullptr;
20136
}
20137
 
20138
isl::ctx union_access_info::ctx() const {
20139
  return isl::ctx(isl_union_access_info_get_ctx(ptr));
20140
}
20141
 
20142
isl::union_flow union_access_info::compute_flow() const
20143
{
20144
  auto res = isl_union_access_info_compute_flow(copy());
20145
  return manage(res);
20146
}
20147
 
20148
isl::union_access_info union_access_info::set_kill(isl::union_map kill) const
20149
{
20150
  auto res = isl_union_access_info_set_kill(copy(), kill.release());
20151
  return manage(res);
20152
}
20153
 
20154
isl::union_access_info union_access_info::set_may_source(isl::union_map may_source) const
20155
{
20156
  auto res = isl_union_access_info_set_may_source(copy(), may_source.release());
20157
  return manage(res);
20158
}
20159
 
20160
isl::union_access_info union_access_info::set_must_source(isl::union_map must_source) const
20161
{
20162
  auto res = isl_union_access_info_set_must_source(copy(), must_source.release());
20163
  return manage(res);
20164
}
20165
 
20166
isl::union_access_info union_access_info::set_schedule(isl::schedule schedule) const
20167
{
20168
  auto res = isl_union_access_info_set_schedule(copy(), schedule.release());
20169
  return manage(res);
20170
}
20171
 
20172
isl::union_access_info union_access_info::set_schedule_map(isl::union_map schedule_map) const
20173
{
20174
  auto res = isl_union_access_info_set_schedule_map(copy(), schedule_map.release());
20175
  return manage(res);
20176
}
20177
 
20178
inline std::ostream &operator<<(std::ostream &os, const union_access_info &obj)
20179
{
20180
  char *str = isl_union_access_info_to_str(obj.get());
20181
  if (!str) {
20182
    os.setstate(std::ios_base::badbit);
20183
    return os;
20184
  }
20185
  os << str;
20186
  free(str);
20187
  return os;
20188
}
20189
 
20190
// implementations for isl::union_flow
20191
union_flow manage(__isl_take isl_union_flow *ptr) {
20192
  return union_flow(ptr);
20193
}
20194
union_flow manage_copy(__isl_keep isl_union_flow *ptr) {
20195
  ptr = isl_union_flow_copy(ptr);
20196
  return union_flow(ptr);
20197
}
20198
 
20199
union_flow::union_flow()
20200
    : ptr(nullptr) {}
20201
 
20202
union_flow::union_flow(const union_flow &obj)
20203
    : ptr(nullptr)
20204
{
20205
  ptr = obj.copy();
20206
}
20207
 
20208
union_flow::union_flow(__isl_take isl_union_flow *ptr)
20209
    : ptr(ptr) {}
20210
 
20211
union_flow &union_flow::operator=(union_flow obj) {
20212
  std::swap(this->ptr, obj.ptr);
20213
  return *this;
20214
}
20215
 
20216
union_flow::~union_flow() {
20217
  if (ptr)
20218
    isl_union_flow_free(ptr);
20219
}
20220
 
20221
__isl_give isl_union_flow *union_flow::copy() const & {
20222
  return isl_union_flow_copy(ptr);
20223
}
20224
 
20225
__isl_keep isl_union_flow *union_flow::get() const {
20226
  return ptr;
20227
}
20228
 
20229
__isl_give isl_union_flow *union_flow::release() {
20230
  isl_union_flow *tmp = ptr;
20231
  ptr = nullptr;
20232
  return tmp;
20233
}
20234
 
20235
bool union_flow::is_null() const {
20236
  return ptr == nullptr;
20237
}
20238
 
20239
isl::ctx union_flow::ctx() const {
20240
  return isl::ctx(isl_union_flow_get_ctx(ptr));
20241
}
20242
 
20243
isl::union_map union_flow::full_may_dependence() const
20244
{
20245
  auto res = isl_union_flow_get_full_may_dependence(get());
20246
  return manage(res);
20247
}
20248
 
20249
isl::union_map union_flow::get_full_may_dependence() const
20250
{
20251
  return full_may_dependence();
20252
}
20253
 
20254
isl::union_map union_flow::full_must_dependence() const
20255
{
20256
  auto res = isl_union_flow_get_full_must_dependence(get());
20257
  return manage(res);
20258
}
20259
 
20260
isl::union_map union_flow::get_full_must_dependence() const
20261
{
20262
  return full_must_dependence();
20263
}
20264
 
20265
isl::union_map union_flow::may_dependence() const
20266
{
20267
  auto res = isl_union_flow_get_may_dependence(get());
20268
  return manage(res);
20269
}
20270
 
20271
isl::union_map union_flow::get_may_dependence() const
20272
{
20273
  return may_dependence();
20274
}
20275
 
20276
isl::union_map union_flow::may_no_source() const
20277
{
20278
  auto res = isl_union_flow_get_may_no_source(get());
20279
  return manage(res);
20280
}
20281
 
20282
isl::union_map union_flow::get_may_no_source() const
20283
{
20284
  return may_no_source();
20285
}
20286
 
20287
isl::union_map union_flow::must_dependence() const
20288
{
20289
  auto res = isl_union_flow_get_must_dependence(get());
20290
  return manage(res);
20291
}
20292
 
20293
isl::union_map union_flow::get_must_dependence() const
20294
{
20295
  return must_dependence();
20296
}
20297
 
20298
isl::union_map union_flow::must_no_source() const
20299
{
20300
  auto res = isl_union_flow_get_must_no_source(get());
20301
  return manage(res);
20302
}
20303
 
20304
isl::union_map union_flow::get_must_no_source() const
20305
{
20306
  return must_no_source();
20307
}
20308
 
20309
inline std::ostream &operator<<(std::ostream &os, const union_flow &obj)
20310
{
20311
  char *str = isl_union_flow_to_str(obj.get());
20312
  if (!str) {
20313
    os.setstate(std::ios_base::badbit);
20314
    return os;
20315
  }
20316
  os << str;
20317
  free(str);
20318
  return os;
20319
}
20320
 
20321
// implementations for isl::union_map
20322
union_map manage(__isl_take isl_union_map *ptr) {
20323
  return union_map(ptr);
20324
}
20325
union_map manage_copy(__isl_keep isl_union_map *ptr) {
20326
  ptr = isl_union_map_copy(ptr);
20327
  return union_map(ptr);
20328
}
20329
 
20330
union_map::union_map()
20331
    : ptr(nullptr) {}
20332
 
20333
union_map::union_map(const union_map &obj)
20334
    : ptr(nullptr)
20335
{
20336
  ptr = obj.copy();
20337
}
20338
 
20339
union_map::union_map(__isl_take isl_union_map *ptr)
20340
    : ptr(ptr) {}
20341
 
20342
union_map::union_map(isl::basic_map bmap)
20343
{
20344
  auto res = isl_union_map_from_basic_map(bmap.release());
20345
  ptr = res;
20346
}
20347
 
20348
union_map::union_map(isl::map map)
20349
{
20350
  auto res = isl_union_map_from_map(map.release());
20351
  ptr = res;
20352
}
20353
 
20354
union_map::union_map(isl::ctx ctx, const std::string &str)
20355
{
20356
  auto res = isl_union_map_read_from_str(ctx.release(), str.c_str());
20357
  ptr = res;
20358
}
20359
 
20360
union_map &union_map::operator=(union_map obj) {
20361
  std::swap(this->ptr, obj.ptr);
20362
  return *this;
20363
}
20364
 
20365
union_map::~union_map() {
20366
  if (ptr)
20367
    isl_union_map_free(ptr);
20368
}
20369
 
20370
__isl_give isl_union_map *union_map::copy() const & {
20371
  return isl_union_map_copy(ptr);
20372
}
20373
 
20374
__isl_keep isl_union_map *union_map::get() const {
20375
  return ptr;
20376
}
20377
 
20378
__isl_give isl_union_map *union_map::release() {
20379
  isl_union_map *tmp = ptr;
20380
  ptr = nullptr;
20381
  return tmp;
20382
}
20383
 
20384
bool union_map::is_null() const {
20385
  return ptr == nullptr;
20386
}
20387
 
20388
isl::ctx union_map::ctx() const {
20389
  return isl::ctx(isl_union_map_get_ctx(ptr));
20390
}
20391
 
20392
isl::union_map union_map::affine_hull() const
20393
{
20394
  auto res = isl_union_map_affine_hull(copy());
20395
  return manage(res);
20396
}
20397
 
20398
isl::union_map union_map::apply_domain(isl::union_map umap2) const
20399
{
20400
  auto res = isl_union_map_apply_domain(copy(), umap2.release());
20401
  return manage(res);
20402
}
20403
 
20404
isl::union_map union_map::apply_range(isl::union_map umap2) const
20405
{
20406
  auto res = isl_union_map_apply_range(copy(), umap2.release());
20407
  return manage(res);
20408
}
20409
 
20410
isl::map union_map::as_map() const
20411
{
20412
  auto res = isl_union_map_as_map(copy());
20413
  return manage(res);
20414
}
20415
 
20416
isl::multi_union_pw_aff union_map::as_multi_union_pw_aff() const
20417
{
20418
  auto res = isl_union_map_as_multi_union_pw_aff(copy());
20419
  return manage(res);
20420
}
20421
 
20422
isl::union_pw_multi_aff union_map::as_union_pw_multi_aff() const
20423
{
20424
  auto res = isl_union_map_as_union_pw_multi_aff(copy());
20425
  return manage(res);
20426
}
20427
 
20428
isl::union_set union_map::bind_range(isl::multi_id tuple) const
20429
{
20430
  auto res = isl_union_map_bind_range(copy(), tuple.release());
20431
  return manage(res);
20432
}
20433
 
20434
isl::union_map union_map::coalesce() const
20435
{
20436
  auto res = isl_union_map_coalesce(copy());
20437
  return manage(res);
20438
}
20439
 
20440
isl::union_map union_map::compute_divs() const
20441
{
20442
  auto res = isl_union_map_compute_divs(copy());
20443
  return manage(res);
20444
}
20445
 
20446
isl::union_map union_map::curry() const
20447
{
20448
  auto res = isl_union_map_curry(copy());
20449
  return manage(res);
20450
}
20451
 
20452
isl::union_set union_map::deltas() const
20453
{
20454
  auto res = isl_union_map_deltas(copy());
20455
  return manage(res);
20456
}
20457
 
20458
isl::union_map union_map::detect_equalities() const
20459
{
20460
  auto res = isl_union_map_detect_equalities(copy());
20461
  return manage(res);
20462
}
20463
 
20464
isl::union_set union_map::domain() const
20465
{
20466
  auto res = isl_union_map_domain(copy());
20467
  return manage(res);
20468
}
20469
 
20470
isl::union_map union_map::domain_factor_domain() const
20471
{
20472
  auto res = isl_union_map_domain_factor_domain(copy());
20473
  return manage(res);
20474
}
20475
 
20476
isl::union_map union_map::domain_factor_range() const
20477
{
20478
  auto res = isl_union_map_domain_factor_range(copy());
20479
  return manage(res);
20480
}
20481
 
20482
isl::union_map union_map::domain_map() const
20483
{
20484
  auto res = isl_union_map_domain_map(copy());
20485
  return manage(res);
20486
}
20487
 
20488
isl::union_pw_multi_aff union_map::domain_map_union_pw_multi_aff() const
20489
{
20490
  auto res = isl_union_map_domain_map_union_pw_multi_aff(copy());
20491
  return manage(res);
20492
}
20493
 
20494
isl::union_map union_map::domain_product(isl::union_map umap2) const
20495
{
20496
  auto res = isl_union_map_domain_product(copy(), umap2.release());
20497
  return manage(res);
20498
}
20499
 
20500
isl::union_map union_map::empty(isl::ctx ctx)
20501
{
20502
  auto res = isl_union_map_empty_ctx(ctx.release());
20503
  return manage(res);
20504
}
20505
 
20506
isl::union_map union_map::eq_at(isl::multi_union_pw_aff mupa) const
20507
{
20508
  auto res = isl_union_map_eq_at_multi_union_pw_aff(copy(), mupa.release());
20509
  return manage(res);
20510
}
20511
 
20512
boolean union_map::every_map(const std::function<boolean(isl::map)> &test) const
20513
{
20514
  struct test_data {
20515
    std::function<boolean(isl::map)> func;
20516
  } test_data = { test };
20517
  auto test_lambda = [](isl_map *arg_0, void *arg_1) -> isl_bool {
20518
    auto *data = static_cast<struct test_data *>(arg_1);
20519
    auto ret = (data->func)(manage_copy(arg_0));
20520
    return ret.release();
20521
  };
20522
  auto res = isl_union_map_every_map(get(), test_lambda, &test_data);
20523
  return manage(res);
20524
}
20525
 
20526
isl::map union_map::extract_map(isl::space space) const
20527
{
20528
  auto res = isl_union_map_extract_map(get(), space.release());
20529
  return manage(res);
20530
}
20531
 
20532
isl::union_map union_map::factor_domain() const
20533
{
20534
  auto res = isl_union_map_factor_domain(copy());
20535
  return manage(res);
20536
}
20537
 
20538
isl::union_map union_map::factor_range() const
20539
{
20540
  auto res = isl_union_map_factor_range(copy());
20541
  return manage(res);
20542
}
20543
 
20544
isl::union_map union_map::fixed_power(isl::val exp) const
20545
{
20546
  auto res = isl_union_map_fixed_power_val(copy(), exp.release());
20547
  return manage(res);
20548
}
20549
 
20550
isl::union_map union_map::fixed_power(long exp) const
20551
{
20552
  return this->fixed_power(isl::val(ctx(), exp));
20553
}
20554
 
20555
isl::union_map union_map::flat_range_product(isl::union_map umap2) const
20556
{
20557
  auto res = isl_union_map_flat_range_product(copy(), umap2.release());
20558
  return manage(res);
20559
}
20560
 
20561
stat union_map::foreach_map(const std::function<stat(isl::map)> &fn) const
20562
{
20563
  struct fn_data {
20564
    std::function<stat(isl::map)> func;
20565
  } fn_data = { fn };
20566
  auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat {
20567
    auto *data = static_cast<struct fn_data *>(arg_1);
20568
    auto ret = (data->func)(manage(arg_0));
20569
    return ret.release();
20570
  };
20571
  auto res = isl_union_map_foreach_map(get(), fn_lambda, &fn_data);
20572
  return manage(res);
20573
}
20574
 
20575
isl::union_map union_map::from(isl::multi_union_pw_aff mupa)
20576
{
20577
  auto res = isl_union_map_from_multi_union_pw_aff(mupa.release());
20578
  return manage(res);
20579
}
20580
 
20581
isl::union_map union_map::from(isl::union_pw_multi_aff upma)
20582
{
20583
  auto res = isl_union_map_from_union_pw_multi_aff(upma.release());
20584
  return manage(res);
20585
}
20586
 
20587
isl::union_map union_map::from_domain(isl::union_set uset)
20588
{
20589
  auto res = isl_union_map_from_domain(uset.release());
20590
  return manage(res);
20591
}
20592
 
20593
isl::union_map union_map::from_domain_and_range(isl::union_set domain, isl::union_set range)
20594
{
20595
  auto res = isl_union_map_from_domain_and_range(domain.release(), range.release());
20596
  return manage(res);
20597
}
20598
 
20599
isl::union_map union_map::from_range(isl::union_set uset)
20600
{
20601
  auto res = isl_union_map_from_range(uset.release());
20602
  return manage(res);
20603
}
20604
 
20605
isl::union_map union_map::gist(isl::union_map context) const
20606
{
20607
  auto res = isl_union_map_gist(copy(), context.release());
20608
  return manage(res);
20609
}
20610
 
20611
isl::union_map union_map::gist_domain(isl::union_set uset) const
20612
{
20613
  auto res = isl_union_map_gist_domain(copy(), uset.release());
20614
  return manage(res);
20615
}
20616
 
20617
isl::union_map union_map::gist_params(isl::set set) const
20618
{
20619
  auto res = isl_union_map_gist_params(copy(), set.release());
20620
  return manage(res);
20621
}
20622
 
20623
isl::union_map union_map::gist_range(isl::union_set uset) const
20624
{
20625
  auto res = isl_union_map_gist_range(copy(), uset.release());
20626
  return manage(res);
20627
}
20628
 
20629
isl::union_map union_map::intersect(isl::union_map umap2) const
20630
{
20631
  auto res = isl_union_map_intersect(copy(), umap2.release());
20632
  return manage(res);
20633
}
20634
 
20635
isl::union_map union_map::intersect_domain(isl::space space) const
20636
{
20637
  auto res = isl_union_map_intersect_domain_space(copy(), space.release());
20638
  return manage(res);
20639
}
20640
 
20641
isl::union_map union_map::intersect_domain(isl::union_set uset) const
20642
{
20643
  auto res = isl_union_map_intersect_domain_union_set(copy(), uset.release());
20644
  return manage(res);
20645
}
20646
 
20647
isl::union_map union_map::intersect_domain_factor_domain(isl::union_map factor) const
20648
{
20649
  auto res = isl_union_map_intersect_domain_factor_domain(copy(), factor.release());
20650
  return manage(res);
20651
}
20652
 
20653
isl::union_map union_map::intersect_domain_factor_range(isl::union_map factor) const
20654
{
20655
  auto res = isl_union_map_intersect_domain_factor_range(copy(), factor.release());
20656
  return manage(res);
20657
}
20658
 
20659
isl::union_map union_map::intersect_params(isl::set set) const
20660
{
20661
  auto res = isl_union_map_intersect_params(copy(), set.release());
20662
  return manage(res);
20663
}
20664
 
20665
isl::union_map union_map::intersect_range(isl::space space) const
20666
{
20667
  auto res = isl_union_map_intersect_range_space(copy(), space.release());
20668
  return manage(res);
20669
}
20670
 
20671
isl::union_map union_map::intersect_range(isl::union_set uset) const
20672
{
20673
  auto res = isl_union_map_intersect_range_union_set(copy(), uset.release());
20674
  return manage(res);
20675
}
20676
 
20677
isl::union_map union_map::intersect_range_factor_domain(isl::union_map factor) const
20678
{
20679
  auto res = isl_union_map_intersect_range_factor_domain(copy(), factor.release());
20680
  return manage(res);
20681
}
20682
 
20683
isl::union_map union_map::intersect_range_factor_range(isl::union_map factor) const
20684
{
20685
  auto res = isl_union_map_intersect_range_factor_range(copy(), factor.release());
20686
  return manage(res);
20687
}
20688
 
20689
boolean union_map::is_bijective() const
20690
{
20691
  auto res = isl_union_map_is_bijective(get());
20692
  return manage(res);
20693
}
20694
 
20695
boolean union_map::is_disjoint(const isl::union_map &umap2) const
20696
{
20697
  auto res = isl_union_map_is_disjoint(get(), umap2.get());
20698
  return manage(res);
20699
}
20700
 
20701
boolean union_map::is_empty() const
20702
{
20703
  auto res = isl_union_map_is_empty(get());
20704
  return manage(res);
20705
}
20706
 
20707
boolean union_map::is_equal(const isl::union_map &umap2) const
20708
{
20709
  auto res = isl_union_map_is_equal(get(), umap2.get());
20710
  return manage(res);
20711
}
20712
 
20713
boolean union_map::is_injective() const
20714
{
20715
  auto res = isl_union_map_is_injective(get());
20716
  return manage(res);
20717
}
20718
 
20719
boolean union_map::is_single_valued() const
20720
{
20721
  auto res = isl_union_map_is_single_valued(get());
20722
  return manage(res);
20723
}
20724
 
20725
boolean union_map::is_strict_subset(const isl::union_map &umap2) const
20726
{
20727
  auto res = isl_union_map_is_strict_subset(get(), umap2.get());
20728
  return manage(res);
20729
}
20730
 
20731
boolean union_map::is_subset(const isl::union_map &umap2) const
20732
{
20733
  auto res = isl_union_map_is_subset(get(), umap2.get());
20734
  return manage(res);
20735
}
20736
 
20737
boolean union_map::isa_map() const
20738
{
20739
  auto res = isl_union_map_isa_map(get());
20740
  return manage(res);
20741
}
20742
 
20743
isl::union_map union_map::lexmax() const
20744
{
20745
  auto res = isl_union_map_lexmax(copy());
20746
  return manage(res);
20747
}
20748
 
20749
isl::union_map union_map::lexmin() const
20750
{
20751
  auto res = isl_union_map_lexmin(copy());
20752
  return manage(res);
20753
}
20754
 
20755
isl::map_list union_map::map_list() const
20756
{
20757
  auto res = isl_union_map_get_map_list(get());
20758
  return manage(res);
20759
}
20760
 
20761
isl::map_list union_map::get_map_list() const
20762
{
20763
  return map_list();
20764
}
20765
 
20766
isl::set union_map::params() const
20767
{
20768
  auto res = isl_union_map_params(copy());
20769
  return manage(res);
20770
}
20771
 
20772
isl::union_map union_map::polyhedral_hull() const
20773
{
20774
  auto res = isl_union_map_polyhedral_hull(copy());
20775
  return manage(res);
20776
}
20777
 
20778
isl::union_map union_map::preimage_domain(isl::multi_aff ma) const
20779
{
20780
  auto res = isl_union_map_preimage_domain_multi_aff(copy(), ma.release());
20781
  return manage(res);
20782
}
20783
 
20784
isl::union_map union_map::preimage_domain(isl::multi_pw_aff mpa) const
20785
{
20786
  auto res = isl_union_map_preimage_domain_multi_pw_aff(copy(), mpa.release());
20787
  return manage(res);
20788
}
20789
 
20790
isl::union_map union_map::preimage_domain(isl::pw_multi_aff pma) const
20791
{
20792
  auto res = isl_union_map_preimage_domain_pw_multi_aff(copy(), pma.release());
20793
  return manage(res);
20794
}
20795
 
20796
isl::union_map union_map::preimage_domain(isl::union_pw_multi_aff upma) const
20797
{
20798
  auto res = isl_union_map_preimage_domain_union_pw_multi_aff(copy(), upma.release());
20799
  return manage(res);
20800
}
20801
 
20802
isl::union_map union_map::preimage_range(isl::multi_aff ma) const
20803
{
20804
  auto res = isl_union_map_preimage_range_multi_aff(copy(), ma.release());
20805
  return manage(res);
20806
}
20807
 
20808
isl::union_map union_map::preimage_range(isl::pw_multi_aff pma) const
20809
{
20810
  auto res = isl_union_map_preimage_range_pw_multi_aff(copy(), pma.release());
20811
  return manage(res);
20812
}
20813
 
20814
isl::union_map union_map::preimage_range(isl::union_pw_multi_aff upma) const
20815
{
20816
  auto res = isl_union_map_preimage_range_union_pw_multi_aff(copy(), upma.release());
20817
  return manage(res);
20818
}
20819
 
20820
isl::union_map union_map::product(isl::union_map umap2) const
20821
{
20822
  auto res = isl_union_map_product(copy(), umap2.release());
20823
  return manage(res);
20824
}
20825
 
20826
isl::union_map union_map::project_out_all_params() const
20827
{
20828
  auto res = isl_union_map_project_out_all_params(copy());
20829
  return manage(res);
20830
}
20831
 
20832
isl::union_set union_map::range() const
20833
{
20834
  auto res = isl_union_map_range(copy());
20835
  return manage(res);
20836
}
20837
 
20838
isl::union_map union_map::range_factor_domain() const
20839
{
20840
  auto res = isl_union_map_range_factor_domain(copy());
20841
  return manage(res);
20842
}
20843
 
20844
isl::union_map union_map::range_factor_range() const
20845
{
20846
  auto res = isl_union_map_range_factor_range(copy());
20847
  return manage(res);
20848
}
20849
 
20850
isl::union_map union_map::range_map() const
20851
{
20852
  auto res = isl_union_map_range_map(copy());
20853
  return manage(res);
20854
}
20855
 
20856
isl::union_map union_map::range_product(isl::union_map umap2) const
20857
{
20858
  auto res = isl_union_map_range_product(copy(), umap2.release());
20859
  return manage(res);
20860
}
20861
 
20862
isl::union_map union_map::range_reverse() const
20863
{
20864
  auto res = isl_union_map_range_reverse(copy());
20865
  return manage(res);
20866
}
20867
 
20868
isl::union_map union_map::reverse() const
20869
{
20870
  auto res = isl_union_map_reverse(copy());
20871
  return manage(res);
20872
}
20873
 
20874
isl::space union_map::space() const
20875
{
20876
  auto res = isl_union_map_get_space(get());
20877
  return manage(res);
20878
}
20879
 
20880
isl::space union_map::get_space() const
20881
{
20882
  return space();
20883
}
20884
 
20885
isl::union_map union_map::subtract(isl::union_map umap2) const
20886
{
20887
  auto res = isl_union_map_subtract(copy(), umap2.release());
20888
  return manage(res);
20889
}
20890
 
20891
isl::union_map union_map::subtract_domain(isl::union_set dom) const
20892
{
20893
  auto res = isl_union_map_subtract_domain(copy(), dom.release());
20894
  return manage(res);
20895
}
20896
 
20897
isl::union_map union_map::subtract_range(isl::union_set dom) const
20898
{
20899
  auto res = isl_union_map_subtract_range(copy(), dom.release());
20900
  return manage(res);
20901
}
20902
 
20903
isl::union_map union_map::uncurry() const
20904
{
20905
  auto res = isl_union_map_uncurry(copy());
20906
  return manage(res);
20907
}
20908
 
20909
isl::union_map union_map::unite(isl::union_map umap2) const
20910
{
20911
  auto res = isl_union_map_union(copy(), umap2.release());
20912
  return manage(res);
20913
}
20914
 
20915
isl::union_map union_map::universe() const
20916
{
20917
  auto res = isl_union_map_universe(copy());
20918
  return manage(res);
20919
}
20920
 
20921
isl::union_set union_map::wrap() const
20922
{
20923
  auto res = isl_union_map_wrap(copy());
20924
  return manage(res);
20925
}
20926
 
20927
isl::union_map union_map::zip() const
20928
{
20929
  auto res = isl_union_map_zip(copy());
20930
  return manage(res);
20931
}
20932
 
20933
inline std::ostream &operator<<(std::ostream &os, const union_map &obj)
20934
{
20935
  char *str = isl_union_map_to_str(obj.get());
20936
  if (!str) {
20937
    os.setstate(std::ios_base::badbit);
20938
    return os;
20939
  }
20940
  os << str;
20941
  free(str);
20942
  return os;
20943
}
20944
 
20945
// implementations for isl::union_pw_aff
20946
union_pw_aff manage(__isl_take isl_union_pw_aff *ptr) {
20947
  return union_pw_aff(ptr);
20948
}
20949
union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr) {
20950
  ptr = isl_union_pw_aff_copy(ptr);
20951
  return union_pw_aff(ptr);
20952
}
20953
 
20954
union_pw_aff::union_pw_aff()
20955
    : ptr(nullptr) {}
20956
 
20957
union_pw_aff::union_pw_aff(const union_pw_aff &obj)
20958
    : ptr(nullptr)
20959
{
20960
  ptr = obj.copy();
20961
}
20962
 
20963
union_pw_aff::union_pw_aff(__isl_take isl_union_pw_aff *ptr)
20964
    : ptr(ptr) {}
20965
 
20966
union_pw_aff::union_pw_aff(isl::aff aff)
20967
{
20968
  auto res = isl_union_pw_aff_from_aff(aff.release());
20969
  ptr = res;
20970
}
20971
 
20972
union_pw_aff::union_pw_aff(isl::pw_aff pa)
20973
{
20974
  auto res = isl_union_pw_aff_from_pw_aff(pa.release());
20975
  ptr = res;
20976
}
20977
 
20978
union_pw_aff::union_pw_aff(isl::ctx ctx, const std::string &str)
20979
{
20980
  auto res = isl_union_pw_aff_read_from_str(ctx.release(), str.c_str());
20981
  ptr = res;
20982
}
20983
 
20984
union_pw_aff::union_pw_aff(isl::union_set domain, isl::val v)
20985
{
20986
  auto res = isl_union_pw_aff_val_on_domain(domain.release(), v.release());
20987
  ptr = res;
20988
}
20989
 
20990
union_pw_aff &union_pw_aff::operator=(union_pw_aff obj) {
20991
  std::swap(this->ptr, obj.ptr);
20992
  return *this;
20993
}
20994
 
20995
union_pw_aff::~union_pw_aff() {
20996
  if (ptr)
20997
    isl_union_pw_aff_free(ptr);
20998
}
20999
 
21000
__isl_give isl_union_pw_aff *union_pw_aff::copy() const & {
21001
  return isl_union_pw_aff_copy(ptr);
21002
}
21003
 
21004
__isl_keep isl_union_pw_aff *union_pw_aff::get() const {
21005
  return ptr;
21006
}
21007
 
21008
__isl_give isl_union_pw_aff *union_pw_aff::release() {
21009
  isl_union_pw_aff *tmp = ptr;
21010
  ptr = nullptr;
21011
  return tmp;
21012
}
21013
 
21014
bool union_pw_aff::is_null() const {
21015
  return ptr == nullptr;
21016
}
21017
 
21018
isl::ctx union_pw_aff::ctx() const {
21019
  return isl::ctx(isl_union_pw_aff_get_ctx(ptr));
21020
}
21021
 
21022
isl::multi_union_pw_aff union_pw_aff::add(const isl::multi_union_pw_aff &multi2) const
21023
{
21024
  return isl::multi_union_pw_aff(*this).add(multi2);
21025
}
21026
 
21027
isl::union_pw_aff union_pw_aff::add(isl::union_pw_aff upa2) const
21028
{
21029
  auto res = isl_union_pw_aff_add(copy(), upa2.release());
21030
  return manage(res);
21031
}
21032
 
21033
isl::union_pw_multi_aff union_pw_aff::add(const isl::union_pw_multi_aff &upma2) const
21034
{
21035
  return isl::union_pw_multi_aff(*this).add(upma2);
21036
}
21037
 
21038
isl::union_pw_aff union_pw_aff::add(const isl::aff &upa2) const
21039
{
21040
  return this->add(isl::union_pw_aff(upa2));
21041
}
21042
 
21043
isl::union_pw_aff union_pw_aff::add(const isl::pw_aff &upa2) const
21044
{
21045
  return this->add(isl::union_pw_aff(upa2));
21046
}
21047
 
21048
isl::union_pw_multi_aff union_pw_aff::add_pw_multi_aff(const isl::pw_multi_aff &pma) const
21049
{
21050
  return isl::union_pw_multi_aff(*this).add_pw_multi_aff(pma);
21051
}
21052
 
21053
isl::union_pw_multi_aff union_pw_aff::apply(const isl::union_pw_multi_aff &upma2) const
21054
{
21055
  return isl::union_pw_multi_aff(*this).apply(upma2);
21056
}
21057
 
21058
isl::multi_union_pw_aff union_pw_aff::as_multi_union_pw_aff() const
21059
{
21060
  return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff();
21061
}
21062
 
21063
isl::pw_multi_aff union_pw_aff::as_pw_multi_aff() const
21064
{
21065
  return isl::union_pw_multi_aff(*this).as_pw_multi_aff();
21066
}
21067
 
21068
isl::union_map union_pw_aff::as_union_map() const
21069
{
21070
  return isl::union_pw_multi_aff(*this).as_union_map();
21071
}
21072
 
21073
isl::union_pw_aff union_pw_aff::at(int pos) const
21074
{
21075
  return isl::multi_union_pw_aff(*this).at(pos);
21076
}
21077
 
21078
isl::union_set union_pw_aff::bind(const isl::multi_id &tuple) const
21079
{
21080
  return isl::multi_union_pw_aff(*this).bind(tuple);
21081
}
21082
 
21083
isl::union_set union_pw_aff::bind(isl::id id) const
21084
{
21085
  auto res = isl_union_pw_aff_bind_id(copy(), id.release());
21086
  return manage(res);
21087
}
21088
 
21089
isl::union_set union_pw_aff::bind(const std::string &id) const
21090
{
21091
  return this->bind(isl::id(ctx(), id));
21092
}
21093
 
21094
isl::union_pw_aff union_pw_aff::coalesce() const
21095
{
21096
  auto res = isl_union_pw_aff_coalesce(copy());
21097
  return manage(res);
21098
}
21099
 
21100
class size union_pw_aff::dim(isl::dim type) const
21101
{
21102
  return isl::multi_union_pw_aff(*this).dim(type);
21103
}
21104
 
21105
isl::union_set union_pw_aff::domain() const
21106
{
21107
  auto res = isl_union_pw_aff_domain(copy());
21108
  return manage(res);
21109
}
21110
 
21111
isl::union_pw_aff union_pw_aff::empty(isl::space space)
21112
{
21113
  auto res = isl_union_pw_aff_empty(space.release());
21114
  return manage(res);
21115
}
21116
 
21117
isl::pw_multi_aff union_pw_aff::extract_pw_multi_aff(const isl::space &space) const
21118
{
21119
  return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space);
21120
}
21121
 
21122
isl::multi_union_pw_aff union_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const
21123
{
21124
  return isl::multi_union_pw_aff(*this).flat_range_product(multi2);
21125
}
21126
 
21127
isl::union_pw_multi_aff union_pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const
21128
{
21129
  return isl::union_pw_multi_aff(*this).flat_range_product(upma2);
21130
}
21131
 
21132
stat union_pw_aff::foreach_pw_aff(const std::function<stat(isl::pw_aff)> &fn) const
21133
{
21134
  struct fn_data {
21135
    std::function<stat(isl::pw_aff)> func;
21136
  } fn_data = { fn };
21137
  auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat {
21138
    auto *data = static_cast<struct fn_data *>(arg_1);
21139
    auto ret = (data->func)(manage(arg_0));
21140
    return ret.release();
21141
  };
21142
  auto res = isl_union_pw_aff_foreach_pw_aff(get(), fn_lambda, &fn_data);
21143
  return manage(res);
21144
}
21145
 
21146
isl::union_pw_aff union_pw_aff::gist(isl::union_set context) const
21147
{
21148
  auto res = isl_union_pw_aff_gist(copy(), context.release());
21149
  return manage(res);
21150
}
21151
 
21152
boolean union_pw_aff::has_range_tuple_id() const
21153
{
21154
  return isl::multi_union_pw_aff(*this).has_range_tuple_id();
21155
}
21156
 
21157
isl::union_pw_aff union_pw_aff::intersect_domain(isl::space space) const
21158
{
21159
  auto res = isl_union_pw_aff_intersect_domain_space(copy(), space.release());
21160
  return manage(res);
21161
}
21162
 
21163
isl::union_pw_aff union_pw_aff::intersect_domain(isl::union_set uset) const
21164
{
21165
  auto res = isl_union_pw_aff_intersect_domain_union_set(copy(), uset.release());
21166
  return manage(res);
21167
}
21168
 
21169
isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_domain(isl::union_set uset) const
21170
{
21171
  auto res = isl_union_pw_aff_intersect_domain_wrapped_domain(copy(), uset.release());
21172
  return manage(res);
21173
}
21174
 
21175
isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_range(isl::union_set uset) const
21176
{
21177
  auto res = isl_union_pw_aff_intersect_domain_wrapped_range(copy(), uset.release());
21178
  return manage(res);
21179
}
21180
 
21181
isl::union_pw_aff union_pw_aff::intersect_params(isl::set set) const
21182
{
21183
  auto res = isl_union_pw_aff_intersect_params(copy(), set.release());
21184
  return manage(res);
21185
}
21186
 
21187
boolean union_pw_aff::involves_locals() const
21188
{
21189
  return isl::union_pw_multi_aff(*this).involves_locals();
21190
}
21191
 
21192
boolean union_pw_aff::involves_nan() const
21193
{
21194
  return isl::multi_union_pw_aff(*this).involves_nan();
21195
}
21196
 
21197
boolean union_pw_aff::isa_pw_multi_aff() const
21198
{
21199
  return isl::union_pw_multi_aff(*this).isa_pw_multi_aff();
21200
}
21201
 
21202
isl::union_pw_aff_list union_pw_aff::list() const
21203
{
21204
  return isl::multi_union_pw_aff(*this).list();
21205
}
21206
 
21207
isl::multi_union_pw_aff union_pw_aff::neg() const
21208
{
21209
  return isl::multi_union_pw_aff(*this).neg();
21210
}
21211
 
21212
boolean union_pw_aff::plain_is_empty() const
21213
{
21214
  return isl::union_pw_multi_aff(*this).plain_is_empty();
21215
}
21216
 
21217
boolean union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const
21218
{
21219
  return isl::multi_union_pw_aff(*this).plain_is_equal(multi2);
21220
}
21221
 
21222
isl::union_pw_multi_aff union_pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const
21223
{
21224
  return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2);
21225
}
21226
 
21227
isl::union_pw_aff union_pw_aff::pullback(isl::union_pw_multi_aff upma) const
21228
{
21229
  auto res = isl_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release());
21230
  return manage(res);
21231
}
21232
 
21233
isl::pw_multi_aff_list union_pw_aff::pw_multi_aff_list() const
21234
{
21235
  return isl::union_pw_multi_aff(*this).pw_multi_aff_list();
21236
}
21237
 
21238
isl::union_pw_multi_aff union_pw_aff::range_factor_domain() const
21239
{
21240
  return isl::union_pw_multi_aff(*this).range_factor_domain();
21241
}
21242
 
21243
isl::union_pw_multi_aff union_pw_aff::range_factor_range() const
21244
{
21245
  return isl::union_pw_multi_aff(*this).range_factor_range();
21246
}
21247
 
21248
isl::multi_union_pw_aff union_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const
21249
{
21250
  return isl::multi_union_pw_aff(*this).range_product(multi2);
21251
}
21252
 
21253
isl::union_pw_multi_aff union_pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const
21254
{
21255
  return isl::union_pw_multi_aff(*this).range_product(upma2);
21256
}
21257
 
21258
isl::id union_pw_aff::range_tuple_id() const
21259
{
21260
  return isl::multi_union_pw_aff(*this).range_tuple_id();
21261
}
21262
 
21263
isl::multi_union_pw_aff union_pw_aff::reset_range_tuple_id() const
21264
{
21265
  return isl::multi_union_pw_aff(*this).reset_range_tuple_id();
21266
}
21267
 
21268
isl::multi_union_pw_aff union_pw_aff::reset_tuple_id(isl::dim type) const
21269
{
21270
  return isl::multi_union_pw_aff(*this).reset_tuple_id(type);
21271
}
21272
 
21273
isl::multi_union_pw_aff union_pw_aff::scale(const isl::multi_val &mv) const
21274
{
21275
  return isl::multi_union_pw_aff(*this).scale(mv);
21276
}
21277
 
21278
isl::multi_union_pw_aff union_pw_aff::scale(const isl::val &v) const
21279
{
21280
  return isl::multi_union_pw_aff(*this).scale(v);
21281
}
21282
 
21283
isl::multi_union_pw_aff union_pw_aff::scale(long v) const
21284
{
21285
  return this->scale(isl::val(ctx(), v));
21286
}
21287
 
21288
isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::multi_val &mv) const
21289
{
21290
  return isl::multi_union_pw_aff(*this).scale_down(mv);
21291
}
21292
 
21293
isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::val &v) const
21294
{
21295
  return isl::multi_union_pw_aff(*this).scale_down(v);
21296
}
21297
 
21298
isl::multi_union_pw_aff union_pw_aff::scale_down(long v) const
21299
{
21300
  return this->scale_down(isl::val(ctx(), v));
21301
}
21302
 
21303
isl::multi_union_pw_aff union_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const
21304
{
21305
  return isl::multi_union_pw_aff(*this).set_at(pos, el);
21306
}
21307
 
21308
isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const isl::id &id) const
21309
{
21310
  return isl::multi_union_pw_aff(*this).set_range_tuple(id);
21311
}
21312
 
21313
isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const std::string &id) const
21314
{
21315
  return this->set_range_tuple(isl::id(ctx(), id));
21316
}
21317
 
21318
isl::multi_union_pw_aff union_pw_aff::set_union_pw_aff(int pos, const isl::union_pw_aff &el) const
21319
{
21320
  return isl::multi_union_pw_aff(*this).set_union_pw_aff(pos, el);
21321
}
21322
 
21323
class size union_pw_aff::size() const
21324
{
21325
  return isl::multi_union_pw_aff(*this).size();
21326
}
21327
 
21328
isl::space union_pw_aff::space() const
21329
{
21330
  auto res = isl_union_pw_aff_get_space(get());
21331
  return manage(res);
21332
}
21333
 
21334
isl::space union_pw_aff::get_space() const
21335
{
21336
  return space();
21337
}
21338
 
21339
isl::multi_union_pw_aff union_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const
21340
{
21341
  return isl::multi_union_pw_aff(*this).sub(multi2);
21342
}
21343
 
21344
isl::union_pw_aff union_pw_aff::sub(isl::union_pw_aff upa2) const
21345
{
21346
  auto res = isl_union_pw_aff_sub(copy(), upa2.release());
21347
  return manage(res);
21348
}
21349
 
21350
isl::union_pw_multi_aff union_pw_aff::sub(const isl::union_pw_multi_aff &upma2) const
21351
{
21352
  return isl::union_pw_multi_aff(*this).sub(upma2);
21353
}
21354
 
21355
isl::union_pw_aff union_pw_aff::sub(const isl::aff &upa2) const
21356
{
21357
  return this->sub(isl::union_pw_aff(upa2));
21358
}
21359
 
21360
isl::union_pw_aff union_pw_aff::sub(const isl::pw_aff &upa2) const
21361
{
21362
  return this->sub(isl::union_pw_aff(upa2));
21363
}
21364
 
21365
isl::union_pw_aff union_pw_aff::subtract_domain(isl::space space) const
21366
{
21367
  auto res = isl_union_pw_aff_subtract_domain_space(copy(), space.release());
21368
  return manage(res);
21369
}
21370
 
21371
isl::union_pw_aff union_pw_aff::subtract_domain(isl::union_set uset) const
21372
{
21373
  auto res = isl_union_pw_aff_subtract_domain_union_set(copy(), uset.release());
21374
  return manage(res);
21375
}
21376
 
21377
isl::union_pw_aff_list union_pw_aff::to_list() const
21378
{
21379
  auto res = isl_union_pw_aff_to_list(copy());
21380
  return manage(res);
21381
}
21382
 
21383
isl::multi_union_pw_aff union_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const
21384
{
21385
  return isl::multi_union_pw_aff(*this).union_add(mupa2);
21386
}
21387
 
21388
isl::union_pw_aff union_pw_aff::union_add(isl::union_pw_aff upa2) const
21389
{
21390
  auto res = isl_union_pw_aff_union_add(copy(), upa2.release());
21391
  return manage(res);
21392
}
21393
 
21394
isl::union_pw_multi_aff union_pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const
21395
{
21396
  return isl::union_pw_multi_aff(*this).union_add(upma2);
21397
}
21398
 
21399
isl::union_pw_aff union_pw_aff::union_add(const isl::aff &upa2) const
21400
{
21401
  return this->union_add(isl::union_pw_aff(upa2));
21402
}
21403
 
21404
isl::union_pw_aff union_pw_aff::union_add(const isl::pw_aff &upa2) const
21405
{
21406
  return this->union_add(isl::union_pw_aff(upa2));
21407
}
21408
 
21409
inline std::ostream &operator<<(std::ostream &os, const union_pw_aff &obj)
21410
{
21411
  char *str = isl_union_pw_aff_to_str(obj.get());
21412
  if (!str) {
21413
    os.setstate(std::ios_base::badbit);
21414
    return os;
21415
  }
21416
  os << str;
21417
  free(str);
21418
  return os;
21419
}
21420
 
21421
// implementations for isl::union_pw_aff_list
21422
union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr) {
21423
  return union_pw_aff_list(ptr);
21424
}
21425
union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr) {
21426
  ptr = isl_union_pw_aff_list_copy(ptr);
21427
  return union_pw_aff_list(ptr);
21428
}
21429
 
21430
union_pw_aff_list::union_pw_aff_list()
21431
    : ptr(nullptr) {}
21432
 
21433
union_pw_aff_list::union_pw_aff_list(const union_pw_aff_list &obj)
21434
    : ptr(nullptr)
21435
{
21436
  ptr = obj.copy();
21437
}
21438
 
21439
union_pw_aff_list::union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr)
21440
    : ptr(ptr) {}
21441
 
21442
union_pw_aff_list::union_pw_aff_list(isl::ctx ctx, int n)
21443
{
21444
  auto res = isl_union_pw_aff_list_alloc(ctx.release(), n);
21445
  ptr = res;
21446
}
21447
 
21448
union_pw_aff_list::union_pw_aff_list(isl::union_pw_aff el)
21449
{
21450
  auto res = isl_union_pw_aff_list_from_union_pw_aff(el.release());
21451
  ptr = res;
21452
}
21453
 
21454
union_pw_aff_list::union_pw_aff_list(isl::ctx ctx, const std::string &str)
21455
{
21456
  auto res = isl_union_pw_aff_list_read_from_str(ctx.release(), str.c_str());
21457
  ptr = res;
21458
}
21459
 
21460
union_pw_aff_list &union_pw_aff_list::operator=(union_pw_aff_list obj) {
21461
  std::swap(this->ptr, obj.ptr);
21462
  return *this;
21463
}
21464
 
21465
union_pw_aff_list::~union_pw_aff_list() {
21466
  if (ptr)
21467
    isl_union_pw_aff_list_free(ptr);
21468
}
21469
 
21470
__isl_give isl_union_pw_aff_list *union_pw_aff_list::copy() const & {
21471
  return isl_union_pw_aff_list_copy(ptr);
21472
}
21473
 
21474
__isl_keep isl_union_pw_aff_list *union_pw_aff_list::get() const {
21475
  return ptr;
21476
}
21477
 
21478
__isl_give isl_union_pw_aff_list *union_pw_aff_list::release() {
21479
  isl_union_pw_aff_list *tmp = ptr;
21480
  ptr = nullptr;
21481
  return tmp;
21482
}
21483
 
21484
bool union_pw_aff_list::is_null() const {
21485
  return ptr == nullptr;
21486
}
21487
 
21488
isl::ctx union_pw_aff_list::ctx() const {
21489
  return isl::ctx(isl_union_pw_aff_list_get_ctx(ptr));
21490
}
21491
 
21492
isl::union_pw_aff_list union_pw_aff_list::add(isl::union_pw_aff el) const
21493
{
21494
  auto res = isl_union_pw_aff_list_add(copy(), el.release());
21495
  return manage(res);
21496
}
21497
 
21498
isl::union_pw_aff union_pw_aff_list::at(int index) const
21499
{
21500
  auto res = isl_union_pw_aff_list_get_at(get(), index);
21501
  return manage(res);
21502
}
21503
 
21504
isl::union_pw_aff union_pw_aff_list::get_at(int index) const
21505
{
21506
  return at(index);
21507
}
21508
 
21509
isl::union_pw_aff_list union_pw_aff_list::clear() const
21510
{
21511
  auto res = isl_union_pw_aff_list_clear(copy());
21512
  return manage(res);
21513
}
21514
 
21515
isl::union_pw_aff_list union_pw_aff_list::concat(isl::union_pw_aff_list list2) const
21516
{
21517
  auto res = isl_union_pw_aff_list_concat(copy(), list2.release());
21518
  return manage(res);
21519
}
21520
 
21521
isl::union_pw_aff_list union_pw_aff_list::drop(unsigned int first, unsigned int n) const
21522
{
21523
  auto res = isl_union_pw_aff_list_drop(copy(), first, n);
21524
  return manage(res);
21525
}
21526
 
21527
stat union_pw_aff_list::foreach(const std::function<stat(isl::union_pw_aff)> &fn) const
21528
{
21529
  struct fn_data {
21530
    std::function<stat(isl::union_pw_aff)> func;
21531
  } fn_data = { fn };
21532
  auto fn_lambda = [](isl_union_pw_aff *arg_0, void *arg_1) -> isl_stat {
21533
    auto *data = static_cast<struct fn_data *>(arg_1);
21534
    auto ret = (data->func)(manage(arg_0));
21535
    return ret.release();
21536
  };
21537
  auto res = isl_union_pw_aff_list_foreach(get(), fn_lambda, &fn_data);
21538
  return manage(res);
21539
}
21540
 
21541
isl::union_pw_aff_list union_pw_aff_list::insert(unsigned int pos, isl::union_pw_aff el) const
21542
{
21543
  auto res = isl_union_pw_aff_list_insert(copy(), pos, el.release());
21544
  return manage(res);
21545
}
21546
 
21547
class size union_pw_aff_list::size() const
21548
{
21549
  auto res = isl_union_pw_aff_list_size(get());
21550
  return manage(res);
21551
}
21552
 
21553
inline std::ostream &operator<<(std::ostream &os, const union_pw_aff_list &obj)
21554
{
21555
  char *str = isl_union_pw_aff_list_to_str(obj.get());
21556
  if (!str) {
21557
    os.setstate(std::ios_base::badbit);
21558
    return os;
21559
  }
21560
  os << str;
21561
  free(str);
21562
  return os;
21563
}
21564
 
21565
// implementations for isl::union_pw_multi_aff
21566
union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr) {
21567
  return union_pw_multi_aff(ptr);
21568
}
21569
union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr) {
21570
  ptr = isl_union_pw_multi_aff_copy(ptr);
21571
  return union_pw_multi_aff(ptr);
21572
}
21573
 
21574
union_pw_multi_aff::union_pw_multi_aff()
21575
    : ptr(nullptr) {}
21576
 
21577
union_pw_multi_aff::union_pw_multi_aff(const union_pw_multi_aff &obj)
21578
    : ptr(nullptr)
21579
{
21580
  ptr = obj.copy();
21581
}
21582
 
21583
union_pw_multi_aff::union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr)
21584
    : ptr(ptr) {}
21585
 
21586
union_pw_multi_aff::union_pw_multi_aff(isl::union_set uset)
21587
{
21588
  auto res = isl_union_pw_multi_aff_from_domain(uset.release());
21589
  ptr = res;
21590
}
21591
 
21592
union_pw_multi_aff::union_pw_multi_aff(isl::multi_aff ma)
21593
{
21594
  auto res = isl_union_pw_multi_aff_from_multi_aff(ma.release());
21595
  ptr = res;
21596
}
21597
 
21598
union_pw_multi_aff::union_pw_multi_aff(isl::pw_multi_aff pma)
21599
{
21600
  auto res = isl_union_pw_multi_aff_from_pw_multi_aff(pma.release());
21601
  ptr = res;
21602
}
21603
 
21604
union_pw_multi_aff::union_pw_multi_aff(isl::union_map umap)
21605
{
21606
  auto res = isl_union_pw_multi_aff_from_union_map(umap.release());
21607
  ptr = res;
21608
}
21609
 
21610
union_pw_multi_aff::union_pw_multi_aff(isl::union_pw_aff upa)
21611
{
21612
  auto res = isl_union_pw_multi_aff_from_union_pw_aff(upa.release());
21613
  ptr = res;
21614
}
21615
 
21616
union_pw_multi_aff::union_pw_multi_aff(isl::ctx ctx, const std::string &str)
21617
{
21618
  auto res = isl_union_pw_multi_aff_read_from_str(ctx.release(), str.c_str());
21619
  ptr = res;
21620
}
21621
 
21622
union_pw_multi_aff &union_pw_multi_aff::operator=(union_pw_multi_aff obj) {
21623
  std::swap(this->ptr, obj.ptr);
21624
  return *this;
21625
}
21626
 
21627
union_pw_multi_aff::~union_pw_multi_aff() {
21628
  if (ptr)
21629
    isl_union_pw_multi_aff_free(ptr);
21630
}
21631
 
21632
__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::copy() const & {
21633
  return isl_union_pw_multi_aff_copy(ptr);
21634
}
21635
 
21636
__isl_keep isl_union_pw_multi_aff *union_pw_multi_aff::get() const {
21637
  return ptr;
21638
}
21639
 
21640
__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::release() {
21641
  isl_union_pw_multi_aff *tmp = ptr;
21642
  ptr = nullptr;
21643
  return tmp;
21644
}
21645
 
21646
bool union_pw_multi_aff::is_null() const {
21647
  return ptr == nullptr;
21648
}
21649
 
21650
isl::ctx union_pw_multi_aff::ctx() const {
21651
  return isl::ctx(isl_union_pw_multi_aff_get_ctx(ptr));
21652
}
21653
 
21654
isl::union_pw_multi_aff union_pw_multi_aff::add(isl::union_pw_multi_aff upma2) const
21655
{
21656
  auto res = isl_union_pw_multi_aff_add(copy(), upma2.release());
21657
  return manage(res);
21658
}
21659
 
21660
isl::union_pw_multi_aff union_pw_multi_aff::add_pw_multi_aff(isl::pw_multi_aff pma) const
21661
{
21662
  auto res = isl_union_pw_multi_aff_add_pw_multi_aff(copy(), pma.release());
21663
  return manage(res);
21664
}
21665
 
21666
isl::union_pw_multi_aff union_pw_multi_aff::apply(isl::union_pw_multi_aff upma2) const
21667
{
21668
  auto res = isl_union_pw_multi_aff_apply_union_pw_multi_aff(copy(), upma2.release());
21669
  return manage(res);
21670
}
21671
 
21672
isl::multi_union_pw_aff union_pw_multi_aff::as_multi_union_pw_aff() const
21673
{
21674
  auto res = isl_union_pw_multi_aff_as_multi_union_pw_aff(copy());
21675
  return manage(res);
21676
}
21677
 
21678
isl::pw_multi_aff union_pw_multi_aff::as_pw_multi_aff() const
21679
{
21680
  auto res = isl_union_pw_multi_aff_as_pw_multi_aff(copy());
21681
  return manage(res);
21682
}
21683
 
21684
isl::union_map union_pw_multi_aff::as_union_map() const
21685
{
21686
  auto res = isl_union_pw_multi_aff_as_union_map(copy());
21687
  return manage(res);
21688
}
21689
 
21690
isl::union_pw_multi_aff union_pw_multi_aff::coalesce() const
21691
{
21692
  auto res = isl_union_pw_multi_aff_coalesce(copy());
21693
  return manage(res);
21694
}
21695
 
21696
isl::union_set union_pw_multi_aff::domain() const
21697
{
21698
  auto res = isl_union_pw_multi_aff_domain(copy());
21699
  return manage(res);
21700
}
21701
 
21702
isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::space space)
21703
{
21704
  auto res = isl_union_pw_multi_aff_empty(space.release());
21705
  return manage(res);
21706
}
21707
 
21708
isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::ctx ctx)
21709
{
21710
  auto res = isl_union_pw_multi_aff_empty_ctx(ctx.release());
21711
  return manage(res);
21712
}
21713
 
21714
isl::pw_multi_aff union_pw_multi_aff::extract_pw_multi_aff(isl::space space) const
21715
{
21716
  auto res = isl_union_pw_multi_aff_extract_pw_multi_aff(get(), space.release());
21717
  return manage(res);
21718
}
21719
 
21720
isl::union_pw_multi_aff union_pw_multi_aff::flat_range_product(isl::union_pw_multi_aff upma2) const
21721
{
21722
  auto res = isl_union_pw_multi_aff_flat_range_product(copy(), upma2.release());
21723
  return manage(res);
21724
}
21725
 
21726
isl::union_pw_multi_aff union_pw_multi_aff::gist(isl::union_set context) const
21727
{
21728
  auto res = isl_union_pw_multi_aff_gist(copy(), context.release());
21729
  return manage(res);
21730
}
21731
 
21732
isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::space space) const
21733
{
21734
  auto res = isl_union_pw_multi_aff_intersect_domain_space(copy(), space.release());
21735
  return manage(res);
21736
}
21737
 
21738
isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::union_set uset) const
21739
{
21740
  auto res = isl_union_pw_multi_aff_intersect_domain_union_set(copy(), uset.release());
21741
  return manage(res);
21742
}
21743
 
21744
isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_domain(isl::union_set uset) const
21745
{
21746
  auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_domain(copy(), uset.release());
21747
  return manage(res);
21748
}
21749
 
21750
isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_range(isl::union_set uset) const
21751
{
21752
  auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_range(copy(), uset.release());
21753
  return manage(res);
21754
}
21755
 
21756
isl::union_pw_multi_aff union_pw_multi_aff::intersect_params(isl::set set) const
21757
{
21758
  auto res = isl_union_pw_multi_aff_intersect_params(copy(), set.release());
21759
  return manage(res);
21760
}
21761
 
21762
boolean union_pw_multi_aff::involves_locals() const
21763
{
21764
  auto res = isl_union_pw_multi_aff_involves_locals(get());
21765
  return manage(res);
21766
}
21767
 
21768
boolean union_pw_multi_aff::isa_pw_multi_aff() const
21769
{
21770
  auto res = isl_union_pw_multi_aff_isa_pw_multi_aff(get());
21771
  return manage(res);
21772
}
21773
 
21774
boolean union_pw_multi_aff::plain_is_empty() const
21775
{
21776
  auto res = isl_union_pw_multi_aff_plain_is_empty(get());
21777
  return manage(res);
21778
}
21779
 
21780
isl::union_pw_multi_aff union_pw_multi_aff::preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2) const
21781
{
21782
  auto res = isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(copy(), upma2.release());
21783
  return manage(res);
21784
}
21785
 
21786
isl::union_pw_multi_aff union_pw_multi_aff::pullback(isl::union_pw_multi_aff upma2) const
21787
{
21788
  auto res = isl_union_pw_multi_aff_pullback_union_pw_multi_aff(copy(), upma2.release());
21789
  return manage(res);
21790
}
21791
 
21792
isl::pw_multi_aff_list union_pw_multi_aff::pw_multi_aff_list() const
21793
{
21794
  auto res = isl_union_pw_multi_aff_get_pw_multi_aff_list(get());
21795
  return manage(res);
21796
}
21797
 
21798
isl::pw_multi_aff_list union_pw_multi_aff::get_pw_multi_aff_list() const
21799
{
21800
  return pw_multi_aff_list();
21801
}
21802
 
21803
isl::union_pw_multi_aff union_pw_multi_aff::range_factor_domain() const
21804
{
21805
  auto res = isl_union_pw_multi_aff_range_factor_domain(copy());
21806
  return manage(res);
21807
}
21808
 
21809
isl::union_pw_multi_aff union_pw_multi_aff::range_factor_range() const
21810
{
21811
  auto res = isl_union_pw_multi_aff_range_factor_range(copy());
21812
  return manage(res);
21813
}
21814
 
21815
isl::union_pw_multi_aff union_pw_multi_aff::range_product(isl::union_pw_multi_aff upma2) const
21816
{
21817
  auto res = isl_union_pw_multi_aff_range_product(copy(), upma2.release());
21818
  return manage(res);
21819
}
21820
 
21821
isl::space union_pw_multi_aff::space() const
21822
{
21823
  auto res = isl_union_pw_multi_aff_get_space(get());
21824
  return manage(res);
21825
}
21826
 
21827
isl::space union_pw_multi_aff::get_space() const
21828
{
21829
  return space();
21830
}
21831
 
21832
isl::union_pw_multi_aff union_pw_multi_aff::sub(isl::union_pw_multi_aff upma2) const
21833
{
21834
  auto res = isl_union_pw_multi_aff_sub(copy(), upma2.release());
21835
  return manage(res);
21836
}
21837
 
21838
isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::space space) const
21839
{
21840
  auto res = isl_union_pw_multi_aff_subtract_domain_space(copy(), space.release());
21841
  return manage(res);
21842
}
21843
 
21844
isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::union_set uset) const
21845
{
21846
  auto res = isl_union_pw_multi_aff_subtract_domain_union_set(copy(), uset.release());
21847
  return manage(res);
21848
}
21849
 
21850
isl::union_pw_multi_aff union_pw_multi_aff::union_add(isl::union_pw_multi_aff upma2) const
21851
{
21852
  auto res = isl_union_pw_multi_aff_union_add(copy(), upma2.release());
21853
  return manage(res);
21854
}
21855
 
21856
inline std::ostream &operator<<(std::ostream &os, const union_pw_multi_aff &obj)
21857
{
21858
  char *str = isl_union_pw_multi_aff_to_str(obj.get());
21859
  if (!str) {
21860
    os.setstate(std::ios_base::badbit);
21861
    return os;
21862
  }
21863
  os << str;
21864
  free(str);
21865
  return os;
21866
}
21867
 
21868
// implementations for isl::union_set
21869
union_set manage(__isl_take isl_union_set *ptr) {
21870
  return union_set(ptr);
21871
}
21872
union_set manage_copy(__isl_keep isl_union_set *ptr) {
21873
  ptr = isl_union_set_copy(ptr);
21874
  return union_set(ptr);
21875
}
21876
 
21877
union_set::union_set()
21878
    : ptr(nullptr) {}
21879
 
21880
union_set::union_set(const union_set &obj)
21881
    : ptr(nullptr)
21882
{
21883
  ptr = obj.copy();
21884
}
21885
 
21886
union_set::union_set(__isl_take isl_union_set *ptr)
21887
    : ptr(ptr) {}
21888
 
21889
union_set::union_set(isl::basic_set bset)
21890
{
21891
  auto res = isl_union_set_from_basic_set(bset.release());
21892
  ptr = res;
21893
}
21894
 
21895
union_set::union_set(isl::point pnt)
21896
{
21897
  auto res = isl_union_set_from_point(pnt.release());
21898
  ptr = res;
21899
}
21900
 
21901
union_set::union_set(isl::set set)
21902
{
21903
  auto res = isl_union_set_from_set(set.release());
21904
  ptr = res;
21905
}
21906
 
21907
union_set::union_set(isl::ctx ctx, const std::string &str)
21908
{
21909
  auto res = isl_union_set_read_from_str(ctx.release(), str.c_str());
21910
  ptr = res;
21911
}
21912
 
21913
union_set &union_set::operator=(union_set obj) {
21914
  std::swap(this->ptr, obj.ptr);
21915
  return *this;
21916
}
21917
 
21918
union_set::~union_set() {
21919
  if (ptr)
21920
    isl_union_set_free(ptr);
21921
}
21922
 
21923
__isl_give isl_union_set *union_set::copy() const & {
21924
  return isl_union_set_copy(ptr);
21925
}
21926
 
21927
__isl_keep isl_union_set *union_set::get() const {
21928
  return ptr;
21929
}
21930
 
21931
__isl_give isl_union_set *union_set::release() {
21932
  isl_union_set *tmp = ptr;
21933
  ptr = nullptr;
21934
  return tmp;
21935
}
21936
 
21937
bool union_set::is_null() const {
21938
  return ptr == nullptr;
21939
}
21940
 
21941
isl::ctx union_set::ctx() const {
21942
  return isl::ctx(isl_union_set_get_ctx(ptr));
21943
}
21944
 
21945
isl::union_set union_set::affine_hull() const
21946
{
21947
  auto res = isl_union_set_affine_hull(copy());
21948
  return manage(res);
21949
}
21950
 
21951
isl::union_set union_set::apply(isl::union_map umap) const
21952
{
21953
  auto res = isl_union_set_apply(copy(), umap.release());
21954
  return manage(res);
21955
}
21956
 
21957
isl::set union_set::as_set() const
21958
{
21959
  auto res = isl_union_set_as_set(copy());
21960
  return manage(res);
21961
}
21962
 
21963
isl::union_set union_set::coalesce() const
21964
{
21965
  auto res = isl_union_set_coalesce(copy());
21966
  return manage(res);
21967
}
21968
 
21969
isl::union_set union_set::compute_divs() const
21970
{
21971
  auto res = isl_union_set_compute_divs(copy());
21972
  return manage(res);
21973
}
21974
 
21975
boolean union_set::contains(const isl::space &space) const
21976
{
21977
  auto res = isl_union_set_contains(get(), space.get());
21978
  return manage(res);
21979
}
21980
 
21981
isl::union_set union_set::detect_equalities() const
21982
{
21983
  auto res = isl_union_set_detect_equalities(copy());
21984
  return manage(res);
21985
}
21986
 
21987
isl::union_set union_set::empty(isl::ctx ctx)
21988
{
21989
  auto res = isl_union_set_empty_ctx(ctx.release());
21990
  return manage(res);
21991
}
21992
 
21993
boolean union_set::every_set(const std::function<boolean(isl::set)> &test) const
21994
{
21995
  struct test_data {
21996
    std::function<boolean(isl::set)> func;
21997
  } test_data = { test };
21998
  auto test_lambda = [](isl_set *arg_0, void *arg_1) -> isl_bool {
21999
    auto *data = static_cast<struct test_data *>(arg_1);
22000
    auto ret = (data->func)(manage_copy(arg_0));
22001
    return ret.release();
22002
  };
22003
  auto res = isl_union_set_every_set(get(), test_lambda, &test_data);
22004
  return manage(res);
22005
}
22006
 
22007
isl::set union_set::extract_set(isl::space space) const
22008
{
22009
  auto res = isl_union_set_extract_set(get(), space.release());
22010
  return manage(res);
22011
}
22012
 
22013
stat union_set::foreach_point(const std::function<stat(isl::point)> &fn) const
22014
{
22015
  struct fn_data {
22016
    std::function<stat(isl::point)> func;
22017
  } fn_data = { fn };
22018
  auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat {
22019
    auto *data = static_cast<struct fn_data *>(arg_1);
22020
    auto ret = (data->func)(manage(arg_0));
22021
    return ret.release();
22022
  };
22023
  auto res = isl_union_set_foreach_point(get(), fn_lambda, &fn_data);
22024
  return manage(res);
22025
}
22026
 
22027
stat union_set::foreach_set(const std::function<stat(isl::set)> &fn) const
22028
{
22029
  struct fn_data {
22030
    std::function<stat(isl::set)> func;
22031
  } fn_data = { fn };
22032
  auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat {
22033
    auto *data = static_cast<struct fn_data *>(arg_1);
22034
    auto ret = (data->func)(manage(arg_0));
22035
    return ret.release();
22036
  };
22037
  auto res = isl_union_set_foreach_set(get(), fn_lambda, &fn_data);
22038
  return manage(res);
22039
}
22040
 
22041
isl::union_set union_set::gist(isl::union_set context) const
22042
{
22043
  auto res = isl_union_set_gist(copy(), context.release());
22044
  return manage(res);
22045
}
22046
 
22047
isl::union_set union_set::gist_params(isl::set set) const
22048
{
22049
  auto res = isl_union_set_gist_params(copy(), set.release());
22050
  return manage(res);
22051
}
22052
 
22053
isl::union_map union_set::identity() const
22054
{
22055
  auto res = isl_union_set_identity(copy());
22056
  return manage(res);
22057
}
22058
 
22059
isl::union_pw_multi_aff union_set::identity_union_pw_multi_aff() const
22060
{
22061
  auto res = isl_union_set_identity_union_pw_multi_aff(copy());
22062
  return manage(res);
22063
}
22064
 
22065
isl::union_set union_set::intersect(isl::union_set uset2) const
22066
{
22067
  auto res = isl_union_set_intersect(copy(), uset2.release());
22068
  return manage(res);
22069
}
22070
 
22071
isl::union_set union_set::intersect_params(isl::set set) const
22072
{
22073
  auto res = isl_union_set_intersect_params(copy(), set.release());
22074
  return manage(res);
22075
}
22076
 
22077
boolean union_set::is_disjoint(const isl::union_set &uset2) const
22078
{
22079
  auto res = isl_union_set_is_disjoint(get(), uset2.get());
22080
  return manage(res);
22081
}
22082
 
22083
boolean union_set::is_empty() const
22084
{
22085
  auto res = isl_union_set_is_empty(get());
22086
  return manage(res);
22087
}
22088
 
22089
boolean union_set::is_equal(const isl::union_set &uset2) const
22090
{
22091
  auto res = isl_union_set_is_equal(get(), uset2.get());
22092
  return manage(res);
22093
}
22094
 
22095
boolean union_set::is_strict_subset(const isl::union_set &uset2) const
22096
{
22097
  auto res = isl_union_set_is_strict_subset(get(), uset2.get());
22098
  return manage(res);
22099
}
22100
 
22101
boolean union_set::is_subset(const isl::union_set &uset2) const
22102
{
22103
  auto res = isl_union_set_is_subset(get(), uset2.get());
22104
  return manage(res);
22105
}
22106
 
22107
boolean union_set::isa_set() const
22108
{
22109
  auto res = isl_union_set_isa_set(get());
22110
  return manage(res);
22111
}
22112
 
22113
isl::union_set union_set::lexmax() const
22114
{
22115
  auto res = isl_union_set_lexmax(copy());
22116
  return manage(res);
22117
}
22118
 
22119
isl::union_set union_set::lexmin() const
22120
{
22121
  auto res = isl_union_set_lexmin(copy());
22122
  return manage(res);
22123
}
22124
 
22125
isl::set union_set::params() const
22126
{
22127
  auto res = isl_union_set_params(copy());
22128
  return manage(res);
22129
}
22130
 
22131
isl::union_set union_set::polyhedral_hull() const
22132
{
22133
  auto res = isl_union_set_polyhedral_hull(copy());
22134
  return manage(res);
22135
}
22136
 
22137
isl::union_set union_set::preimage(isl::multi_aff ma) const
22138
{
22139
  auto res = isl_union_set_preimage_multi_aff(copy(), ma.release());
22140
  return manage(res);
22141
}
22142
 
22143
isl::union_set union_set::preimage(isl::pw_multi_aff pma) const
22144
{
22145
  auto res = isl_union_set_preimage_pw_multi_aff(copy(), pma.release());
22146
  return manage(res);
22147
}
22148
 
22149
isl::union_set union_set::preimage(isl::union_pw_multi_aff upma) const
22150
{
22151
  auto res = isl_union_set_preimage_union_pw_multi_aff(copy(), upma.release());
22152
  return manage(res);
22153
}
22154
 
22155
isl::point union_set::sample_point() const
22156
{
22157
  auto res = isl_union_set_sample_point(copy());
22158
  return manage(res);
22159
}
22160
 
22161
isl::set_list union_set::set_list() const
22162
{
22163
  auto res = isl_union_set_get_set_list(get());
22164
  return manage(res);
22165
}
22166
 
22167
isl::set_list union_set::get_set_list() const
22168
{
22169
  return set_list();
22170
}
22171
 
22172
isl::space union_set::space() const
22173
{
22174
  auto res = isl_union_set_get_space(get());
22175
  return manage(res);
22176
}
22177
 
22178
isl::space union_set::get_space() const
22179
{
22180
  return space();
22181
}
22182
 
22183
isl::union_set union_set::subtract(isl::union_set uset2) const
22184
{
22185
  auto res = isl_union_set_subtract(copy(), uset2.release());
22186
  return manage(res);
22187
}
22188
 
22189
isl::union_set_list union_set::to_list() const
22190
{
22191
  auto res = isl_union_set_to_list(copy());
22192
  return manage(res);
22193
}
22194
 
22195
isl::union_set union_set::unite(isl::union_set uset2) const
22196
{
22197
  auto res = isl_union_set_union(copy(), uset2.release());
22198
  return manage(res);
22199
}
22200
 
22201
isl::union_set union_set::universe() const
22202
{
22203
  auto res = isl_union_set_universe(copy());
22204
  return manage(res);
22205
}
22206
 
22207
isl::union_map union_set::unwrap() const
22208
{
22209
  auto res = isl_union_set_unwrap(copy());
22210
  return manage(res);
22211
}
22212
 
22213
inline std::ostream &operator<<(std::ostream &os, const union_set &obj)
22214
{
22215
  char *str = isl_union_set_to_str(obj.get());
22216
  if (!str) {
22217
    os.setstate(std::ios_base::badbit);
22218
    return os;
22219
  }
22220
  os << str;
22221
  free(str);
22222
  return os;
22223
}
22224
 
22225
// implementations for isl::union_set_list
22226
union_set_list manage(__isl_take isl_union_set_list *ptr) {
22227
  return union_set_list(ptr);
22228
}
22229
union_set_list manage_copy(__isl_keep isl_union_set_list *ptr) {
22230
  ptr = isl_union_set_list_copy(ptr);
22231
  return union_set_list(ptr);
22232
}
22233
 
22234
union_set_list::union_set_list()
22235
    : ptr(nullptr) {}
22236
 
22237
union_set_list::union_set_list(const union_set_list &obj)
22238
    : ptr(nullptr)
22239
{
22240
  ptr = obj.copy();
22241
}
22242
 
22243
union_set_list::union_set_list(__isl_take isl_union_set_list *ptr)
22244
    : ptr(ptr) {}
22245
 
22246
union_set_list::union_set_list(isl::ctx ctx, int n)
22247
{
22248
  auto res = isl_union_set_list_alloc(ctx.release(), n);
22249
  ptr = res;
22250
}
22251
 
22252
union_set_list::union_set_list(isl::union_set el)
22253
{
22254
  auto res = isl_union_set_list_from_union_set(el.release());
22255
  ptr = res;
22256
}
22257
 
22258
union_set_list::union_set_list(isl::ctx ctx, const std::string &str)
22259
{
22260
  auto res = isl_union_set_list_read_from_str(ctx.release(), str.c_str());
22261
  ptr = res;
22262
}
22263
 
22264
union_set_list &union_set_list::operator=(union_set_list obj) {
22265
  std::swap(this->ptr, obj.ptr);
22266
  return *this;
22267
}
22268
 
22269
union_set_list::~union_set_list() {
22270
  if (ptr)
22271
    isl_union_set_list_free(ptr);
22272
}
22273
 
22274
__isl_give isl_union_set_list *union_set_list::copy() const & {
22275
  return isl_union_set_list_copy(ptr);
22276
}
22277
 
22278
__isl_keep isl_union_set_list *union_set_list::get() const {
22279
  return ptr;
22280
}
22281
 
22282
__isl_give isl_union_set_list *union_set_list::release() {
22283
  isl_union_set_list *tmp = ptr;
22284
  ptr = nullptr;
22285
  return tmp;
22286
}
22287
 
22288
bool union_set_list::is_null() const {
22289
  return ptr == nullptr;
22290
}
22291
 
22292
isl::ctx union_set_list::ctx() const {
22293
  return isl::ctx(isl_union_set_list_get_ctx(ptr));
22294
}
22295
 
22296
isl::union_set_list union_set_list::add(isl::union_set el) const
22297
{
22298
  auto res = isl_union_set_list_add(copy(), el.release());
22299
  return manage(res);
22300
}
22301
 
22302
isl::union_set union_set_list::at(int index) const
22303
{
22304
  auto res = isl_union_set_list_get_at(get(), index);
22305
  return manage(res);
22306
}
22307
 
22308
isl::union_set union_set_list::get_at(int index) const
22309
{
22310
  return at(index);
22311
}
22312
 
22313
isl::union_set_list union_set_list::clear() const
22314
{
22315
  auto res = isl_union_set_list_clear(copy());
22316
  return manage(res);
22317
}
22318
 
22319
isl::union_set_list union_set_list::concat(isl::union_set_list list2) const
22320
{
22321
  auto res = isl_union_set_list_concat(copy(), list2.release());
22322
  return manage(res);
22323
}
22324
 
22325
isl::union_set_list union_set_list::drop(unsigned int first, unsigned int n) const
22326
{
22327
  auto res = isl_union_set_list_drop(copy(), first, n);
22328
  return manage(res);
22329
}
22330
 
22331
stat union_set_list::foreach(const std::function<stat(isl::union_set)> &fn) const
22332
{
22333
  struct fn_data {
22334
    std::function<stat(isl::union_set)> func;
22335
  } fn_data = { fn };
22336
  auto fn_lambda = [](isl_union_set *arg_0, void *arg_1) -> isl_stat {
22337
    auto *data = static_cast<struct fn_data *>(arg_1);
22338
    auto ret = (data->func)(manage(arg_0));
22339
    return ret.release();
22340
  };
22341
  auto res = isl_union_set_list_foreach(get(), fn_lambda, &fn_data);
22342
  return manage(res);
22343
}
22344
 
22345
isl::union_set_list union_set_list::insert(unsigned int pos, isl::union_set el) const
22346
{
22347
  auto res = isl_union_set_list_insert(copy(), pos, el.release());
22348
  return manage(res);
22349
}
22350
 
22351
class size union_set_list::size() const
22352
{
22353
  auto res = isl_union_set_list_size(get());
22354
  return manage(res);
22355
}
22356
 
22357
inline std::ostream &operator<<(std::ostream &os, const union_set_list &obj)
22358
{
22359
  char *str = isl_union_set_list_to_str(obj.get());
22360
  if (!str) {
22361
    os.setstate(std::ios_base::badbit);
22362
    return os;
22363
  }
22364
  os << str;
22365
  free(str);
22366
  return os;
22367
}
22368
 
22369
// implementations for isl::val
22370
val manage(__isl_take isl_val *ptr) {
22371
  return val(ptr);
22372
}
22373
val manage_copy(__isl_keep isl_val *ptr) {
22374
  ptr = isl_val_copy(ptr);
22375
  return val(ptr);
22376
}
22377
 
22378
val::val()
22379
    : ptr(nullptr) {}
22380
 
22381
val::val(const val &obj)
22382
    : ptr(nullptr)
22383
{
22384
  ptr = obj.copy();
22385
}
22386
 
22387
val::val(__isl_take isl_val *ptr)
22388
    : ptr(ptr) {}
22389
 
22390
val::val(isl::ctx ctx, long i)
22391
{
22392
  auto res = isl_val_int_from_si(ctx.release(), i);
22393
  ptr = res;
22394
}
22395
 
22396
val::val(isl::ctx ctx, const std::string &str)
22397
{
22398
  auto res = isl_val_read_from_str(ctx.release(), str.c_str());
22399
  ptr = res;
22400
}
22401
 
22402
val &val::operator=(val obj) {
22403
  std::swap(this->ptr, obj.ptr);
22404
  return *this;
22405
}
22406
 
22407
val::~val() {
22408
  if (ptr)
22409
    isl_val_free(ptr);
22410
}
22411
 
22412
__isl_give isl_val *val::copy() const & {
22413
  return isl_val_copy(ptr);
22414
}
22415
 
22416
__isl_keep isl_val *val::get() const {
22417
  return ptr;
22418
}
22419
 
22420
__isl_give isl_val *val::release() {
22421
  isl_val *tmp = ptr;
22422
  ptr = nullptr;
22423
  return tmp;
22424
}
22425
 
22426
bool val::is_null() const {
22427
  return ptr == nullptr;
22428
}
22429
 
22430
isl::ctx val::ctx() const {
22431
  return isl::ctx(isl_val_get_ctx(ptr));
22432
}
22433
 
22434
isl::val val::abs() const
22435
{
22436
  auto res = isl_val_abs(copy());
22437
  return manage(res);
22438
}
22439
 
22440
boolean val::abs_eq(const isl::val &v2) const
22441
{
22442
  auto res = isl_val_abs_eq(get(), v2.get());
22443
  return manage(res);
22444
}
22445
 
22446
boolean val::abs_eq(long v2) const
22447
{
22448
  return this->abs_eq(isl::val(ctx(), v2));
22449
}
22450
 
22451
isl::val val::add(isl::val v2) const
22452
{
22453
  auto res = isl_val_add(copy(), v2.release());
22454
  return manage(res);
22455
}
22456
 
22457
isl::val val::add(long v2) const
22458
{
22459
  return this->add(isl::val(ctx(), v2));
22460
}
22461
 
22462
isl::val val::ceil() const
22463
{
22464
  auto res = isl_val_ceil(copy());
22465
  return manage(res);
22466
}
22467
 
22468
int val::cmp_si(long i) const
22469
{
22470
  auto res = isl_val_cmp_si(get(), i);
22471
  return res;
22472
}
22473
 
22474
long val::den_si() const
22475
{
22476
  auto res = isl_val_get_den_si(get());
22477
  return res;
22478
}
22479
 
22480
long val::get_den_si() const
22481
{
22482
  return den_si();
22483
}
22484
 
22485
isl::val val::div(isl::val v2) const
22486
{
22487
  auto res = isl_val_div(copy(), v2.release());
22488
  return manage(res);
22489
}
22490
 
22491
isl::val val::div(long v2) const
22492
{
22493
  return this->div(isl::val(ctx(), v2));
22494
}
22495
 
22496
boolean val::eq(const isl::val &v2) const
22497
{
22498
  auto res = isl_val_eq(get(), v2.get());
22499
  return manage(res);
22500
}
22501
 
22502
boolean val::eq(long v2) const
22503
{
22504
  return this->eq(isl::val(ctx(), v2));
22505
}
22506
 
22507
isl::val val::floor() const
22508
{
22509
  auto res = isl_val_floor(copy());
22510
  return manage(res);
22511
}
22512
 
22513
isl::val val::gcd(isl::val v2) const
22514
{
22515
  auto res = isl_val_gcd(copy(), v2.release());
22516
  return manage(res);
22517
}
22518
 
22519
isl::val val::gcd(long v2) const
22520
{
22521
  return this->gcd(isl::val(ctx(), v2));
22522
}
22523
 
22524
boolean val::ge(const isl::val &v2) const
22525
{
22526
  auto res = isl_val_ge(get(), v2.get());
22527
  return manage(res);
22528
}
22529
 
22530
boolean val::ge(long v2) const
22531
{
22532
  return this->ge(isl::val(ctx(), v2));
22533
}
22534
 
22535
boolean val::gt(const isl::val &v2) const
22536
{
22537
  auto res = isl_val_gt(get(), v2.get());
22538
  return manage(res);
22539
}
22540
 
22541
boolean val::gt(long v2) const
22542
{
22543
  return this->gt(isl::val(ctx(), v2));
22544
}
22545
 
22546
isl::val val::infty(isl::ctx ctx)
22547
{
22548
  auto res = isl_val_infty(ctx.release());
22549
  return manage(res);
22550
}
22551
 
22552
isl::val val::int_from_ui(isl::ctx ctx, unsigned long u)
22553
{
22554
  auto res = isl_val_int_from_ui(ctx.release(), u);
22555
  return manage(res);
22556
}
22557
 
22558
isl::val val::inv() const
22559
{
22560
  auto res = isl_val_inv(copy());
22561
  return manage(res);
22562
}
22563
 
22564
boolean val::is_divisible_by(const isl::val &v2) const
22565
{
22566
  auto res = isl_val_is_divisible_by(get(), v2.get());
22567
  return manage(res);
22568
}
22569
 
22570
boolean val::is_divisible_by(long v2) const
22571
{
22572
  return this->is_divisible_by(isl::val(ctx(), v2));
22573
}
22574
 
22575
boolean val::is_infty() const
22576
{
22577
  auto res = isl_val_is_infty(get());
22578
  return manage(res);
22579
}
22580
 
22581
boolean val::is_int() const
22582
{
22583
  auto res = isl_val_is_int(get());
22584
  return manage(res);
22585
}
22586
 
22587
boolean val::is_nan() const
22588
{
22589
  auto res = isl_val_is_nan(get());
22590
  return manage(res);
22591
}
22592
 
22593
boolean val::is_neg() const
22594
{
22595
  auto res = isl_val_is_neg(get());
22596
  return manage(res);
22597
}
22598
 
22599
boolean val::is_neginfty() const
22600
{
22601
  auto res = isl_val_is_neginfty(get());
22602
  return manage(res);
22603
}
22604
 
22605
boolean val::is_negone() const
22606
{
22607
  auto res = isl_val_is_negone(get());
22608
  return manage(res);
22609
}
22610
 
22611
boolean val::is_nonneg() const
22612
{
22613
  auto res = isl_val_is_nonneg(get());
22614
  return manage(res);
22615
}
22616
 
22617
boolean val::is_nonpos() const
22618
{
22619
  auto res = isl_val_is_nonpos(get());
22620
  return manage(res);
22621
}
22622
 
22623
boolean val::is_one() const
22624
{
22625
  auto res = isl_val_is_one(get());
22626
  return manage(res);
22627
}
22628
 
22629
boolean val::is_pos() const
22630
{
22631
  auto res = isl_val_is_pos(get());
22632
  return manage(res);
22633
}
22634
 
22635
boolean val::is_rat() const
22636
{
22637
  auto res = isl_val_is_rat(get());
22638
  return manage(res);
22639
}
22640
 
22641
boolean val::is_zero() const
22642
{
22643
  auto res = isl_val_is_zero(get());
22644
  return manage(res);
22645
}
22646
 
22647
boolean val::le(const isl::val &v2) const
22648
{
22649
  auto res = isl_val_le(get(), v2.get());
22650
  return manage(res);
22651
}
22652
 
22653
boolean val::le(long v2) const
22654
{
22655
  return this->le(isl::val(ctx(), v2));
22656
}
22657
 
22658
boolean val::lt(const isl::val &v2) const
22659
{
22660
  auto res = isl_val_lt(get(), v2.get());
22661
  return manage(res);
22662
}
22663
 
22664
boolean val::lt(long v2) const
22665
{
22666
  return this->lt(isl::val(ctx(), v2));
22667
}
22668
 
22669
isl::val val::max(isl::val v2) const
22670
{
22671
  auto res = isl_val_max(copy(), v2.release());
22672
  return manage(res);
22673
}
22674
 
22675
isl::val val::max(long v2) const
22676
{
22677
  return this->max(isl::val(ctx(), v2));
22678
}
22679
 
22680
isl::val val::min(isl::val v2) const
22681
{
22682
  auto res = isl_val_min(copy(), v2.release());
22683
  return manage(res);
22684
}
22685
 
22686
isl::val val::min(long v2) const
22687
{
22688
  return this->min(isl::val(ctx(), v2));
22689
}
22690
 
22691
isl::val val::mod(isl::val v2) const
22692
{
22693
  auto res = isl_val_mod(copy(), v2.release());
22694
  return manage(res);
22695
}
22696
 
22697
isl::val val::mod(long v2) const
22698
{
22699
  return this->mod(isl::val(ctx(), v2));
22700
}
22701
 
22702
isl::val val::mul(isl::val v2) const
22703
{
22704
  auto res = isl_val_mul(copy(), v2.release());
22705
  return manage(res);
22706
}
22707
 
22708
isl::val val::mul(long v2) const
22709
{
22710
  return this->mul(isl::val(ctx(), v2));
22711
}
22712
 
22713
isl::val val::nan(isl::ctx ctx)
22714
{
22715
  auto res = isl_val_nan(ctx.release());
22716
  return manage(res);
22717
}
22718
 
22719
boolean val::ne(const isl::val &v2) const
22720
{
22721
  auto res = isl_val_ne(get(), v2.get());
22722
  return manage(res);
22723
}
22724
 
22725
boolean val::ne(long v2) const
22726
{
22727
  return this->ne(isl::val(ctx(), v2));
22728
}
22729
 
22730
isl::val val::neg() const
22731
{
22732
  auto res = isl_val_neg(copy());
22733
  return manage(res);
22734
}
22735
 
22736
isl::val val::neginfty(isl::ctx ctx)
22737
{
22738
  auto res = isl_val_neginfty(ctx.release());
22739
  return manage(res);
22740
}
22741
 
22742
isl::val val::negone(isl::ctx ctx)
22743
{
22744
  auto res = isl_val_negone(ctx.release());
22745
  return manage(res);
22746
}
22747
 
22748
long val::num_si() const
22749
{
22750
  auto res = isl_val_get_num_si(get());
22751
  return res;
22752
}
22753
 
22754
long val::get_num_si() const
22755
{
22756
  return num_si();
22757
}
22758
 
22759
isl::val val::one(isl::ctx ctx)
22760
{
22761
  auto res = isl_val_one(ctx.release());
22762
  return manage(res);
22763
}
22764
 
22765
isl::val val::pow2() const
22766
{
22767
  auto res = isl_val_pow2(copy());
22768
  return manage(res);
22769
}
22770
 
22771
int val::sgn() const
22772
{
22773
  auto res = isl_val_sgn(get());
22774
  return res;
22775
}
22776
 
22777
isl::val val::sub(isl::val v2) const
22778
{
22779
  auto res = isl_val_sub(copy(), v2.release());
22780
  return manage(res);
22781
}
22782
 
22783
isl::val val::sub(long v2) const
22784
{
22785
  return this->sub(isl::val(ctx(), v2));
22786
}
22787
 
22788
isl::val_list val::to_list() const
22789
{
22790
  auto res = isl_val_to_list(copy());
22791
  return manage(res);
22792
}
22793
 
22794
isl::val val::trunc() const
22795
{
22796
  auto res = isl_val_trunc(copy());
22797
  return manage(res);
22798
}
22799
 
22800
isl::val val::zero(isl::ctx ctx)
22801
{
22802
  auto res = isl_val_zero(ctx.release());
22803
  return manage(res);
22804
}
22805
 
22806
inline std::ostream &operator<<(std::ostream &os, const val &obj)
22807
{
22808
  char *str = isl_val_to_str(obj.get());
22809
  if (!str) {
22810
    os.setstate(std::ios_base::badbit);
22811
    return os;
22812
  }
22813
  os << str;
22814
  free(str);
22815
  return os;
22816
}
22817
 
22818
// implementations for isl::val_list
22819
val_list manage(__isl_take isl_val_list *ptr) {
22820
  return val_list(ptr);
22821
}
22822
val_list manage_copy(__isl_keep isl_val_list *ptr) {
22823
  ptr = isl_val_list_copy(ptr);
22824
  return val_list(ptr);
22825
}
22826
 
22827
val_list::val_list()
22828
    : ptr(nullptr) {}
22829
 
22830
val_list::val_list(const val_list &obj)
22831
    : ptr(nullptr)
22832
{
22833
  ptr = obj.copy();
22834
}
22835
 
22836
val_list::val_list(__isl_take isl_val_list *ptr)
22837
    : ptr(ptr) {}
22838
 
22839
val_list::val_list(isl::ctx ctx, int n)
22840
{
22841
  auto res = isl_val_list_alloc(ctx.release(), n);
22842
  ptr = res;
22843
}
22844
 
22845
val_list::val_list(isl::val el)
22846
{
22847
  auto res = isl_val_list_from_val(el.release());
22848
  ptr = res;
22849
}
22850
 
22851
val_list::val_list(isl::ctx ctx, const std::string &str)
22852
{
22853
  auto res = isl_val_list_read_from_str(ctx.release(), str.c_str());
22854
  ptr = res;
22855
}
22856
 
22857
val_list &val_list::operator=(val_list obj) {
22858
  std::swap(this->ptr, obj.ptr);
22859
  return *this;
22860
}
22861
 
22862
val_list::~val_list() {
22863
  if (ptr)
22864
    isl_val_list_free(ptr);
22865
}
22866
 
22867
__isl_give isl_val_list *val_list::copy() const & {
22868
  return isl_val_list_copy(ptr);
22869
}
22870
 
22871
__isl_keep isl_val_list *val_list::get() const {
22872
  return ptr;
22873
}
22874
 
22875
__isl_give isl_val_list *val_list::release() {
22876
  isl_val_list *tmp = ptr;
22877
  ptr = nullptr;
22878
  return tmp;
22879
}
22880
 
22881
bool val_list::is_null() const {
22882
  return ptr == nullptr;
22883
}
22884
 
22885
isl::ctx val_list::ctx() const {
22886
  return isl::ctx(isl_val_list_get_ctx(ptr));
22887
}
22888
 
22889
isl::val_list val_list::add(isl::val el) const
22890
{
22891
  auto res = isl_val_list_add(copy(), el.release());
22892
  return manage(res);
22893
}
22894
 
22895
isl::val_list val_list::add(long el) const
22896
{
22897
  return this->add(isl::val(ctx(), el));
22898
}
22899
 
22900
isl::val val_list::at(int index) const
22901
{
22902
  auto res = isl_val_list_get_at(get(), index);
22903
  return manage(res);
22904
}
22905
 
22906
isl::val val_list::get_at(int index) const
22907
{
22908
  return at(index);
22909
}
22910
 
22911
isl::val_list val_list::clear() const
22912
{
22913
  auto res = isl_val_list_clear(copy());
22914
  return manage(res);
22915
}
22916
 
22917
isl::val_list val_list::concat(isl::val_list list2) const
22918
{
22919
  auto res = isl_val_list_concat(copy(), list2.release());
22920
  return manage(res);
22921
}
22922
 
22923
isl::val_list val_list::drop(unsigned int first, unsigned int n) const
22924
{
22925
  auto res = isl_val_list_drop(copy(), first, n);
22926
  return manage(res);
22927
}
22928
 
22929
stat val_list::foreach(const std::function<stat(isl::val)> &fn) const
22930
{
22931
  struct fn_data {
22932
    std::function<stat(isl::val)> func;
22933
  } fn_data = { fn };
22934
  auto fn_lambda = [](isl_val *arg_0, void *arg_1) -> isl_stat {
22935
    auto *data = static_cast<struct fn_data *>(arg_1);
22936
    auto ret = (data->func)(manage(arg_0));
22937
    return ret.release();
22938
  };
22939
  auto res = isl_val_list_foreach(get(), fn_lambda, &fn_data);
22940
  return manage(res);
22941
}
22942
 
22943
isl::val_list val_list::insert(unsigned int pos, isl::val el) const
22944
{
22945
  auto res = isl_val_list_insert(copy(), pos, el.release());
22946
  return manage(res);
22947
}
22948
 
22949
isl::val_list val_list::insert(unsigned int pos, long el) const
22950
{
22951
  return this->insert(pos, isl::val(ctx(), el));
22952
}
22953
 
22954
class size val_list::size() const
22955
{
22956
  auto res = isl_val_list_size(get());
22957
  return manage(res);
22958
}
22959
 
22960
inline std::ostream &operator<<(std::ostream &os, const val_list &obj)
22961
{
22962
  char *str = isl_val_list_to_str(obj.get());
22963
  if (!str) {
22964
    os.setstate(std::ios_base::badbit);
22965
    return os;
22966
  }
22967
  os << str;
22968
  free(str);
22969
  return os;
22970
}
22971
} // namespace isl
22972
 
22973
#endif /* ISL_CPP_CHECKED */