1use super::{
5 Aff, BasicSet, BasicSetList, Constraint, Context, DimType, Error, FixedBox, Id, IdList,
6 LibISLError, Map, MultiAff, MultiId, MultiPwAff, MultiVal, Point, PwAff, PwMultiAff, SetList,
7 Space, StrideInfo, UnionSet, Val,
8};
9use libc::uintptr_t;
10use std::ffi::{CStr, CString};
11use std::os::raw::c_char;
12
13pub struct Set {
15 pub ptr: uintptr_t,
16 pub should_free_on_drop: bool,
17}
18
19extern "C" {
20
21 fn isl_set_add_constraint(set: uintptr_t, constraint: uintptr_t) -> uintptr_t;
22
23 fn isl_set_add_dims(set: uintptr_t, type_: i32, n: u32) -> uintptr_t;
24
25 fn isl_set_affine_hull(set: uintptr_t) -> uintptr_t;
26
27 fn isl_set_align_divs(set: uintptr_t) -> uintptr_t;
28
29 fn isl_set_align_params(set: uintptr_t, model: uintptr_t) -> uintptr_t;
30
31 fn isl_set_apply(set: uintptr_t, map: uintptr_t) -> uintptr_t;
32
33 fn isl_set_as_pw_multi_aff(set: uintptr_t) -> uintptr_t;
34
35 fn isl_set_bind(set: uintptr_t, tuple: uintptr_t) -> uintptr_t;
36
37 fn isl_set_bounded_simple_hull(set: uintptr_t) -> uintptr_t;
38
39 fn isl_set_box_from_points(pnt1: uintptr_t, pnt2: uintptr_t) -> uintptr_t;
40
41 fn isl_set_coalesce(set: uintptr_t) -> uintptr_t;
42
43 fn isl_set_coefficients(set: uintptr_t) -> uintptr_t;
44
45 fn isl_set_complement(set: uintptr_t) -> uintptr_t;
46
47 fn isl_set_compute_divs(set: uintptr_t) -> uintptr_t;
48
49 fn isl_set_convex_hull(set: uintptr_t) -> uintptr_t;
50
51 fn isl_set_copy(set: uintptr_t) -> uintptr_t;
52
53 fn isl_set_count_val(set: uintptr_t) -> uintptr_t;
54
55 fn isl_set_detect_equalities(set: uintptr_t) -> uintptr_t;
56
57 fn isl_set_dim(set: uintptr_t, type_: i32) -> i32;
58
59 fn isl_set_dim_has_any_lower_bound(set: uintptr_t, type_: i32, pos: u32) -> i32;
60
61 fn isl_set_dim_has_any_upper_bound(set: uintptr_t, type_: i32, pos: u32) -> i32;
62
63 fn isl_set_dim_has_lower_bound(set: uintptr_t, type_: i32, pos: u32) -> i32;
64
65 fn isl_set_dim_has_upper_bound(set: uintptr_t, type_: i32, pos: u32) -> i32;
66
67 fn isl_set_dim_is_bounded(set: uintptr_t, type_: i32, pos: u32) -> i32;
68
69 fn isl_set_dim_max(set: uintptr_t, pos: i32) -> uintptr_t;
70
71 fn isl_set_dim_max_val(set: uintptr_t, pos: i32) -> uintptr_t;
72
73 fn isl_set_dim_min(set: uintptr_t, pos: i32) -> uintptr_t;
74
75 fn isl_set_dim_min_val(set: uintptr_t, pos: i32) -> uintptr_t;
76
77 fn isl_set_drop_constraints_involving_dims(set: uintptr_t, type_: i32, first: u32, n: u32)
78 -> uintptr_t;
79
80 fn isl_set_drop_constraints_not_involving_dims(set: uintptr_t, type_: i32, first: u32, n: u32)
81 -> uintptr_t;
82
83 fn isl_set_drop_unused_params(set: uintptr_t) -> uintptr_t;
84
85 fn isl_set_dump(set: uintptr_t) -> ();
86
87 fn isl_set_eliminate(set: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
88
89 fn isl_set_eliminate_dims(set: uintptr_t, first: u32, n: u32) -> uintptr_t;
90
91 fn isl_set_empty(space: uintptr_t) -> uintptr_t;
92
93 fn isl_set_equate(set: uintptr_t, type1: i32, pos1: i32, type2: i32, pos2: i32) -> uintptr_t;
94
95 fn isl_set_find_dim_by_id(set: uintptr_t, type_: i32, id: uintptr_t) -> i32;
96
97 fn isl_set_find_dim_by_name(set: uintptr_t, type_: i32, name: *const c_char) -> i32;
98
99 fn isl_set_fix_dim_si(set: uintptr_t, dim: u32, value: i32) -> uintptr_t;
100
101 fn isl_set_fix_si(set: uintptr_t, type_: i32, pos: u32, value: i32) -> uintptr_t;
102
103 fn isl_set_fix_val(set: uintptr_t, type_: i32, pos: u32, v: uintptr_t) -> uintptr_t;
104
105 fn isl_set_flat_product(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
106
107 fn isl_set_flatten(set: uintptr_t) -> uintptr_t;
108
109 fn isl_set_flatten_map(set: uintptr_t) -> uintptr_t;
110
111 fn isl_set_follows_at(set1: uintptr_t, set2: uintptr_t, pos: i32) -> i32;
112
113 fn isl_set_free(set: uintptr_t) -> uintptr_t;
114
115 fn isl_set_from_basic_set(bset: uintptr_t) -> uintptr_t;
116
117 fn isl_set_from_multi_aff(ma: uintptr_t) -> uintptr_t;
118
119 fn isl_set_from_multi_pw_aff(mpa: uintptr_t) -> uintptr_t;
120
121 fn isl_set_from_params(set: uintptr_t) -> uintptr_t;
122
123 fn isl_set_from_point(pnt: uintptr_t) -> uintptr_t;
124
125 fn isl_set_from_pw_aff(pwaff: uintptr_t) -> uintptr_t;
126
127 fn isl_set_from_pw_multi_aff(pma: uintptr_t) -> uintptr_t;
128
129 fn isl_set_from_union_set(uset: uintptr_t) -> uintptr_t;
130
131 fn isl_set_get_basic_set_list(set: uintptr_t) -> uintptr_t;
132
133 fn isl_set_get_ctx(set: uintptr_t) -> uintptr_t;
134
135 fn isl_set_get_dim_id(set: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
136
137 fn isl_set_get_dim_name(set: uintptr_t, type_: i32, pos: u32) -> *const c_char;
138
139 fn isl_set_get_hash(set: uintptr_t) -> u32;
140
141 fn isl_set_get_lattice_tile(set: uintptr_t) -> uintptr_t;
142
143 fn isl_set_get_plain_multi_val_if_fixed(set: uintptr_t) -> uintptr_t;
144
145 fn isl_set_get_simple_fixed_box_hull(set: uintptr_t) -> uintptr_t;
146
147 fn isl_set_get_space(set: uintptr_t) -> uintptr_t;
148
149 fn isl_set_get_stride(set: uintptr_t, pos: i32) -> uintptr_t;
150
151 fn isl_set_get_stride_info(set: uintptr_t, pos: i32) -> uintptr_t;
152
153 fn isl_set_get_tuple_id(set: uintptr_t) -> uintptr_t;
154
155 fn isl_set_get_tuple_name(set: uintptr_t) -> *const c_char;
156
157 fn isl_set_gist(set: uintptr_t, context: uintptr_t) -> uintptr_t;
158
159 fn isl_set_gist_basic_set(set: uintptr_t, context: uintptr_t) -> uintptr_t;
160
161 fn isl_set_gist_params(set: uintptr_t, context: uintptr_t) -> uintptr_t;
162
163 fn isl_set_has_dim_id(set: uintptr_t, type_: i32, pos: u32) -> i32;
164
165 fn isl_set_has_dim_name(set: uintptr_t, type_: i32, pos: u32) -> i32;
166
167 fn isl_set_has_equal_space(set1: uintptr_t, set2: uintptr_t) -> i32;
168
169 fn isl_set_has_tuple_id(set: uintptr_t) -> i32;
170
171 fn isl_set_has_tuple_name(set: uintptr_t) -> i32;
172
173 fn isl_set_identity(set: uintptr_t) -> uintptr_t;
174
175 fn isl_set_indicator_function(set: uintptr_t) -> uintptr_t;
176
177 fn isl_set_insert_dims(set: uintptr_t, type_: i32, pos: u32, n: u32) -> uintptr_t;
178
179 fn isl_set_insert_domain(set: uintptr_t, domain: uintptr_t) -> uintptr_t;
180
181 fn isl_set_intersect(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
182
183 fn isl_set_intersect_factor_domain(set: uintptr_t, domain: uintptr_t) -> uintptr_t;
184
185 fn isl_set_intersect_factor_range(set: uintptr_t, range: uintptr_t) -> uintptr_t;
186
187 fn isl_set_intersect_params(set: uintptr_t, params: uintptr_t) -> uintptr_t;
188
189 fn isl_set_involves_dims(set: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
190
191 fn isl_set_involves_locals(set: uintptr_t) -> i32;
192
193 fn isl_set_is_bounded(set: uintptr_t) -> i32;
194
195 fn isl_set_is_box(set: uintptr_t) -> i32;
196
197 fn isl_set_is_disjoint(set1: uintptr_t, set2: uintptr_t) -> i32;
198
199 fn isl_set_is_empty(set: uintptr_t) -> i32;
200
201 fn isl_set_is_equal(set1: uintptr_t, set2: uintptr_t) -> i32;
202
203 fn isl_set_is_params(set: uintptr_t) -> i32;
204
205 fn isl_set_is_singleton(set: uintptr_t) -> i32;
206
207 fn isl_set_is_strict_subset(set1: uintptr_t, set2: uintptr_t) -> i32;
208
209 fn isl_set_is_subset(set1: uintptr_t, set2: uintptr_t) -> i32;
210
211 fn isl_set_is_wrapping(set: uintptr_t) -> i32;
212
213 fn isl_set_lex_ge_set(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
214
215 fn isl_set_lex_gt_set(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
216
217 fn isl_set_lex_le_set(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
218
219 fn isl_set_lex_lt_set(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
220
221 fn isl_set_lexmax(set: uintptr_t) -> uintptr_t;
222
223 fn isl_set_lexmax_pw_multi_aff(set: uintptr_t) -> uintptr_t;
224
225 fn isl_set_lexmin(set: uintptr_t) -> uintptr_t;
226
227 fn isl_set_lexmin_pw_multi_aff(set: uintptr_t) -> uintptr_t;
228
229 fn isl_set_lift(set: uintptr_t) -> uintptr_t;
230
231 fn isl_set_lower_bound_multi_pw_aff(set: uintptr_t, lower: uintptr_t) -> uintptr_t;
232
233 fn isl_set_lower_bound_multi_val(set: uintptr_t, lower: uintptr_t) -> uintptr_t;
234
235 fn isl_set_lower_bound_si(set: uintptr_t, type_: i32, pos: u32, value: i32) -> uintptr_t;
236
237 fn isl_set_lower_bound_val(set: uintptr_t, type_: i32, pos: u32, value: uintptr_t)
238 -> uintptr_t;
239
240 fn isl_set_make_disjoint(set: uintptr_t) -> uintptr_t;
241
242 fn isl_set_max_multi_pw_aff(set: uintptr_t) -> uintptr_t;
243
244 fn isl_set_max_val(set: uintptr_t, obj: uintptr_t) -> uintptr_t;
245
246 fn isl_set_min_multi_pw_aff(set: uintptr_t) -> uintptr_t;
247
248 fn isl_set_min_val(set: uintptr_t, obj: uintptr_t) -> uintptr_t;
249
250 fn isl_set_move_dims(set: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32, src_pos: u32,
251 n: u32)
252 -> uintptr_t;
253
254 fn isl_set_n_basic_set(set: uintptr_t) -> i32;
255
256 fn isl_set_n_dim(set: uintptr_t) -> i32;
257
258 fn isl_set_n_param(set: uintptr_t) -> i32;
259
260 fn isl_set_nat_universe(space: uintptr_t) -> uintptr_t;
261
262 fn isl_set_neg(set: uintptr_t) -> uintptr_t;
263
264 fn isl_set_param_pw_aff_on_domain_id(domain: uintptr_t, id: uintptr_t) -> uintptr_t;
265
266 fn isl_set_params(set: uintptr_t) -> uintptr_t;
267
268 fn isl_set_plain_cmp(set1: uintptr_t, set2: uintptr_t) -> i32;
269
270 fn isl_set_plain_get_val_if_fixed(set: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
271
272 fn isl_set_plain_is_disjoint(set1: uintptr_t, set2: uintptr_t) -> i32;
273
274 fn isl_set_plain_is_empty(set: uintptr_t) -> i32;
275
276 fn isl_set_plain_is_equal(set1: uintptr_t, set2: uintptr_t) -> i32;
277
278 fn isl_set_plain_is_universe(set: uintptr_t) -> i32;
279
280 fn isl_set_plain_unshifted_simple_hull(set: uintptr_t) -> uintptr_t;
281
282 fn isl_set_polyhedral_hull(set: uintptr_t) -> uintptr_t;
283
284 fn isl_set_preimage_multi_aff(set: uintptr_t, ma: uintptr_t) -> uintptr_t;
285
286 fn isl_set_preimage_multi_pw_aff(set: uintptr_t, mpa: uintptr_t) -> uintptr_t;
287
288 fn isl_set_preimage_pw_multi_aff(set: uintptr_t, pma: uintptr_t) -> uintptr_t;
289
290 fn isl_set_product(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
291
292 fn isl_set_project_onto_map(set: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
293
294 fn isl_set_project_out(set: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
295
296 fn isl_set_project_out_all_params(set: uintptr_t) -> uintptr_t;
297
298 fn isl_set_project_out_param_id(set: uintptr_t, id: uintptr_t) -> uintptr_t;
299
300 fn isl_set_project_out_param_id_list(set: uintptr_t, list: uintptr_t) -> uintptr_t;
301
302 fn isl_set_pw_aff_on_domain_val(domain: uintptr_t, v: uintptr_t) -> uintptr_t;
303
304 fn isl_set_pw_multi_aff_on_domain_multi_val(domain: uintptr_t, mv: uintptr_t) -> uintptr_t;
305
306 fn isl_set_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
307
308 fn isl_set_remove_dims(bset: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
309
310 fn isl_set_remove_divs(set: uintptr_t) -> uintptr_t;
311
312 fn isl_set_remove_divs_involving_dims(set: uintptr_t, type_: i32, first: u32, n: u32)
313 -> uintptr_t;
314
315 fn isl_set_remove_redundancies(set: uintptr_t) -> uintptr_t;
316
317 fn isl_set_remove_unknown_divs(set: uintptr_t) -> uintptr_t;
318
319 fn isl_set_reset_space(set: uintptr_t, space: uintptr_t) -> uintptr_t;
320
321 fn isl_set_reset_tuple_id(set: uintptr_t) -> uintptr_t;
322
323 fn isl_set_reset_user(set: uintptr_t) -> uintptr_t;
324
325 fn isl_set_sample(set: uintptr_t) -> uintptr_t;
326
327 fn isl_set_sample_point(set: uintptr_t) -> uintptr_t;
328
329 fn isl_set_set_dim_id(set: uintptr_t, type_: i32, pos: u32, id: uintptr_t) -> uintptr_t;
330
331 fn isl_set_set_dim_name(set: uintptr_t, type_: i32, pos: u32, s: *const c_char) -> uintptr_t;
332
333 fn isl_set_set_tuple_id(set: uintptr_t, id: uintptr_t) -> uintptr_t;
334
335 fn isl_set_set_tuple_name(set: uintptr_t, s: *const c_char) -> uintptr_t;
336
337 fn isl_set_simple_hull(set: uintptr_t) -> uintptr_t;
338
339 fn isl_set_size(set: uintptr_t) -> i32;
340
341 fn isl_set_solutions(set: uintptr_t) -> uintptr_t;
342
343 fn isl_set_split_dims(set: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
344
345 fn isl_set_subtract(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
346
347 fn isl_set_sum(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
348
349 fn isl_set_to_list(el: uintptr_t) -> uintptr_t;
350
351 fn isl_set_to_str(set: uintptr_t) -> *const c_char;
352
353 fn isl_set_to_union_set(set: uintptr_t) -> uintptr_t;
354
355 fn isl_set_translation(deltas: uintptr_t) -> uintptr_t;
356
357 fn isl_set_tuple_dim(set: uintptr_t) -> i32;
358
359 fn isl_set_unbind_params(set: uintptr_t, tuple: uintptr_t) -> uintptr_t;
360
361 fn isl_set_unbind_params_insert_domain(set: uintptr_t, domain: uintptr_t) -> uintptr_t;
362
363 fn isl_set_union(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
364
365 fn isl_set_union_disjoint(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
366
367 fn isl_set_universe(space: uintptr_t) -> uintptr_t;
368
369 fn isl_set_unshifted_simple_hull(set: uintptr_t) -> uintptr_t;
370
371 fn isl_set_unshifted_simple_hull_from_set_list(set: uintptr_t, list: uintptr_t) -> uintptr_t;
372
373 fn isl_set_unwrap(set: uintptr_t) -> uintptr_t;
374
375 fn isl_set_upper_bound_multi_pw_aff(set: uintptr_t, upper: uintptr_t) -> uintptr_t;
376
377 fn isl_set_upper_bound_multi_val(set: uintptr_t, upper: uintptr_t) -> uintptr_t;
378
379 fn isl_set_upper_bound_si(set: uintptr_t, type_: i32, pos: u32, value: i32) -> uintptr_t;
380
381 fn isl_set_upper_bound_val(set: uintptr_t, type_: i32, pos: u32, value: uintptr_t)
382 -> uintptr_t;
383
384 fn isl_set_wrapped_domain_map(set: uintptr_t) -> uintptr_t;
385
386 fn isl_set_wrapped_reverse(set: uintptr_t) -> uintptr_t;
387
388}
389
390impl Set {
391 pub fn add_constraint(self, constraint: Constraint) -> Result<Set, LibISLError> {
393 let set = self;
394 let isl_rs_ctx = set.get_ctx();
395 let mut set = set;
396 set.do_not_free_on_drop();
397 let set = set.ptr;
398 let mut constraint = constraint;
399 constraint.do_not_free_on_drop();
400 let constraint = constraint.ptr;
401 let isl_rs_result = unsafe { isl_set_add_constraint(set, constraint) };
402 let isl_rs_result = Set { ptr: isl_rs_result,
403 should_free_on_drop: true };
404 let err = isl_rs_ctx.last_error();
405 if err != Error::None_ {
406 let err_msg = isl_rs_ctx.last_error_msg();
407 isl_rs_ctx.reset_error();
408 return Err(LibISLError::new(err, err_msg));
409 }
410 Ok(isl_rs_result)
411 }
412
413 pub fn add_dims(self, type_: DimType, n: u32) -> Result<Set, LibISLError> {
415 let set = self;
416 let isl_rs_ctx = set.get_ctx();
417 let mut set = set;
418 set.do_not_free_on_drop();
419 let set = set.ptr;
420 let type_ = type_.to_i32();
421 let isl_rs_result = unsafe { isl_set_add_dims(set, type_, n) };
422 let isl_rs_result = Set { ptr: isl_rs_result,
423 should_free_on_drop: true };
424 let err = isl_rs_ctx.last_error();
425 if err != Error::None_ {
426 let err_msg = isl_rs_ctx.last_error_msg();
427 isl_rs_ctx.reset_error();
428 return Err(LibISLError::new(err, err_msg));
429 }
430 Ok(isl_rs_result)
431 }
432
433 pub fn affine_hull(self) -> Result<BasicSet, LibISLError> {
435 let set = self;
436 let isl_rs_ctx = set.get_ctx();
437 let mut set = set;
438 set.do_not_free_on_drop();
439 let set = set.ptr;
440 let isl_rs_result = unsafe { isl_set_affine_hull(set) };
441 let isl_rs_result = BasicSet { ptr: isl_rs_result,
442 should_free_on_drop: true };
443 let err = isl_rs_ctx.last_error();
444 if err != Error::None_ {
445 let err_msg = isl_rs_ctx.last_error_msg();
446 isl_rs_ctx.reset_error();
447 return Err(LibISLError::new(err, err_msg));
448 }
449 Ok(isl_rs_result)
450 }
451
452 pub fn align_divs(self) -> Result<Set, LibISLError> {
454 let set = self;
455 let isl_rs_ctx = set.get_ctx();
456 let mut set = set;
457 set.do_not_free_on_drop();
458 let set = set.ptr;
459 let isl_rs_result = unsafe { isl_set_align_divs(set) };
460 let isl_rs_result = Set { ptr: isl_rs_result,
461 should_free_on_drop: true };
462 let err = isl_rs_ctx.last_error();
463 if err != Error::None_ {
464 let err_msg = isl_rs_ctx.last_error_msg();
465 isl_rs_ctx.reset_error();
466 return Err(LibISLError::new(err, err_msg));
467 }
468 Ok(isl_rs_result)
469 }
470
471 pub fn align_params(self, model: Space) -> Result<Set, LibISLError> {
473 let set = self;
474 let isl_rs_ctx = set.get_ctx();
475 let mut set = set;
476 set.do_not_free_on_drop();
477 let set = set.ptr;
478 let mut model = model;
479 model.do_not_free_on_drop();
480 let model = model.ptr;
481 let isl_rs_result = unsafe { isl_set_align_params(set, model) };
482 let isl_rs_result = Set { ptr: isl_rs_result,
483 should_free_on_drop: true };
484 let err = isl_rs_ctx.last_error();
485 if err != Error::None_ {
486 let err_msg = isl_rs_ctx.last_error_msg();
487 isl_rs_ctx.reset_error();
488 return Err(LibISLError::new(err, err_msg));
489 }
490 Ok(isl_rs_result)
491 }
492
493 pub fn apply(self, map: Map) -> Result<Set, LibISLError> {
495 let set = self;
496 let isl_rs_ctx = set.get_ctx();
497 let mut set = set;
498 set.do_not_free_on_drop();
499 let set = set.ptr;
500 let mut map = map;
501 map.do_not_free_on_drop();
502 let map = map.ptr;
503 let isl_rs_result = unsafe { isl_set_apply(set, map) };
504 let isl_rs_result = Set { ptr: isl_rs_result,
505 should_free_on_drop: true };
506 let err = isl_rs_ctx.last_error();
507 if err != Error::None_ {
508 let err_msg = isl_rs_ctx.last_error_msg();
509 isl_rs_ctx.reset_error();
510 return Err(LibISLError::new(err, err_msg));
511 }
512 Ok(isl_rs_result)
513 }
514
515 pub fn as_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
517 let set = self;
518 let isl_rs_ctx = set.get_ctx();
519 let mut set = set;
520 set.do_not_free_on_drop();
521 let set = set.ptr;
522 let isl_rs_result = unsafe { isl_set_as_pw_multi_aff(set) };
523 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
524 should_free_on_drop: true };
525 let err = isl_rs_ctx.last_error();
526 if err != Error::None_ {
527 let err_msg = isl_rs_ctx.last_error_msg();
528 isl_rs_ctx.reset_error();
529 return Err(LibISLError::new(err, err_msg));
530 }
531 Ok(isl_rs_result)
532 }
533
534 pub fn bind(self, tuple: MultiId) -> Result<Set, LibISLError> {
536 let set = self;
537 let isl_rs_ctx = set.get_ctx();
538 let mut set = set;
539 set.do_not_free_on_drop();
540 let set = set.ptr;
541 let mut tuple = tuple;
542 tuple.do_not_free_on_drop();
543 let tuple = tuple.ptr;
544 let isl_rs_result = unsafe { isl_set_bind(set, tuple) };
545 let isl_rs_result = Set { ptr: isl_rs_result,
546 should_free_on_drop: true };
547 let err = isl_rs_ctx.last_error();
548 if err != Error::None_ {
549 let err_msg = isl_rs_ctx.last_error_msg();
550 isl_rs_ctx.reset_error();
551 return Err(LibISLError::new(err, err_msg));
552 }
553 Ok(isl_rs_result)
554 }
555
556 pub fn bounded_simple_hull(self) -> Result<BasicSet, LibISLError> {
558 let set = self;
559 let isl_rs_ctx = set.get_ctx();
560 let mut set = set;
561 set.do_not_free_on_drop();
562 let set = set.ptr;
563 let isl_rs_result = unsafe { isl_set_bounded_simple_hull(set) };
564 let isl_rs_result = BasicSet { ptr: isl_rs_result,
565 should_free_on_drop: true };
566 let err = isl_rs_ctx.last_error();
567 if err != Error::None_ {
568 let err_msg = isl_rs_ctx.last_error_msg();
569 isl_rs_ctx.reset_error();
570 return Err(LibISLError::new(err, err_msg));
571 }
572 Ok(isl_rs_result)
573 }
574
575 pub fn box_from_points(pnt1: Point, pnt2: Point) -> Result<Set, LibISLError> {
577 let isl_rs_ctx = pnt1.get_ctx();
578 let mut pnt1 = pnt1;
579 pnt1.do_not_free_on_drop();
580 let pnt1 = pnt1.ptr;
581 let mut pnt2 = pnt2;
582 pnt2.do_not_free_on_drop();
583 let pnt2 = pnt2.ptr;
584 let isl_rs_result = unsafe { isl_set_box_from_points(pnt1, pnt2) };
585 let isl_rs_result = Set { ptr: isl_rs_result,
586 should_free_on_drop: true };
587 let err = isl_rs_ctx.last_error();
588 if err != Error::None_ {
589 let err_msg = isl_rs_ctx.last_error_msg();
590 isl_rs_ctx.reset_error();
591 return Err(LibISLError::new(err, err_msg));
592 }
593 Ok(isl_rs_result)
594 }
595
596 pub fn coalesce(self) -> Result<Set, LibISLError> {
598 let set = self;
599 let isl_rs_ctx = set.get_ctx();
600 let mut set = set;
601 set.do_not_free_on_drop();
602 let set = set.ptr;
603 let isl_rs_result = unsafe { isl_set_coalesce(set) };
604 let isl_rs_result = Set { ptr: isl_rs_result,
605 should_free_on_drop: true };
606 let err = isl_rs_ctx.last_error();
607 if err != Error::None_ {
608 let err_msg = isl_rs_ctx.last_error_msg();
609 isl_rs_ctx.reset_error();
610 return Err(LibISLError::new(err, err_msg));
611 }
612 Ok(isl_rs_result)
613 }
614
615 pub fn coefficients(self) -> Result<BasicSet, LibISLError> {
617 let set = self;
618 let isl_rs_ctx = set.get_ctx();
619 let mut set = set;
620 set.do_not_free_on_drop();
621 let set = set.ptr;
622 let isl_rs_result = unsafe { isl_set_coefficients(set) };
623 let isl_rs_result = BasicSet { ptr: isl_rs_result,
624 should_free_on_drop: true };
625 let err = isl_rs_ctx.last_error();
626 if err != Error::None_ {
627 let err_msg = isl_rs_ctx.last_error_msg();
628 isl_rs_ctx.reset_error();
629 return Err(LibISLError::new(err, err_msg));
630 }
631 Ok(isl_rs_result)
632 }
633
634 pub fn complement(self) -> Result<Set, LibISLError> {
636 let set = self;
637 let isl_rs_ctx = set.get_ctx();
638 let mut set = set;
639 set.do_not_free_on_drop();
640 let set = set.ptr;
641 let isl_rs_result = unsafe { isl_set_complement(set) };
642 let isl_rs_result = Set { ptr: isl_rs_result,
643 should_free_on_drop: true };
644 let err = isl_rs_ctx.last_error();
645 if err != Error::None_ {
646 let err_msg = isl_rs_ctx.last_error_msg();
647 isl_rs_ctx.reset_error();
648 return Err(LibISLError::new(err, err_msg));
649 }
650 Ok(isl_rs_result)
651 }
652
653 pub fn compute_divs(self) -> Result<Set, LibISLError> {
655 let set = self;
656 let isl_rs_ctx = set.get_ctx();
657 let mut set = set;
658 set.do_not_free_on_drop();
659 let set = set.ptr;
660 let isl_rs_result = unsafe { isl_set_compute_divs(set) };
661 let isl_rs_result = Set { ptr: isl_rs_result,
662 should_free_on_drop: true };
663 let err = isl_rs_ctx.last_error();
664 if err != Error::None_ {
665 let err_msg = isl_rs_ctx.last_error_msg();
666 isl_rs_ctx.reset_error();
667 return Err(LibISLError::new(err, err_msg));
668 }
669 Ok(isl_rs_result)
670 }
671
672 pub fn convex_hull(self) -> Result<BasicSet, LibISLError> {
674 let set = self;
675 let isl_rs_ctx = set.get_ctx();
676 let mut set = set;
677 set.do_not_free_on_drop();
678 let set = set.ptr;
679 let isl_rs_result = unsafe { isl_set_convex_hull(set) };
680 let isl_rs_result = BasicSet { ptr: isl_rs_result,
681 should_free_on_drop: true };
682 let err = isl_rs_ctx.last_error();
683 if err != Error::None_ {
684 let err_msg = isl_rs_ctx.last_error_msg();
685 isl_rs_ctx.reset_error();
686 return Err(LibISLError::new(err, err_msg));
687 }
688 Ok(isl_rs_result)
689 }
690
691 pub fn copy(&self) -> Result<Set, LibISLError> {
693 let set = self;
694 let isl_rs_ctx = set.get_ctx();
695 let set = set.ptr;
696 let isl_rs_result = unsafe { isl_set_copy(set) };
697 let isl_rs_result = Set { ptr: isl_rs_result,
698 should_free_on_drop: true };
699 let err = isl_rs_ctx.last_error();
700 if err != Error::None_ {
701 let err_msg = isl_rs_ctx.last_error_msg();
702 isl_rs_ctx.reset_error();
703 return Err(LibISLError::new(err, err_msg));
704 }
705 Ok(isl_rs_result)
706 }
707
708 pub fn count_val(&self) -> Result<Val, LibISLError> {
710 let set = self;
711 let isl_rs_ctx = set.get_ctx();
712 let set = set.ptr;
713 let isl_rs_result = unsafe { isl_set_count_val(set) };
714 let isl_rs_result = Val { ptr: isl_rs_result,
715 should_free_on_drop: true };
716 let err = isl_rs_ctx.last_error();
717 if err != Error::None_ {
718 let err_msg = isl_rs_ctx.last_error_msg();
719 isl_rs_ctx.reset_error();
720 return Err(LibISLError::new(err, err_msg));
721 }
722 Ok(isl_rs_result)
723 }
724
725 pub fn detect_equalities(self) -> Result<Set, LibISLError> {
727 let set = self;
728 let isl_rs_ctx = set.get_ctx();
729 let mut set = set;
730 set.do_not_free_on_drop();
731 let set = set.ptr;
732 let isl_rs_result = unsafe { isl_set_detect_equalities(set) };
733 let isl_rs_result = Set { ptr: isl_rs_result,
734 should_free_on_drop: true };
735 let err = isl_rs_ctx.last_error();
736 if err != Error::None_ {
737 let err_msg = isl_rs_ctx.last_error_msg();
738 isl_rs_ctx.reset_error();
739 return Err(LibISLError::new(err, err_msg));
740 }
741 Ok(isl_rs_result)
742 }
743
744 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
746 let set = self;
747 let isl_rs_ctx = set.get_ctx();
748 let set = set.ptr;
749 let type_ = type_.to_i32();
750 let isl_rs_result = unsafe { isl_set_dim(set, type_) };
751 let err = isl_rs_ctx.last_error();
752 if err != Error::None_ {
753 let err_msg = isl_rs_ctx.last_error_msg();
754 isl_rs_ctx.reset_error();
755 return Err(LibISLError::new(err, err_msg));
756 }
757 Ok(isl_rs_result)
758 }
759
760 pub fn dim_has_any_lower_bound(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
762 let set = self;
763 let isl_rs_ctx = set.get_ctx();
764 let set = set.ptr;
765 let type_ = type_.to_i32();
766 let isl_rs_result = unsafe { isl_set_dim_has_any_lower_bound(set, type_, pos) };
767 let isl_rs_result = match isl_rs_result {
768 0 => false,
769 1 => true,
770 _ => {
771 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
772 }
773 };
774 let err = isl_rs_ctx.last_error();
775 if err != Error::None_ {
776 let err_msg = isl_rs_ctx.last_error_msg();
777 isl_rs_ctx.reset_error();
778 return Err(LibISLError::new(err, err_msg));
779 }
780 Ok(isl_rs_result)
781 }
782
783 pub fn dim_has_any_upper_bound(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
785 let set = self;
786 let isl_rs_ctx = set.get_ctx();
787 let set = set.ptr;
788 let type_ = type_.to_i32();
789 let isl_rs_result = unsafe { isl_set_dim_has_any_upper_bound(set, type_, pos) };
790 let isl_rs_result = match isl_rs_result {
791 0 => false,
792 1 => true,
793 _ => {
794 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
795 }
796 };
797 let err = isl_rs_ctx.last_error();
798 if err != Error::None_ {
799 let err_msg = isl_rs_ctx.last_error_msg();
800 isl_rs_ctx.reset_error();
801 return Err(LibISLError::new(err, err_msg));
802 }
803 Ok(isl_rs_result)
804 }
805
806 pub fn dim_has_lower_bound(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
808 let set = self;
809 let isl_rs_ctx = set.get_ctx();
810 let set = set.ptr;
811 let type_ = type_.to_i32();
812 let isl_rs_result = unsafe { isl_set_dim_has_lower_bound(set, type_, pos) };
813 let isl_rs_result = match isl_rs_result {
814 0 => false,
815 1 => true,
816 _ => {
817 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
818 }
819 };
820 let err = isl_rs_ctx.last_error();
821 if err != Error::None_ {
822 let err_msg = isl_rs_ctx.last_error_msg();
823 isl_rs_ctx.reset_error();
824 return Err(LibISLError::new(err, err_msg));
825 }
826 Ok(isl_rs_result)
827 }
828
829 pub fn dim_has_upper_bound(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
831 let set = self;
832 let isl_rs_ctx = set.get_ctx();
833 let set = set.ptr;
834 let type_ = type_.to_i32();
835 let isl_rs_result = unsafe { isl_set_dim_has_upper_bound(set, type_, pos) };
836 let isl_rs_result = match isl_rs_result {
837 0 => false,
838 1 => true,
839 _ => {
840 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
841 }
842 };
843 let err = isl_rs_ctx.last_error();
844 if err != Error::None_ {
845 let err_msg = isl_rs_ctx.last_error_msg();
846 isl_rs_ctx.reset_error();
847 return Err(LibISLError::new(err, err_msg));
848 }
849 Ok(isl_rs_result)
850 }
851
852 pub fn dim_is_bounded(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
854 let set = self;
855 let isl_rs_ctx = set.get_ctx();
856 let set = set.ptr;
857 let type_ = type_.to_i32();
858 let isl_rs_result = unsafe { isl_set_dim_is_bounded(set, type_, pos) };
859 let isl_rs_result = match isl_rs_result {
860 0 => false,
861 1 => true,
862 _ => {
863 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
864 }
865 };
866 let err = isl_rs_ctx.last_error();
867 if err != Error::None_ {
868 let err_msg = isl_rs_ctx.last_error_msg();
869 isl_rs_ctx.reset_error();
870 return Err(LibISLError::new(err, err_msg));
871 }
872 Ok(isl_rs_result)
873 }
874
875 pub fn dim_max(self, pos: i32) -> Result<PwAff, LibISLError> {
877 let set = self;
878 let isl_rs_ctx = set.get_ctx();
879 let mut set = set;
880 set.do_not_free_on_drop();
881 let set = set.ptr;
882 let isl_rs_result = unsafe { isl_set_dim_max(set, pos) };
883 let isl_rs_result = PwAff { ptr: isl_rs_result,
884 should_free_on_drop: true };
885 let err = isl_rs_ctx.last_error();
886 if err != Error::None_ {
887 let err_msg = isl_rs_ctx.last_error_msg();
888 isl_rs_ctx.reset_error();
889 return Err(LibISLError::new(err, err_msg));
890 }
891 Ok(isl_rs_result)
892 }
893
894 pub fn dim_max_val(self, pos: i32) -> Result<Val, LibISLError> {
896 let set = self;
897 let isl_rs_ctx = set.get_ctx();
898 let mut set = set;
899 set.do_not_free_on_drop();
900 let set = set.ptr;
901 let isl_rs_result = unsafe { isl_set_dim_max_val(set, pos) };
902 let isl_rs_result = Val { ptr: isl_rs_result,
903 should_free_on_drop: true };
904 let err = isl_rs_ctx.last_error();
905 if err != Error::None_ {
906 let err_msg = isl_rs_ctx.last_error_msg();
907 isl_rs_ctx.reset_error();
908 return Err(LibISLError::new(err, err_msg));
909 }
910 Ok(isl_rs_result)
911 }
912
913 pub fn dim_min(self, pos: i32) -> Result<PwAff, LibISLError> {
915 let set = self;
916 let isl_rs_ctx = set.get_ctx();
917 let mut set = set;
918 set.do_not_free_on_drop();
919 let set = set.ptr;
920 let isl_rs_result = unsafe { isl_set_dim_min(set, pos) };
921 let isl_rs_result = PwAff { ptr: isl_rs_result,
922 should_free_on_drop: true };
923 let err = isl_rs_ctx.last_error();
924 if err != Error::None_ {
925 let err_msg = isl_rs_ctx.last_error_msg();
926 isl_rs_ctx.reset_error();
927 return Err(LibISLError::new(err, err_msg));
928 }
929 Ok(isl_rs_result)
930 }
931
932 pub fn dim_min_val(self, pos: i32) -> Result<Val, LibISLError> {
934 let set = self;
935 let isl_rs_ctx = set.get_ctx();
936 let mut set = set;
937 set.do_not_free_on_drop();
938 let set = set.ptr;
939 let isl_rs_result = unsafe { isl_set_dim_min_val(set, pos) };
940 let isl_rs_result = Val { ptr: isl_rs_result,
941 should_free_on_drop: true };
942 let err = isl_rs_ctx.last_error();
943 if err != Error::None_ {
944 let err_msg = isl_rs_ctx.last_error_msg();
945 isl_rs_ctx.reset_error();
946 return Err(LibISLError::new(err, err_msg));
947 }
948 Ok(isl_rs_result)
949 }
950
951 pub fn drop_constraints_involving_dims(self, type_: DimType, first: u32, n: u32)
953 -> Result<Set, LibISLError> {
954 let set = self;
955 let isl_rs_ctx = set.get_ctx();
956 let mut set = set;
957 set.do_not_free_on_drop();
958 let set = set.ptr;
959 let type_ = type_.to_i32();
960 let isl_rs_result =
961 unsafe { isl_set_drop_constraints_involving_dims(set, type_, first, n) };
962 let isl_rs_result = Set { ptr: isl_rs_result,
963 should_free_on_drop: true };
964 let err = isl_rs_ctx.last_error();
965 if err != Error::None_ {
966 let err_msg = isl_rs_ctx.last_error_msg();
967 isl_rs_ctx.reset_error();
968 return Err(LibISLError::new(err, err_msg));
969 }
970 Ok(isl_rs_result)
971 }
972
973 pub fn drop_constraints_not_involving_dims(self, type_: DimType, first: u32, n: u32)
975 -> Result<Set, LibISLError> {
976 let set = self;
977 let isl_rs_ctx = set.get_ctx();
978 let mut set = set;
979 set.do_not_free_on_drop();
980 let set = set.ptr;
981 let type_ = type_.to_i32();
982 let isl_rs_result =
983 unsafe { isl_set_drop_constraints_not_involving_dims(set, type_, first, n) };
984 let isl_rs_result = Set { ptr: isl_rs_result,
985 should_free_on_drop: true };
986 let err = isl_rs_ctx.last_error();
987 if err != Error::None_ {
988 let err_msg = isl_rs_ctx.last_error_msg();
989 isl_rs_ctx.reset_error();
990 return Err(LibISLError::new(err, err_msg));
991 }
992 Ok(isl_rs_result)
993 }
994
995 pub fn drop_unused_params(self) -> Result<Set, LibISLError> {
997 let set = self;
998 let isl_rs_ctx = set.get_ctx();
999 let mut set = set;
1000 set.do_not_free_on_drop();
1001 let set = set.ptr;
1002 let isl_rs_result = unsafe { isl_set_drop_unused_params(set) };
1003 let isl_rs_result = Set { ptr: isl_rs_result,
1004 should_free_on_drop: true };
1005 let err = isl_rs_ctx.last_error();
1006 if err != Error::None_ {
1007 let err_msg = isl_rs_ctx.last_error_msg();
1008 isl_rs_ctx.reset_error();
1009 return Err(LibISLError::new(err, err_msg));
1010 }
1011 Ok(isl_rs_result)
1012 }
1013
1014 pub fn dump(&self) -> Result<(), LibISLError> {
1016 let set = self;
1017 let isl_rs_ctx = set.get_ctx();
1018 let set = set.ptr;
1019 let isl_rs_result = unsafe { isl_set_dump(set) };
1020 let err = isl_rs_ctx.last_error();
1021 if err != Error::None_ {
1022 let err_msg = isl_rs_ctx.last_error_msg();
1023 isl_rs_ctx.reset_error();
1024 return Err(LibISLError::new(err, err_msg));
1025 }
1026 Ok(isl_rs_result)
1027 }
1028
1029 pub fn eliminate(self, type_: DimType, first: u32, n: u32) -> Result<Set, LibISLError> {
1031 let set = self;
1032 let isl_rs_ctx = set.get_ctx();
1033 let mut set = set;
1034 set.do_not_free_on_drop();
1035 let set = set.ptr;
1036 let type_ = type_.to_i32();
1037 let isl_rs_result = unsafe { isl_set_eliminate(set, type_, first, n) };
1038 let isl_rs_result = Set { ptr: isl_rs_result,
1039 should_free_on_drop: true };
1040 let err = isl_rs_ctx.last_error();
1041 if err != Error::None_ {
1042 let err_msg = isl_rs_ctx.last_error_msg();
1043 isl_rs_ctx.reset_error();
1044 return Err(LibISLError::new(err, err_msg));
1045 }
1046 Ok(isl_rs_result)
1047 }
1048
1049 pub fn eliminate_dims(self, first: u32, n: u32) -> Result<Set, LibISLError> {
1051 let set = self;
1052 let isl_rs_ctx = set.get_ctx();
1053 let mut set = set;
1054 set.do_not_free_on_drop();
1055 let set = set.ptr;
1056 let isl_rs_result = unsafe { isl_set_eliminate_dims(set, first, n) };
1057 let isl_rs_result = Set { ptr: isl_rs_result,
1058 should_free_on_drop: true };
1059 let err = isl_rs_ctx.last_error();
1060 if err != Error::None_ {
1061 let err_msg = isl_rs_ctx.last_error_msg();
1062 isl_rs_ctx.reset_error();
1063 return Err(LibISLError::new(err, err_msg));
1064 }
1065 Ok(isl_rs_result)
1066 }
1067
1068 pub fn empty(space: Space) -> Result<Set, LibISLError> {
1070 let isl_rs_ctx = space.get_ctx();
1071 let mut space = space;
1072 space.do_not_free_on_drop();
1073 let space = space.ptr;
1074 let isl_rs_result = unsafe { isl_set_empty(space) };
1075 let isl_rs_result = Set { ptr: isl_rs_result,
1076 should_free_on_drop: true };
1077 let err = isl_rs_ctx.last_error();
1078 if err != Error::None_ {
1079 let err_msg = isl_rs_ctx.last_error_msg();
1080 isl_rs_ctx.reset_error();
1081 return Err(LibISLError::new(err, err_msg));
1082 }
1083 Ok(isl_rs_result)
1084 }
1085
1086 pub fn equate(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
1088 -> Result<Set, LibISLError> {
1089 let set = self;
1090 let isl_rs_ctx = set.get_ctx();
1091 let mut set = set;
1092 set.do_not_free_on_drop();
1093 let set = set.ptr;
1094 let type1 = type1.to_i32();
1095 let type2 = type2.to_i32();
1096 let isl_rs_result = unsafe { isl_set_equate(set, type1, pos1, type2, pos2) };
1097 let isl_rs_result = Set { ptr: isl_rs_result,
1098 should_free_on_drop: true };
1099 let err = isl_rs_ctx.last_error();
1100 if err != Error::None_ {
1101 let err_msg = isl_rs_ctx.last_error_msg();
1102 isl_rs_ctx.reset_error();
1103 return Err(LibISLError::new(err, err_msg));
1104 }
1105 Ok(isl_rs_result)
1106 }
1107
1108 pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> Result<i32, LibISLError> {
1110 let set = self;
1111 let isl_rs_ctx = set.get_ctx();
1112 let set = set.ptr;
1113 let type_ = type_.to_i32();
1114 let id = id.ptr;
1115 let isl_rs_result = unsafe { isl_set_find_dim_by_id(set, type_, id) };
1116 let err = isl_rs_ctx.last_error();
1117 if err != Error::None_ {
1118 let err_msg = isl_rs_ctx.last_error_msg();
1119 isl_rs_ctx.reset_error();
1120 return Err(LibISLError::new(err, err_msg));
1121 }
1122 Ok(isl_rs_result)
1123 }
1124
1125 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
1127 let set = self;
1128 let isl_rs_ctx = set.get_ctx();
1129 let set = set.ptr;
1130 let type_ = type_.to_i32();
1131 let name = CString::new(name).unwrap();
1132 let name = name.as_ptr();
1133 let isl_rs_result = unsafe { isl_set_find_dim_by_name(set, type_, name) };
1134 let err = isl_rs_ctx.last_error();
1135 if err != Error::None_ {
1136 let err_msg = isl_rs_ctx.last_error_msg();
1137 isl_rs_ctx.reset_error();
1138 return Err(LibISLError::new(err, err_msg));
1139 }
1140 Ok(isl_rs_result)
1141 }
1142
1143 pub fn fix_dim_si(self, dim: u32, value: i32) -> Result<Set, LibISLError> {
1145 let set = self;
1146 let isl_rs_ctx = set.get_ctx();
1147 let mut set = set;
1148 set.do_not_free_on_drop();
1149 let set = set.ptr;
1150 let isl_rs_result = unsafe { isl_set_fix_dim_si(set, dim, value) };
1151 let isl_rs_result = Set { ptr: isl_rs_result,
1152 should_free_on_drop: true };
1153 let err = isl_rs_ctx.last_error();
1154 if err != Error::None_ {
1155 let err_msg = isl_rs_ctx.last_error_msg();
1156 isl_rs_ctx.reset_error();
1157 return Err(LibISLError::new(err, err_msg));
1158 }
1159 Ok(isl_rs_result)
1160 }
1161
1162 pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> Result<Set, LibISLError> {
1164 let set = self;
1165 let isl_rs_ctx = set.get_ctx();
1166 let mut set = set;
1167 set.do_not_free_on_drop();
1168 let set = set.ptr;
1169 let type_ = type_.to_i32();
1170 let isl_rs_result = unsafe { isl_set_fix_si(set, type_, pos, value) };
1171 let isl_rs_result = Set { ptr: isl_rs_result,
1172 should_free_on_drop: true };
1173 let err = isl_rs_ctx.last_error();
1174 if err != Error::None_ {
1175 let err_msg = isl_rs_ctx.last_error_msg();
1176 isl_rs_ctx.reset_error();
1177 return Err(LibISLError::new(err, err_msg));
1178 }
1179 Ok(isl_rs_result)
1180 }
1181
1182 pub fn fix_val(self, type_: DimType, pos: u32, v: Val) -> Result<Set, LibISLError> {
1184 let set = self;
1185 let isl_rs_ctx = set.get_ctx();
1186 let mut set = set;
1187 set.do_not_free_on_drop();
1188 let set = set.ptr;
1189 let type_ = type_.to_i32();
1190 let mut v = v;
1191 v.do_not_free_on_drop();
1192 let v = v.ptr;
1193 let isl_rs_result = unsafe { isl_set_fix_val(set, type_, pos, v) };
1194 let isl_rs_result = Set { ptr: isl_rs_result,
1195 should_free_on_drop: true };
1196 let err = isl_rs_ctx.last_error();
1197 if err != Error::None_ {
1198 let err_msg = isl_rs_ctx.last_error_msg();
1199 isl_rs_ctx.reset_error();
1200 return Err(LibISLError::new(err, err_msg));
1201 }
1202 Ok(isl_rs_result)
1203 }
1204
1205 pub fn flat_product(self, set2: Set) -> Result<Set, LibISLError> {
1207 let set1 = self;
1208 let isl_rs_ctx = set1.get_ctx();
1209 let mut set1 = set1;
1210 set1.do_not_free_on_drop();
1211 let set1 = set1.ptr;
1212 let mut set2 = set2;
1213 set2.do_not_free_on_drop();
1214 let set2 = set2.ptr;
1215 let isl_rs_result = unsafe { isl_set_flat_product(set1, set2) };
1216 let isl_rs_result = Set { ptr: isl_rs_result,
1217 should_free_on_drop: true };
1218 let err = isl_rs_ctx.last_error();
1219 if err != Error::None_ {
1220 let err_msg = isl_rs_ctx.last_error_msg();
1221 isl_rs_ctx.reset_error();
1222 return Err(LibISLError::new(err, err_msg));
1223 }
1224 Ok(isl_rs_result)
1225 }
1226
1227 pub fn flatten(self) -> Result<Set, LibISLError> {
1229 let set = self;
1230 let isl_rs_ctx = set.get_ctx();
1231 let mut set = set;
1232 set.do_not_free_on_drop();
1233 let set = set.ptr;
1234 let isl_rs_result = unsafe { isl_set_flatten(set) };
1235 let isl_rs_result = Set { ptr: isl_rs_result,
1236 should_free_on_drop: true };
1237 let err = isl_rs_ctx.last_error();
1238 if err != Error::None_ {
1239 let err_msg = isl_rs_ctx.last_error_msg();
1240 isl_rs_ctx.reset_error();
1241 return Err(LibISLError::new(err, err_msg));
1242 }
1243 Ok(isl_rs_result)
1244 }
1245
1246 pub fn flatten_map(self) -> Result<Map, LibISLError> {
1248 let set = self;
1249 let isl_rs_ctx = set.get_ctx();
1250 let mut set = set;
1251 set.do_not_free_on_drop();
1252 let set = set.ptr;
1253 let isl_rs_result = unsafe { isl_set_flatten_map(set) };
1254 let isl_rs_result = Map { ptr: isl_rs_result,
1255 should_free_on_drop: true };
1256 let err = isl_rs_ctx.last_error();
1257 if err != Error::None_ {
1258 let err_msg = isl_rs_ctx.last_error_msg();
1259 isl_rs_ctx.reset_error();
1260 return Err(LibISLError::new(err, err_msg));
1261 }
1262 Ok(isl_rs_result)
1263 }
1264
1265 pub fn follows_at(&self, set2: &Set, pos: i32) -> Result<i32, LibISLError> {
1267 let set1 = self;
1268 let isl_rs_ctx = set1.get_ctx();
1269 let set1 = set1.ptr;
1270 let set2 = set2.ptr;
1271 let isl_rs_result = unsafe { isl_set_follows_at(set1, set2, pos) };
1272 let err = isl_rs_ctx.last_error();
1273 if err != Error::None_ {
1274 let err_msg = isl_rs_ctx.last_error_msg();
1275 isl_rs_ctx.reset_error();
1276 return Err(LibISLError::new(err, err_msg));
1277 }
1278 Ok(isl_rs_result)
1279 }
1280
1281 pub fn free(self) -> Result<Set, LibISLError> {
1283 let set = self;
1284 let isl_rs_ctx = set.get_ctx();
1285 let mut set = set;
1286 set.do_not_free_on_drop();
1287 let set = set.ptr;
1288 let isl_rs_result = unsafe { isl_set_free(set) };
1289 let isl_rs_result = Set { ptr: isl_rs_result,
1290 should_free_on_drop: true };
1291 let err = isl_rs_ctx.last_error();
1292 if err != Error::None_ {
1293 let err_msg = isl_rs_ctx.last_error_msg();
1294 isl_rs_ctx.reset_error();
1295 return Err(LibISLError::new(err, err_msg));
1296 }
1297 Ok(isl_rs_result)
1298 }
1299
1300 pub fn from_basic_set(bset: BasicSet) -> Result<Set, LibISLError> {
1302 let isl_rs_ctx = bset.get_ctx();
1303 let mut bset = bset;
1304 bset.do_not_free_on_drop();
1305 let bset = bset.ptr;
1306 let isl_rs_result = unsafe { isl_set_from_basic_set(bset) };
1307 let isl_rs_result = Set { ptr: isl_rs_result,
1308 should_free_on_drop: true };
1309 let err = isl_rs_ctx.last_error();
1310 if err != Error::None_ {
1311 let err_msg = isl_rs_ctx.last_error_msg();
1312 isl_rs_ctx.reset_error();
1313 return Err(LibISLError::new(err, err_msg));
1314 }
1315 Ok(isl_rs_result)
1316 }
1317
1318 pub fn from_multi_aff(ma: MultiAff) -> Result<Set, LibISLError> {
1320 let isl_rs_ctx = ma.get_ctx();
1321 let mut ma = ma;
1322 ma.do_not_free_on_drop();
1323 let ma = ma.ptr;
1324 let isl_rs_result = unsafe { isl_set_from_multi_aff(ma) };
1325 let isl_rs_result = Set { ptr: isl_rs_result,
1326 should_free_on_drop: true };
1327 let err = isl_rs_ctx.last_error();
1328 if err != Error::None_ {
1329 let err_msg = isl_rs_ctx.last_error_msg();
1330 isl_rs_ctx.reset_error();
1331 return Err(LibISLError::new(err, err_msg));
1332 }
1333 Ok(isl_rs_result)
1334 }
1335
1336 pub fn from_multi_pw_aff(mpa: MultiPwAff) -> Result<Set, LibISLError> {
1338 let isl_rs_ctx = mpa.get_ctx();
1339 let mut mpa = mpa;
1340 mpa.do_not_free_on_drop();
1341 let mpa = mpa.ptr;
1342 let isl_rs_result = unsafe { isl_set_from_multi_pw_aff(mpa) };
1343 let isl_rs_result = Set { ptr: isl_rs_result,
1344 should_free_on_drop: true };
1345 let err = isl_rs_ctx.last_error();
1346 if err != Error::None_ {
1347 let err_msg = isl_rs_ctx.last_error_msg();
1348 isl_rs_ctx.reset_error();
1349 return Err(LibISLError::new(err, err_msg));
1350 }
1351 Ok(isl_rs_result)
1352 }
1353
1354 pub fn from_params(self) -> Result<Set, LibISLError> {
1356 let set = self;
1357 let isl_rs_ctx = set.get_ctx();
1358 let mut set = set;
1359 set.do_not_free_on_drop();
1360 let set = set.ptr;
1361 let isl_rs_result = unsafe { isl_set_from_params(set) };
1362 let isl_rs_result = Set { ptr: isl_rs_result,
1363 should_free_on_drop: true };
1364 let err = isl_rs_ctx.last_error();
1365 if err != Error::None_ {
1366 let err_msg = isl_rs_ctx.last_error_msg();
1367 isl_rs_ctx.reset_error();
1368 return Err(LibISLError::new(err, err_msg));
1369 }
1370 Ok(isl_rs_result)
1371 }
1372
1373 pub fn from_point(pnt: Point) -> Result<Set, LibISLError> {
1375 let isl_rs_ctx = pnt.get_ctx();
1376 let mut pnt = pnt;
1377 pnt.do_not_free_on_drop();
1378 let pnt = pnt.ptr;
1379 let isl_rs_result = unsafe { isl_set_from_point(pnt) };
1380 let isl_rs_result = Set { ptr: isl_rs_result,
1381 should_free_on_drop: true };
1382 let err = isl_rs_ctx.last_error();
1383 if err != Error::None_ {
1384 let err_msg = isl_rs_ctx.last_error_msg();
1385 isl_rs_ctx.reset_error();
1386 return Err(LibISLError::new(err, err_msg));
1387 }
1388 Ok(isl_rs_result)
1389 }
1390
1391 pub fn from_pw_aff(pwaff: PwAff) -> Result<Set, LibISLError> {
1393 let isl_rs_ctx = pwaff.get_ctx();
1394 let mut pwaff = pwaff;
1395 pwaff.do_not_free_on_drop();
1396 let pwaff = pwaff.ptr;
1397 let isl_rs_result = unsafe { isl_set_from_pw_aff(pwaff) };
1398 let isl_rs_result = Set { ptr: isl_rs_result,
1399 should_free_on_drop: true };
1400 let err = isl_rs_ctx.last_error();
1401 if err != Error::None_ {
1402 let err_msg = isl_rs_ctx.last_error_msg();
1403 isl_rs_ctx.reset_error();
1404 return Err(LibISLError::new(err, err_msg));
1405 }
1406 Ok(isl_rs_result)
1407 }
1408
1409 pub fn from_pw_multi_aff(pma: PwMultiAff) -> Result<Set, LibISLError> {
1411 let isl_rs_ctx = pma.get_ctx();
1412 let mut pma = pma;
1413 pma.do_not_free_on_drop();
1414 let pma = pma.ptr;
1415 let isl_rs_result = unsafe { isl_set_from_pw_multi_aff(pma) };
1416 let isl_rs_result = Set { ptr: isl_rs_result,
1417 should_free_on_drop: true };
1418 let err = isl_rs_ctx.last_error();
1419 if err != Error::None_ {
1420 let err_msg = isl_rs_ctx.last_error_msg();
1421 isl_rs_ctx.reset_error();
1422 return Err(LibISLError::new(err, err_msg));
1423 }
1424 Ok(isl_rs_result)
1425 }
1426
1427 pub fn from_union_set(uset: UnionSet) -> Result<Set, LibISLError> {
1429 let isl_rs_ctx = uset.get_ctx();
1430 let mut uset = uset;
1431 uset.do_not_free_on_drop();
1432 let uset = uset.ptr;
1433 let isl_rs_result = unsafe { isl_set_from_union_set(uset) };
1434 let isl_rs_result = Set { ptr: isl_rs_result,
1435 should_free_on_drop: true };
1436 let err = isl_rs_ctx.last_error();
1437 if err != Error::None_ {
1438 let err_msg = isl_rs_ctx.last_error_msg();
1439 isl_rs_ctx.reset_error();
1440 return Err(LibISLError::new(err, err_msg));
1441 }
1442 Ok(isl_rs_result)
1443 }
1444
1445 pub fn get_basic_set_list(&self) -> Result<BasicSetList, LibISLError> {
1447 let set = self;
1448 let isl_rs_ctx = set.get_ctx();
1449 let set = set.ptr;
1450 let isl_rs_result = unsafe { isl_set_get_basic_set_list(set) };
1451 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
1452 should_free_on_drop: true };
1453 let err = isl_rs_ctx.last_error();
1454 if err != Error::None_ {
1455 let err_msg = isl_rs_ctx.last_error_msg();
1456 isl_rs_ctx.reset_error();
1457 return Err(LibISLError::new(err, err_msg));
1458 }
1459 Ok(isl_rs_result)
1460 }
1461
1462 pub fn get_ctx(&self) -> Context {
1464 let set = self;
1465 let set = set.ptr;
1466 let isl_rs_result = unsafe { isl_set_get_ctx(set) };
1467 let isl_rs_result = Context { ptr: isl_rs_result,
1468 should_free_on_drop: false };
1469 isl_rs_result
1470 }
1471
1472 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
1474 let set = self;
1475 let isl_rs_ctx = set.get_ctx();
1476 let set = set.ptr;
1477 let type_ = type_.to_i32();
1478 let isl_rs_result = unsafe { isl_set_get_dim_id(set, type_, pos) };
1479 let isl_rs_result = Id { ptr: isl_rs_result,
1480 should_free_on_drop: true };
1481 let err = isl_rs_ctx.last_error();
1482 if err != Error::None_ {
1483 let err_msg = isl_rs_ctx.last_error_msg();
1484 isl_rs_ctx.reset_error();
1485 return Err(LibISLError::new(err, err_msg));
1486 }
1487 Ok(isl_rs_result)
1488 }
1489
1490 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
1492 let set = self;
1493 let isl_rs_ctx = set.get_ctx();
1494 let set = set.ptr;
1495 let type_ = type_.to_i32();
1496 let isl_rs_result = unsafe { isl_set_get_dim_name(set, type_, pos) };
1497 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1498 let isl_rs_result = isl_rs_result.to_str().unwrap();
1499 let err = isl_rs_ctx.last_error();
1500 if err != Error::None_ {
1501 let err_msg = isl_rs_ctx.last_error_msg();
1502 isl_rs_ctx.reset_error();
1503 return Err(LibISLError::new(err, err_msg));
1504 }
1505 Ok(isl_rs_result)
1506 }
1507
1508 pub fn get_hash(&self) -> Result<u32, LibISLError> {
1510 let set = self;
1511 let isl_rs_ctx = set.get_ctx();
1512 let set = set.ptr;
1513 let isl_rs_result = unsafe { isl_set_get_hash(set) };
1514 let err = isl_rs_ctx.last_error();
1515 if err != Error::None_ {
1516 let err_msg = isl_rs_ctx.last_error_msg();
1517 isl_rs_ctx.reset_error();
1518 return Err(LibISLError::new(err, err_msg));
1519 }
1520 Ok(isl_rs_result)
1521 }
1522
1523 pub fn get_lattice_tile(&self) -> Result<FixedBox, LibISLError> {
1525 let set = self;
1526 let isl_rs_ctx = set.get_ctx();
1527 let set = set.ptr;
1528 let isl_rs_result = unsafe { isl_set_get_lattice_tile(set) };
1529 let isl_rs_result = FixedBox { ptr: isl_rs_result,
1530 should_free_on_drop: true };
1531 let err = isl_rs_ctx.last_error();
1532 if err != Error::None_ {
1533 let err_msg = isl_rs_ctx.last_error_msg();
1534 isl_rs_ctx.reset_error();
1535 return Err(LibISLError::new(err, err_msg));
1536 }
1537 Ok(isl_rs_result)
1538 }
1539
1540 pub fn get_plain_multi_val_if_fixed(&self) -> Result<MultiVal, LibISLError> {
1542 let set = self;
1543 let isl_rs_ctx = set.get_ctx();
1544 let set = set.ptr;
1545 let isl_rs_result = unsafe { isl_set_get_plain_multi_val_if_fixed(set) };
1546 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1547 should_free_on_drop: true };
1548 let err = isl_rs_ctx.last_error();
1549 if err != Error::None_ {
1550 let err_msg = isl_rs_ctx.last_error_msg();
1551 isl_rs_ctx.reset_error();
1552 return Err(LibISLError::new(err, err_msg));
1553 }
1554 Ok(isl_rs_result)
1555 }
1556
1557 pub fn get_simple_fixed_box_hull(&self) -> Result<FixedBox, LibISLError> {
1559 let set = self;
1560 let isl_rs_ctx = set.get_ctx();
1561 let set = set.ptr;
1562 let isl_rs_result = unsafe { isl_set_get_simple_fixed_box_hull(set) };
1563 let isl_rs_result = FixedBox { ptr: isl_rs_result,
1564 should_free_on_drop: true };
1565 let err = isl_rs_ctx.last_error();
1566 if err != Error::None_ {
1567 let err_msg = isl_rs_ctx.last_error_msg();
1568 isl_rs_ctx.reset_error();
1569 return Err(LibISLError::new(err, err_msg));
1570 }
1571 Ok(isl_rs_result)
1572 }
1573
1574 pub fn get_space(&self) -> Result<Space, LibISLError> {
1576 let set = self;
1577 let isl_rs_ctx = set.get_ctx();
1578 let set = set.ptr;
1579 let isl_rs_result = unsafe { isl_set_get_space(set) };
1580 let isl_rs_result = Space { ptr: isl_rs_result,
1581 should_free_on_drop: true };
1582 let err = isl_rs_ctx.last_error();
1583 if err != Error::None_ {
1584 let err_msg = isl_rs_ctx.last_error_msg();
1585 isl_rs_ctx.reset_error();
1586 return Err(LibISLError::new(err, err_msg));
1587 }
1588 Ok(isl_rs_result)
1589 }
1590
1591 pub fn get_stride(&self, pos: i32) -> Result<Val, LibISLError> {
1593 let set = self;
1594 let isl_rs_ctx = set.get_ctx();
1595 let set = set.ptr;
1596 let isl_rs_result = unsafe { isl_set_get_stride(set, pos) };
1597 let isl_rs_result = Val { ptr: isl_rs_result,
1598 should_free_on_drop: true };
1599 let err = isl_rs_ctx.last_error();
1600 if err != Error::None_ {
1601 let err_msg = isl_rs_ctx.last_error_msg();
1602 isl_rs_ctx.reset_error();
1603 return Err(LibISLError::new(err, err_msg));
1604 }
1605 Ok(isl_rs_result)
1606 }
1607
1608 pub fn get_stride_info(&self, pos: i32) -> Result<StrideInfo, LibISLError> {
1610 let set = self;
1611 let isl_rs_ctx = set.get_ctx();
1612 let set = set.ptr;
1613 let isl_rs_result = unsafe { isl_set_get_stride_info(set, pos) };
1614 let isl_rs_result = StrideInfo { ptr: isl_rs_result,
1615 should_free_on_drop: true };
1616 let err = isl_rs_ctx.last_error();
1617 if err != Error::None_ {
1618 let err_msg = isl_rs_ctx.last_error_msg();
1619 isl_rs_ctx.reset_error();
1620 return Err(LibISLError::new(err, err_msg));
1621 }
1622 Ok(isl_rs_result)
1623 }
1624
1625 pub fn get_tuple_id(&self) -> Result<Id, LibISLError> {
1627 let set = self;
1628 let isl_rs_ctx = set.get_ctx();
1629 let set = set.ptr;
1630 let isl_rs_result = unsafe { isl_set_get_tuple_id(set) };
1631 let isl_rs_result = Id { ptr: isl_rs_result,
1632 should_free_on_drop: true };
1633 let err = isl_rs_ctx.last_error();
1634 if err != Error::None_ {
1635 let err_msg = isl_rs_ctx.last_error_msg();
1636 isl_rs_ctx.reset_error();
1637 return Err(LibISLError::new(err, err_msg));
1638 }
1639 Ok(isl_rs_result)
1640 }
1641
1642 pub fn get_tuple_name(&self) -> Result<&str, LibISLError> {
1644 let set = self;
1645 let isl_rs_ctx = set.get_ctx();
1646 let set = set.ptr;
1647 let isl_rs_result = unsafe { isl_set_get_tuple_name(set) };
1648 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1649 let isl_rs_result = isl_rs_result.to_str().unwrap();
1650 let err = isl_rs_ctx.last_error();
1651 if err != Error::None_ {
1652 let err_msg = isl_rs_ctx.last_error_msg();
1653 isl_rs_ctx.reset_error();
1654 return Err(LibISLError::new(err, err_msg));
1655 }
1656 Ok(isl_rs_result)
1657 }
1658
1659 pub fn gist(self, context: Set) -> Result<Set, LibISLError> {
1661 let set = self;
1662 let isl_rs_ctx = set.get_ctx();
1663 let mut set = set;
1664 set.do_not_free_on_drop();
1665 let set = set.ptr;
1666 let mut context = context;
1667 context.do_not_free_on_drop();
1668 let context = context.ptr;
1669 let isl_rs_result = unsafe { isl_set_gist(set, context) };
1670 let isl_rs_result = Set { ptr: isl_rs_result,
1671 should_free_on_drop: true };
1672 let err = isl_rs_ctx.last_error();
1673 if err != Error::None_ {
1674 let err_msg = isl_rs_ctx.last_error_msg();
1675 isl_rs_ctx.reset_error();
1676 return Err(LibISLError::new(err, err_msg));
1677 }
1678 Ok(isl_rs_result)
1679 }
1680
1681 pub fn gist_basic_set(self, context: BasicSet) -> Result<Set, LibISLError> {
1683 let set = self;
1684 let isl_rs_ctx = set.get_ctx();
1685 let mut set = set;
1686 set.do_not_free_on_drop();
1687 let set = set.ptr;
1688 let mut context = context;
1689 context.do_not_free_on_drop();
1690 let context = context.ptr;
1691 let isl_rs_result = unsafe { isl_set_gist_basic_set(set, context) };
1692 let isl_rs_result = Set { ptr: isl_rs_result,
1693 should_free_on_drop: true };
1694 let err = isl_rs_ctx.last_error();
1695 if err != Error::None_ {
1696 let err_msg = isl_rs_ctx.last_error_msg();
1697 isl_rs_ctx.reset_error();
1698 return Err(LibISLError::new(err, err_msg));
1699 }
1700 Ok(isl_rs_result)
1701 }
1702
1703 pub fn gist_params(self, context: Set) -> Result<Set, LibISLError> {
1705 let set = self;
1706 let isl_rs_ctx = set.get_ctx();
1707 let mut set = set;
1708 set.do_not_free_on_drop();
1709 let set = set.ptr;
1710 let mut context = context;
1711 context.do_not_free_on_drop();
1712 let context = context.ptr;
1713 let isl_rs_result = unsafe { isl_set_gist_params(set, context) };
1714 let isl_rs_result = Set { ptr: isl_rs_result,
1715 should_free_on_drop: true };
1716 let err = isl_rs_ctx.last_error();
1717 if err != Error::None_ {
1718 let err_msg = isl_rs_ctx.last_error_msg();
1719 isl_rs_ctx.reset_error();
1720 return Err(LibISLError::new(err, err_msg));
1721 }
1722 Ok(isl_rs_result)
1723 }
1724
1725 pub fn has_dim_id(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
1727 let set = self;
1728 let isl_rs_ctx = set.get_ctx();
1729 let set = set.ptr;
1730 let type_ = type_.to_i32();
1731 let isl_rs_result = unsafe { isl_set_has_dim_id(set, type_, pos) };
1732 let isl_rs_result = match isl_rs_result {
1733 0 => false,
1734 1 => true,
1735 _ => {
1736 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1737 }
1738 };
1739 let err = isl_rs_ctx.last_error();
1740 if err != Error::None_ {
1741 let err_msg = isl_rs_ctx.last_error_msg();
1742 isl_rs_ctx.reset_error();
1743 return Err(LibISLError::new(err, err_msg));
1744 }
1745 Ok(isl_rs_result)
1746 }
1747
1748 pub fn has_dim_name(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
1750 let set = self;
1751 let isl_rs_ctx = set.get_ctx();
1752 let set = set.ptr;
1753 let type_ = type_.to_i32();
1754 let isl_rs_result = unsafe { isl_set_has_dim_name(set, type_, pos) };
1755 let isl_rs_result = match isl_rs_result {
1756 0 => false,
1757 1 => true,
1758 _ => {
1759 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1760 }
1761 };
1762 let err = isl_rs_ctx.last_error();
1763 if err != Error::None_ {
1764 let err_msg = isl_rs_ctx.last_error_msg();
1765 isl_rs_ctx.reset_error();
1766 return Err(LibISLError::new(err, err_msg));
1767 }
1768 Ok(isl_rs_result)
1769 }
1770
1771 pub fn has_equal_space(&self, set2: &Set) -> Result<bool, LibISLError> {
1773 let set1 = self;
1774 let isl_rs_ctx = set1.get_ctx();
1775 let set1 = set1.ptr;
1776 let set2 = set2.ptr;
1777 let isl_rs_result = unsafe { isl_set_has_equal_space(set1, set2) };
1778 let isl_rs_result = match isl_rs_result {
1779 0 => false,
1780 1 => true,
1781 _ => {
1782 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1783 }
1784 };
1785 let err = isl_rs_ctx.last_error();
1786 if err != Error::None_ {
1787 let err_msg = isl_rs_ctx.last_error_msg();
1788 isl_rs_ctx.reset_error();
1789 return Err(LibISLError::new(err, err_msg));
1790 }
1791 Ok(isl_rs_result)
1792 }
1793
1794 pub fn has_tuple_id(&self) -> Result<bool, LibISLError> {
1796 let set = self;
1797 let isl_rs_ctx = set.get_ctx();
1798 let set = set.ptr;
1799 let isl_rs_result = unsafe { isl_set_has_tuple_id(set) };
1800 let isl_rs_result = match isl_rs_result {
1801 0 => false,
1802 1 => true,
1803 _ => {
1804 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1805 }
1806 };
1807 let err = isl_rs_ctx.last_error();
1808 if err != Error::None_ {
1809 let err_msg = isl_rs_ctx.last_error_msg();
1810 isl_rs_ctx.reset_error();
1811 return Err(LibISLError::new(err, err_msg));
1812 }
1813 Ok(isl_rs_result)
1814 }
1815
1816 pub fn has_tuple_name(&self) -> Result<bool, LibISLError> {
1818 let set = self;
1819 let isl_rs_ctx = set.get_ctx();
1820 let set = set.ptr;
1821 let isl_rs_result = unsafe { isl_set_has_tuple_name(set) };
1822 let isl_rs_result = match isl_rs_result {
1823 0 => false,
1824 1 => true,
1825 _ => {
1826 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1827 }
1828 };
1829 let err = isl_rs_ctx.last_error();
1830 if err != Error::None_ {
1831 let err_msg = isl_rs_ctx.last_error_msg();
1832 isl_rs_ctx.reset_error();
1833 return Err(LibISLError::new(err, err_msg));
1834 }
1835 Ok(isl_rs_result)
1836 }
1837
1838 pub fn identity(self) -> Result<Map, LibISLError> {
1840 let set = self;
1841 let isl_rs_ctx = set.get_ctx();
1842 let mut set = set;
1843 set.do_not_free_on_drop();
1844 let set = set.ptr;
1845 let isl_rs_result = unsafe { isl_set_identity(set) };
1846 let isl_rs_result = Map { ptr: isl_rs_result,
1847 should_free_on_drop: true };
1848 let err = isl_rs_ctx.last_error();
1849 if err != Error::None_ {
1850 let err_msg = isl_rs_ctx.last_error_msg();
1851 isl_rs_ctx.reset_error();
1852 return Err(LibISLError::new(err, err_msg));
1853 }
1854 Ok(isl_rs_result)
1855 }
1856
1857 pub fn indicator_function(self) -> Result<PwAff, LibISLError> {
1859 let set = self;
1860 let isl_rs_ctx = set.get_ctx();
1861 let mut set = set;
1862 set.do_not_free_on_drop();
1863 let set = set.ptr;
1864 let isl_rs_result = unsafe { isl_set_indicator_function(set) };
1865 let isl_rs_result = PwAff { ptr: isl_rs_result,
1866 should_free_on_drop: true };
1867 let err = isl_rs_ctx.last_error();
1868 if err != Error::None_ {
1869 let err_msg = isl_rs_ctx.last_error_msg();
1870 isl_rs_ctx.reset_error();
1871 return Err(LibISLError::new(err, err_msg));
1872 }
1873 Ok(isl_rs_result)
1874 }
1875
1876 pub fn insert_dims(self, type_: DimType, pos: u32, n: u32) -> Result<Set, LibISLError> {
1878 let set = self;
1879 let isl_rs_ctx = set.get_ctx();
1880 let mut set = set;
1881 set.do_not_free_on_drop();
1882 let set = set.ptr;
1883 let type_ = type_.to_i32();
1884 let isl_rs_result = unsafe { isl_set_insert_dims(set, type_, pos, n) };
1885 let isl_rs_result = Set { ptr: isl_rs_result,
1886 should_free_on_drop: true };
1887 let err = isl_rs_ctx.last_error();
1888 if err != Error::None_ {
1889 let err_msg = isl_rs_ctx.last_error_msg();
1890 isl_rs_ctx.reset_error();
1891 return Err(LibISLError::new(err, err_msg));
1892 }
1893 Ok(isl_rs_result)
1894 }
1895
1896 pub fn insert_domain(self, domain: Space) -> Result<Map, LibISLError> {
1898 let set = self;
1899 let isl_rs_ctx = set.get_ctx();
1900 let mut set = set;
1901 set.do_not_free_on_drop();
1902 let set = set.ptr;
1903 let mut domain = domain;
1904 domain.do_not_free_on_drop();
1905 let domain = domain.ptr;
1906 let isl_rs_result = unsafe { isl_set_insert_domain(set, domain) };
1907 let isl_rs_result = Map { ptr: isl_rs_result,
1908 should_free_on_drop: true };
1909 let err = isl_rs_ctx.last_error();
1910 if err != Error::None_ {
1911 let err_msg = isl_rs_ctx.last_error_msg();
1912 isl_rs_ctx.reset_error();
1913 return Err(LibISLError::new(err, err_msg));
1914 }
1915 Ok(isl_rs_result)
1916 }
1917
1918 pub fn intersect(self, set2: Set) -> Result<Set, LibISLError> {
1920 let set1 = self;
1921 let isl_rs_ctx = set1.get_ctx();
1922 let mut set1 = set1;
1923 set1.do_not_free_on_drop();
1924 let set1 = set1.ptr;
1925 let mut set2 = set2;
1926 set2.do_not_free_on_drop();
1927 let set2 = set2.ptr;
1928 let isl_rs_result = unsafe { isl_set_intersect(set1, set2) };
1929 let isl_rs_result = Set { ptr: isl_rs_result,
1930 should_free_on_drop: true };
1931 let err = isl_rs_ctx.last_error();
1932 if err != Error::None_ {
1933 let err_msg = isl_rs_ctx.last_error_msg();
1934 isl_rs_ctx.reset_error();
1935 return Err(LibISLError::new(err, err_msg));
1936 }
1937 Ok(isl_rs_result)
1938 }
1939
1940 pub fn intersect_factor_domain(self, domain: Set) -> Result<Set, LibISLError> {
1942 let set = self;
1943 let isl_rs_ctx = set.get_ctx();
1944 let mut set = set;
1945 set.do_not_free_on_drop();
1946 let set = set.ptr;
1947 let mut domain = domain;
1948 domain.do_not_free_on_drop();
1949 let domain = domain.ptr;
1950 let isl_rs_result = unsafe { isl_set_intersect_factor_domain(set, domain) };
1951 let isl_rs_result = Set { ptr: isl_rs_result,
1952 should_free_on_drop: true };
1953 let err = isl_rs_ctx.last_error();
1954 if err != Error::None_ {
1955 let err_msg = isl_rs_ctx.last_error_msg();
1956 isl_rs_ctx.reset_error();
1957 return Err(LibISLError::new(err, err_msg));
1958 }
1959 Ok(isl_rs_result)
1960 }
1961
1962 pub fn intersect_factor_range(self, range: Set) -> Result<Set, LibISLError> {
1964 let set = self;
1965 let isl_rs_ctx = set.get_ctx();
1966 let mut set = set;
1967 set.do_not_free_on_drop();
1968 let set = set.ptr;
1969 let mut range = range;
1970 range.do_not_free_on_drop();
1971 let range = range.ptr;
1972 let isl_rs_result = unsafe { isl_set_intersect_factor_range(set, range) };
1973 let isl_rs_result = Set { ptr: isl_rs_result,
1974 should_free_on_drop: true };
1975 let err = isl_rs_ctx.last_error();
1976 if err != Error::None_ {
1977 let err_msg = isl_rs_ctx.last_error_msg();
1978 isl_rs_ctx.reset_error();
1979 return Err(LibISLError::new(err, err_msg));
1980 }
1981 Ok(isl_rs_result)
1982 }
1983
1984 pub fn intersect_params(self, params: Set) -> Result<Set, LibISLError> {
1986 let set = self;
1987 let isl_rs_ctx = set.get_ctx();
1988 let mut set = set;
1989 set.do_not_free_on_drop();
1990 let set = set.ptr;
1991 let mut params = params;
1992 params.do_not_free_on_drop();
1993 let params = params.ptr;
1994 let isl_rs_result = unsafe { isl_set_intersect_params(set, params) };
1995 let isl_rs_result = Set { ptr: isl_rs_result,
1996 should_free_on_drop: true };
1997 let err = isl_rs_ctx.last_error();
1998 if err != Error::None_ {
1999 let err_msg = isl_rs_ctx.last_error_msg();
2000 isl_rs_ctx.reset_error();
2001 return Err(LibISLError::new(err, err_msg));
2002 }
2003 Ok(isl_rs_result)
2004 }
2005
2006 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
2008 let set = self;
2009 let isl_rs_ctx = set.get_ctx();
2010 let set = set.ptr;
2011 let type_ = type_.to_i32();
2012 let isl_rs_result = unsafe { isl_set_involves_dims(set, type_, first, n) };
2013 let isl_rs_result = match isl_rs_result {
2014 0 => false,
2015 1 => true,
2016 _ => {
2017 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2018 }
2019 };
2020 let err = isl_rs_ctx.last_error();
2021 if err != Error::None_ {
2022 let err_msg = isl_rs_ctx.last_error_msg();
2023 isl_rs_ctx.reset_error();
2024 return Err(LibISLError::new(err, err_msg));
2025 }
2026 Ok(isl_rs_result)
2027 }
2028
2029 pub fn involves_locals(&self) -> Result<bool, LibISLError> {
2031 let set = self;
2032 let isl_rs_ctx = set.get_ctx();
2033 let set = set.ptr;
2034 let isl_rs_result = unsafe { isl_set_involves_locals(set) };
2035 let isl_rs_result = match isl_rs_result {
2036 0 => false,
2037 1 => true,
2038 _ => {
2039 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2040 }
2041 };
2042 let err = isl_rs_ctx.last_error();
2043 if err != Error::None_ {
2044 let err_msg = isl_rs_ctx.last_error_msg();
2045 isl_rs_ctx.reset_error();
2046 return Err(LibISLError::new(err, err_msg));
2047 }
2048 Ok(isl_rs_result)
2049 }
2050
2051 pub fn is_bounded(&self) -> Result<bool, LibISLError> {
2053 let set = self;
2054 let isl_rs_ctx = set.get_ctx();
2055 let set = set.ptr;
2056 let isl_rs_result = unsafe { isl_set_is_bounded(set) };
2057 let isl_rs_result = match isl_rs_result {
2058 0 => false,
2059 1 => true,
2060 _ => {
2061 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2062 }
2063 };
2064 let err = isl_rs_ctx.last_error();
2065 if err != Error::None_ {
2066 let err_msg = isl_rs_ctx.last_error_msg();
2067 isl_rs_ctx.reset_error();
2068 return Err(LibISLError::new(err, err_msg));
2069 }
2070 Ok(isl_rs_result)
2071 }
2072
2073 pub fn is_box(&self) -> Result<bool, LibISLError> {
2075 let set = self;
2076 let isl_rs_ctx = set.get_ctx();
2077 let set = set.ptr;
2078 let isl_rs_result = unsafe { isl_set_is_box(set) };
2079 let isl_rs_result = match isl_rs_result {
2080 0 => false,
2081 1 => true,
2082 _ => {
2083 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2084 }
2085 };
2086 let err = isl_rs_ctx.last_error();
2087 if err != Error::None_ {
2088 let err_msg = isl_rs_ctx.last_error_msg();
2089 isl_rs_ctx.reset_error();
2090 return Err(LibISLError::new(err, err_msg));
2091 }
2092 Ok(isl_rs_result)
2093 }
2094
2095 pub fn is_disjoint(&self, set2: &Set) -> Result<bool, LibISLError> {
2097 let set1 = self;
2098 let isl_rs_ctx = set1.get_ctx();
2099 let set1 = set1.ptr;
2100 let set2 = set2.ptr;
2101 let isl_rs_result = unsafe { isl_set_is_disjoint(set1, set2) };
2102 let isl_rs_result = match isl_rs_result {
2103 0 => false,
2104 1 => true,
2105 _ => {
2106 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2107 }
2108 };
2109 let err = isl_rs_ctx.last_error();
2110 if err != Error::None_ {
2111 let err_msg = isl_rs_ctx.last_error_msg();
2112 isl_rs_ctx.reset_error();
2113 return Err(LibISLError::new(err, err_msg));
2114 }
2115 Ok(isl_rs_result)
2116 }
2117
2118 pub fn is_empty(&self) -> Result<bool, LibISLError> {
2120 let set = self;
2121 let isl_rs_ctx = set.get_ctx();
2122 let set = set.ptr;
2123 let isl_rs_result = unsafe { isl_set_is_empty(set) };
2124 let isl_rs_result = match isl_rs_result {
2125 0 => false,
2126 1 => true,
2127 _ => {
2128 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2129 }
2130 };
2131 let err = isl_rs_ctx.last_error();
2132 if err != Error::None_ {
2133 let err_msg = isl_rs_ctx.last_error_msg();
2134 isl_rs_ctx.reset_error();
2135 return Err(LibISLError::new(err, err_msg));
2136 }
2137 Ok(isl_rs_result)
2138 }
2139
2140 pub fn is_equal(&self, set2: &Set) -> Result<bool, LibISLError> {
2142 let set1 = self;
2143 let isl_rs_ctx = set1.get_ctx();
2144 let set1 = set1.ptr;
2145 let set2 = set2.ptr;
2146 let isl_rs_result = unsafe { isl_set_is_equal(set1, set2) };
2147 let isl_rs_result = match isl_rs_result {
2148 0 => false,
2149 1 => true,
2150 _ => {
2151 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2152 }
2153 };
2154 let err = isl_rs_ctx.last_error();
2155 if err != Error::None_ {
2156 let err_msg = isl_rs_ctx.last_error_msg();
2157 isl_rs_ctx.reset_error();
2158 return Err(LibISLError::new(err, err_msg));
2159 }
2160 Ok(isl_rs_result)
2161 }
2162
2163 pub fn is_params(&self) -> Result<bool, LibISLError> {
2165 let set = self;
2166 let isl_rs_ctx = set.get_ctx();
2167 let set = set.ptr;
2168 let isl_rs_result = unsafe { isl_set_is_params(set) };
2169 let isl_rs_result = match isl_rs_result {
2170 0 => false,
2171 1 => true,
2172 _ => {
2173 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2174 }
2175 };
2176 let err = isl_rs_ctx.last_error();
2177 if err != Error::None_ {
2178 let err_msg = isl_rs_ctx.last_error_msg();
2179 isl_rs_ctx.reset_error();
2180 return Err(LibISLError::new(err, err_msg));
2181 }
2182 Ok(isl_rs_result)
2183 }
2184
2185 pub fn is_singleton(&self) -> Result<bool, LibISLError> {
2187 let set = self;
2188 let isl_rs_ctx = set.get_ctx();
2189 let set = set.ptr;
2190 let isl_rs_result = unsafe { isl_set_is_singleton(set) };
2191 let isl_rs_result = match isl_rs_result {
2192 0 => false,
2193 1 => true,
2194 _ => {
2195 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2196 }
2197 };
2198 let err = isl_rs_ctx.last_error();
2199 if err != Error::None_ {
2200 let err_msg = isl_rs_ctx.last_error_msg();
2201 isl_rs_ctx.reset_error();
2202 return Err(LibISLError::new(err, err_msg));
2203 }
2204 Ok(isl_rs_result)
2205 }
2206
2207 pub fn is_strict_subset(&self, set2: &Set) -> Result<bool, LibISLError> {
2209 let set1 = self;
2210 let isl_rs_ctx = set1.get_ctx();
2211 let set1 = set1.ptr;
2212 let set2 = set2.ptr;
2213 let isl_rs_result = unsafe { isl_set_is_strict_subset(set1, set2) };
2214 let isl_rs_result = match isl_rs_result {
2215 0 => false,
2216 1 => true,
2217 _ => {
2218 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2219 }
2220 };
2221 let err = isl_rs_ctx.last_error();
2222 if err != Error::None_ {
2223 let err_msg = isl_rs_ctx.last_error_msg();
2224 isl_rs_ctx.reset_error();
2225 return Err(LibISLError::new(err, err_msg));
2226 }
2227 Ok(isl_rs_result)
2228 }
2229
2230 pub fn is_subset(&self, set2: &Set) -> Result<bool, LibISLError> {
2232 let set1 = self;
2233 let isl_rs_ctx = set1.get_ctx();
2234 let set1 = set1.ptr;
2235 let set2 = set2.ptr;
2236 let isl_rs_result = unsafe { isl_set_is_subset(set1, set2) };
2237 let isl_rs_result = match isl_rs_result {
2238 0 => false,
2239 1 => true,
2240 _ => {
2241 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2242 }
2243 };
2244 let err = isl_rs_ctx.last_error();
2245 if err != Error::None_ {
2246 let err_msg = isl_rs_ctx.last_error_msg();
2247 isl_rs_ctx.reset_error();
2248 return Err(LibISLError::new(err, err_msg));
2249 }
2250 Ok(isl_rs_result)
2251 }
2252
2253 pub fn is_wrapping(&self) -> Result<bool, LibISLError> {
2255 let set = self;
2256 let isl_rs_ctx = set.get_ctx();
2257 let set = set.ptr;
2258 let isl_rs_result = unsafe { isl_set_is_wrapping(set) };
2259 let isl_rs_result = match isl_rs_result {
2260 0 => false,
2261 1 => true,
2262 _ => {
2263 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2264 }
2265 };
2266 let err = isl_rs_ctx.last_error();
2267 if err != Error::None_ {
2268 let err_msg = isl_rs_ctx.last_error_msg();
2269 isl_rs_ctx.reset_error();
2270 return Err(LibISLError::new(err, err_msg));
2271 }
2272 Ok(isl_rs_result)
2273 }
2274
2275 pub fn lex_ge_set(self, set2: Set) -> Result<Map, LibISLError> {
2277 let set1 = self;
2278 let isl_rs_ctx = set1.get_ctx();
2279 let mut set1 = set1;
2280 set1.do_not_free_on_drop();
2281 let set1 = set1.ptr;
2282 let mut set2 = set2;
2283 set2.do_not_free_on_drop();
2284 let set2 = set2.ptr;
2285 let isl_rs_result = unsafe { isl_set_lex_ge_set(set1, set2) };
2286 let isl_rs_result = Map { ptr: isl_rs_result,
2287 should_free_on_drop: true };
2288 let err = isl_rs_ctx.last_error();
2289 if err != Error::None_ {
2290 let err_msg = isl_rs_ctx.last_error_msg();
2291 isl_rs_ctx.reset_error();
2292 return Err(LibISLError::new(err, err_msg));
2293 }
2294 Ok(isl_rs_result)
2295 }
2296
2297 pub fn lex_gt_set(self, set2: Set) -> Result<Map, LibISLError> {
2299 let set1 = self;
2300 let isl_rs_ctx = set1.get_ctx();
2301 let mut set1 = set1;
2302 set1.do_not_free_on_drop();
2303 let set1 = set1.ptr;
2304 let mut set2 = set2;
2305 set2.do_not_free_on_drop();
2306 let set2 = set2.ptr;
2307 let isl_rs_result = unsafe { isl_set_lex_gt_set(set1, set2) };
2308 let isl_rs_result = Map { ptr: isl_rs_result,
2309 should_free_on_drop: true };
2310 let err = isl_rs_ctx.last_error();
2311 if err != Error::None_ {
2312 let err_msg = isl_rs_ctx.last_error_msg();
2313 isl_rs_ctx.reset_error();
2314 return Err(LibISLError::new(err, err_msg));
2315 }
2316 Ok(isl_rs_result)
2317 }
2318
2319 pub fn lex_le_set(self, set2: Set) -> Result<Map, LibISLError> {
2321 let set1 = self;
2322 let isl_rs_ctx = set1.get_ctx();
2323 let mut set1 = set1;
2324 set1.do_not_free_on_drop();
2325 let set1 = set1.ptr;
2326 let mut set2 = set2;
2327 set2.do_not_free_on_drop();
2328 let set2 = set2.ptr;
2329 let isl_rs_result = unsafe { isl_set_lex_le_set(set1, set2) };
2330 let isl_rs_result = Map { ptr: isl_rs_result,
2331 should_free_on_drop: true };
2332 let err = isl_rs_ctx.last_error();
2333 if err != Error::None_ {
2334 let err_msg = isl_rs_ctx.last_error_msg();
2335 isl_rs_ctx.reset_error();
2336 return Err(LibISLError::new(err, err_msg));
2337 }
2338 Ok(isl_rs_result)
2339 }
2340
2341 pub fn lex_lt_set(self, set2: Set) -> Result<Map, LibISLError> {
2343 let set1 = self;
2344 let isl_rs_ctx = set1.get_ctx();
2345 let mut set1 = set1;
2346 set1.do_not_free_on_drop();
2347 let set1 = set1.ptr;
2348 let mut set2 = set2;
2349 set2.do_not_free_on_drop();
2350 let set2 = set2.ptr;
2351 let isl_rs_result = unsafe { isl_set_lex_lt_set(set1, set2) };
2352 let isl_rs_result = Map { ptr: isl_rs_result,
2353 should_free_on_drop: true };
2354 let err = isl_rs_ctx.last_error();
2355 if err != Error::None_ {
2356 let err_msg = isl_rs_ctx.last_error_msg();
2357 isl_rs_ctx.reset_error();
2358 return Err(LibISLError::new(err, err_msg));
2359 }
2360 Ok(isl_rs_result)
2361 }
2362
2363 pub fn lexmax(self) -> Result<Set, LibISLError> {
2365 let set = self;
2366 let isl_rs_ctx = set.get_ctx();
2367 let mut set = set;
2368 set.do_not_free_on_drop();
2369 let set = set.ptr;
2370 let isl_rs_result = unsafe { isl_set_lexmax(set) };
2371 let isl_rs_result = Set { ptr: isl_rs_result,
2372 should_free_on_drop: true };
2373 let err = isl_rs_ctx.last_error();
2374 if err != Error::None_ {
2375 let err_msg = isl_rs_ctx.last_error_msg();
2376 isl_rs_ctx.reset_error();
2377 return Err(LibISLError::new(err, err_msg));
2378 }
2379 Ok(isl_rs_result)
2380 }
2381
2382 pub fn lexmax_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
2384 let set = self;
2385 let isl_rs_ctx = set.get_ctx();
2386 let mut set = set;
2387 set.do_not_free_on_drop();
2388 let set = set.ptr;
2389 let isl_rs_result = unsafe { isl_set_lexmax_pw_multi_aff(set) };
2390 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2391 should_free_on_drop: true };
2392 let err = isl_rs_ctx.last_error();
2393 if err != Error::None_ {
2394 let err_msg = isl_rs_ctx.last_error_msg();
2395 isl_rs_ctx.reset_error();
2396 return Err(LibISLError::new(err, err_msg));
2397 }
2398 Ok(isl_rs_result)
2399 }
2400
2401 pub fn lexmin(self) -> Result<Set, LibISLError> {
2403 let set = self;
2404 let isl_rs_ctx = set.get_ctx();
2405 let mut set = set;
2406 set.do_not_free_on_drop();
2407 let set = set.ptr;
2408 let isl_rs_result = unsafe { isl_set_lexmin(set) };
2409 let isl_rs_result = Set { ptr: isl_rs_result,
2410 should_free_on_drop: true };
2411 let err = isl_rs_ctx.last_error();
2412 if err != Error::None_ {
2413 let err_msg = isl_rs_ctx.last_error_msg();
2414 isl_rs_ctx.reset_error();
2415 return Err(LibISLError::new(err, err_msg));
2416 }
2417 Ok(isl_rs_result)
2418 }
2419
2420 pub fn lexmin_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
2422 let set = self;
2423 let isl_rs_ctx = set.get_ctx();
2424 let mut set = set;
2425 set.do_not_free_on_drop();
2426 let set = set.ptr;
2427 let isl_rs_result = unsafe { isl_set_lexmin_pw_multi_aff(set) };
2428 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2429 should_free_on_drop: true };
2430 let err = isl_rs_ctx.last_error();
2431 if err != Error::None_ {
2432 let err_msg = isl_rs_ctx.last_error_msg();
2433 isl_rs_ctx.reset_error();
2434 return Err(LibISLError::new(err, err_msg));
2435 }
2436 Ok(isl_rs_result)
2437 }
2438
2439 pub fn lift(self) -> Result<Set, LibISLError> {
2441 let set = self;
2442 let isl_rs_ctx = set.get_ctx();
2443 let mut set = set;
2444 set.do_not_free_on_drop();
2445 let set = set.ptr;
2446 let isl_rs_result = unsafe { isl_set_lift(set) };
2447 let isl_rs_result = Set { ptr: isl_rs_result,
2448 should_free_on_drop: true };
2449 let err = isl_rs_ctx.last_error();
2450 if err != Error::None_ {
2451 let err_msg = isl_rs_ctx.last_error_msg();
2452 isl_rs_ctx.reset_error();
2453 return Err(LibISLError::new(err, err_msg));
2454 }
2455 Ok(isl_rs_result)
2456 }
2457
2458 pub fn lower_bound_multi_pw_aff(self, lower: MultiPwAff) -> Result<Set, LibISLError> {
2460 let set = self;
2461 let isl_rs_ctx = set.get_ctx();
2462 let mut set = set;
2463 set.do_not_free_on_drop();
2464 let set = set.ptr;
2465 let mut lower = lower;
2466 lower.do_not_free_on_drop();
2467 let lower = lower.ptr;
2468 let isl_rs_result = unsafe { isl_set_lower_bound_multi_pw_aff(set, lower) };
2469 let isl_rs_result = Set { ptr: isl_rs_result,
2470 should_free_on_drop: true };
2471 let err = isl_rs_ctx.last_error();
2472 if err != Error::None_ {
2473 let err_msg = isl_rs_ctx.last_error_msg();
2474 isl_rs_ctx.reset_error();
2475 return Err(LibISLError::new(err, err_msg));
2476 }
2477 Ok(isl_rs_result)
2478 }
2479
2480 pub fn lower_bound_multi_val(self, lower: MultiVal) -> Result<Set, LibISLError> {
2482 let set = self;
2483 let isl_rs_ctx = set.get_ctx();
2484 let mut set = set;
2485 set.do_not_free_on_drop();
2486 let set = set.ptr;
2487 let mut lower = lower;
2488 lower.do_not_free_on_drop();
2489 let lower = lower.ptr;
2490 let isl_rs_result = unsafe { isl_set_lower_bound_multi_val(set, lower) };
2491 let isl_rs_result = Set { ptr: isl_rs_result,
2492 should_free_on_drop: true };
2493 let err = isl_rs_ctx.last_error();
2494 if err != Error::None_ {
2495 let err_msg = isl_rs_ctx.last_error_msg();
2496 isl_rs_ctx.reset_error();
2497 return Err(LibISLError::new(err, err_msg));
2498 }
2499 Ok(isl_rs_result)
2500 }
2501
2502 pub fn lower_bound_si(self, type_: DimType, pos: u32, value: i32) -> Result<Set, LibISLError> {
2504 let set = self;
2505 let isl_rs_ctx = set.get_ctx();
2506 let mut set = set;
2507 set.do_not_free_on_drop();
2508 let set = set.ptr;
2509 let type_ = type_.to_i32();
2510 let isl_rs_result = unsafe { isl_set_lower_bound_si(set, type_, pos, value) };
2511 let isl_rs_result = Set { ptr: isl_rs_result,
2512 should_free_on_drop: true };
2513 let err = isl_rs_ctx.last_error();
2514 if err != Error::None_ {
2515 let err_msg = isl_rs_ctx.last_error_msg();
2516 isl_rs_ctx.reset_error();
2517 return Err(LibISLError::new(err, err_msg));
2518 }
2519 Ok(isl_rs_result)
2520 }
2521
2522 pub fn lower_bound_val(self, type_: DimType, pos: u32, value: Val) -> Result<Set, LibISLError> {
2524 let set = self;
2525 let isl_rs_ctx = set.get_ctx();
2526 let mut set = set;
2527 set.do_not_free_on_drop();
2528 let set = set.ptr;
2529 let type_ = type_.to_i32();
2530 let mut value = value;
2531 value.do_not_free_on_drop();
2532 let value = value.ptr;
2533 let isl_rs_result = unsafe { isl_set_lower_bound_val(set, type_, pos, value) };
2534 let isl_rs_result = Set { ptr: isl_rs_result,
2535 should_free_on_drop: true };
2536 let err = isl_rs_ctx.last_error();
2537 if err != Error::None_ {
2538 let err_msg = isl_rs_ctx.last_error_msg();
2539 isl_rs_ctx.reset_error();
2540 return Err(LibISLError::new(err, err_msg));
2541 }
2542 Ok(isl_rs_result)
2543 }
2544
2545 pub fn make_disjoint(self) -> Result<Set, LibISLError> {
2547 let set = self;
2548 let isl_rs_ctx = set.get_ctx();
2549 let mut set = set;
2550 set.do_not_free_on_drop();
2551 let set = set.ptr;
2552 let isl_rs_result = unsafe { isl_set_make_disjoint(set) };
2553 let isl_rs_result = Set { ptr: isl_rs_result,
2554 should_free_on_drop: true };
2555 let err = isl_rs_ctx.last_error();
2556 if err != Error::None_ {
2557 let err_msg = isl_rs_ctx.last_error_msg();
2558 isl_rs_ctx.reset_error();
2559 return Err(LibISLError::new(err, err_msg));
2560 }
2561 Ok(isl_rs_result)
2562 }
2563
2564 pub fn max_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
2566 let set = self;
2567 let isl_rs_ctx = set.get_ctx();
2568 let mut set = set;
2569 set.do_not_free_on_drop();
2570 let set = set.ptr;
2571 let isl_rs_result = unsafe { isl_set_max_multi_pw_aff(set) };
2572 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2573 should_free_on_drop: true };
2574 let err = isl_rs_ctx.last_error();
2575 if err != Error::None_ {
2576 let err_msg = isl_rs_ctx.last_error_msg();
2577 isl_rs_ctx.reset_error();
2578 return Err(LibISLError::new(err, err_msg));
2579 }
2580 Ok(isl_rs_result)
2581 }
2582
2583 pub fn max_val(&self, obj: &Aff) -> Result<Val, LibISLError> {
2585 let set = self;
2586 let isl_rs_ctx = set.get_ctx();
2587 let set = set.ptr;
2588 let obj = obj.ptr;
2589 let isl_rs_result = unsafe { isl_set_max_val(set, obj) };
2590 let isl_rs_result = Val { ptr: isl_rs_result,
2591 should_free_on_drop: true };
2592 let err = isl_rs_ctx.last_error();
2593 if err != Error::None_ {
2594 let err_msg = isl_rs_ctx.last_error_msg();
2595 isl_rs_ctx.reset_error();
2596 return Err(LibISLError::new(err, err_msg));
2597 }
2598 Ok(isl_rs_result)
2599 }
2600
2601 pub fn min_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
2603 let set = self;
2604 let isl_rs_ctx = set.get_ctx();
2605 let mut set = set;
2606 set.do_not_free_on_drop();
2607 let set = set.ptr;
2608 let isl_rs_result = unsafe { isl_set_min_multi_pw_aff(set) };
2609 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2610 should_free_on_drop: true };
2611 let err = isl_rs_ctx.last_error();
2612 if err != Error::None_ {
2613 let err_msg = isl_rs_ctx.last_error_msg();
2614 isl_rs_ctx.reset_error();
2615 return Err(LibISLError::new(err, err_msg));
2616 }
2617 Ok(isl_rs_result)
2618 }
2619
2620 pub fn min_val(&self, obj: &Aff) -> Result<Val, LibISLError> {
2622 let set = self;
2623 let isl_rs_ctx = set.get_ctx();
2624 let set = set.ptr;
2625 let obj = obj.ptr;
2626 let isl_rs_result = unsafe { isl_set_min_val(set, obj) };
2627 let isl_rs_result = Val { ptr: isl_rs_result,
2628 should_free_on_drop: true };
2629 let err = isl_rs_ctx.last_error();
2630 if err != Error::None_ {
2631 let err_msg = isl_rs_ctx.last_error_msg();
2632 isl_rs_ctx.reset_error();
2633 return Err(LibISLError::new(err, err_msg));
2634 }
2635 Ok(isl_rs_result)
2636 }
2637
2638 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
2640 n: u32)
2641 -> Result<Set, LibISLError> {
2642 let set = self;
2643 let isl_rs_ctx = set.get_ctx();
2644 let mut set = set;
2645 set.do_not_free_on_drop();
2646 let set = set.ptr;
2647 let dst_type = dst_type.to_i32();
2648 let src_type = src_type.to_i32();
2649 let isl_rs_result =
2650 unsafe { isl_set_move_dims(set, dst_type, dst_pos, src_type, src_pos, n) };
2651 let isl_rs_result = Set { ptr: isl_rs_result,
2652 should_free_on_drop: true };
2653 let err = isl_rs_ctx.last_error();
2654 if err != Error::None_ {
2655 let err_msg = isl_rs_ctx.last_error_msg();
2656 isl_rs_ctx.reset_error();
2657 return Err(LibISLError::new(err, err_msg));
2658 }
2659 Ok(isl_rs_result)
2660 }
2661
2662 pub fn n_basic_set(&self) -> Result<i32, LibISLError> {
2664 let set = self;
2665 let isl_rs_ctx = set.get_ctx();
2666 let set = set.ptr;
2667 let isl_rs_result = unsafe { isl_set_n_basic_set(set) };
2668 let err = isl_rs_ctx.last_error();
2669 if err != Error::None_ {
2670 let err_msg = isl_rs_ctx.last_error_msg();
2671 isl_rs_ctx.reset_error();
2672 return Err(LibISLError::new(err, err_msg));
2673 }
2674 Ok(isl_rs_result)
2675 }
2676
2677 pub fn n_dim(&self) -> Result<i32, LibISLError> {
2679 let set = self;
2680 let isl_rs_ctx = set.get_ctx();
2681 let set = set.ptr;
2682 let isl_rs_result = unsafe { isl_set_n_dim(set) };
2683 let err = isl_rs_ctx.last_error();
2684 if err != Error::None_ {
2685 let err_msg = isl_rs_ctx.last_error_msg();
2686 isl_rs_ctx.reset_error();
2687 return Err(LibISLError::new(err, err_msg));
2688 }
2689 Ok(isl_rs_result)
2690 }
2691
2692 pub fn n_param(&self) -> Result<i32, LibISLError> {
2694 let set = self;
2695 let isl_rs_ctx = set.get_ctx();
2696 let set = set.ptr;
2697 let isl_rs_result = unsafe { isl_set_n_param(set) };
2698 let err = isl_rs_ctx.last_error();
2699 if err != Error::None_ {
2700 let err_msg = isl_rs_ctx.last_error_msg();
2701 isl_rs_ctx.reset_error();
2702 return Err(LibISLError::new(err, err_msg));
2703 }
2704 Ok(isl_rs_result)
2705 }
2706
2707 pub fn nat_universe(space: Space) -> Result<Set, LibISLError> {
2709 let isl_rs_ctx = space.get_ctx();
2710 let mut space = space;
2711 space.do_not_free_on_drop();
2712 let space = space.ptr;
2713 let isl_rs_result = unsafe { isl_set_nat_universe(space) };
2714 let isl_rs_result = Set { ptr: isl_rs_result,
2715 should_free_on_drop: true };
2716 let err = isl_rs_ctx.last_error();
2717 if err != Error::None_ {
2718 let err_msg = isl_rs_ctx.last_error_msg();
2719 isl_rs_ctx.reset_error();
2720 return Err(LibISLError::new(err, err_msg));
2721 }
2722 Ok(isl_rs_result)
2723 }
2724
2725 pub fn neg(self) -> Result<Set, LibISLError> {
2727 let set = self;
2728 let isl_rs_ctx = set.get_ctx();
2729 let mut set = set;
2730 set.do_not_free_on_drop();
2731 let set = set.ptr;
2732 let isl_rs_result = unsafe { isl_set_neg(set) };
2733 let isl_rs_result = Set { ptr: isl_rs_result,
2734 should_free_on_drop: true };
2735 let err = isl_rs_ctx.last_error();
2736 if err != Error::None_ {
2737 let err_msg = isl_rs_ctx.last_error_msg();
2738 isl_rs_ctx.reset_error();
2739 return Err(LibISLError::new(err, err_msg));
2740 }
2741 Ok(isl_rs_result)
2742 }
2743
2744 pub fn param_pw_aff_on_domain_id(self, id: Id) -> Result<PwAff, LibISLError> {
2746 let domain = self;
2747 let isl_rs_ctx = domain.get_ctx();
2748 let mut domain = domain;
2749 domain.do_not_free_on_drop();
2750 let domain = domain.ptr;
2751 let mut id = id;
2752 id.do_not_free_on_drop();
2753 let id = id.ptr;
2754 let isl_rs_result = unsafe { isl_set_param_pw_aff_on_domain_id(domain, id) };
2755 let isl_rs_result = PwAff { ptr: isl_rs_result,
2756 should_free_on_drop: true };
2757 let err = isl_rs_ctx.last_error();
2758 if err != Error::None_ {
2759 let err_msg = isl_rs_ctx.last_error_msg();
2760 isl_rs_ctx.reset_error();
2761 return Err(LibISLError::new(err, err_msg));
2762 }
2763 Ok(isl_rs_result)
2764 }
2765
2766 pub fn params(self) -> Result<Set, LibISLError> {
2768 let set = self;
2769 let isl_rs_ctx = set.get_ctx();
2770 let mut set = set;
2771 set.do_not_free_on_drop();
2772 let set = set.ptr;
2773 let isl_rs_result = unsafe { isl_set_params(set) };
2774 let isl_rs_result = Set { ptr: isl_rs_result,
2775 should_free_on_drop: true };
2776 let err = isl_rs_ctx.last_error();
2777 if err != Error::None_ {
2778 let err_msg = isl_rs_ctx.last_error_msg();
2779 isl_rs_ctx.reset_error();
2780 return Err(LibISLError::new(err, err_msg));
2781 }
2782 Ok(isl_rs_result)
2783 }
2784
2785 pub fn plain_cmp(&self, set2: &Set) -> Result<i32, LibISLError> {
2787 let set1 = self;
2788 let isl_rs_ctx = set1.get_ctx();
2789 let set1 = set1.ptr;
2790 let set2 = set2.ptr;
2791 let isl_rs_result = unsafe { isl_set_plain_cmp(set1, set2) };
2792 let err = isl_rs_ctx.last_error();
2793 if err != Error::None_ {
2794 let err_msg = isl_rs_ctx.last_error_msg();
2795 isl_rs_ctx.reset_error();
2796 return Err(LibISLError::new(err, err_msg));
2797 }
2798 Ok(isl_rs_result)
2799 }
2800
2801 pub fn plain_get_val_if_fixed(&self, type_: DimType, pos: u32) -> Result<Val, LibISLError> {
2803 let set = self;
2804 let isl_rs_ctx = set.get_ctx();
2805 let set = set.ptr;
2806 let type_ = type_.to_i32();
2807 let isl_rs_result = unsafe { isl_set_plain_get_val_if_fixed(set, type_, pos) };
2808 let isl_rs_result = Val { ptr: isl_rs_result,
2809 should_free_on_drop: true };
2810 let err = isl_rs_ctx.last_error();
2811 if err != Error::None_ {
2812 let err_msg = isl_rs_ctx.last_error_msg();
2813 isl_rs_ctx.reset_error();
2814 return Err(LibISLError::new(err, err_msg));
2815 }
2816 Ok(isl_rs_result)
2817 }
2818
2819 pub fn plain_is_disjoint(&self, set2: &Set) -> Result<bool, LibISLError> {
2821 let set1 = self;
2822 let isl_rs_ctx = set1.get_ctx();
2823 let set1 = set1.ptr;
2824 let set2 = set2.ptr;
2825 let isl_rs_result = unsafe { isl_set_plain_is_disjoint(set1, set2) };
2826 let isl_rs_result = match isl_rs_result {
2827 0 => false,
2828 1 => true,
2829 _ => {
2830 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2831 }
2832 };
2833 let err = isl_rs_ctx.last_error();
2834 if err != Error::None_ {
2835 let err_msg = isl_rs_ctx.last_error_msg();
2836 isl_rs_ctx.reset_error();
2837 return Err(LibISLError::new(err, err_msg));
2838 }
2839 Ok(isl_rs_result)
2840 }
2841
2842 pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
2844 let set = self;
2845 let isl_rs_ctx = set.get_ctx();
2846 let set = set.ptr;
2847 let isl_rs_result = unsafe { isl_set_plain_is_empty(set) };
2848 let isl_rs_result = match isl_rs_result {
2849 0 => false,
2850 1 => true,
2851 _ => {
2852 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2853 }
2854 };
2855 let err = isl_rs_ctx.last_error();
2856 if err != Error::None_ {
2857 let err_msg = isl_rs_ctx.last_error_msg();
2858 isl_rs_ctx.reset_error();
2859 return Err(LibISLError::new(err, err_msg));
2860 }
2861 Ok(isl_rs_result)
2862 }
2863
2864 pub fn plain_is_equal(&self, set2: &Set) -> Result<bool, LibISLError> {
2866 let set1 = self;
2867 let isl_rs_ctx = set1.get_ctx();
2868 let set1 = set1.ptr;
2869 let set2 = set2.ptr;
2870 let isl_rs_result = unsafe { isl_set_plain_is_equal(set1, set2) };
2871 let isl_rs_result = match isl_rs_result {
2872 0 => false,
2873 1 => true,
2874 _ => {
2875 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2876 }
2877 };
2878 let err = isl_rs_ctx.last_error();
2879 if err != Error::None_ {
2880 let err_msg = isl_rs_ctx.last_error_msg();
2881 isl_rs_ctx.reset_error();
2882 return Err(LibISLError::new(err, err_msg));
2883 }
2884 Ok(isl_rs_result)
2885 }
2886
2887 pub fn plain_is_universe(&self) -> Result<bool, LibISLError> {
2889 let set = self;
2890 let isl_rs_ctx = set.get_ctx();
2891 let set = set.ptr;
2892 let isl_rs_result = unsafe { isl_set_plain_is_universe(set) };
2893 let isl_rs_result = match isl_rs_result {
2894 0 => false,
2895 1 => true,
2896 _ => {
2897 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2898 }
2899 };
2900 let err = isl_rs_ctx.last_error();
2901 if err != Error::None_ {
2902 let err_msg = isl_rs_ctx.last_error_msg();
2903 isl_rs_ctx.reset_error();
2904 return Err(LibISLError::new(err, err_msg));
2905 }
2906 Ok(isl_rs_result)
2907 }
2908
2909 pub fn plain_unshifted_simple_hull(self) -> Result<BasicSet, LibISLError> {
2911 let set = self;
2912 let isl_rs_ctx = set.get_ctx();
2913 let mut set = set;
2914 set.do_not_free_on_drop();
2915 let set = set.ptr;
2916 let isl_rs_result = unsafe { isl_set_plain_unshifted_simple_hull(set) };
2917 let isl_rs_result = BasicSet { ptr: isl_rs_result,
2918 should_free_on_drop: true };
2919 let err = isl_rs_ctx.last_error();
2920 if err != Error::None_ {
2921 let err_msg = isl_rs_ctx.last_error_msg();
2922 isl_rs_ctx.reset_error();
2923 return Err(LibISLError::new(err, err_msg));
2924 }
2925 Ok(isl_rs_result)
2926 }
2927
2928 pub fn polyhedral_hull(self) -> Result<BasicSet, LibISLError> {
2930 let set = self;
2931 let isl_rs_ctx = set.get_ctx();
2932 let mut set = set;
2933 set.do_not_free_on_drop();
2934 let set = set.ptr;
2935 let isl_rs_result = unsafe { isl_set_polyhedral_hull(set) };
2936 let isl_rs_result = BasicSet { ptr: isl_rs_result,
2937 should_free_on_drop: true };
2938 let err = isl_rs_ctx.last_error();
2939 if err != Error::None_ {
2940 let err_msg = isl_rs_ctx.last_error_msg();
2941 isl_rs_ctx.reset_error();
2942 return Err(LibISLError::new(err, err_msg));
2943 }
2944 Ok(isl_rs_result)
2945 }
2946
2947 pub fn preimage_multi_aff(self, ma: MultiAff) -> Result<Set, LibISLError> {
2949 let set = self;
2950 let isl_rs_ctx = set.get_ctx();
2951 let mut set = set;
2952 set.do_not_free_on_drop();
2953 let set = set.ptr;
2954 let mut ma = ma;
2955 ma.do_not_free_on_drop();
2956 let ma = ma.ptr;
2957 let isl_rs_result = unsafe { isl_set_preimage_multi_aff(set, ma) };
2958 let isl_rs_result = Set { ptr: isl_rs_result,
2959 should_free_on_drop: true };
2960 let err = isl_rs_ctx.last_error();
2961 if err != Error::None_ {
2962 let err_msg = isl_rs_ctx.last_error_msg();
2963 isl_rs_ctx.reset_error();
2964 return Err(LibISLError::new(err, err_msg));
2965 }
2966 Ok(isl_rs_result)
2967 }
2968
2969 pub fn preimage_multi_pw_aff(self, mpa: MultiPwAff) -> Result<Set, LibISLError> {
2971 let set = self;
2972 let isl_rs_ctx = set.get_ctx();
2973 let mut set = set;
2974 set.do_not_free_on_drop();
2975 let set = set.ptr;
2976 let mut mpa = mpa;
2977 mpa.do_not_free_on_drop();
2978 let mpa = mpa.ptr;
2979 let isl_rs_result = unsafe { isl_set_preimage_multi_pw_aff(set, mpa) };
2980 let isl_rs_result = Set { ptr: isl_rs_result,
2981 should_free_on_drop: true };
2982 let err = isl_rs_ctx.last_error();
2983 if err != Error::None_ {
2984 let err_msg = isl_rs_ctx.last_error_msg();
2985 isl_rs_ctx.reset_error();
2986 return Err(LibISLError::new(err, err_msg));
2987 }
2988 Ok(isl_rs_result)
2989 }
2990
2991 pub fn preimage_pw_multi_aff(self, pma: PwMultiAff) -> Result<Set, LibISLError> {
2993 let set = self;
2994 let isl_rs_ctx = set.get_ctx();
2995 let mut set = set;
2996 set.do_not_free_on_drop();
2997 let set = set.ptr;
2998 let mut pma = pma;
2999 pma.do_not_free_on_drop();
3000 let pma = pma.ptr;
3001 let isl_rs_result = unsafe { isl_set_preimage_pw_multi_aff(set, pma) };
3002 let isl_rs_result = Set { ptr: isl_rs_result,
3003 should_free_on_drop: true };
3004 let err = isl_rs_ctx.last_error();
3005 if err != Error::None_ {
3006 let err_msg = isl_rs_ctx.last_error_msg();
3007 isl_rs_ctx.reset_error();
3008 return Err(LibISLError::new(err, err_msg));
3009 }
3010 Ok(isl_rs_result)
3011 }
3012
3013 pub fn product(self, set2: Set) -> Result<Set, LibISLError> {
3015 let set1 = self;
3016 let isl_rs_ctx = set1.get_ctx();
3017 let mut set1 = set1;
3018 set1.do_not_free_on_drop();
3019 let set1 = set1.ptr;
3020 let mut set2 = set2;
3021 set2.do_not_free_on_drop();
3022 let set2 = set2.ptr;
3023 let isl_rs_result = unsafe { isl_set_product(set1, set2) };
3024 let isl_rs_result = Set { ptr: isl_rs_result,
3025 should_free_on_drop: true };
3026 let err = isl_rs_ctx.last_error();
3027 if err != Error::None_ {
3028 let err_msg = isl_rs_ctx.last_error_msg();
3029 isl_rs_ctx.reset_error();
3030 return Err(LibISLError::new(err, err_msg));
3031 }
3032 Ok(isl_rs_result)
3033 }
3034
3035 pub fn project_onto_map(self, type_: DimType, first: u32, n: u32) -> Result<Map, LibISLError> {
3037 let set = self;
3038 let isl_rs_ctx = set.get_ctx();
3039 let mut set = set;
3040 set.do_not_free_on_drop();
3041 let set = set.ptr;
3042 let type_ = type_.to_i32();
3043 let isl_rs_result = unsafe { isl_set_project_onto_map(set, type_, first, n) };
3044 let isl_rs_result = Map { ptr: isl_rs_result,
3045 should_free_on_drop: true };
3046 let err = isl_rs_ctx.last_error();
3047 if err != Error::None_ {
3048 let err_msg = isl_rs_ctx.last_error_msg();
3049 isl_rs_ctx.reset_error();
3050 return Err(LibISLError::new(err, err_msg));
3051 }
3052 Ok(isl_rs_result)
3053 }
3054
3055 pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<Set, LibISLError> {
3057 let set = self;
3058 let isl_rs_ctx = set.get_ctx();
3059 let mut set = set;
3060 set.do_not_free_on_drop();
3061 let set = set.ptr;
3062 let type_ = type_.to_i32();
3063 let isl_rs_result = unsafe { isl_set_project_out(set, type_, first, n) };
3064 let isl_rs_result = Set { ptr: isl_rs_result,
3065 should_free_on_drop: true };
3066 let err = isl_rs_ctx.last_error();
3067 if err != Error::None_ {
3068 let err_msg = isl_rs_ctx.last_error_msg();
3069 isl_rs_ctx.reset_error();
3070 return Err(LibISLError::new(err, err_msg));
3071 }
3072 Ok(isl_rs_result)
3073 }
3074
3075 pub fn project_out_all_params(self) -> Result<Set, LibISLError> {
3077 let set = self;
3078 let isl_rs_ctx = set.get_ctx();
3079 let mut set = set;
3080 set.do_not_free_on_drop();
3081 let set = set.ptr;
3082 let isl_rs_result = unsafe { isl_set_project_out_all_params(set) };
3083 let isl_rs_result = Set { ptr: isl_rs_result,
3084 should_free_on_drop: true };
3085 let err = isl_rs_ctx.last_error();
3086 if err != Error::None_ {
3087 let err_msg = isl_rs_ctx.last_error_msg();
3088 isl_rs_ctx.reset_error();
3089 return Err(LibISLError::new(err, err_msg));
3090 }
3091 Ok(isl_rs_result)
3092 }
3093
3094 pub fn project_out_param_id(self, id: Id) -> Result<Set, LibISLError> {
3096 let set = self;
3097 let isl_rs_ctx = set.get_ctx();
3098 let mut set = set;
3099 set.do_not_free_on_drop();
3100 let set = set.ptr;
3101 let mut id = id;
3102 id.do_not_free_on_drop();
3103 let id = id.ptr;
3104 let isl_rs_result = unsafe { isl_set_project_out_param_id(set, id) };
3105 let isl_rs_result = Set { ptr: isl_rs_result,
3106 should_free_on_drop: true };
3107 let err = isl_rs_ctx.last_error();
3108 if err != Error::None_ {
3109 let err_msg = isl_rs_ctx.last_error_msg();
3110 isl_rs_ctx.reset_error();
3111 return Err(LibISLError::new(err, err_msg));
3112 }
3113 Ok(isl_rs_result)
3114 }
3115
3116 pub fn project_out_param_id_list(self, list: IdList) -> Result<Set, LibISLError> {
3118 let set = self;
3119 let isl_rs_ctx = set.get_ctx();
3120 let mut set = set;
3121 set.do_not_free_on_drop();
3122 let set = set.ptr;
3123 let mut list = list;
3124 list.do_not_free_on_drop();
3125 let list = list.ptr;
3126 let isl_rs_result = unsafe { isl_set_project_out_param_id_list(set, list) };
3127 let isl_rs_result = Set { ptr: isl_rs_result,
3128 should_free_on_drop: true };
3129 let err = isl_rs_ctx.last_error();
3130 if err != Error::None_ {
3131 let err_msg = isl_rs_ctx.last_error_msg();
3132 isl_rs_ctx.reset_error();
3133 return Err(LibISLError::new(err, err_msg));
3134 }
3135 Ok(isl_rs_result)
3136 }
3137
3138 pub fn pw_aff_on_domain_val(self, v: Val) -> Result<PwAff, LibISLError> {
3140 let domain = self;
3141 let isl_rs_ctx = domain.get_ctx();
3142 let mut domain = domain;
3143 domain.do_not_free_on_drop();
3144 let domain = domain.ptr;
3145 let mut v = v;
3146 v.do_not_free_on_drop();
3147 let v = v.ptr;
3148 let isl_rs_result = unsafe { isl_set_pw_aff_on_domain_val(domain, v) };
3149 let isl_rs_result = PwAff { ptr: isl_rs_result,
3150 should_free_on_drop: true };
3151 let err = isl_rs_ctx.last_error();
3152 if err != Error::None_ {
3153 let err_msg = isl_rs_ctx.last_error_msg();
3154 isl_rs_ctx.reset_error();
3155 return Err(LibISLError::new(err, err_msg));
3156 }
3157 Ok(isl_rs_result)
3158 }
3159
3160 pub fn pw_multi_aff_on_domain_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
3162 let domain = self;
3163 let isl_rs_ctx = domain.get_ctx();
3164 let mut domain = domain;
3165 domain.do_not_free_on_drop();
3166 let domain = domain.ptr;
3167 let mut mv = mv;
3168 mv.do_not_free_on_drop();
3169 let mv = mv.ptr;
3170 let isl_rs_result = unsafe { isl_set_pw_multi_aff_on_domain_multi_val(domain, mv) };
3171 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
3172 should_free_on_drop: true };
3173 let err = isl_rs_ctx.last_error();
3174 if err != Error::None_ {
3175 let err_msg = isl_rs_ctx.last_error_msg();
3176 isl_rs_ctx.reset_error();
3177 return Err(LibISLError::new(err, err_msg));
3178 }
3179 Ok(isl_rs_result)
3180 }
3181
3182 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<Set, LibISLError> {
3184 let isl_rs_ctx = Context { ptr: ctx.ptr,
3185 should_free_on_drop: false };
3186 let ctx = ctx.ptr;
3187 let str_ = CString::new(str_).unwrap();
3188 let str_ = str_.as_ptr();
3189 let isl_rs_result = unsafe { isl_set_read_from_str(ctx, str_) };
3190 let isl_rs_result = Set { ptr: isl_rs_result,
3191 should_free_on_drop: true };
3192 let err = isl_rs_ctx.last_error();
3193 if err != Error::None_ {
3194 let err_msg = isl_rs_ctx.last_error_msg();
3195 isl_rs_ctx.reset_error();
3196 return Err(LibISLError::new(err, err_msg));
3197 }
3198 Ok(isl_rs_result)
3199 }
3200
3201 pub fn remove_dims(self, type_: DimType, first: u32, n: u32) -> Result<Set, LibISLError> {
3203 let bset = self;
3204 let isl_rs_ctx = bset.get_ctx();
3205 let mut bset = bset;
3206 bset.do_not_free_on_drop();
3207 let bset = bset.ptr;
3208 let type_ = type_.to_i32();
3209 let isl_rs_result = unsafe { isl_set_remove_dims(bset, type_, first, n) };
3210 let isl_rs_result = Set { ptr: isl_rs_result,
3211 should_free_on_drop: true };
3212 let err = isl_rs_ctx.last_error();
3213 if err != Error::None_ {
3214 let err_msg = isl_rs_ctx.last_error_msg();
3215 isl_rs_ctx.reset_error();
3216 return Err(LibISLError::new(err, err_msg));
3217 }
3218 Ok(isl_rs_result)
3219 }
3220
3221 pub fn remove_divs(self) -> Result<Set, LibISLError> {
3223 let set = self;
3224 let isl_rs_ctx = set.get_ctx();
3225 let mut set = set;
3226 set.do_not_free_on_drop();
3227 let set = set.ptr;
3228 let isl_rs_result = unsafe { isl_set_remove_divs(set) };
3229 let isl_rs_result = Set { ptr: isl_rs_result,
3230 should_free_on_drop: true };
3231 let err = isl_rs_ctx.last_error();
3232 if err != Error::None_ {
3233 let err_msg = isl_rs_ctx.last_error_msg();
3234 isl_rs_ctx.reset_error();
3235 return Err(LibISLError::new(err, err_msg));
3236 }
3237 Ok(isl_rs_result)
3238 }
3239
3240 pub fn remove_divs_involving_dims(self, type_: DimType, first: u32, n: u32)
3242 -> Result<Set, LibISLError> {
3243 let set = self;
3244 let isl_rs_ctx = set.get_ctx();
3245 let mut set = set;
3246 set.do_not_free_on_drop();
3247 let set = set.ptr;
3248 let type_ = type_.to_i32();
3249 let isl_rs_result = unsafe { isl_set_remove_divs_involving_dims(set, type_, first, n) };
3250 let isl_rs_result = Set { ptr: isl_rs_result,
3251 should_free_on_drop: true };
3252 let err = isl_rs_ctx.last_error();
3253 if err != Error::None_ {
3254 let err_msg = isl_rs_ctx.last_error_msg();
3255 isl_rs_ctx.reset_error();
3256 return Err(LibISLError::new(err, err_msg));
3257 }
3258 Ok(isl_rs_result)
3259 }
3260
3261 pub fn remove_redundancies(self) -> Result<Set, LibISLError> {
3263 let set = self;
3264 let isl_rs_ctx = set.get_ctx();
3265 let mut set = set;
3266 set.do_not_free_on_drop();
3267 let set = set.ptr;
3268 let isl_rs_result = unsafe { isl_set_remove_redundancies(set) };
3269 let isl_rs_result = Set { ptr: isl_rs_result,
3270 should_free_on_drop: true };
3271 let err = isl_rs_ctx.last_error();
3272 if err != Error::None_ {
3273 let err_msg = isl_rs_ctx.last_error_msg();
3274 isl_rs_ctx.reset_error();
3275 return Err(LibISLError::new(err, err_msg));
3276 }
3277 Ok(isl_rs_result)
3278 }
3279
3280 pub fn remove_unknown_divs(self) -> Result<Set, LibISLError> {
3282 let set = self;
3283 let isl_rs_ctx = set.get_ctx();
3284 let mut set = set;
3285 set.do_not_free_on_drop();
3286 let set = set.ptr;
3287 let isl_rs_result = unsafe { isl_set_remove_unknown_divs(set) };
3288 let isl_rs_result = Set { ptr: isl_rs_result,
3289 should_free_on_drop: true };
3290 let err = isl_rs_ctx.last_error();
3291 if err != Error::None_ {
3292 let err_msg = isl_rs_ctx.last_error_msg();
3293 isl_rs_ctx.reset_error();
3294 return Err(LibISLError::new(err, err_msg));
3295 }
3296 Ok(isl_rs_result)
3297 }
3298
3299 pub fn reset_space(self, space: Space) -> Result<Set, LibISLError> {
3301 let set = self;
3302 let isl_rs_ctx = set.get_ctx();
3303 let mut set = set;
3304 set.do_not_free_on_drop();
3305 let set = set.ptr;
3306 let mut space = space;
3307 space.do_not_free_on_drop();
3308 let space = space.ptr;
3309 let isl_rs_result = unsafe { isl_set_reset_space(set, space) };
3310 let isl_rs_result = Set { ptr: isl_rs_result,
3311 should_free_on_drop: true };
3312 let err = isl_rs_ctx.last_error();
3313 if err != Error::None_ {
3314 let err_msg = isl_rs_ctx.last_error_msg();
3315 isl_rs_ctx.reset_error();
3316 return Err(LibISLError::new(err, err_msg));
3317 }
3318 Ok(isl_rs_result)
3319 }
3320
3321 pub fn reset_tuple_id(self) -> Result<Set, LibISLError> {
3323 let set = self;
3324 let isl_rs_ctx = set.get_ctx();
3325 let mut set = set;
3326 set.do_not_free_on_drop();
3327 let set = set.ptr;
3328 let isl_rs_result = unsafe { isl_set_reset_tuple_id(set) };
3329 let isl_rs_result = Set { ptr: isl_rs_result,
3330 should_free_on_drop: true };
3331 let err = isl_rs_ctx.last_error();
3332 if err != Error::None_ {
3333 let err_msg = isl_rs_ctx.last_error_msg();
3334 isl_rs_ctx.reset_error();
3335 return Err(LibISLError::new(err, err_msg));
3336 }
3337 Ok(isl_rs_result)
3338 }
3339
3340 pub fn reset_user(self) -> Result<Set, LibISLError> {
3342 let set = self;
3343 let isl_rs_ctx = set.get_ctx();
3344 let mut set = set;
3345 set.do_not_free_on_drop();
3346 let set = set.ptr;
3347 let isl_rs_result = unsafe { isl_set_reset_user(set) };
3348 let isl_rs_result = Set { ptr: isl_rs_result,
3349 should_free_on_drop: true };
3350 let err = isl_rs_ctx.last_error();
3351 if err != Error::None_ {
3352 let err_msg = isl_rs_ctx.last_error_msg();
3353 isl_rs_ctx.reset_error();
3354 return Err(LibISLError::new(err, err_msg));
3355 }
3356 Ok(isl_rs_result)
3357 }
3358
3359 pub fn sample(self) -> Result<BasicSet, LibISLError> {
3361 let set = self;
3362 let isl_rs_ctx = set.get_ctx();
3363 let mut set = set;
3364 set.do_not_free_on_drop();
3365 let set = set.ptr;
3366 let isl_rs_result = unsafe { isl_set_sample(set) };
3367 let isl_rs_result = BasicSet { ptr: isl_rs_result,
3368 should_free_on_drop: true };
3369 let err = isl_rs_ctx.last_error();
3370 if err != Error::None_ {
3371 let err_msg = isl_rs_ctx.last_error_msg();
3372 isl_rs_ctx.reset_error();
3373 return Err(LibISLError::new(err, err_msg));
3374 }
3375 Ok(isl_rs_result)
3376 }
3377
3378 pub fn sample_point(self) -> Result<Point, LibISLError> {
3380 let set = self;
3381 let isl_rs_ctx = set.get_ctx();
3382 let mut set = set;
3383 set.do_not_free_on_drop();
3384 let set = set.ptr;
3385 let isl_rs_result = unsafe { isl_set_sample_point(set) };
3386 let isl_rs_result = Point { ptr: isl_rs_result,
3387 should_free_on_drop: true };
3388 let err = isl_rs_ctx.last_error();
3389 if err != Error::None_ {
3390 let err_msg = isl_rs_ctx.last_error_msg();
3391 isl_rs_ctx.reset_error();
3392 return Err(LibISLError::new(err, err_msg));
3393 }
3394 Ok(isl_rs_result)
3395 }
3396
3397 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<Set, LibISLError> {
3399 let set = self;
3400 let isl_rs_ctx = set.get_ctx();
3401 let mut set = set;
3402 set.do_not_free_on_drop();
3403 let set = set.ptr;
3404 let type_ = type_.to_i32();
3405 let mut id = id;
3406 id.do_not_free_on_drop();
3407 let id = id.ptr;
3408 let isl_rs_result = unsafe { isl_set_set_dim_id(set, type_, pos, id) };
3409 let isl_rs_result = Set { ptr: isl_rs_result,
3410 should_free_on_drop: true };
3411 let err = isl_rs_ctx.last_error();
3412 if err != Error::None_ {
3413 let err_msg = isl_rs_ctx.last_error_msg();
3414 isl_rs_ctx.reset_error();
3415 return Err(LibISLError::new(err, err_msg));
3416 }
3417 Ok(isl_rs_result)
3418 }
3419
3420 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Result<Set, LibISLError> {
3422 let set = self;
3423 let isl_rs_ctx = set.get_ctx();
3424 let mut set = set;
3425 set.do_not_free_on_drop();
3426 let set = set.ptr;
3427 let type_ = type_.to_i32();
3428 let s = CString::new(s).unwrap();
3429 let s = s.as_ptr();
3430 let isl_rs_result = unsafe { isl_set_set_dim_name(set, type_, pos, s) };
3431 let isl_rs_result = Set { ptr: isl_rs_result,
3432 should_free_on_drop: true };
3433 let err = isl_rs_ctx.last_error();
3434 if err != Error::None_ {
3435 let err_msg = isl_rs_ctx.last_error_msg();
3436 isl_rs_ctx.reset_error();
3437 return Err(LibISLError::new(err, err_msg));
3438 }
3439 Ok(isl_rs_result)
3440 }
3441
3442 pub fn set_tuple_id(self, id: Id) -> Result<Set, LibISLError> {
3444 let set = self;
3445 let isl_rs_ctx = set.get_ctx();
3446 let mut set = set;
3447 set.do_not_free_on_drop();
3448 let set = set.ptr;
3449 let mut id = id;
3450 id.do_not_free_on_drop();
3451 let id = id.ptr;
3452 let isl_rs_result = unsafe { isl_set_set_tuple_id(set, id) };
3453 let isl_rs_result = Set { ptr: isl_rs_result,
3454 should_free_on_drop: true };
3455 let err = isl_rs_ctx.last_error();
3456 if err != Error::None_ {
3457 let err_msg = isl_rs_ctx.last_error_msg();
3458 isl_rs_ctx.reset_error();
3459 return Err(LibISLError::new(err, err_msg));
3460 }
3461 Ok(isl_rs_result)
3462 }
3463
3464 pub fn set_tuple_name(self, s: &str) -> Result<Set, LibISLError> {
3466 let set = self;
3467 let isl_rs_ctx = set.get_ctx();
3468 let mut set = set;
3469 set.do_not_free_on_drop();
3470 let set = set.ptr;
3471 let s = CString::new(s).unwrap();
3472 let s = s.as_ptr();
3473 let isl_rs_result = unsafe { isl_set_set_tuple_name(set, s) };
3474 let isl_rs_result = Set { ptr: isl_rs_result,
3475 should_free_on_drop: true };
3476 let err = isl_rs_ctx.last_error();
3477 if err != Error::None_ {
3478 let err_msg = isl_rs_ctx.last_error_msg();
3479 isl_rs_ctx.reset_error();
3480 return Err(LibISLError::new(err, err_msg));
3481 }
3482 Ok(isl_rs_result)
3483 }
3484
3485 pub fn simple_hull(self) -> Result<BasicSet, LibISLError> {
3487 let set = self;
3488 let isl_rs_ctx = set.get_ctx();
3489 let mut set = set;
3490 set.do_not_free_on_drop();
3491 let set = set.ptr;
3492 let isl_rs_result = unsafe { isl_set_simple_hull(set) };
3493 let isl_rs_result = BasicSet { ptr: isl_rs_result,
3494 should_free_on_drop: true };
3495 let err = isl_rs_ctx.last_error();
3496 if err != Error::None_ {
3497 let err_msg = isl_rs_ctx.last_error_msg();
3498 isl_rs_ctx.reset_error();
3499 return Err(LibISLError::new(err, err_msg));
3500 }
3501 Ok(isl_rs_result)
3502 }
3503
3504 pub fn size(&self) -> Result<i32, LibISLError> {
3506 let set = self;
3507 let isl_rs_ctx = set.get_ctx();
3508 let set = set.ptr;
3509 let isl_rs_result = unsafe { isl_set_size(set) };
3510 let err = isl_rs_ctx.last_error();
3511 if err != Error::None_ {
3512 let err_msg = isl_rs_ctx.last_error_msg();
3513 isl_rs_ctx.reset_error();
3514 return Err(LibISLError::new(err, err_msg));
3515 }
3516 Ok(isl_rs_result)
3517 }
3518
3519 pub fn solutions(self) -> Result<BasicSet, LibISLError> {
3521 let set = self;
3522 let isl_rs_ctx = set.get_ctx();
3523 let mut set = set;
3524 set.do_not_free_on_drop();
3525 let set = set.ptr;
3526 let isl_rs_result = unsafe { isl_set_solutions(set) };
3527 let isl_rs_result = BasicSet { ptr: isl_rs_result,
3528 should_free_on_drop: true };
3529 let err = isl_rs_ctx.last_error();
3530 if err != Error::None_ {
3531 let err_msg = isl_rs_ctx.last_error_msg();
3532 isl_rs_ctx.reset_error();
3533 return Err(LibISLError::new(err, err_msg));
3534 }
3535 Ok(isl_rs_result)
3536 }
3537
3538 pub fn split_dims(self, type_: DimType, first: u32, n: u32) -> Result<Set, LibISLError> {
3540 let set = self;
3541 let isl_rs_ctx = set.get_ctx();
3542 let mut set = set;
3543 set.do_not_free_on_drop();
3544 let set = set.ptr;
3545 let type_ = type_.to_i32();
3546 let isl_rs_result = unsafe { isl_set_split_dims(set, type_, first, n) };
3547 let isl_rs_result = Set { ptr: isl_rs_result,
3548 should_free_on_drop: true };
3549 let err = isl_rs_ctx.last_error();
3550 if err != Error::None_ {
3551 let err_msg = isl_rs_ctx.last_error_msg();
3552 isl_rs_ctx.reset_error();
3553 return Err(LibISLError::new(err, err_msg));
3554 }
3555 Ok(isl_rs_result)
3556 }
3557
3558 pub fn subtract(self, set2: Set) -> Result<Set, LibISLError> {
3560 let set1 = self;
3561 let isl_rs_ctx = set1.get_ctx();
3562 let mut set1 = set1;
3563 set1.do_not_free_on_drop();
3564 let set1 = set1.ptr;
3565 let mut set2 = set2;
3566 set2.do_not_free_on_drop();
3567 let set2 = set2.ptr;
3568 let isl_rs_result = unsafe { isl_set_subtract(set1, set2) };
3569 let isl_rs_result = Set { ptr: isl_rs_result,
3570 should_free_on_drop: true };
3571 let err = isl_rs_ctx.last_error();
3572 if err != Error::None_ {
3573 let err_msg = isl_rs_ctx.last_error_msg();
3574 isl_rs_ctx.reset_error();
3575 return Err(LibISLError::new(err, err_msg));
3576 }
3577 Ok(isl_rs_result)
3578 }
3579
3580 pub fn sum(self, set2: Set) -> Result<Set, LibISLError> {
3582 let set1 = self;
3583 let isl_rs_ctx = set1.get_ctx();
3584 let mut set1 = set1;
3585 set1.do_not_free_on_drop();
3586 let set1 = set1.ptr;
3587 let mut set2 = set2;
3588 set2.do_not_free_on_drop();
3589 let set2 = set2.ptr;
3590 let isl_rs_result = unsafe { isl_set_sum(set1, set2) };
3591 let isl_rs_result = Set { ptr: isl_rs_result,
3592 should_free_on_drop: true };
3593 let err = isl_rs_ctx.last_error();
3594 if err != Error::None_ {
3595 let err_msg = isl_rs_ctx.last_error_msg();
3596 isl_rs_ctx.reset_error();
3597 return Err(LibISLError::new(err, err_msg));
3598 }
3599 Ok(isl_rs_result)
3600 }
3601
3602 pub fn to_list(self) -> Result<SetList, LibISLError> {
3604 let el = self;
3605 let isl_rs_ctx = el.get_ctx();
3606 let mut el = el;
3607 el.do_not_free_on_drop();
3608 let el = el.ptr;
3609 let isl_rs_result = unsafe { isl_set_to_list(el) };
3610 let isl_rs_result = SetList { ptr: isl_rs_result,
3611 should_free_on_drop: true };
3612 let err = isl_rs_ctx.last_error();
3613 if err != Error::None_ {
3614 let err_msg = isl_rs_ctx.last_error_msg();
3615 isl_rs_ctx.reset_error();
3616 return Err(LibISLError::new(err, err_msg));
3617 }
3618 Ok(isl_rs_result)
3619 }
3620
3621 pub fn to_str(&self) -> Result<&str, LibISLError> {
3623 let set = self;
3624 let isl_rs_ctx = set.get_ctx();
3625 let set = set.ptr;
3626 let isl_rs_result = unsafe { isl_set_to_str(set) };
3627 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
3628 let isl_rs_result = isl_rs_result.to_str().unwrap();
3629 let err = isl_rs_ctx.last_error();
3630 if err != Error::None_ {
3631 let err_msg = isl_rs_ctx.last_error_msg();
3632 isl_rs_ctx.reset_error();
3633 return Err(LibISLError::new(err, err_msg));
3634 }
3635 Ok(isl_rs_result)
3636 }
3637
3638 pub fn to_union_set(self) -> Result<UnionSet, LibISLError> {
3640 let set = self;
3641 let isl_rs_ctx = set.get_ctx();
3642 let mut set = set;
3643 set.do_not_free_on_drop();
3644 let set = set.ptr;
3645 let isl_rs_result = unsafe { isl_set_to_union_set(set) };
3646 let isl_rs_result = UnionSet { ptr: isl_rs_result,
3647 should_free_on_drop: true };
3648 let err = isl_rs_ctx.last_error();
3649 if err != Error::None_ {
3650 let err_msg = isl_rs_ctx.last_error_msg();
3651 isl_rs_ctx.reset_error();
3652 return Err(LibISLError::new(err, err_msg));
3653 }
3654 Ok(isl_rs_result)
3655 }
3656
3657 pub fn translation(self) -> Result<Map, LibISLError> {
3659 let deltas = self;
3660 let isl_rs_ctx = deltas.get_ctx();
3661 let mut deltas = deltas;
3662 deltas.do_not_free_on_drop();
3663 let deltas = deltas.ptr;
3664 let isl_rs_result = unsafe { isl_set_translation(deltas) };
3665 let isl_rs_result = Map { ptr: isl_rs_result,
3666 should_free_on_drop: true };
3667 let err = isl_rs_ctx.last_error();
3668 if err != Error::None_ {
3669 let err_msg = isl_rs_ctx.last_error_msg();
3670 isl_rs_ctx.reset_error();
3671 return Err(LibISLError::new(err, err_msg));
3672 }
3673 Ok(isl_rs_result)
3674 }
3675
3676 pub fn tuple_dim(&self) -> Result<i32, LibISLError> {
3678 let set = self;
3679 let isl_rs_ctx = set.get_ctx();
3680 let set = set.ptr;
3681 let isl_rs_result = unsafe { isl_set_tuple_dim(set) };
3682 let err = isl_rs_ctx.last_error();
3683 if err != Error::None_ {
3684 let err_msg = isl_rs_ctx.last_error_msg();
3685 isl_rs_ctx.reset_error();
3686 return Err(LibISLError::new(err, err_msg));
3687 }
3688 Ok(isl_rs_result)
3689 }
3690
3691 pub fn unbind_params(self, tuple: MultiId) -> Result<Set, LibISLError> {
3693 let set = self;
3694 let isl_rs_ctx = set.get_ctx();
3695 let mut set = set;
3696 set.do_not_free_on_drop();
3697 let set = set.ptr;
3698 let mut tuple = tuple;
3699 tuple.do_not_free_on_drop();
3700 let tuple = tuple.ptr;
3701 let isl_rs_result = unsafe { isl_set_unbind_params(set, tuple) };
3702 let isl_rs_result = Set { ptr: isl_rs_result,
3703 should_free_on_drop: true };
3704 let err = isl_rs_ctx.last_error();
3705 if err != Error::None_ {
3706 let err_msg = isl_rs_ctx.last_error_msg();
3707 isl_rs_ctx.reset_error();
3708 return Err(LibISLError::new(err, err_msg));
3709 }
3710 Ok(isl_rs_result)
3711 }
3712
3713 pub fn unbind_params_insert_domain(self, domain: MultiId) -> Result<Map, LibISLError> {
3715 let set = self;
3716 let isl_rs_ctx = set.get_ctx();
3717 let mut set = set;
3718 set.do_not_free_on_drop();
3719 let set = set.ptr;
3720 let mut domain = domain;
3721 domain.do_not_free_on_drop();
3722 let domain = domain.ptr;
3723 let isl_rs_result = unsafe { isl_set_unbind_params_insert_domain(set, domain) };
3724 let isl_rs_result = Map { ptr: isl_rs_result,
3725 should_free_on_drop: true };
3726 let err = isl_rs_ctx.last_error();
3727 if err != Error::None_ {
3728 let err_msg = isl_rs_ctx.last_error_msg();
3729 isl_rs_ctx.reset_error();
3730 return Err(LibISLError::new(err, err_msg));
3731 }
3732 Ok(isl_rs_result)
3733 }
3734
3735 pub fn union(self, set2: Set) -> Result<Set, LibISLError> {
3737 let set1 = self;
3738 let isl_rs_ctx = set1.get_ctx();
3739 let mut set1 = set1;
3740 set1.do_not_free_on_drop();
3741 let set1 = set1.ptr;
3742 let mut set2 = set2;
3743 set2.do_not_free_on_drop();
3744 let set2 = set2.ptr;
3745 let isl_rs_result = unsafe { isl_set_union(set1, set2) };
3746 let isl_rs_result = Set { ptr: isl_rs_result,
3747 should_free_on_drop: true };
3748 let err = isl_rs_ctx.last_error();
3749 if err != Error::None_ {
3750 let err_msg = isl_rs_ctx.last_error_msg();
3751 isl_rs_ctx.reset_error();
3752 return Err(LibISLError::new(err, err_msg));
3753 }
3754 Ok(isl_rs_result)
3755 }
3756
3757 pub fn union_disjoint(self, set2: Set) -> Result<Set, LibISLError> {
3759 let set1 = self;
3760 let isl_rs_ctx = set1.get_ctx();
3761 let mut set1 = set1;
3762 set1.do_not_free_on_drop();
3763 let set1 = set1.ptr;
3764 let mut set2 = set2;
3765 set2.do_not_free_on_drop();
3766 let set2 = set2.ptr;
3767 let isl_rs_result = unsafe { isl_set_union_disjoint(set1, set2) };
3768 let isl_rs_result = Set { ptr: isl_rs_result,
3769 should_free_on_drop: true };
3770 let err = isl_rs_ctx.last_error();
3771 if err != Error::None_ {
3772 let err_msg = isl_rs_ctx.last_error_msg();
3773 isl_rs_ctx.reset_error();
3774 return Err(LibISLError::new(err, err_msg));
3775 }
3776 Ok(isl_rs_result)
3777 }
3778
3779 pub fn universe(space: Space) -> Result<Set, LibISLError> {
3781 let isl_rs_ctx = space.get_ctx();
3782 let mut space = space;
3783 space.do_not_free_on_drop();
3784 let space = space.ptr;
3785 let isl_rs_result = unsafe { isl_set_universe(space) };
3786 let isl_rs_result = Set { ptr: isl_rs_result,
3787 should_free_on_drop: true };
3788 let err = isl_rs_ctx.last_error();
3789 if err != Error::None_ {
3790 let err_msg = isl_rs_ctx.last_error_msg();
3791 isl_rs_ctx.reset_error();
3792 return Err(LibISLError::new(err, err_msg));
3793 }
3794 Ok(isl_rs_result)
3795 }
3796
3797 pub fn unshifted_simple_hull(self) -> Result<BasicSet, LibISLError> {
3799 let set = self;
3800 let isl_rs_ctx = set.get_ctx();
3801 let mut set = set;
3802 set.do_not_free_on_drop();
3803 let set = set.ptr;
3804 let isl_rs_result = unsafe { isl_set_unshifted_simple_hull(set) };
3805 let isl_rs_result = BasicSet { ptr: isl_rs_result,
3806 should_free_on_drop: true };
3807 let err = isl_rs_ctx.last_error();
3808 if err != Error::None_ {
3809 let err_msg = isl_rs_ctx.last_error_msg();
3810 isl_rs_ctx.reset_error();
3811 return Err(LibISLError::new(err, err_msg));
3812 }
3813 Ok(isl_rs_result)
3814 }
3815
3816 pub fn unshifted_simple_hull_from_set_list(self, list: SetList)
3818 -> Result<BasicSet, LibISLError> {
3819 let set = self;
3820 let isl_rs_ctx = set.get_ctx();
3821 let mut set = set;
3822 set.do_not_free_on_drop();
3823 let set = set.ptr;
3824 let mut list = list;
3825 list.do_not_free_on_drop();
3826 let list = list.ptr;
3827 let isl_rs_result = unsafe { isl_set_unshifted_simple_hull_from_set_list(set, list) };
3828 let isl_rs_result = BasicSet { ptr: isl_rs_result,
3829 should_free_on_drop: true };
3830 let err = isl_rs_ctx.last_error();
3831 if err != Error::None_ {
3832 let err_msg = isl_rs_ctx.last_error_msg();
3833 isl_rs_ctx.reset_error();
3834 return Err(LibISLError::new(err, err_msg));
3835 }
3836 Ok(isl_rs_result)
3837 }
3838
3839 pub fn unwrap(self) -> Result<Map, LibISLError> {
3841 let set = self;
3842 let isl_rs_ctx = set.get_ctx();
3843 let mut set = set;
3844 set.do_not_free_on_drop();
3845 let set = set.ptr;
3846 let isl_rs_result = unsafe { isl_set_unwrap(set) };
3847 let isl_rs_result = Map { ptr: isl_rs_result,
3848 should_free_on_drop: true };
3849 let err = isl_rs_ctx.last_error();
3850 if err != Error::None_ {
3851 let err_msg = isl_rs_ctx.last_error_msg();
3852 isl_rs_ctx.reset_error();
3853 return Err(LibISLError::new(err, err_msg));
3854 }
3855 Ok(isl_rs_result)
3856 }
3857
3858 pub fn upper_bound_multi_pw_aff(self, upper: MultiPwAff) -> Result<Set, LibISLError> {
3860 let set = self;
3861 let isl_rs_ctx = set.get_ctx();
3862 let mut set = set;
3863 set.do_not_free_on_drop();
3864 let set = set.ptr;
3865 let mut upper = upper;
3866 upper.do_not_free_on_drop();
3867 let upper = upper.ptr;
3868 let isl_rs_result = unsafe { isl_set_upper_bound_multi_pw_aff(set, upper) };
3869 let isl_rs_result = Set { ptr: isl_rs_result,
3870 should_free_on_drop: true };
3871 let err = isl_rs_ctx.last_error();
3872 if err != Error::None_ {
3873 let err_msg = isl_rs_ctx.last_error_msg();
3874 isl_rs_ctx.reset_error();
3875 return Err(LibISLError::new(err, err_msg));
3876 }
3877 Ok(isl_rs_result)
3878 }
3879
3880 pub fn upper_bound_multi_val(self, upper: MultiVal) -> Result<Set, LibISLError> {
3882 let set = self;
3883 let isl_rs_ctx = set.get_ctx();
3884 let mut set = set;
3885 set.do_not_free_on_drop();
3886 let set = set.ptr;
3887 let mut upper = upper;
3888 upper.do_not_free_on_drop();
3889 let upper = upper.ptr;
3890 let isl_rs_result = unsafe { isl_set_upper_bound_multi_val(set, upper) };
3891 let isl_rs_result = Set { ptr: isl_rs_result,
3892 should_free_on_drop: true };
3893 let err = isl_rs_ctx.last_error();
3894 if err != Error::None_ {
3895 let err_msg = isl_rs_ctx.last_error_msg();
3896 isl_rs_ctx.reset_error();
3897 return Err(LibISLError::new(err, err_msg));
3898 }
3899 Ok(isl_rs_result)
3900 }
3901
3902 pub fn upper_bound_si(self, type_: DimType, pos: u32, value: i32) -> Result<Set, LibISLError> {
3904 let set = self;
3905 let isl_rs_ctx = set.get_ctx();
3906 let mut set = set;
3907 set.do_not_free_on_drop();
3908 let set = set.ptr;
3909 let type_ = type_.to_i32();
3910 let isl_rs_result = unsafe { isl_set_upper_bound_si(set, type_, pos, value) };
3911 let isl_rs_result = Set { ptr: isl_rs_result,
3912 should_free_on_drop: true };
3913 let err = isl_rs_ctx.last_error();
3914 if err != Error::None_ {
3915 let err_msg = isl_rs_ctx.last_error_msg();
3916 isl_rs_ctx.reset_error();
3917 return Err(LibISLError::new(err, err_msg));
3918 }
3919 Ok(isl_rs_result)
3920 }
3921
3922 pub fn upper_bound_val(self, type_: DimType, pos: u32, value: Val) -> Result<Set, LibISLError> {
3924 let set = self;
3925 let isl_rs_ctx = set.get_ctx();
3926 let mut set = set;
3927 set.do_not_free_on_drop();
3928 let set = set.ptr;
3929 let type_ = type_.to_i32();
3930 let mut value = value;
3931 value.do_not_free_on_drop();
3932 let value = value.ptr;
3933 let isl_rs_result = unsafe { isl_set_upper_bound_val(set, type_, pos, value) };
3934 let isl_rs_result = Set { ptr: isl_rs_result,
3935 should_free_on_drop: true };
3936 let err = isl_rs_ctx.last_error();
3937 if err != Error::None_ {
3938 let err_msg = isl_rs_ctx.last_error_msg();
3939 isl_rs_ctx.reset_error();
3940 return Err(LibISLError::new(err, err_msg));
3941 }
3942 Ok(isl_rs_result)
3943 }
3944
3945 pub fn wrapped_domain_map(self) -> Result<Map, LibISLError> {
3947 let set = self;
3948 let isl_rs_ctx = set.get_ctx();
3949 let mut set = set;
3950 set.do_not_free_on_drop();
3951 let set = set.ptr;
3952 let isl_rs_result = unsafe { isl_set_wrapped_domain_map(set) };
3953 let isl_rs_result = Map { ptr: isl_rs_result,
3954 should_free_on_drop: true };
3955 let err = isl_rs_ctx.last_error();
3956 if err != Error::None_ {
3957 let err_msg = isl_rs_ctx.last_error_msg();
3958 isl_rs_ctx.reset_error();
3959 return Err(LibISLError::new(err, err_msg));
3960 }
3961 Ok(isl_rs_result)
3962 }
3963
3964 pub fn wrapped_reverse(self) -> Result<Set, LibISLError> {
3966 let set = self;
3967 let isl_rs_ctx = set.get_ctx();
3968 let mut set = set;
3969 set.do_not_free_on_drop();
3970 let set = set.ptr;
3971 let isl_rs_result = unsafe { isl_set_wrapped_reverse(set) };
3972 let isl_rs_result = Set { ptr: isl_rs_result,
3973 should_free_on_drop: true };
3974 let err = isl_rs_ctx.last_error();
3975 if err != Error::None_ {
3976 let err_msg = isl_rs_ctx.last_error_msg();
3977 isl_rs_ctx.reset_error();
3978 return Err(LibISLError::new(err, err_msg));
3979 }
3980 Ok(isl_rs_result)
3981 }
3982
3983 pub fn do_not_free_on_drop(&mut self) {
3985 self.should_free_on_drop = false;
3986 }
3987}
3988
3989impl Drop for Set {
3990 fn drop(&mut self) {
3991 if self.should_free_on_drop {
3992 unsafe {
3993 isl_set_free(self.ptr);
3994 }
3995 }
3996 }
3997}