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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
407 }
408 Ok(isl_rs_result)
409 }
410
411 pub fn add_dims(self, type_: DimType, n: u32) -> Result<Set, LibISLError> {
413 let set = self;
414 let isl_rs_ctx = set.get_ctx();
415 let mut set = set;
416 set.do_not_free_on_drop();
417 let set = set.ptr;
418 let type_ = type_.to_i32();
419 let isl_rs_result = unsafe { isl_set_add_dims(set, type_, n) };
420 let isl_rs_result = Set { ptr: isl_rs_result,
421 should_free_on_drop: true };
422 let err = isl_rs_ctx.last_error();
423 if err != Error::None_ {
424 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
425 }
426 Ok(isl_rs_result)
427 }
428
429 pub fn affine_hull(self) -> Result<BasicSet, LibISLError> {
431 let set = self;
432 let isl_rs_ctx = set.get_ctx();
433 let mut set = set;
434 set.do_not_free_on_drop();
435 let set = set.ptr;
436 let isl_rs_result = unsafe { isl_set_affine_hull(set) };
437 let isl_rs_result = BasicSet { ptr: isl_rs_result,
438 should_free_on_drop: true };
439 let err = isl_rs_ctx.last_error();
440 if err != Error::None_ {
441 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
442 }
443 Ok(isl_rs_result)
444 }
445
446 pub fn align_divs(self) -> Result<Set, LibISLError> {
448 let set = self;
449 let isl_rs_ctx = set.get_ctx();
450 let mut set = set;
451 set.do_not_free_on_drop();
452 let set = set.ptr;
453 let isl_rs_result = unsafe { isl_set_align_divs(set) };
454 let isl_rs_result = Set { ptr: isl_rs_result,
455 should_free_on_drop: true };
456 let err = isl_rs_ctx.last_error();
457 if err != Error::None_ {
458 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
459 }
460 Ok(isl_rs_result)
461 }
462
463 pub fn align_params(self, model: Space) -> Result<Set, LibISLError> {
465 let set = self;
466 let isl_rs_ctx = set.get_ctx();
467 let mut set = set;
468 set.do_not_free_on_drop();
469 let set = set.ptr;
470 let mut model = model;
471 model.do_not_free_on_drop();
472 let model = model.ptr;
473 let isl_rs_result = unsafe { isl_set_align_params(set, model) };
474 let isl_rs_result = Set { ptr: isl_rs_result,
475 should_free_on_drop: true };
476 let err = isl_rs_ctx.last_error();
477 if err != Error::None_ {
478 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
479 }
480 Ok(isl_rs_result)
481 }
482
483 pub fn apply(self, map: Map) -> Result<Set, LibISLError> {
485 let set = self;
486 let isl_rs_ctx = set.get_ctx();
487 let mut set = set;
488 set.do_not_free_on_drop();
489 let set = set.ptr;
490 let mut map = map;
491 map.do_not_free_on_drop();
492 let map = map.ptr;
493 let isl_rs_result = unsafe { isl_set_apply(set, map) };
494 let isl_rs_result = Set { ptr: isl_rs_result,
495 should_free_on_drop: true };
496 let err = isl_rs_ctx.last_error();
497 if err != Error::None_ {
498 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
499 }
500 Ok(isl_rs_result)
501 }
502
503 pub fn as_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
505 let set = self;
506 let isl_rs_ctx = set.get_ctx();
507 let mut set = set;
508 set.do_not_free_on_drop();
509 let set = set.ptr;
510 let isl_rs_result = unsafe { isl_set_as_pw_multi_aff(set) };
511 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
512 should_free_on_drop: true };
513 let err = isl_rs_ctx.last_error();
514 if err != Error::None_ {
515 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
516 }
517 Ok(isl_rs_result)
518 }
519
520 pub fn bind(self, tuple: MultiId) -> Result<Set, LibISLError> {
522 let set = self;
523 let isl_rs_ctx = set.get_ctx();
524 let mut set = set;
525 set.do_not_free_on_drop();
526 let set = set.ptr;
527 let mut tuple = tuple;
528 tuple.do_not_free_on_drop();
529 let tuple = tuple.ptr;
530 let isl_rs_result = unsafe { isl_set_bind(set, tuple) };
531 let isl_rs_result = Set { ptr: isl_rs_result,
532 should_free_on_drop: true };
533 let err = isl_rs_ctx.last_error();
534 if err != Error::None_ {
535 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
536 }
537 Ok(isl_rs_result)
538 }
539
540 pub fn bounded_simple_hull(self) -> Result<BasicSet, LibISLError> {
542 let set = self;
543 let isl_rs_ctx = set.get_ctx();
544 let mut set = set;
545 set.do_not_free_on_drop();
546 let set = set.ptr;
547 let isl_rs_result = unsafe { isl_set_bounded_simple_hull(set) };
548 let isl_rs_result = BasicSet { ptr: isl_rs_result,
549 should_free_on_drop: true };
550 let err = isl_rs_ctx.last_error();
551 if err != Error::None_ {
552 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
553 }
554 Ok(isl_rs_result)
555 }
556
557 pub fn box_from_points(pnt1: Point, pnt2: Point) -> Result<Set, LibISLError> {
559 let isl_rs_ctx = pnt1.get_ctx();
560 let mut pnt1 = pnt1;
561 pnt1.do_not_free_on_drop();
562 let pnt1 = pnt1.ptr;
563 let mut pnt2 = pnt2;
564 pnt2.do_not_free_on_drop();
565 let pnt2 = pnt2.ptr;
566 let isl_rs_result = unsafe { isl_set_box_from_points(pnt1, pnt2) };
567 let isl_rs_result = Set { ptr: isl_rs_result,
568 should_free_on_drop: true };
569 let err = isl_rs_ctx.last_error();
570 if err != Error::None_ {
571 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
572 }
573 Ok(isl_rs_result)
574 }
575
576 pub fn coalesce(self) -> Result<Set, LibISLError> {
578 let set = self;
579 let isl_rs_ctx = set.get_ctx();
580 let mut set = set;
581 set.do_not_free_on_drop();
582 let set = set.ptr;
583 let isl_rs_result = unsafe { isl_set_coalesce(set) };
584 let isl_rs_result = Set { ptr: isl_rs_result,
585 should_free_on_drop: true };
586 let err = isl_rs_ctx.last_error();
587 if err != Error::None_ {
588 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
589 }
590 Ok(isl_rs_result)
591 }
592
593 pub fn coefficients(self) -> Result<BasicSet, LibISLError> {
595 let set = self;
596 let isl_rs_ctx = set.get_ctx();
597 let mut set = set;
598 set.do_not_free_on_drop();
599 let set = set.ptr;
600 let isl_rs_result = unsafe { isl_set_coefficients(set) };
601 let isl_rs_result = BasicSet { ptr: isl_rs_result,
602 should_free_on_drop: true };
603 let err = isl_rs_ctx.last_error();
604 if err != Error::None_ {
605 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
606 }
607 Ok(isl_rs_result)
608 }
609
610 pub fn complement(self) -> Result<Set, LibISLError> {
612 let set = self;
613 let isl_rs_ctx = set.get_ctx();
614 let mut set = set;
615 set.do_not_free_on_drop();
616 let set = set.ptr;
617 let isl_rs_result = unsafe { isl_set_complement(set) };
618 let isl_rs_result = Set { ptr: isl_rs_result,
619 should_free_on_drop: true };
620 let err = isl_rs_ctx.last_error();
621 if err != Error::None_ {
622 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
623 }
624 Ok(isl_rs_result)
625 }
626
627 pub fn compute_divs(self) -> Result<Set, LibISLError> {
629 let set = self;
630 let isl_rs_ctx = set.get_ctx();
631 let mut set = set;
632 set.do_not_free_on_drop();
633 let set = set.ptr;
634 let isl_rs_result = unsafe { isl_set_compute_divs(set) };
635 let isl_rs_result = Set { ptr: isl_rs_result,
636 should_free_on_drop: true };
637 let err = isl_rs_ctx.last_error();
638 if err != Error::None_ {
639 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
640 }
641 Ok(isl_rs_result)
642 }
643
644 pub fn convex_hull(self) -> Result<BasicSet, LibISLError> {
646 let set = self;
647 let isl_rs_ctx = set.get_ctx();
648 let mut set = set;
649 set.do_not_free_on_drop();
650 let set = set.ptr;
651 let isl_rs_result = unsafe { isl_set_convex_hull(set) };
652 let isl_rs_result = BasicSet { ptr: isl_rs_result,
653 should_free_on_drop: true };
654 let err = isl_rs_ctx.last_error();
655 if err != Error::None_ {
656 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
657 }
658 Ok(isl_rs_result)
659 }
660
661 pub fn copy(&self) -> Result<Set, LibISLError> {
663 let set = self;
664 let isl_rs_ctx = set.get_ctx();
665 let set = set.ptr;
666 let isl_rs_result = unsafe { isl_set_copy(set) };
667 let isl_rs_result = Set { ptr: isl_rs_result,
668 should_free_on_drop: true };
669 let err = isl_rs_ctx.last_error();
670 if err != Error::None_ {
671 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
672 }
673 Ok(isl_rs_result)
674 }
675
676 pub fn count_val(&self) -> Result<Val, LibISLError> {
678 let set = self;
679 let isl_rs_ctx = set.get_ctx();
680 let set = set.ptr;
681 let isl_rs_result = unsafe { isl_set_count_val(set) };
682 let isl_rs_result = Val { ptr: isl_rs_result,
683 should_free_on_drop: true };
684 let err = isl_rs_ctx.last_error();
685 if err != Error::None_ {
686 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
687 }
688 Ok(isl_rs_result)
689 }
690
691 pub fn detect_equalities(self) -> Result<Set, LibISLError> {
693 let set = self;
694 let isl_rs_ctx = set.get_ctx();
695 let mut set = set;
696 set.do_not_free_on_drop();
697 let set = set.ptr;
698 let isl_rs_result = unsafe { isl_set_detect_equalities(set) };
699 let isl_rs_result = Set { ptr: isl_rs_result,
700 should_free_on_drop: true };
701 let err = isl_rs_ctx.last_error();
702 if err != Error::None_ {
703 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
704 }
705 Ok(isl_rs_result)
706 }
707
708 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
710 let set = self;
711 let isl_rs_ctx = set.get_ctx();
712 let set = set.ptr;
713 let type_ = type_.to_i32();
714 let isl_rs_result = unsafe { isl_set_dim(set, type_) };
715 let err = isl_rs_ctx.last_error();
716 if err != Error::None_ {
717 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
718 }
719 Ok(isl_rs_result)
720 }
721
722 pub fn dim_has_any_lower_bound(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
724 let set = self;
725 let isl_rs_ctx = set.get_ctx();
726 let set = set.ptr;
727 let type_ = type_.to_i32();
728 let isl_rs_result = unsafe { isl_set_dim_has_any_lower_bound(set, type_, pos) };
729 let isl_rs_result = match isl_rs_result {
730 0 => false,
731 1 => true,
732 _ => panic!("Got isl_bool = -1"),
733 };
734 let err = isl_rs_ctx.last_error();
735 if err != Error::None_ {
736 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
737 }
738 Ok(isl_rs_result)
739 }
740
741 pub fn dim_has_any_upper_bound(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
743 let set = self;
744 let isl_rs_ctx = set.get_ctx();
745 let set = set.ptr;
746 let type_ = type_.to_i32();
747 let isl_rs_result = unsafe { isl_set_dim_has_any_upper_bound(set, type_, pos) };
748 let isl_rs_result = match isl_rs_result {
749 0 => false,
750 1 => true,
751 _ => panic!("Got isl_bool = -1"),
752 };
753 let err = isl_rs_ctx.last_error();
754 if err != Error::None_ {
755 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
756 }
757 Ok(isl_rs_result)
758 }
759
760 pub fn dim_has_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_lower_bound(set, type_, pos) };
767 let isl_rs_result = match isl_rs_result {
768 0 => false,
769 1 => true,
770 _ => panic!("Got isl_bool = -1"),
771 };
772 let err = isl_rs_ctx.last_error();
773 if err != Error::None_ {
774 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
775 }
776 Ok(isl_rs_result)
777 }
778
779 pub fn dim_has_upper_bound(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
781 let set = self;
782 let isl_rs_ctx = set.get_ctx();
783 let set = set.ptr;
784 let type_ = type_.to_i32();
785 let isl_rs_result = unsafe { isl_set_dim_has_upper_bound(set, type_, pos) };
786 let isl_rs_result = match isl_rs_result {
787 0 => false,
788 1 => true,
789 _ => panic!("Got isl_bool = -1"),
790 };
791 let err = isl_rs_ctx.last_error();
792 if err != Error::None_ {
793 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
794 }
795 Ok(isl_rs_result)
796 }
797
798 pub fn dim_is_bounded(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
800 let set = self;
801 let isl_rs_ctx = set.get_ctx();
802 let set = set.ptr;
803 let type_ = type_.to_i32();
804 let isl_rs_result = unsafe { isl_set_dim_is_bounded(set, type_, pos) };
805 let isl_rs_result = match isl_rs_result {
806 0 => false,
807 1 => true,
808 _ => panic!("Got isl_bool = -1"),
809 };
810 let err = isl_rs_ctx.last_error();
811 if err != Error::None_ {
812 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
813 }
814 Ok(isl_rs_result)
815 }
816
817 pub fn dim_max(self, pos: i32) -> Result<PwAff, LibISLError> {
819 let set = self;
820 let isl_rs_ctx = set.get_ctx();
821 let mut set = set;
822 set.do_not_free_on_drop();
823 let set = set.ptr;
824 let isl_rs_result = unsafe { isl_set_dim_max(set, pos) };
825 let isl_rs_result = PwAff { ptr: isl_rs_result,
826 should_free_on_drop: true };
827 let err = isl_rs_ctx.last_error();
828 if err != Error::None_ {
829 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
830 }
831 Ok(isl_rs_result)
832 }
833
834 pub fn dim_max_val(self, pos: i32) -> Result<Val, LibISLError> {
836 let set = self;
837 let isl_rs_ctx = set.get_ctx();
838 let mut set = set;
839 set.do_not_free_on_drop();
840 let set = set.ptr;
841 let isl_rs_result = unsafe { isl_set_dim_max_val(set, pos) };
842 let isl_rs_result = Val { ptr: isl_rs_result,
843 should_free_on_drop: true };
844 let err = isl_rs_ctx.last_error();
845 if err != Error::None_ {
846 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
847 }
848 Ok(isl_rs_result)
849 }
850
851 pub fn dim_min(self, pos: i32) -> Result<PwAff, LibISLError> {
853 let set = self;
854 let isl_rs_ctx = set.get_ctx();
855 let mut set = set;
856 set.do_not_free_on_drop();
857 let set = set.ptr;
858 let isl_rs_result = unsafe { isl_set_dim_min(set, pos) };
859 let isl_rs_result = PwAff { ptr: isl_rs_result,
860 should_free_on_drop: true };
861 let err = isl_rs_ctx.last_error();
862 if err != Error::None_ {
863 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
864 }
865 Ok(isl_rs_result)
866 }
867
868 pub fn dim_min_val(self, pos: i32) -> Result<Val, LibISLError> {
870 let set = self;
871 let isl_rs_ctx = set.get_ctx();
872 let mut set = set;
873 set.do_not_free_on_drop();
874 let set = set.ptr;
875 let isl_rs_result = unsafe { isl_set_dim_min_val(set, pos) };
876 let isl_rs_result = Val { ptr: isl_rs_result,
877 should_free_on_drop: true };
878 let err = isl_rs_ctx.last_error();
879 if err != Error::None_ {
880 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
881 }
882 Ok(isl_rs_result)
883 }
884
885 pub fn drop_constraints_involving_dims(self, type_: DimType, first: u32, n: u32)
887 -> Result<Set, LibISLError> {
888 let set = self;
889 let isl_rs_ctx = set.get_ctx();
890 let mut set = set;
891 set.do_not_free_on_drop();
892 let set = set.ptr;
893 let type_ = type_.to_i32();
894 let isl_rs_result =
895 unsafe { isl_set_drop_constraints_involving_dims(set, type_, first, n) };
896 let isl_rs_result = Set { ptr: isl_rs_result,
897 should_free_on_drop: true };
898 let err = isl_rs_ctx.last_error();
899 if err != Error::None_ {
900 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
901 }
902 Ok(isl_rs_result)
903 }
904
905 pub fn drop_constraints_not_involving_dims(self, type_: DimType, first: u32, n: u32)
907 -> Result<Set, LibISLError> {
908 let set = self;
909 let isl_rs_ctx = set.get_ctx();
910 let mut set = set;
911 set.do_not_free_on_drop();
912 let set = set.ptr;
913 let type_ = type_.to_i32();
914 let isl_rs_result =
915 unsafe { isl_set_drop_constraints_not_involving_dims(set, type_, first, n) };
916 let isl_rs_result = Set { ptr: isl_rs_result,
917 should_free_on_drop: true };
918 let err = isl_rs_ctx.last_error();
919 if err != Error::None_ {
920 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
921 }
922 Ok(isl_rs_result)
923 }
924
925 pub fn drop_unused_params(self) -> Result<Set, LibISLError> {
927 let set = self;
928 let isl_rs_ctx = set.get_ctx();
929 let mut set = set;
930 set.do_not_free_on_drop();
931 let set = set.ptr;
932 let isl_rs_result = unsafe { isl_set_drop_unused_params(set) };
933 let isl_rs_result = Set { ptr: isl_rs_result,
934 should_free_on_drop: true };
935 let err = isl_rs_ctx.last_error();
936 if err != Error::None_ {
937 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
938 }
939 Ok(isl_rs_result)
940 }
941
942 pub fn dump(&self) -> Result<(), LibISLError> {
944 let set = self;
945 let isl_rs_ctx = set.get_ctx();
946 let set = set.ptr;
947 let isl_rs_result = unsafe { isl_set_dump(set) };
948 let err = isl_rs_ctx.last_error();
949 if err != Error::None_ {
950 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
951 }
952 Ok(isl_rs_result)
953 }
954
955 pub fn eliminate(self, type_: DimType, first: u32, n: u32) -> Result<Set, LibISLError> {
957 let set = self;
958 let isl_rs_ctx = set.get_ctx();
959 let mut set = set;
960 set.do_not_free_on_drop();
961 let set = set.ptr;
962 let type_ = type_.to_i32();
963 let isl_rs_result = unsafe { isl_set_eliminate(set, type_, first, n) };
964 let isl_rs_result = Set { ptr: isl_rs_result,
965 should_free_on_drop: true };
966 let err = isl_rs_ctx.last_error();
967 if err != Error::None_ {
968 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
969 }
970 Ok(isl_rs_result)
971 }
972
973 pub fn eliminate_dims(self, first: u32, n: u32) -> Result<Set, LibISLError> {
975 let set = self;
976 let isl_rs_ctx = set.get_ctx();
977 let mut set = set;
978 set.do_not_free_on_drop();
979 let set = set.ptr;
980 let isl_rs_result = unsafe { isl_set_eliminate_dims(set, first, n) };
981 let isl_rs_result = Set { ptr: isl_rs_result,
982 should_free_on_drop: true };
983 let err = isl_rs_ctx.last_error();
984 if err != Error::None_ {
985 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
986 }
987 Ok(isl_rs_result)
988 }
989
990 pub fn empty(space: Space) -> Result<Set, LibISLError> {
992 let isl_rs_ctx = space.get_ctx();
993 let mut space = space;
994 space.do_not_free_on_drop();
995 let space = space.ptr;
996 let isl_rs_result = unsafe { isl_set_empty(space) };
997 let isl_rs_result = Set { ptr: isl_rs_result,
998 should_free_on_drop: true };
999 let err = isl_rs_ctx.last_error();
1000 if err != Error::None_ {
1001 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1002 }
1003 Ok(isl_rs_result)
1004 }
1005
1006 pub fn equate(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
1008 -> Result<Set, LibISLError> {
1009 let set = self;
1010 let isl_rs_ctx = set.get_ctx();
1011 let mut set = set;
1012 set.do_not_free_on_drop();
1013 let set = set.ptr;
1014 let type1 = type1.to_i32();
1015 let type2 = type2.to_i32();
1016 let isl_rs_result = unsafe { isl_set_equate(set, type1, pos1, type2, pos2) };
1017 let isl_rs_result = Set { ptr: isl_rs_result,
1018 should_free_on_drop: true };
1019 let err = isl_rs_ctx.last_error();
1020 if err != Error::None_ {
1021 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1022 }
1023 Ok(isl_rs_result)
1024 }
1025
1026 pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> Result<i32, LibISLError> {
1028 let set = self;
1029 let isl_rs_ctx = set.get_ctx();
1030 let set = set.ptr;
1031 let type_ = type_.to_i32();
1032 let id = id.ptr;
1033 let isl_rs_result = unsafe { isl_set_find_dim_by_id(set, type_, id) };
1034 let err = isl_rs_ctx.last_error();
1035 if err != Error::None_ {
1036 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1037 }
1038 Ok(isl_rs_result)
1039 }
1040
1041 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
1043 let set = self;
1044 let isl_rs_ctx = set.get_ctx();
1045 let set = set.ptr;
1046 let type_ = type_.to_i32();
1047 let name = CString::new(name).unwrap();
1048 let name = name.as_ptr();
1049 let isl_rs_result = unsafe { isl_set_find_dim_by_name(set, type_, name) };
1050 let err = isl_rs_ctx.last_error();
1051 if err != Error::None_ {
1052 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1053 }
1054 Ok(isl_rs_result)
1055 }
1056
1057 pub fn fix_dim_si(self, dim: u32, value: i32) -> Result<Set, LibISLError> {
1059 let set = self;
1060 let isl_rs_ctx = set.get_ctx();
1061 let mut set = set;
1062 set.do_not_free_on_drop();
1063 let set = set.ptr;
1064 let isl_rs_result = unsafe { isl_set_fix_dim_si(set, dim, value) };
1065 let isl_rs_result = Set { ptr: isl_rs_result,
1066 should_free_on_drop: true };
1067 let err = isl_rs_ctx.last_error();
1068 if err != Error::None_ {
1069 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1070 }
1071 Ok(isl_rs_result)
1072 }
1073
1074 pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> Result<Set, LibISLError> {
1076 let set = self;
1077 let isl_rs_ctx = set.get_ctx();
1078 let mut set = set;
1079 set.do_not_free_on_drop();
1080 let set = set.ptr;
1081 let type_ = type_.to_i32();
1082 let isl_rs_result = unsafe { isl_set_fix_si(set, type_, pos, value) };
1083 let isl_rs_result = Set { ptr: isl_rs_result,
1084 should_free_on_drop: true };
1085 let err = isl_rs_ctx.last_error();
1086 if err != Error::None_ {
1087 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1088 }
1089 Ok(isl_rs_result)
1090 }
1091
1092 pub fn fix_val(self, type_: DimType, pos: u32, v: Val) -> Result<Set, LibISLError> {
1094 let set = self;
1095 let isl_rs_ctx = set.get_ctx();
1096 let mut set = set;
1097 set.do_not_free_on_drop();
1098 let set = set.ptr;
1099 let type_ = type_.to_i32();
1100 let mut v = v;
1101 v.do_not_free_on_drop();
1102 let v = v.ptr;
1103 let isl_rs_result = unsafe { isl_set_fix_val(set, type_, pos, v) };
1104 let isl_rs_result = Set { ptr: isl_rs_result,
1105 should_free_on_drop: true };
1106 let err = isl_rs_ctx.last_error();
1107 if err != Error::None_ {
1108 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1109 }
1110 Ok(isl_rs_result)
1111 }
1112
1113 pub fn flat_product(self, set2: Set) -> Result<Set, LibISLError> {
1115 let set1 = self;
1116 let isl_rs_ctx = set1.get_ctx();
1117 let mut set1 = set1;
1118 set1.do_not_free_on_drop();
1119 let set1 = set1.ptr;
1120 let mut set2 = set2;
1121 set2.do_not_free_on_drop();
1122 let set2 = set2.ptr;
1123 let isl_rs_result = unsafe { isl_set_flat_product(set1, set2) };
1124 let isl_rs_result = Set { ptr: isl_rs_result,
1125 should_free_on_drop: true };
1126 let err = isl_rs_ctx.last_error();
1127 if err != Error::None_ {
1128 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1129 }
1130 Ok(isl_rs_result)
1131 }
1132
1133 pub fn flatten(self) -> Result<Set, LibISLError> {
1135 let set = self;
1136 let isl_rs_ctx = set.get_ctx();
1137 let mut set = set;
1138 set.do_not_free_on_drop();
1139 let set = set.ptr;
1140 let isl_rs_result = unsafe { isl_set_flatten(set) };
1141 let isl_rs_result = Set { ptr: isl_rs_result,
1142 should_free_on_drop: true };
1143 let err = isl_rs_ctx.last_error();
1144 if err != Error::None_ {
1145 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1146 }
1147 Ok(isl_rs_result)
1148 }
1149
1150 pub fn flatten_map(self) -> Result<Map, LibISLError> {
1152 let set = self;
1153 let isl_rs_ctx = set.get_ctx();
1154 let mut set = set;
1155 set.do_not_free_on_drop();
1156 let set = set.ptr;
1157 let isl_rs_result = unsafe { isl_set_flatten_map(set) };
1158 let isl_rs_result = Map { ptr: isl_rs_result,
1159 should_free_on_drop: true };
1160 let err = isl_rs_ctx.last_error();
1161 if err != Error::None_ {
1162 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1163 }
1164 Ok(isl_rs_result)
1165 }
1166
1167 pub fn follows_at(&self, set2: &Set, pos: i32) -> Result<i32, LibISLError> {
1169 let set1 = self;
1170 let isl_rs_ctx = set1.get_ctx();
1171 let set1 = set1.ptr;
1172 let set2 = set2.ptr;
1173 let isl_rs_result = unsafe { isl_set_follows_at(set1, set2, pos) };
1174 let err = isl_rs_ctx.last_error();
1175 if err != Error::None_ {
1176 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1177 }
1178 Ok(isl_rs_result)
1179 }
1180
1181 pub fn free(self) -> Result<Set, LibISLError> {
1183 let set = self;
1184 let isl_rs_ctx = set.get_ctx();
1185 let mut set = set;
1186 set.do_not_free_on_drop();
1187 let set = set.ptr;
1188 let isl_rs_result = unsafe { isl_set_free(set) };
1189 let isl_rs_result = Set { ptr: isl_rs_result,
1190 should_free_on_drop: true };
1191 let err = isl_rs_ctx.last_error();
1192 if err != Error::None_ {
1193 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1194 }
1195 Ok(isl_rs_result)
1196 }
1197
1198 pub fn from_basic_set(bset: BasicSet) -> Result<Set, LibISLError> {
1200 let isl_rs_ctx = bset.get_ctx();
1201 let mut bset = bset;
1202 bset.do_not_free_on_drop();
1203 let bset = bset.ptr;
1204 let isl_rs_result = unsafe { isl_set_from_basic_set(bset) };
1205 let isl_rs_result = Set { ptr: isl_rs_result,
1206 should_free_on_drop: true };
1207 let err = isl_rs_ctx.last_error();
1208 if err != Error::None_ {
1209 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1210 }
1211 Ok(isl_rs_result)
1212 }
1213
1214 pub fn from_multi_aff(ma: MultiAff) -> Result<Set, LibISLError> {
1216 let isl_rs_ctx = ma.get_ctx();
1217 let mut ma = ma;
1218 ma.do_not_free_on_drop();
1219 let ma = ma.ptr;
1220 let isl_rs_result = unsafe { isl_set_from_multi_aff(ma) };
1221 let isl_rs_result = Set { ptr: isl_rs_result,
1222 should_free_on_drop: true };
1223 let err = isl_rs_ctx.last_error();
1224 if err != Error::None_ {
1225 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1226 }
1227 Ok(isl_rs_result)
1228 }
1229
1230 pub fn from_multi_pw_aff(mpa: MultiPwAff) -> Result<Set, LibISLError> {
1232 let isl_rs_ctx = mpa.get_ctx();
1233 let mut mpa = mpa;
1234 mpa.do_not_free_on_drop();
1235 let mpa = mpa.ptr;
1236 let isl_rs_result = unsafe { isl_set_from_multi_pw_aff(mpa) };
1237 let isl_rs_result = Set { ptr: isl_rs_result,
1238 should_free_on_drop: true };
1239 let err = isl_rs_ctx.last_error();
1240 if err != Error::None_ {
1241 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1242 }
1243 Ok(isl_rs_result)
1244 }
1245
1246 pub fn from_params(self) -> Result<Set, 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_from_params(set) };
1254 let isl_rs_result = Set { ptr: isl_rs_result,
1255 should_free_on_drop: true };
1256 let err = isl_rs_ctx.last_error();
1257 if err != Error::None_ {
1258 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1259 }
1260 Ok(isl_rs_result)
1261 }
1262
1263 pub fn from_point(pnt: Point) -> Result<Set, LibISLError> {
1265 let isl_rs_ctx = pnt.get_ctx();
1266 let mut pnt = pnt;
1267 pnt.do_not_free_on_drop();
1268 let pnt = pnt.ptr;
1269 let isl_rs_result = unsafe { isl_set_from_point(pnt) };
1270 let isl_rs_result = Set { ptr: isl_rs_result,
1271 should_free_on_drop: true };
1272 let err = isl_rs_ctx.last_error();
1273 if err != Error::None_ {
1274 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1275 }
1276 Ok(isl_rs_result)
1277 }
1278
1279 pub fn from_pw_aff(pwaff: PwAff) -> Result<Set, LibISLError> {
1281 let isl_rs_ctx = pwaff.get_ctx();
1282 let mut pwaff = pwaff;
1283 pwaff.do_not_free_on_drop();
1284 let pwaff = pwaff.ptr;
1285 let isl_rs_result = unsafe { isl_set_from_pw_aff(pwaff) };
1286 let isl_rs_result = Set { ptr: isl_rs_result,
1287 should_free_on_drop: true };
1288 let err = isl_rs_ctx.last_error();
1289 if err != Error::None_ {
1290 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1291 }
1292 Ok(isl_rs_result)
1293 }
1294
1295 pub fn from_pw_multi_aff(pma: PwMultiAff) -> Result<Set, LibISLError> {
1297 let isl_rs_ctx = pma.get_ctx();
1298 let mut pma = pma;
1299 pma.do_not_free_on_drop();
1300 let pma = pma.ptr;
1301 let isl_rs_result = unsafe { isl_set_from_pw_multi_aff(pma) };
1302 let isl_rs_result = Set { ptr: isl_rs_result,
1303 should_free_on_drop: true };
1304 let err = isl_rs_ctx.last_error();
1305 if err != Error::None_ {
1306 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1307 }
1308 Ok(isl_rs_result)
1309 }
1310
1311 pub fn from_union_set(uset: UnionSet) -> Result<Set, LibISLError> {
1313 let isl_rs_ctx = uset.get_ctx();
1314 let mut uset = uset;
1315 uset.do_not_free_on_drop();
1316 let uset = uset.ptr;
1317 let isl_rs_result = unsafe { isl_set_from_union_set(uset) };
1318 let isl_rs_result = Set { ptr: isl_rs_result,
1319 should_free_on_drop: true };
1320 let err = isl_rs_ctx.last_error();
1321 if err != Error::None_ {
1322 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1323 }
1324 Ok(isl_rs_result)
1325 }
1326
1327 pub fn get_basic_set_list(&self) -> Result<BasicSetList, LibISLError> {
1329 let set = self;
1330 let isl_rs_ctx = set.get_ctx();
1331 let set = set.ptr;
1332 let isl_rs_result = unsafe { isl_set_get_basic_set_list(set) };
1333 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
1334 should_free_on_drop: true };
1335 let err = isl_rs_ctx.last_error();
1336 if err != Error::None_ {
1337 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1338 }
1339 Ok(isl_rs_result)
1340 }
1341
1342 pub fn get_ctx(&self) -> Context {
1344 let set = self;
1345 let set = set.ptr;
1346 let isl_rs_result = unsafe { isl_set_get_ctx(set) };
1347 let isl_rs_result = Context { ptr: isl_rs_result,
1348 should_free_on_drop: false };
1349 isl_rs_result
1350 }
1351
1352 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
1354 let set = self;
1355 let isl_rs_ctx = set.get_ctx();
1356 let set = set.ptr;
1357 let type_ = type_.to_i32();
1358 let isl_rs_result = unsafe { isl_set_get_dim_id(set, type_, pos) };
1359 let isl_rs_result = Id { ptr: isl_rs_result,
1360 should_free_on_drop: true };
1361 let err = isl_rs_ctx.last_error();
1362 if err != Error::None_ {
1363 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1364 }
1365 Ok(isl_rs_result)
1366 }
1367
1368 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
1370 let set = self;
1371 let isl_rs_ctx = set.get_ctx();
1372 let set = set.ptr;
1373 let type_ = type_.to_i32();
1374 let isl_rs_result = unsafe { isl_set_get_dim_name(set, type_, pos) };
1375 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1376 let isl_rs_result = isl_rs_result.to_str().unwrap();
1377 let err = isl_rs_ctx.last_error();
1378 if err != Error::None_ {
1379 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1380 }
1381 Ok(isl_rs_result)
1382 }
1383
1384 pub fn get_hash(&self) -> Result<u32, LibISLError> {
1386 let set = self;
1387 let isl_rs_ctx = set.get_ctx();
1388 let set = set.ptr;
1389 let isl_rs_result = unsafe { isl_set_get_hash(set) };
1390 let err = isl_rs_ctx.last_error();
1391 if err != Error::None_ {
1392 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1393 }
1394 Ok(isl_rs_result)
1395 }
1396
1397 pub fn get_lattice_tile(&self) -> Result<FixedBox, LibISLError> {
1399 let set = self;
1400 let isl_rs_ctx = set.get_ctx();
1401 let set = set.ptr;
1402 let isl_rs_result = unsafe { isl_set_get_lattice_tile(set) };
1403 let isl_rs_result = FixedBox { ptr: isl_rs_result,
1404 should_free_on_drop: true };
1405 let err = isl_rs_ctx.last_error();
1406 if err != Error::None_ {
1407 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1408 }
1409 Ok(isl_rs_result)
1410 }
1411
1412 pub fn get_plain_multi_val_if_fixed(&self) -> Result<MultiVal, LibISLError> {
1414 let set = self;
1415 let isl_rs_ctx = set.get_ctx();
1416 let set = set.ptr;
1417 let isl_rs_result = unsafe { isl_set_get_plain_multi_val_if_fixed(set) };
1418 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1419 should_free_on_drop: true };
1420 let err = isl_rs_ctx.last_error();
1421 if err != Error::None_ {
1422 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1423 }
1424 Ok(isl_rs_result)
1425 }
1426
1427 pub fn get_simple_fixed_box_hull(&self) -> Result<FixedBox, LibISLError> {
1429 let set = self;
1430 let isl_rs_ctx = set.get_ctx();
1431 let set = set.ptr;
1432 let isl_rs_result = unsafe { isl_set_get_simple_fixed_box_hull(set) };
1433 let isl_rs_result = FixedBox { ptr: isl_rs_result,
1434 should_free_on_drop: true };
1435 let err = isl_rs_ctx.last_error();
1436 if err != Error::None_ {
1437 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1438 }
1439 Ok(isl_rs_result)
1440 }
1441
1442 pub fn get_space(&self) -> Result<Space, LibISLError> {
1444 let set = self;
1445 let isl_rs_ctx = set.get_ctx();
1446 let set = set.ptr;
1447 let isl_rs_result = unsafe { isl_set_get_space(set) };
1448 let isl_rs_result = Space { ptr: isl_rs_result,
1449 should_free_on_drop: true };
1450 let err = isl_rs_ctx.last_error();
1451 if err != Error::None_ {
1452 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1453 }
1454 Ok(isl_rs_result)
1455 }
1456
1457 pub fn get_stride(&self, pos: i32) -> Result<Val, LibISLError> {
1459 let set = self;
1460 let isl_rs_ctx = set.get_ctx();
1461 let set = set.ptr;
1462 let isl_rs_result = unsafe { isl_set_get_stride(set, pos) };
1463 let isl_rs_result = Val { ptr: isl_rs_result,
1464 should_free_on_drop: true };
1465 let err = isl_rs_ctx.last_error();
1466 if err != Error::None_ {
1467 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1468 }
1469 Ok(isl_rs_result)
1470 }
1471
1472 pub fn get_stride_info(&self, pos: i32) -> Result<StrideInfo, LibISLError> {
1474 let set = self;
1475 let isl_rs_ctx = set.get_ctx();
1476 let set = set.ptr;
1477 let isl_rs_result = unsafe { isl_set_get_stride_info(set, pos) };
1478 let isl_rs_result = StrideInfo { ptr: isl_rs_result,
1479 should_free_on_drop: true };
1480 let err = isl_rs_ctx.last_error();
1481 if err != Error::None_ {
1482 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1483 }
1484 Ok(isl_rs_result)
1485 }
1486
1487 pub fn get_tuple_id(&self) -> Result<Id, LibISLError> {
1489 let set = self;
1490 let isl_rs_ctx = set.get_ctx();
1491 let set = set.ptr;
1492 let isl_rs_result = unsafe { isl_set_get_tuple_id(set) };
1493 let isl_rs_result = Id { ptr: isl_rs_result,
1494 should_free_on_drop: true };
1495 let err = isl_rs_ctx.last_error();
1496 if err != Error::None_ {
1497 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1498 }
1499 Ok(isl_rs_result)
1500 }
1501
1502 pub fn get_tuple_name(&self) -> Result<&str, LibISLError> {
1504 let set = self;
1505 let isl_rs_ctx = set.get_ctx();
1506 let set = set.ptr;
1507 let isl_rs_result = unsafe { isl_set_get_tuple_name(set) };
1508 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1509 let isl_rs_result = isl_rs_result.to_str().unwrap();
1510 let err = isl_rs_ctx.last_error();
1511 if err != Error::None_ {
1512 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1513 }
1514 Ok(isl_rs_result)
1515 }
1516
1517 pub fn gist(self, context: Set) -> Result<Set, LibISLError> {
1519 let set = self;
1520 let isl_rs_ctx = set.get_ctx();
1521 let mut set = set;
1522 set.do_not_free_on_drop();
1523 let set = set.ptr;
1524 let mut context = context;
1525 context.do_not_free_on_drop();
1526 let context = context.ptr;
1527 let isl_rs_result = unsafe { isl_set_gist(set, context) };
1528 let isl_rs_result = Set { ptr: isl_rs_result,
1529 should_free_on_drop: true };
1530 let err = isl_rs_ctx.last_error();
1531 if err != Error::None_ {
1532 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1533 }
1534 Ok(isl_rs_result)
1535 }
1536
1537 pub fn gist_basic_set(self, context: BasicSet) -> Result<Set, LibISLError> {
1539 let set = self;
1540 let isl_rs_ctx = set.get_ctx();
1541 let mut set = set;
1542 set.do_not_free_on_drop();
1543 let set = set.ptr;
1544 let mut context = context;
1545 context.do_not_free_on_drop();
1546 let context = context.ptr;
1547 let isl_rs_result = unsafe { isl_set_gist_basic_set(set, context) };
1548 let isl_rs_result = Set { ptr: isl_rs_result,
1549 should_free_on_drop: true };
1550 let err = isl_rs_ctx.last_error();
1551 if err != Error::None_ {
1552 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1553 }
1554 Ok(isl_rs_result)
1555 }
1556
1557 pub fn gist_params(self, context: Set) -> Result<Set, LibISLError> {
1559 let set = self;
1560 let isl_rs_ctx = set.get_ctx();
1561 let mut set = set;
1562 set.do_not_free_on_drop();
1563 let set = set.ptr;
1564 let mut context = context;
1565 context.do_not_free_on_drop();
1566 let context = context.ptr;
1567 let isl_rs_result = unsafe { isl_set_gist_params(set, context) };
1568 let isl_rs_result = Set { ptr: isl_rs_result,
1569 should_free_on_drop: true };
1570 let err = isl_rs_ctx.last_error();
1571 if err != Error::None_ {
1572 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1573 }
1574 Ok(isl_rs_result)
1575 }
1576
1577 pub fn has_dim_id(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
1579 let set = self;
1580 let isl_rs_ctx = set.get_ctx();
1581 let set = set.ptr;
1582 let type_ = type_.to_i32();
1583 let isl_rs_result = unsafe { isl_set_has_dim_id(set, type_, pos) };
1584 let isl_rs_result = match isl_rs_result {
1585 0 => false,
1586 1 => true,
1587 _ => panic!("Got isl_bool = -1"),
1588 };
1589 let err = isl_rs_ctx.last_error();
1590 if err != Error::None_ {
1591 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1592 }
1593 Ok(isl_rs_result)
1594 }
1595
1596 pub fn has_dim_name(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
1598 let set = self;
1599 let isl_rs_ctx = set.get_ctx();
1600 let set = set.ptr;
1601 let type_ = type_.to_i32();
1602 let isl_rs_result = unsafe { isl_set_has_dim_name(set, type_, pos) };
1603 let isl_rs_result = match isl_rs_result {
1604 0 => false,
1605 1 => true,
1606 _ => panic!("Got isl_bool = -1"),
1607 };
1608 let err = isl_rs_ctx.last_error();
1609 if err != Error::None_ {
1610 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1611 }
1612 Ok(isl_rs_result)
1613 }
1614
1615 pub fn has_equal_space(&self, set2: &Set) -> Result<bool, LibISLError> {
1617 let set1 = self;
1618 let isl_rs_ctx = set1.get_ctx();
1619 let set1 = set1.ptr;
1620 let set2 = set2.ptr;
1621 let isl_rs_result = unsafe { isl_set_has_equal_space(set1, set2) };
1622 let isl_rs_result = match isl_rs_result {
1623 0 => false,
1624 1 => true,
1625 _ => panic!("Got isl_bool = -1"),
1626 };
1627 let err = isl_rs_ctx.last_error();
1628 if err != Error::None_ {
1629 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1630 }
1631 Ok(isl_rs_result)
1632 }
1633
1634 pub fn has_tuple_id(&self) -> Result<bool, LibISLError> {
1636 let set = self;
1637 let isl_rs_ctx = set.get_ctx();
1638 let set = set.ptr;
1639 let isl_rs_result = unsafe { isl_set_has_tuple_id(set) };
1640 let isl_rs_result = match isl_rs_result {
1641 0 => false,
1642 1 => true,
1643 _ => panic!("Got isl_bool = -1"),
1644 };
1645 let err = isl_rs_ctx.last_error();
1646 if err != Error::None_ {
1647 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1648 }
1649 Ok(isl_rs_result)
1650 }
1651
1652 pub fn has_tuple_name(&self) -> Result<bool, LibISLError> {
1654 let set = self;
1655 let isl_rs_ctx = set.get_ctx();
1656 let set = set.ptr;
1657 let isl_rs_result = unsafe { isl_set_has_tuple_name(set) };
1658 let isl_rs_result = match isl_rs_result {
1659 0 => false,
1660 1 => true,
1661 _ => panic!("Got isl_bool = -1"),
1662 };
1663 let err = isl_rs_ctx.last_error();
1664 if err != Error::None_ {
1665 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1666 }
1667 Ok(isl_rs_result)
1668 }
1669
1670 pub fn identity(self) -> Result<Map, LibISLError> {
1672 let set = self;
1673 let isl_rs_ctx = set.get_ctx();
1674 let mut set = set;
1675 set.do_not_free_on_drop();
1676 let set = set.ptr;
1677 let isl_rs_result = unsafe { isl_set_identity(set) };
1678 let isl_rs_result = Map { ptr: isl_rs_result,
1679 should_free_on_drop: true };
1680 let err = isl_rs_ctx.last_error();
1681 if err != Error::None_ {
1682 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1683 }
1684 Ok(isl_rs_result)
1685 }
1686
1687 pub fn indicator_function(self) -> Result<PwAff, LibISLError> {
1689 let set = self;
1690 let isl_rs_ctx = set.get_ctx();
1691 let mut set = set;
1692 set.do_not_free_on_drop();
1693 let set = set.ptr;
1694 let isl_rs_result = unsafe { isl_set_indicator_function(set) };
1695 let isl_rs_result = PwAff { ptr: isl_rs_result,
1696 should_free_on_drop: true };
1697 let err = isl_rs_ctx.last_error();
1698 if err != Error::None_ {
1699 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1700 }
1701 Ok(isl_rs_result)
1702 }
1703
1704 pub fn insert_dims(self, type_: DimType, pos: u32, n: u32) -> Result<Set, LibISLError> {
1706 let set = self;
1707 let isl_rs_ctx = set.get_ctx();
1708 let mut set = set;
1709 set.do_not_free_on_drop();
1710 let set = set.ptr;
1711 let type_ = type_.to_i32();
1712 let isl_rs_result = unsafe { isl_set_insert_dims(set, type_, pos, n) };
1713 let isl_rs_result = Set { ptr: isl_rs_result,
1714 should_free_on_drop: true };
1715 let err = isl_rs_ctx.last_error();
1716 if err != Error::None_ {
1717 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1718 }
1719 Ok(isl_rs_result)
1720 }
1721
1722 pub fn insert_domain(self, domain: Space) -> Result<Map, LibISLError> {
1724 let set = self;
1725 let isl_rs_ctx = set.get_ctx();
1726 let mut set = set;
1727 set.do_not_free_on_drop();
1728 let set = set.ptr;
1729 let mut domain = domain;
1730 domain.do_not_free_on_drop();
1731 let domain = domain.ptr;
1732 let isl_rs_result = unsafe { isl_set_insert_domain(set, domain) };
1733 let isl_rs_result = Map { ptr: isl_rs_result,
1734 should_free_on_drop: true };
1735 let err = isl_rs_ctx.last_error();
1736 if err != Error::None_ {
1737 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1738 }
1739 Ok(isl_rs_result)
1740 }
1741
1742 pub fn intersect(self, set2: Set) -> Result<Set, LibISLError> {
1744 let set1 = self;
1745 let isl_rs_ctx = set1.get_ctx();
1746 let mut set1 = set1;
1747 set1.do_not_free_on_drop();
1748 let set1 = set1.ptr;
1749 let mut set2 = set2;
1750 set2.do_not_free_on_drop();
1751 let set2 = set2.ptr;
1752 let isl_rs_result = unsafe { isl_set_intersect(set1, set2) };
1753 let isl_rs_result = Set { ptr: isl_rs_result,
1754 should_free_on_drop: true };
1755 let err = isl_rs_ctx.last_error();
1756 if err != Error::None_ {
1757 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1758 }
1759 Ok(isl_rs_result)
1760 }
1761
1762 pub fn intersect_factor_domain(self, domain: Set) -> Result<Set, LibISLError> {
1764 let set = self;
1765 let isl_rs_ctx = set.get_ctx();
1766 let mut set = set;
1767 set.do_not_free_on_drop();
1768 let set = set.ptr;
1769 let mut domain = domain;
1770 domain.do_not_free_on_drop();
1771 let domain = domain.ptr;
1772 let isl_rs_result = unsafe { isl_set_intersect_factor_domain(set, domain) };
1773 let isl_rs_result = Set { ptr: isl_rs_result,
1774 should_free_on_drop: true };
1775 let err = isl_rs_ctx.last_error();
1776 if err != Error::None_ {
1777 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1778 }
1779 Ok(isl_rs_result)
1780 }
1781
1782 pub fn intersect_factor_range(self, range: Set) -> Result<Set, LibISLError> {
1784 let set = self;
1785 let isl_rs_ctx = set.get_ctx();
1786 let mut set = set;
1787 set.do_not_free_on_drop();
1788 let set = set.ptr;
1789 let mut range = range;
1790 range.do_not_free_on_drop();
1791 let range = range.ptr;
1792 let isl_rs_result = unsafe { isl_set_intersect_factor_range(set, range) };
1793 let isl_rs_result = Set { ptr: isl_rs_result,
1794 should_free_on_drop: true };
1795 let err = isl_rs_ctx.last_error();
1796 if err != Error::None_ {
1797 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1798 }
1799 Ok(isl_rs_result)
1800 }
1801
1802 pub fn intersect_params(self, params: Set) -> Result<Set, LibISLError> {
1804 let set = self;
1805 let isl_rs_ctx = set.get_ctx();
1806 let mut set = set;
1807 set.do_not_free_on_drop();
1808 let set = set.ptr;
1809 let mut params = params;
1810 params.do_not_free_on_drop();
1811 let params = params.ptr;
1812 let isl_rs_result = unsafe { isl_set_intersect_params(set, params) };
1813 let isl_rs_result = Set { ptr: isl_rs_result,
1814 should_free_on_drop: true };
1815 let err = isl_rs_ctx.last_error();
1816 if err != Error::None_ {
1817 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1818 }
1819 Ok(isl_rs_result)
1820 }
1821
1822 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1824 let set = self;
1825 let isl_rs_ctx = set.get_ctx();
1826 let set = set.ptr;
1827 let type_ = type_.to_i32();
1828 let isl_rs_result = unsafe { isl_set_involves_dims(set, type_, first, n) };
1829 let isl_rs_result = match isl_rs_result {
1830 0 => false,
1831 1 => true,
1832 _ => panic!("Got isl_bool = -1"),
1833 };
1834 let err = isl_rs_ctx.last_error();
1835 if err != Error::None_ {
1836 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1837 }
1838 Ok(isl_rs_result)
1839 }
1840
1841 pub fn involves_locals(&self) -> Result<bool, LibISLError> {
1843 let set = self;
1844 let isl_rs_ctx = set.get_ctx();
1845 let set = set.ptr;
1846 let isl_rs_result = unsafe { isl_set_involves_locals(set) };
1847 let isl_rs_result = match isl_rs_result {
1848 0 => false,
1849 1 => true,
1850 _ => panic!("Got isl_bool = -1"),
1851 };
1852 let err = isl_rs_ctx.last_error();
1853 if err != Error::None_ {
1854 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1855 }
1856 Ok(isl_rs_result)
1857 }
1858
1859 pub fn is_bounded(&self) -> Result<bool, LibISLError> {
1861 let set = self;
1862 let isl_rs_ctx = set.get_ctx();
1863 let set = set.ptr;
1864 let isl_rs_result = unsafe { isl_set_is_bounded(set) };
1865 let isl_rs_result = match isl_rs_result {
1866 0 => false,
1867 1 => true,
1868 _ => panic!("Got isl_bool = -1"),
1869 };
1870 let err = isl_rs_ctx.last_error();
1871 if err != Error::None_ {
1872 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1873 }
1874 Ok(isl_rs_result)
1875 }
1876
1877 pub fn is_box(&self) -> Result<bool, LibISLError> {
1879 let set = self;
1880 let isl_rs_ctx = set.get_ctx();
1881 let set = set.ptr;
1882 let isl_rs_result = unsafe { isl_set_is_box(set) };
1883 let isl_rs_result = match isl_rs_result {
1884 0 => false,
1885 1 => true,
1886 _ => panic!("Got isl_bool = -1"),
1887 };
1888 let err = isl_rs_ctx.last_error();
1889 if err != Error::None_ {
1890 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1891 }
1892 Ok(isl_rs_result)
1893 }
1894
1895 pub fn is_disjoint(&self, set2: &Set) -> Result<bool, LibISLError> {
1897 let set1 = self;
1898 let isl_rs_ctx = set1.get_ctx();
1899 let set1 = set1.ptr;
1900 let set2 = set2.ptr;
1901 let isl_rs_result = unsafe { isl_set_is_disjoint(set1, set2) };
1902 let isl_rs_result = match isl_rs_result {
1903 0 => false,
1904 1 => true,
1905 _ => panic!("Got isl_bool = -1"),
1906 };
1907 let err = isl_rs_ctx.last_error();
1908 if err != Error::None_ {
1909 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1910 }
1911 Ok(isl_rs_result)
1912 }
1913
1914 pub fn is_empty(&self) -> Result<bool, LibISLError> {
1916 let set = self;
1917 let isl_rs_ctx = set.get_ctx();
1918 let set = set.ptr;
1919 let isl_rs_result = unsafe { isl_set_is_empty(set) };
1920 let isl_rs_result = match isl_rs_result {
1921 0 => false,
1922 1 => true,
1923 _ => panic!("Got isl_bool = -1"),
1924 };
1925 let err = isl_rs_ctx.last_error();
1926 if err != Error::None_ {
1927 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1928 }
1929 Ok(isl_rs_result)
1930 }
1931
1932 pub fn is_equal(&self, set2: &Set) -> Result<bool, LibISLError> {
1934 let set1 = self;
1935 let isl_rs_ctx = set1.get_ctx();
1936 let set1 = set1.ptr;
1937 let set2 = set2.ptr;
1938 let isl_rs_result = unsafe { isl_set_is_equal(set1, set2) };
1939 let isl_rs_result = match isl_rs_result {
1940 0 => false,
1941 1 => true,
1942 _ => panic!("Got isl_bool = -1"),
1943 };
1944 let err = isl_rs_ctx.last_error();
1945 if err != Error::None_ {
1946 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1947 }
1948 Ok(isl_rs_result)
1949 }
1950
1951 pub fn is_params(&self) -> Result<bool, LibISLError> {
1953 let set = self;
1954 let isl_rs_ctx = set.get_ctx();
1955 let set = set.ptr;
1956 let isl_rs_result = unsafe { isl_set_is_params(set) };
1957 let isl_rs_result = match isl_rs_result {
1958 0 => false,
1959 1 => true,
1960 _ => panic!("Got isl_bool = -1"),
1961 };
1962 let err = isl_rs_ctx.last_error();
1963 if err != Error::None_ {
1964 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1965 }
1966 Ok(isl_rs_result)
1967 }
1968
1969 pub fn is_singleton(&self) -> Result<bool, LibISLError> {
1971 let set = self;
1972 let isl_rs_ctx = set.get_ctx();
1973 let set = set.ptr;
1974 let isl_rs_result = unsafe { isl_set_is_singleton(set) };
1975 let isl_rs_result = match isl_rs_result {
1976 0 => false,
1977 1 => true,
1978 _ => panic!("Got isl_bool = -1"),
1979 };
1980 let err = isl_rs_ctx.last_error();
1981 if err != Error::None_ {
1982 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1983 }
1984 Ok(isl_rs_result)
1985 }
1986
1987 pub fn is_strict_subset(&self, set2: &Set) -> Result<bool, LibISLError> {
1989 let set1 = self;
1990 let isl_rs_ctx = set1.get_ctx();
1991 let set1 = set1.ptr;
1992 let set2 = set2.ptr;
1993 let isl_rs_result = unsafe { isl_set_is_strict_subset(set1, set2) };
1994 let isl_rs_result = match isl_rs_result {
1995 0 => false,
1996 1 => true,
1997 _ => panic!("Got isl_bool = -1"),
1998 };
1999 let err = isl_rs_ctx.last_error();
2000 if err != Error::None_ {
2001 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2002 }
2003 Ok(isl_rs_result)
2004 }
2005
2006 pub fn is_subset(&self, set2: &Set) -> Result<bool, LibISLError> {
2008 let set1 = self;
2009 let isl_rs_ctx = set1.get_ctx();
2010 let set1 = set1.ptr;
2011 let set2 = set2.ptr;
2012 let isl_rs_result = unsafe { isl_set_is_subset(set1, set2) };
2013 let isl_rs_result = match isl_rs_result {
2014 0 => false,
2015 1 => true,
2016 _ => panic!("Got isl_bool = -1"),
2017 };
2018 let err = isl_rs_ctx.last_error();
2019 if err != Error::None_ {
2020 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2021 }
2022 Ok(isl_rs_result)
2023 }
2024
2025 pub fn is_wrapping(&self) -> Result<bool, LibISLError> {
2027 let set = self;
2028 let isl_rs_ctx = set.get_ctx();
2029 let set = set.ptr;
2030 let isl_rs_result = unsafe { isl_set_is_wrapping(set) };
2031 let isl_rs_result = match isl_rs_result {
2032 0 => false,
2033 1 => true,
2034 _ => panic!("Got isl_bool = -1"),
2035 };
2036 let err = isl_rs_ctx.last_error();
2037 if err != Error::None_ {
2038 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2039 }
2040 Ok(isl_rs_result)
2041 }
2042
2043 pub fn lex_ge_set(self, set2: Set) -> Result<Map, LibISLError> {
2045 let set1 = self;
2046 let isl_rs_ctx = set1.get_ctx();
2047 let mut set1 = set1;
2048 set1.do_not_free_on_drop();
2049 let set1 = set1.ptr;
2050 let mut set2 = set2;
2051 set2.do_not_free_on_drop();
2052 let set2 = set2.ptr;
2053 let isl_rs_result = unsafe { isl_set_lex_ge_set(set1, set2) };
2054 let isl_rs_result = Map { ptr: isl_rs_result,
2055 should_free_on_drop: true };
2056 let err = isl_rs_ctx.last_error();
2057 if err != Error::None_ {
2058 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2059 }
2060 Ok(isl_rs_result)
2061 }
2062
2063 pub fn lex_gt_set(self, set2: Set) -> Result<Map, LibISLError> {
2065 let set1 = self;
2066 let isl_rs_ctx = set1.get_ctx();
2067 let mut set1 = set1;
2068 set1.do_not_free_on_drop();
2069 let set1 = set1.ptr;
2070 let mut set2 = set2;
2071 set2.do_not_free_on_drop();
2072 let set2 = set2.ptr;
2073 let isl_rs_result = unsafe { isl_set_lex_gt_set(set1, set2) };
2074 let isl_rs_result = Map { ptr: isl_rs_result,
2075 should_free_on_drop: true };
2076 let err = isl_rs_ctx.last_error();
2077 if err != Error::None_ {
2078 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2079 }
2080 Ok(isl_rs_result)
2081 }
2082
2083 pub fn lex_le_set(self, set2: Set) -> Result<Map, LibISLError> {
2085 let set1 = self;
2086 let isl_rs_ctx = set1.get_ctx();
2087 let mut set1 = set1;
2088 set1.do_not_free_on_drop();
2089 let set1 = set1.ptr;
2090 let mut set2 = set2;
2091 set2.do_not_free_on_drop();
2092 let set2 = set2.ptr;
2093 let isl_rs_result = unsafe { isl_set_lex_le_set(set1, set2) };
2094 let isl_rs_result = Map { ptr: isl_rs_result,
2095 should_free_on_drop: true };
2096 let err = isl_rs_ctx.last_error();
2097 if err != Error::None_ {
2098 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2099 }
2100 Ok(isl_rs_result)
2101 }
2102
2103 pub fn lex_lt_set(self, set2: Set) -> Result<Map, LibISLError> {
2105 let set1 = self;
2106 let isl_rs_ctx = set1.get_ctx();
2107 let mut set1 = set1;
2108 set1.do_not_free_on_drop();
2109 let set1 = set1.ptr;
2110 let mut set2 = set2;
2111 set2.do_not_free_on_drop();
2112 let set2 = set2.ptr;
2113 let isl_rs_result = unsafe { isl_set_lex_lt_set(set1, set2) };
2114 let isl_rs_result = Map { ptr: isl_rs_result,
2115 should_free_on_drop: true };
2116 let err = isl_rs_ctx.last_error();
2117 if err != Error::None_ {
2118 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2119 }
2120 Ok(isl_rs_result)
2121 }
2122
2123 pub fn lexmax(self) -> Result<Set, LibISLError> {
2125 let set = self;
2126 let isl_rs_ctx = set.get_ctx();
2127 let mut set = set;
2128 set.do_not_free_on_drop();
2129 let set = set.ptr;
2130 let isl_rs_result = unsafe { isl_set_lexmax(set) };
2131 let isl_rs_result = Set { ptr: isl_rs_result,
2132 should_free_on_drop: true };
2133 let err = isl_rs_ctx.last_error();
2134 if err != Error::None_ {
2135 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2136 }
2137 Ok(isl_rs_result)
2138 }
2139
2140 pub fn lexmax_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
2142 let set = self;
2143 let isl_rs_ctx = set.get_ctx();
2144 let mut set = set;
2145 set.do_not_free_on_drop();
2146 let set = set.ptr;
2147 let isl_rs_result = unsafe { isl_set_lexmax_pw_multi_aff(set) };
2148 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2149 should_free_on_drop: true };
2150 let err = isl_rs_ctx.last_error();
2151 if err != Error::None_ {
2152 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2153 }
2154 Ok(isl_rs_result)
2155 }
2156
2157 pub fn lexmin(self) -> Result<Set, LibISLError> {
2159 let set = self;
2160 let isl_rs_ctx = set.get_ctx();
2161 let mut set = set;
2162 set.do_not_free_on_drop();
2163 let set = set.ptr;
2164 let isl_rs_result = unsafe { isl_set_lexmin(set) };
2165 let isl_rs_result = Set { ptr: isl_rs_result,
2166 should_free_on_drop: true };
2167 let err = isl_rs_ctx.last_error();
2168 if err != Error::None_ {
2169 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2170 }
2171 Ok(isl_rs_result)
2172 }
2173
2174 pub fn lexmin_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
2176 let set = self;
2177 let isl_rs_ctx = set.get_ctx();
2178 let mut set = set;
2179 set.do_not_free_on_drop();
2180 let set = set.ptr;
2181 let isl_rs_result = unsafe { isl_set_lexmin_pw_multi_aff(set) };
2182 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2183 should_free_on_drop: true };
2184 let err = isl_rs_ctx.last_error();
2185 if err != Error::None_ {
2186 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2187 }
2188 Ok(isl_rs_result)
2189 }
2190
2191 pub fn lift(self) -> Result<Set, LibISLError> {
2193 let set = self;
2194 let isl_rs_ctx = set.get_ctx();
2195 let mut set = set;
2196 set.do_not_free_on_drop();
2197 let set = set.ptr;
2198 let isl_rs_result = unsafe { isl_set_lift(set) };
2199 let isl_rs_result = Set { ptr: isl_rs_result,
2200 should_free_on_drop: true };
2201 let err = isl_rs_ctx.last_error();
2202 if err != Error::None_ {
2203 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2204 }
2205 Ok(isl_rs_result)
2206 }
2207
2208 pub fn lower_bound_multi_pw_aff(self, lower: MultiPwAff) -> Result<Set, LibISLError> {
2210 let set = self;
2211 let isl_rs_ctx = set.get_ctx();
2212 let mut set = set;
2213 set.do_not_free_on_drop();
2214 let set = set.ptr;
2215 let mut lower = lower;
2216 lower.do_not_free_on_drop();
2217 let lower = lower.ptr;
2218 let isl_rs_result = unsafe { isl_set_lower_bound_multi_pw_aff(set, lower) };
2219 let isl_rs_result = Set { ptr: isl_rs_result,
2220 should_free_on_drop: true };
2221 let err = isl_rs_ctx.last_error();
2222 if err != Error::None_ {
2223 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2224 }
2225 Ok(isl_rs_result)
2226 }
2227
2228 pub fn lower_bound_multi_val(self, lower: MultiVal) -> Result<Set, LibISLError> {
2230 let set = self;
2231 let isl_rs_ctx = set.get_ctx();
2232 let mut set = set;
2233 set.do_not_free_on_drop();
2234 let set = set.ptr;
2235 let mut lower = lower;
2236 lower.do_not_free_on_drop();
2237 let lower = lower.ptr;
2238 let isl_rs_result = unsafe { isl_set_lower_bound_multi_val(set, lower) };
2239 let isl_rs_result = Set { ptr: isl_rs_result,
2240 should_free_on_drop: true };
2241 let err = isl_rs_ctx.last_error();
2242 if err != Error::None_ {
2243 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2244 }
2245 Ok(isl_rs_result)
2246 }
2247
2248 pub fn lower_bound_si(self, type_: DimType, pos: u32, value: i32) -> Result<Set, LibISLError> {
2250 let set = self;
2251 let isl_rs_ctx = set.get_ctx();
2252 let mut set = set;
2253 set.do_not_free_on_drop();
2254 let set = set.ptr;
2255 let type_ = type_.to_i32();
2256 let isl_rs_result = unsafe { isl_set_lower_bound_si(set, type_, pos, value) };
2257 let isl_rs_result = Set { ptr: isl_rs_result,
2258 should_free_on_drop: true };
2259 let err = isl_rs_ctx.last_error();
2260 if err != Error::None_ {
2261 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2262 }
2263 Ok(isl_rs_result)
2264 }
2265
2266 pub fn lower_bound_val(self, type_: DimType, pos: u32, value: Val) -> Result<Set, LibISLError> {
2268 let set = self;
2269 let isl_rs_ctx = set.get_ctx();
2270 let mut set = set;
2271 set.do_not_free_on_drop();
2272 let set = set.ptr;
2273 let type_ = type_.to_i32();
2274 let mut value = value;
2275 value.do_not_free_on_drop();
2276 let value = value.ptr;
2277 let isl_rs_result = unsafe { isl_set_lower_bound_val(set, type_, pos, value) };
2278 let isl_rs_result = Set { ptr: isl_rs_result,
2279 should_free_on_drop: true };
2280 let err = isl_rs_ctx.last_error();
2281 if err != Error::None_ {
2282 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2283 }
2284 Ok(isl_rs_result)
2285 }
2286
2287 pub fn make_disjoint(self) -> Result<Set, LibISLError> {
2289 let set = self;
2290 let isl_rs_ctx = set.get_ctx();
2291 let mut set = set;
2292 set.do_not_free_on_drop();
2293 let set = set.ptr;
2294 let isl_rs_result = unsafe { isl_set_make_disjoint(set) };
2295 let isl_rs_result = Set { ptr: isl_rs_result,
2296 should_free_on_drop: true };
2297 let err = isl_rs_ctx.last_error();
2298 if err != Error::None_ {
2299 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2300 }
2301 Ok(isl_rs_result)
2302 }
2303
2304 pub fn max_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
2306 let set = self;
2307 let isl_rs_ctx = set.get_ctx();
2308 let mut set = set;
2309 set.do_not_free_on_drop();
2310 let set = set.ptr;
2311 let isl_rs_result = unsafe { isl_set_max_multi_pw_aff(set) };
2312 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2313 should_free_on_drop: true };
2314 let err = isl_rs_ctx.last_error();
2315 if err != Error::None_ {
2316 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2317 }
2318 Ok(isl_rs_result)
2319 }
2320
2321 pub fn max_val(&self, obj: &Aff) -> Result<Val, LibISLError> {
2323 let set = self;
2324 let isl_rs_ctx = set.get_ctx();
2325 let set = set.ptr;
2326 let obj = obj.ptr;
2327 let isl_rs_result = unsafe { isl_set_max_val(set, obj) };
2328 let isl_rs_result = Val { ptr: isl_rs_result,
2329 should_free_on_drop: true };
2330 let err = isl_rs_ctx.last_error();
2331 if err != Error::None_ {
2332 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2333 }
2334 Ok(isl_rs_result)
2335 }
2336
2337 pub fn min_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
2339 let set = self;
2340 let isl_rs_ctx = set.get_ctx();
2341 let mut set = set;
2342 set.do_not_free_on_drop();
2343 let set = set.ptr;
2344 let isl_rs_result = unsafe { isl_set_min_multi_pw_aff(set) };
2345 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2346 should_free_on_drop: true };
2347 let err = isl_rs_ctx.last_error();
2348 if err != Error::None_ {
2349 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2350 }
2351 Ok(isl_rs_result)
2352 }
2353
2354 pub fn min_val(&self, obj: &Aff) -> Result<Val, LibISLError> {
2356 let set = self;
2357 let isl_rs_ctx = set.get_ctx();
2358 let set = set.ptr;
2359 let obj = obj.ptr;
2360 let isl_rs_result = unsafe { isl_set_min_val(set, obj) };
2361 let isl_rs_result = Val { ptr: isl_rs_result,
2362 should_free_on_drop: true };
2363 let err = isl_rs_ctx.last_error();
2364 if err != Error::None_ {
2365 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2366 }
2367 Ok(isl_rs_result)
2368 }
2369
2370 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
2372 n: u32)
2373 -> Result<Set, LibISLError> {
2374 let set = self;
2375 let isl_rs_ctx = set.get_ctx();
2376 let mut set = set;
2377 set.do_not_free_on_drop();
2378 let set = set.ptr;
2379 let dst_type = dst_type.to_i32();
2380 let src_type = src_type.to_i32();
2381 let isl_rs_result =
2382 unsafe { isl_set_move_dims(set, dst_type, dst_pos, src_type, src_pos, n) };
2383 let isl_rs_result = Set { ptr: isl_rs_result,
2384 should_free_on_drop: true };
2385 let err = isl_rs_ctx.last_error();
2386 if err != Error::None_ {
2387 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2388 }
2389 Ok(isl_rs_result)
2390 }
2391
2392 pub fn n_basic_set(&self) -> Result<i32, LibISLError> {
2394 let set = self;
2395 let isl_rs_ctx = set.get_ctx();
2396 let set = set.ptr;
2397 let isl_rs_result = unsafe { isl_set_n_basic_set(set) };
2398 let err = isl_rs_ctx.last_error();
2399 if err != Error::None_ {
2400 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2401 }
2402 Ok(isl_rs_result)
2403 }
2404
2405 pub fn n_dim(&self) -> Result<i32, LibISLError> {
2407 let set = self;
2408 let isl_rs_ctx = set.get_ctx();
2409 let set = set.ptr;
2410 let isl_rs_result = unsafe { isl_set_n_dim(set) };
2411 let err = isl_rs_ctx.last_error();
2412 if err != Error::None_ {
2413 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2414 }
2415 Ok(isl_rs_result)
2416 }
2417
2418 pub fn n_param(&self) -> Result<i32, LibISLError> {
2420 let set = self;
2421 let isl_rs_ctx = set.get_ctx();
2422 let set = set.ptr;
2423 let isl_rs_result = unsafe { isl_set_n_param(set) };
2424 let err = isl_rs_ctx.last_error();
2425 if err != Error::None_ {
2426 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2427 }
2428 Ok(isl_rs_result)
2429 }
2430
2431 pub fn nat_universe(space: Space) -> Result<Set, LibISLError> {
2433 let isl_rs_ctx = space.get_ctx();
2434 let mut space = space;
2435 space.do_not_free_on_drop();
2436 let space = space.ptr;
2437 let isl_rs_result = unsafe { isl_set_nat_universe(space) };
2438 let isl_rs_result = Set { ptr: isl_rs_result,
2439 should_free_on_drop: true };
2440 let err = isl_rs_ctx.last_error();
2441 if err != Error::None_ {
2442 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2443 }
2444 Ok(isl_rs_result)
2445 }
2446
2447 pub fn neg(self) -> Result<Set, LibISLError> {
2449 let set = self;
2450 let isl_rs_ctx = set.get_ctx();
2451 let mut set = set;
2452 set.do_not_free_on_drop();
2453 let set = set.ptr;
2454 let isl_rs_result = unsafe { isl_set_neg(set) };
2455 let isl_rs_result = Set { ptr: isl_rs_result,
2456 should_free_on_drop: true };
2457 let err = isl_rs_ctx.last_error();
2458 if err != Error::None_ {
2459 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2460 }
2461 Ok(isl_rs_result)
2462 }
2463
2464 pub fn param_pw_aff_on_domain_id(self, id: Id) -> Result<PwAff, LibISLError> {
2466 let domain = self;
2467 let isl_rs_ctx = domain.get_ctx();
2468 let mut domain = domain;
2469 domain.do_not_free_on_drop();
2470 let domain = domain.ptr;
2471 let mut id = id;
2472 id.do_not_free_on_drop();
2473 let id = id.ptr;
2474 let isl_rs_result = unsafe { isl_set_param_pw_aff_on_domain_id(domain, id) };
2475 let isl_rs_result = PwAff { ptr: isl_rs_result,
2476 should_free_on_drop: true };
2477 let err = isl_rs_ctx.last_error();
2478 if err != Error::None_ {
2479 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2480 }
2481 Ok(isl_rs_result)
2482 }
2483
2484 pub fn params(self) -> Result<Set, LibISLError> {
2486 let set = self;
2487 let isl_rs_ctx = set.get_ctx();
2488 let mut set = set;
2489 set.do_not_free_on_drop();
2490 let set = set.ptr;
2491 let isl_rs_result = unsafe { isl_set_params(set) };
2492 let isl_rs_result = Set { ptr: isl_rs_result,
2493 should_free_on_drop: true };
2494 let err = isl_rs_ctx.last_error();
2495 if err != Error::None_ {
2496 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2497 }
2498 Ok(isl_rs_result)
2499 }
2500
2501 pub fn plain_cmp(&self, set2: &Set) -> Result<i32, LibISLError> {
2503 let set1 = self;
2504 let isl_rs_ctx = set1.get_ctx();
2505 let set1 = set1.ptr;
2506 let set2 = set2.ptr;
2507 let isl_rs_result = unsafe { isl_set_plain_cmp(set1, set2) };
2508 let err = isl_rs_ctx.last_error();
2509 if err != Error::None_ {
2510 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2511 }
2512 Ok(isl_rs_result)
2513 }
2514
2515 pub fn plain_get_val_if_fixed(&self, type_: DimType, pos: u32) -> Result<Val, LibISLError> {
2517 let set = self;
2518 let isl_rs_ctx = set.get_ctx();
2519 let set = set.ptr;
2520 let type_ = type_.to_i32();
2521 let isl_rs_result = unsafe { isl_set_plain_get_val_if_fixed(set, type_, pos) };
2522 let isl_rs_result = Val { ptr: isl_rs_result,
2523 should_free_on_drop: true };
2524 let err = isl_rs_ctx.last_error();
2525 if err != Error::None_ {
2526 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2527 }
2528 Ok(isl_rs_result)
2529 }
2530
2531 pub fn plain_is_disjoint(&self, set2: &Set) -> Result<bool, LibISLError> {
2533 let set1 = self;
2534 let isl_rs_ctx = set1.get_ctx();
2535 let set1 = set1.ptr;
2536 let set2 = set2.ptr;
2537 let isl_rs_result = unsafe { isl_set_plain_is_disjoint(set1, set2) };
2538 let isl_rs_result = match isl_rs_result {
2539 0 => false,
2540 1 => true,
2541 _ => panic!("Got isl_bool = -1"),
2542 };
2543 let err = isl_rs_ctx.last_error();
2544 if err != Error::None_ {
2545 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2546 }
2547 Ok(isl_rs_result)
2548 }
2549
2550 pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
2552 let set = self;
2553 let isl_rs_ctx = set.get_ctx();
2554 let set = set.ptr;
2555 let isl_rs_result = unsafe { isl_set_plain_is_empty(set) };
2556 let isl_rs_result = match isl_rs_result {
2557 0 => false,
2558 1 => true,
2559 _ => panic!("Got isl_bool = -1"),
2560 };
2561 let err = isl_rs_ctx.last_error();
2562 if err != Error::None_ {
2563 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2564 }
2565 Ok(isl_rs_result)
2566 }
2567
2568 pub fn plain_is_equal(&self, set2: &Set) -> Result<bool, LibISLError> {
2570 let set1 = self;
2571 let isl_rs_ctx = set1.get_ctx();
2572 let set1 = set1.ptr;
2573 let set2 = set2.ptr;
2574 let isl_rs_result = unsafe { isl_set_plain_is_equal(set1, set2) };
2575 let isl_rs_result = match isl_rs_result {
2576 0 => false,
2577 1 => true,
2578 _ => panic!("Got isl_bool = -1"),
2579 };
2580 let err = isl_rs_ctx.last_error();
2581 if err != Error::None_ {
2582 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2583 }
2584 Ok(isl_rs_result)
2585 }
2586
2587 pub fn plain_is_universe(&self) -> Result<bool, LibISLError> {
2589 let set = self;
2590 let isl_rs_ctx = set.get_ctx();
2591 let set = set.ptr;
2592 let isl_rs_result = unsafe { isl_set_plain_is_universe(set) };
2593 let isl_rs_result = match isl_rs_result {
2594 0 => false,
2595 1 => true,
2596 _ => panic!("Got isl_bool = -1"),
2597 };
2598 let err = isl_rs_ctx.last_error();
2599 if err != Error::None_ {
2600 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2601 }
2602 Ok(isl_rs_result)
2603 }
2604
2605 pub fn plain_unshifted_simple_hull(self) -> Result<BasicSet, LibISLError> {
2607 let set = self;
2608 let isl_rs_ctx = set.get_ctx();
2609 let mut set = set;
2610 set.do_not_free_on_drop();
2611 let set = set.ptr;
2612 let isl_rs_result = unsafe { isl_set_plain_unshifted_simple_hull(set) };
2613 let isl_rs_result = BasicSet { ptr: isl_rs_result,
2614 should_free_on_drop: true };
2615 let err = isl_rs_ctx.last_error();
2616 if err != Error::None_ {
2617 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2618 }
2619 Ok(isl_rs_result)
2620 }
2621
2622 pub fn polyhedral_hull(self) -> Result<BasicSet, LibISLError> {
2624 let set = self;
2625 let isl_rs_ctx = set.get_ctx();
2626 let mut set = set;
2627 set.do_not_free_on_drop();
2628 let set = set.ptr;
2629 let isl_rs_result = unsafe { isl_set_polyhedral_hull(set) };
2630 let isl_rs_result = BasicSet { ptr: isl_rs_result,
2631 should_free_on_drop: true };
2632 let err = isl_rs_ctx.last_error();
2633 if err != Error::None_ {
2634 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2635 }
2636 Ok(isl_rs_result)
2637 }
2638
2639 pub fn preimage_multi_aff(self, ma: MultiAff) -> Result<Set, LibISLError> {
2641 let set = self;
2642 let isl_rs_ctx = set.get_ctx();
2643 let mut set = set;
2644 set.do_not_free_on_drop();
2645 let set = set.ptr;
2646 let mut ma = ma;
2647 ma.do_not_free_on_drop();
2648 let ma = ma.ptr;
2649 let isl_rs_result = unsafe { isl_set_preimage_multi_aff(set, ma) };
2650 let isl_rs_result = Set { ptr: isl_rs_result,
2651 should_free_on_drop: true };
2652 let err = isl_rs_ctx.last_error();
2653 if err != Error::None_ {
2654 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2655 }
2656 Ok(isl_rs_result)
2657 }
2658
2659 pub fn preimage_multi_pw_aff(self, mpa: MultiPwAff) -> Result<Set, LibISLError> {
2661 let set = self;
2662 let isl_rs_ctx = set.get_ctx();
2663 let mut set = set;
2664 set.do_not_free_on_drop();
2665 let set = set.ptr;
2666 let mut mpa = mpa;
2667 mpa.do_not_free_on_drop();
2668 let mpa = mpa.ptr;
2669 let isl_rs_result = unsafe { isl_set_preimage_multi_pw_aff(set, mpa) };
2670 let isl_rs_result = Set { ptr: isl_rs_result,
2671 should_free_on_drop: true };
2672 let err = isl_rs_ctx.last_error();
2673 if err != Error::None_ {
2674 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2675 }
2676 Ok(isl_rs_result)
2677 }
2678
2679 pub fn preimage_pw_multi_aff(self, pma: PwMultiAff) -> Result<Set, LibISLError> {
2681 let set = self;
2682 let isl_rs_ctx = set.get_ctx();
2683 let mut set = set;
2684 set.do_not_free_on_drop();
2685 let set = set.ptr;
2686 let mut pma = pma;
2687 pma.do_not_free_on_drop();
2688 let pma = pma.ptr;
2689 let isl_rs_result = unsafe { isl_set_preimage_pw_multi_aff(set, pma) };
2690 let isl_rs_result = Set { ptr: isl_rs_result,
2691 should_free_on_drop: true };
2692 let err = isl_rs_ctx.last_error();
2693 if err != Error::None_ {
2694 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2695 }
2696 Ok(isl_rs_result)
2697 }
2698
2699 pub fn product(self, set2: Set) -> Result<Set, LibISLError> {
2701 let set1 = self;
2702 let isl_rs_ctx = set1.get_ctx();
2703 let mut set1 = set1;
2704 set1.do_not_free_on_drop();
2705 let set1 = set1.ptr;
2706 let mut set2 = set2;
2707 set2.do_not_free_on_drop();
2708 let set2 = set2.ptr;
2709 let isl_rs_result = unsafe { isl_set_product(set1, set2) };
2710 let isl_rs_result = Set { ptr: isl_rs_result,
2711 should_free_on_drop: true };
2712 let err = isl_rs_ctx.last_error();
2713 if err != Error::None_ {
2714 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2715 }
2716 Ok(isl_rs_result)
2717 }
2718
2719 pub fn project_onto_map(self, type_: DimType, first: u32, n: u32) -> Result<Map, LibISLError> {
2721 let set = self;
2722 let isl_rs_ctx = set.get_ctx();
2723 let mut set = set;
2724 set.do_not_free_on_drop();
2725 let set = set.ptr;
2726 let type_ = type_.to_i32();
2727 let isl_rs_result = unsafe { isl_set_project_onto_map(set, type_, first, n) };
2728 let isl_rs_result = Map { ptr: isl_rs_result,
2729 should_free_on_drop: true };
2730 let err = isl_rs_ctx.last_error();
2731 if err != Error::None_ {
2732 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2733 }
2734 Ok(isl_rs_result)
2735 }
2736
2737 pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<Set, LibISLError> {
2739 let set = self;
2740 let isl_rs_ctx = set.get_ctx();
2741 let mut set = set;
2742 set.do_not_free_on_drop();
2743 let set = set.ptr;
2744 let type_ = type_.to_i32();
2745 let isl_rs_result = unsafe { isl_set_project_out(set, type_, first, n) };
2746 let isl_rs_result = Set { ptr: isl_rs_result,
2747 should_free_on_drop: true };
2748 let err = isl_rs_ctx.last_error();
2749 if err != Error::None_ {
2750 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2751 }
2752 Ok(isl_rs_result)
2753 }
2754
2755 pub fn project_out_all_params(self) -> Result<Set, LibISLError> {
2757 let set = self;
2758 let isl_rs_ctx = set.get_ctx();
2759 let mut set = set;
2760 set.do_not_free_on_drop();
2761 let set = set.ptr;
2762 let isl_rs_result = unsafe { isl_set_project_out_all_params(set) };
2763 let isl_rs_result = Set { ptr: isl_rs_result,
2764 should_free_on_drop: true };
2765 let err = isl_rs_ctx.last_error();
2766 if err != Error::None_ {
2767 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2768 }
2769 Ok(isl_rs_result)
2770 }
2771
2772 pub fn project_out_param_id(self, id: Id) -> Result<Set, LibISLError> {
2774 let set = self;
2775 let isl_rs_ctx = set.get_ctx();
2776 let mut set = set;
2777 set.do_not_free_on_drop();
2778 let set = set.ptr;
2779 let mut id = id;
2780 id.do_not_free_on_drop();
2781 let id = id.ptr;
2782 let isl_rs_result = unsafe { isl_set_project_out_param_id(set, id) };
2783 let isl_rs_result = Set { ptr: isl_rs_result,
2784 should_free_on_drop: true };
2785 let err = isl_rs_ctx.last_error();
2786 if err != Error::None_ {
2787 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2788 }
2789 Ok(isl_rs_result)
2790 }
2791
2792 pub fn project_out_param_id_list(self, list: IdList) -> Result<Set, LibISLError> {
2794 let set = self;
2795 let isl_rs_ctx = set.get_ctx();
2796 let mut set = set;
2797 set.do_not_free_on_drop();
2798 let set = set.ptr;
2799 let mut list = list;
2800 list.do_not_free_on_drop();
2801 let list = list.ptr;
2802 let isl_rs_result = unsafe { isl_set_project_out_param_id_list(set, list) };
2803 let isl_rs_result = Set { ptr: isl_rs_result,
2804 should_free_on_drop: true };
2805 let err = isl_rs_ctx.last_error();
2806 if err != Error::None_ {
2807 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2808 }
2809 Ok(isl_rs_result)
2810 }
2811
2812 pub fn pw_aff_on_domain_val(self, v: Val) -> Result<PwAff, LibISLError> {
2814 let domain = self;
2815 let isl_rs_ctx = domain.get_ctx();
2816 let mut domain = domain;
2817 domain.do_not_free_on_drop();
2818 let domain = domain.ptr;
2819 let mut v = v;
2820 v.do_not_free_on_drop();
2821 let v = v.ptr;
2822 let isl_rs_result = unsafe { isl_set_pw_aff_on_domain_val(domain, v) };
2823 let isl_rs_result = PwAff { ptr: isl_rs_result,
2824 should_free_on_drop: true };
2825 let err = isl_rs_ctx.last_error();
2826 if err != Error::None_ {
2827 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2828 }
2829 Ok(isl_rs_result)
2830 }
2831
2832 pub fn pw_multi_aff_on_domain_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
2834 let domain = self;
2835 let isl_rs_ctx = domain.get_ctx();
2836 let mut domain = domain;
2837 domain.do_not_free_on_drop();
2838 let domain = domain.ptr;
2839 let mut mv = mv;
2840 mv.do_not_free_on_drop();
2841 let mv = mv.ptr;
2842 let isl_rs_result = unsafe { isl_set_pw_multi_aff_on_domain_multi_val(domain, mv) };
2843 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2844 should_free_on_drop: true };
2845 let err = isl_rs_ctx.last_error();
2846 if err != Error::None_ {
2847 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2848 }
2849 Ok(isl_rs_result)
2850 }
2851
2852 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<Set, LibISLError> {
2854 let isl_rs_ctx = Context { ptr: ctx.ptr,
2855 should_free_on_drop: false };
2856 let ctx = ctx.ptr;
2857 let str_ = CString::new(str_).unwrap();
2858 let str_ = str_.as_ptr();
2859 let isl_rs_result = unsafe { isl_set_read_from_str(ctx, str_) };
2860 let isl_rs_result = Set { ptr: isl_rs_result,
2861 should_free_on_drop: true };
2862 let err = isl_rs_ctx.last_error();
2863 if err != Error::None_ {
2864 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2865 }
2866 Ok(isl_rs_result)
2867 }
2868
2869 pub fn remove_dims(self, type_: DimType, first: u32, n: u32) -> Result<Set, LibISLError> {
2871 let bset = self;
2872 let isl_rs_ctx = bset.get_ctx();
2873 let mut bset = bset;
2874 bset.do_not_free_on_drop();
2875 let bset = bset.ptr;
2876 let type_ = type_.to_i32();
2877 let isl_rs_result = unsafe { isl_set_remove_dims(bset, type_, first, n) };
2878 let isl_rs_result = Set { ptr: isl_rs_result,
2879 should_free_on_drop: true };
2880 let err = isl_rs_ctx.last_error();
2881 if err != Error::None_ {
2882 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2883 }
2884 Ok(isl_rs_result)
2885 }
2886
2887 pub fn remove_divs(self) -> Result<Set, LibISLError> {
2889 let set = self;
2890 let isl_rs_ctx = set.get_ctx();
2891 let mut set = set;
2892 set.do_not_free_on_drop();
2893 let set = set.ptr;
2894 let isl_rs_result = unsafe { isl_set_remove_divs(set) };
2895 let isl_rs_result = Set { ptr: isl_rs_result,
2896 should_free_on_drop: true };
2897 let err = isl_rs_ctx.last_error();
2898 if err != Error::None_ {
2899 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2900 }
2901 Ok(isl_rs_result)
2902 }
2903
2904 pub fn remove_divs_involving_dims(self, type_: DimType, first: u32, n: u32)
2906 -> Result<Set, LibISLError> {
2907 let set = self;
2908 let isl_rs_ctx = set.get_ctx();
2909 let mut set = set;
2910 set.do_not_free_on_drop();
2911 let set = set.ptr;
2912 let type_ = type_.to_i32();
2913 let isl_rs_result = unsafe { isl_set_remove_divs_involving_dims(set, type_, first, n) };
2914 let isl_rs_result = Set { ptr: isl_rs_result,
2915 should_free_on_drop: true };
2916 let err = isl_rs_ctx.last_error();
2917 if err != Error::None_ {
2918 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2919 }
2920 Ok(isl_rs_result)
2921 }
2922
2923 pub fn remove_redundancies(self) -> Result<Set, LibISLError> {
2925 let set = self;
2926 let isl_rs_ctx = set.get_ctx();
2927 let mut set = set;
2928 set.do_not_free_on_drop();
2929 let set = set.ptr;
2930 let isl_rs_result = unsafe { isl_set_remove_redundancies(set) };
2931 let isl_rs_result = Set { ptr: isl_rs_result,
2932 should_free_on_drop: true };
2933 let err = isl_rs_ctx.last_error();
2934 if err != Error::None_ {
2935 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2936 }
2937 Ok(isl_rs_result)
2938 }
2939
2940 pub fn remove_unknown_divs(self) -> Result<Set, LibISLError> {
2942 let set = self;
2943 let isl_rs_ctx = set.get_ctx();
2944 let mut set = set;
2945 set.do_not_free_on_drop();
2946 let set = set.ptr;
2947 let isl_rs_result = unsafe { isl_set_remove_unknown_divs(set) };
2948 let isl_rs_result = Set { ptr: isl_rs_result,
2949 should_free_on_drop: true };
2950 let err = isl_rs_ctx.last_error();
2951 if err != Error::None_ {
2952 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2953 }
2954 Ok(isl_rs_result)
2955 }
2956
2957 pub fn reset_space(self, space: Space) -> Result<Set, LibISLError> {
2959 let set = self;
2960 let isl_rs_ctx = set.get_ctx();
2961 let mut set = set;
2962 set.do_not_free_on_drop();
2963 let set = set.ptr;
2964 let mut space = space;
2965 space.do_not_free_on_drop();
2966 let space = space.ptr;
2967 let isl_rs_result = unsafe { isl_set_reset_space(set, space) };
2968 let isl_rs_result = Set { ptr: isl_rs_result,
2969 should_free_on_drop: true };
2970 let err = isl_rs_ctx.last_error();
2971 if err != Error::None_ {
2972 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2973 }
2974 Ok(isl_rs_result)
2975 }
2976
2977 pub fn reset_tuple_id(self) -> Result<Set, LibISLError> {
2979 let set = self;
2980 let isl_rs_ctx = set.get_ctx();
2981 let mut set = set;
2982 set.do_not_free_on_drop();
2983 let set = set.ptr;
2984 let isl_rs_result = unsafe { isl_set_reset_tuple_id(set) };
2985 let isl_rs_result = Set { ptr: isl_rs_result,
2986 should_free_on_drop: true };
2987 let err = isl_rs_ctx.last_error();
2988 if err != Error::None_ {
2989 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2990 }
2991 Ok(isl_rs_result)
2992 }
2993
2994 pub fn reset_user(self) -> Result<Set, LibISLError> {
2996 let set = self;
2997 let isl_rs_ctx = set.get_ctx();
2998 let mut set = set;
2999 set.do_not_free_on_drop();
3000 let set = set.ptr;
3001 let isl_rs_result = unsafe { isl_set_reset_user(set) };
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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3007 }
3008 Ok(isl_rs_result)
3009 }
3010
3011 pub fn sample(self) -> Result<BasicSet, LibISLError> {
3013 let set = self;
3014 let isl_rs_ctx = set.get_ctx();
3015 let mut set = set;
3016 set.do_not_free_on_drop();
3017 let set = set.ptr;
3018 let isl_rs_result = unsafe { isl_set_sample(set) };
3019 let isl_rs_result = BasicSet { ptr: isl_rs_result,
3020 should_free_on_drop: true };
3021 let err = isl_rs_ctx.last_error();
3022 if err != Error::None_ {
3023 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3024 }
3025 Ok(isl_rs_result)
3026 }
3027
3028 pub fn sample_point(self) -> Result<Point, LibISLError> {
3030 let set = self;
3031 let isl_rs_ctx = set.get_ctx();
3032 let mut set = set;
3033 set.do_not_free_on_drop();
3034 let set = set.ptr;
3035 let isl_rs_result = unsafe { isl_set_sample_point(set) };
3036 let isl_rs_result = Point { ptr: isl_rs_result,
3037 should_free_on_drop: true };
3038 let err = isl_rs_ctx.last_error();
3039 if err != Error::None_ {
3040 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3041 }
3042 Ok(isl_rs_result)
3043 }
3044
3045 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<Set, LibISLError> {
3047 let set = self;
3048 let isl_rs_ctx = set.get_ctx();
3049 let mut set = set;
3050 set.do_not_free_on_drop();
3051 let set = set.ptr;
3052 let type_ = type_.to_i32();
3053 let mut id = id;
3054 id.do_not_free_on_drop();
3055 let id = id.ptr;
3056 let isl_rs_result = unsafe { isl_set_set_dim_id(set, type_, pos, id) };
3057 let isl_rs_result = Set { ptr: isl_rs_result,
3058 should_free_on_drop: true };
3059 let err = isl_rs_ctx.last_error();
3060 if err != Error::None_ {
3061 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3062 }
3063 Ok(isl_rs_result)
3064 }
3065
3066 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Result<Set, LibISLError> {
3068 let set = self;
3069 let isl_rs_ctx = set.get_ctx();
3070 let mut set = set;
3071 set.do_not_free_on_drop();
3072 let set = set.ptr;
3073 let type_ = type_.to_i32();
3074 let s = CString::new(s).unwrap();
3075 let s = s.as_ptr();
3076 let isl_rs_result = unsafe { isl_set_set_dim_name(set, type_, pos, s) };
3077 let isl_rs_result = Set { ptr: isl_rs_result,
3078 should_free_on_drop: true };
3079 let err = isl_rs_ctx.last_error();
3080 if err != Error::None_ {
3081 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3082 }
3083 Ok(isl_rs_result)
3084 }
3085
3086 pub fn set_tuple_id(self, id: Id) -> Result<Set, LibISLError> {
3088 let set = self;
3089 let isl_rs_ctx = set.get_ctx();
3090 let mut set = set;
3091 set.do_not_free_on_drop();
3092 let set = set.ptr;
3093 let mut id = id;
3094 id.do_not_free_on_drop();
3095 let id = id.ptr;
3096 let isl_rs_result = unsafe { isl_set_set_tuple_id(set, id) };
3097 let isl_rs_result = Set { ptr: isl_rs_result,
3098 should_free_on_drop: true };
3099 let err = isl_rs_ctx.last_error();
3100 if err != Error::None_ {
3101 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3102 }
3103 Ok(isl_rs_result)
3104 }
3105
3106 pub fn set_tuple_name(self, s: &str) -> Result<Set, LibISLError> {
3108 let set = self;
3109 let isl_rs_ctx = set.get_ctx();
3110 let mut set = set;
3111 set.do_not_free_on_drop();
3112 let set = set.ptr;
3113 let s = CString::new(s).unwrap();
3114 let s = s.as_ptr();
3115 let isl_rs_result = unsafe { isl_set_set_tuple_name(set, s) };
3116 let isl_rs_result = Set { ptr: isl_rs_result,
3117 should_free_on_drop: true };
3118 let err = isl_rs_ctx.last_error();
3119 if err != Error::None_ {
3120 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3121 }
3122 Ok(isl_rs_result)
3123 }
3124
3125 pub fn simple_hull(self) -> Result<BasicSet, LibISLError> {
3127 let set = self;
3128 let isl_rs_ctx = set.get_ctx();
3129 let mut set = set;
3130 set.do_not_free_on_drop();
3131 let set = set.ptr;
3132 let isl_rs_result = unsafe { isl_set_simple_hull(set) };
3133 let isl_rs_result = BasicSet { ptr: isl_rs_result,
3134 should_free_on_drop: true };
3135 let err = isl_rs_ctx.last_error();
3136 if err != Error::None_ {
3137 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3138 }
3139 Ok(isl_rs_result)
3140 }
3141
3142 pub fn size(&self) -> Result<i32, LibISLError> {
3144 let set = self;
3145 let isl_rs_ctx = set.get_ctx();
3146 let set = set.ptr;
3147 let isl_rs_result = unsafe { isl_set_size(set) };
3148 let err = isl_rs_ctx.last_error();
3149 if err != Error::None_ {
3150 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3151 }
3152 Ok(isl_rs_result)
3153 }
3154
3155 pub fn solutions(self) -> Result<BasicSet, LibISLError> {
3157 let set = self;
3158 let isl_rs_ctx = set.get_ctx();
3159 let mut set = set;
3160 set.do_not_free_on_drop();
3161 let set = set.ptr;
3162 let isl_rs_result = unsafe { isl_set_solutions(set) };
3163 let isl_rs_result = BasicSet { ptr: isl_rs_result,
3164 should_free_on_drop: true };
3165 let err = isl_rs_ctx.last_error();
3166 if err != Error::None_ {
3167 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3168 }
3169 Ok(isl_rs_result)
3170 }
3171
3172 pub fn split_dims(self, type_: DimType, first: u32, n: u32) -> Result<Set, LibISLError> {
3174 let set = self;
3175 let isl_rs_ctx = set.get_ctx();
3176 let mut set = set;
3177 set.do_not_free_on_drop();
3178 let set = set.ptr;
3179 let type_ = type_.to_i32();
3180 let isl_rs_result = unsafe { isl_set_split_dims(set, type_, first, n) };
3181 let isl_rs_result = Set { ptr: isl_rs_result,
3182 should_free_on_drop: true };
3183 let err = isl_rs_ctx.last_error();
3184 if err != Error::None_ {
3185 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3186 }
3187 Ok(isl_rs_result)
3188 }
3189
3190 pub fn subtract(self, set2: Set) -> Result<Set, LibISLError> {
3192 let set1 = self;
3193 let isl_rs_ctx = set1.get_ctx();
3194 let mut set1 = set1;
3195 set1.do_not_free_on_drop();
3196 let set1 = set1.ptr;
3197 let mut set2 = set2;
3198 set2.do_not_free_on_drop();
3199 let set2 = set2.ptr;
3200 let isl_rs_result = unsafe { isl_set_subtract(set1, set2) };
3201 let isl_rs_result = Set { ptr: isl_rs_result,
3202 should_free_on_drop: true };
3203 let err = isl_rs_ctx.last_error();
3204 if err != Error::None_ {
3205 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3206 }
3207 Ok(isl_rs_result)
3208 }
3209
3210 pub fn sum(self, set2: Set) -> Result<Set, LibISLError> {
3212 let set1 = self;
3213 let isl_rs_ctx = set1.get_ctx();
3214 let mut set1 = set1;
3215 set1.do_not_free_on_drop();
3216 let set1 = set1.ptr;
3217 let mut set2 = set2;
3218 set2.do_not_free_on_drop();
3219 let set2 = set2.ptr;
3220 let isl_rs_result = unsafe { isl_set_sum(set1, set2) };
3221 let isl_rs_result = Set { ptr: isl_rs_result,
3222 should_free_on_drop: true };
3223 let err = isl_rs_ctx.last_error();
3224 if err != Error::None_ {
3225 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3226 }
3227 Ok(isl_rs_result)
3228 }
3229
3230 pub fn to_list(self) -> Result<SetList, LibISLError> {
3232 let el = self;
3233 let isl_rs_ctx = el.get_ctx();
3234 let mut el = el;
3235 el.do_not_free_on_drop();
3236 let el = el.ptr;
3237 let isl_rs_result = unsafe { isl_set_to_list(el) };
3238 let isl_rs_result = SetList { ptr: isl_rs_result,
3239 should_free_on_drop: true };
3240 let err = isl_rs_ctx.last_error();
3241 if err != Error::None_ {
3242 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3243 }
3244 Ok(isl_rs_result)
3245 }
3246
3247 pub fn to_str(&self) -> Result<&str, LibISLError> {
3249 let set = self;
3250 let isl_rs_ctx = set.get_ctx();
3251 let set = set.ptr;
3252 let isl_rs_result = unsafe { isl_set_to_str(set) };
3253 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
3254 let isl_rs_result = isl_rs_result.to_str().unwrap();
3255 let err = isl_rs_ctx.last_error();
3256 if err != Error::None_ {
3257 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3258 }
3259 Ok(isl_rs_result)
3260 }
3261
3262 pub fn to_union_set(self) -> Result<UnionSet, LibISLError> {
3264 let set = self;
3265 let isl_rs_ctx = set.get_ctx();
3266 let mut set = set;
3267 set.do_not_free_on_drop();
3268 let set = set.ptr;
3269 let isl_rs_result = unsafe { isl_set_to_union_set(set) };
3270 let isl_rs_result = UnionSet { ptr: isl_rs_result,
3271 should_free_on_drop: true };
3272 let err = isl_rs_ctx.last_error();
3273 if err != Error::None_ {
3274 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3275 }
3276 Ok(isl_rs_result)
3277 }
3278
3279 pub fn translation(self) -> Result<Map, LibISLError> {
3281 let deltas = self;
3282 let isl_rs_ctx = deltas.get_ctx();
3283 let mut deltas = deltas;
3284 deltas.do_not_free_on_drop();
3285 let deltas = deltas.ptr;
3286 let isl_rs_result = unsafe { isl_set_translation(deltas) };
3287 let isl_rs_result = Map { ptr: isl_rs_result,
3288 should_free_on_drop: true };
3289 let err = isl_rs_ctx.last_error();
3290 if err != Error::None_ {
3291 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3292 }
3293 Ok(isl_rs_result)
3294 }
3295
3296 pub fn tuple_dim(&self) -> Result<i32, LibISLError> {
3298 let set = self;
3299 let isl_rs_ctx = set.get_ctx();
3300 let set = set.ptr;
3301 let isl_rs_result = unsafe { isl_set_tuple_dim(set) };
3302 let err = isl_rs_ctx.last_error();
3303 if err != Error::None_ {
3304 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3305 }
3306 Ok(isl_rs_result)
3307 }
3308
3309 pub fn unbind_params(self, tuple: MultiId) -> Result<Set, LibISLError> {
3311 let set = self;
3312 let isl_rs_ctx = set.get_ctx();
3313 let mut set = set;
3314 set.do_not_free_on_drop();
3315 let set = set.ptr;
3316 let mut tuple = tuple;
3317 tuple.do_not_free_on_drop();
3318 let tuple = tuple.ptr;
3319 let isl_rs_result = unsafe { isl_set_unbind_params(set, tuple) };
3320 let isl_rs_result = Set { ptr: isl_rs_result,
3321 should_free_on_drop: true };
3322 let err = isl_rs_ctx.last_error();
3323 if err != Error::None_ {
3324 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3325 }
3326 Ok(isl_rs_result)
3327 }
3328
3329 pub fn unbind_params_insert_domain(self, domain: MultiId) -> Result<Map, LibISLError> {
3331 let set = self;
3332 let isl_rs_ctx = set.get_ctx();
3333 let mut set = set;
3334 set.do_not_free_on_drop();
3335 let set = set.ptr;
3336 let mut domain = domain;
3337 domain.do_not_free_on_drop();
3338 let domain = domain.ptr;
3339 let isl_rs_result = unsafe { isl_set_unbind_params_insert_domain(set, domain) };
3340 let isl_rs_result = Map { ptr: isl_rs_result,
3341 should_free_on_drop: true };
3342 let err = isl_rs_ctx.last_error();
3343 if err != Error::None_ {
3344 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3345 }
3346 Ok(isl_rs_result)
3347 }
3348
3349 pub fn union(self, set2: Set) -> Result<Set, LibISLError> {
3351 let set1 = self;
3352 let isl_rs_ctx = set1.get_ctx();
3353 let mut set1 = set1;
3354 set1.do_not_free_on_drop();
3355 let set1 = set1.ptr;
3356 let mut set2 = set2;
3357 set2.do_not_free_on_drop();
3358 let set2 = set2.ptr;
3359 let isl_rs_result = unsafe { isl_set_union(set1, set2) };
3360 let isl_rs_result = Set { ptr: isl_rs_result,
3361 should_free_on_drop: true };
3362 let err = isl_rs_ctx.last_error();
3363 if err != Error::None_ {
3364 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3365 }
3366 Ok(isl_rs_result)
3367 }
3368
3369 pub fn union_disjoint(self, set2: Set) -> Result<Set, LibISLError> {
3371 let set1 = self;
3372 let isl_rs_ctx = set1.get_ctx();
3373 let mut set1 = set1;
3374 set1.do_not_free_on_drop();
3375 let set1 = set1.ptr;
3376 let mut set2 = set2;
3377 set2.do_not_free_on_drop();
3378 let set2 = set2.ptr;
3379 let isl_rs_result = unsafe { isl_set_union_disjoint(set1, set2) };
3380 let isl_rs_result = Set { ptr: isl_rs_result,
3381 should_free_on_drop: true };
3382 let err = isl_rs_ctx.last_error();
3383 if err != Error::None_ {
3384 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3385 }
3386 Ok(isl_rs_result)
3387 }
3388
3389 pub fn universe(space: Space) -> Result<Set, LibISLError> {
3391 let isl_rs_ctx = space.get_ctx();
3392 let mut space = space;
3393 space.do_not_free_on_drop();
3394 let space = space.ptr;
3395 let isl_rs_result = unsafe { isl_set_universe(space) };
3396 let isl_rs_result = Set { ptr: isl_rs_result,
3397 should_free_on_drop: true };
3398 let err = isl_rs_ctx.last_error();
3399 if err != Error::None_ {
3400 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3401 }
3402 Ok(isl_rs_result)
3403 }
3404
3405 pub fn unshifted_simple_hull(self) -> Result<BasicSet, LibISLError> {
3407 let set = self;
3408 let isl_rs_ctx = set.get_ctx();
3409 let mut set = set;
3410 set.do_not_free_on_drop();
3411 let set = set.ptr;
3412 let isl_rs_result = unsafe { isl_set_unshifted_simple_hull(set) };
3413 let isl_rs_result = BasicSet { ptr: isl_rs_result,
3414 should_free_on_drop: true };
3415 let err = isl_rs_ctx.last_error();
3416 if err != Error::None_ {
3417 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3418 }
3419 Ok(isl_rs_result)
3420 }
3421
3422 pub fn unshifted_simple_hull_from_set_list(self, list: SetList)
3424 -> Result<BasicSet, LibISLError> {
3425 let set = self;
3426 let isl_rs_ctx = set.get_ctx();
3427 let mut set = set;
3428 set.do_not_free_on_drop();
3429 let set = set.ptr;
3430 let mut list = list;
3431 list.do_not_free_on_drop();
3432 let list = list.ptr;
3433 let isl_rs_result = unsafe { isl_set_unshifted_simple_hull_from_set_list(set, list) };
3434 let isl_rs_result = BasicSet { ptr: isl_rs_result,
3435 should_free_on_drop: true };
3436 let err = isl_rs_ctx.last_error();
3437 if err != Error::None_ {
3438 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3439 }
3440 Ok(isl_rs_result)
3441 }
3442
3443 pub fn unwrap(self) -> Result<Map, LibISLError> {
3445 let set = self;
3446 let isl_rs_ctx = set.get_ctx();
3447 let mut set = set;
3448 set.do_not_free_on_drop();
3449 let set = set.ptr;
3450 let isl_rs_result = unsafe { isl_set_unwrap(set) };
3451 let isl_rs_result = Map { ptr: isl_rs_result,
3452 should_free_on_drop: true };
3453 let err = isl_rs_ctx.last_error();
3454 if err != Error::None_ {
3455 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3456 }
3457 Ok(isl_rs_result)
3458 }
3459
3460 pub fn upper_bound_multi_pw_aff(self, upper: MultiPwAff) -> Result<Set, LibISLError> {
3462 let set = self;
3463 let isl_rs_ctx = set.get_ctx();
3464 let mut set = set;
3465 set.do_not_free_on_drop();
3466 let set = set.ptr;
3467 let mut upper = upper;
3468 upper.do_not_free_on_drop();
3469 let upper = upper.ptr;
3470 let isl_rs_result = unsafe { isl_set_upper_bound_multi_pw_aff(set, upper) };
3471 let isl_rs_result = Set { ptr: isl_rs_result,
3472 should_free_on_drop: true };
3473 let err = isl_rs_ctx.last_error();
3474 if err != Error::None_ {
3475 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3476 }
3477 Ok(isl_rs_result)
3478 }
3479
3480 pub fn upper_bound_multi_val(self, upper: MultiVal) -> Result<Set, LibISLError> {
3482 let set = self;
3483 let isl_rs_ctx = set.get_ctx();
3484 let mut set = set;
3485 set.do_not_free_on_drop();
3486 let set = set.ptr;
3487 let mut upper = upper;
3488 upper.do_not_free_on_drop();
3489 let upper = upper.ptr;
3490 let isl_rs_result = unsafe { isl_set_upper_bound_multi_val(set, upper) };
3491 let isl_rs_result = Set { ptr: isl_rs_result,
3492 should_free_on_drop: true };
3493 let err = isl_rs_ctx.last_error();
3494 if err != Error::None_ {
3495 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3496 }
3497 Ok(isl_rs_result)
3498 }
3499
3500 pub fn upper_bound_si(self, type_: DimType, pos: u32, value: i32) -> Result<Set, LibISLError> {
3502 let set = self;
3503 let isl_rs_ctx = set.get_ctx();
3504 let mut set = set;
3505 set.do_not_free_on_drop();
3506 let set = set.ptr;
3507 let type_ = type_.to_i32();
3508 let isl_rs_result = unsafe { isl_set_upper_bound_si(set, type_, pos, value) };
3509 let isl_rs_result = Set { ptr: isl_rs_result,
3510 should_free_on_drop: true };
3511 let err = isl_rs_ctx.last_error();
3512 if err != Error::None_ {
3513 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3514 }
3515 Ok(isl_rs_result)
3516 }
3517
3518 pub fn upper_bound_val(self, type_: DimType, pos: u32, value: Val) -> Result<Set, LibISLError> {
3520 let set = self;
3521 let isl_rs_ctx = set.get_ctx();
3522 let mut set = set;
3523 set.do_not_free_on_drop();
3524 let set = set.ptr;
3525 let type_ = type_.to_i32();
3526 let mut value = value;
3527 value.do_not_free_on_drop();
3528 let value = value.ptr;
3529 let isl_rs_result = unsafe { isl_set_upper_bound_val(set, type_, pos, value) };
3530 let isl_rs_result = Set { ptr: isl_rs_result,
3531 should_free_on_drop: true };
3532 let err = isl_rs_ctx.last_error();
3533 if err != Error::None_ {
3534 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3535 }
3536 Ok(isl_rs_result)
3537 }
3538
3539 pub fn wrapped_domain_map(self) -> Result<Map, LibISLError> {
3541 let set = self;
3542 let isl_rs_ctx = set.get_ctx();
3543 let mut set = set;
3544 set.do_not_free_on_drop();
3545 let set = set.ptr;
3546 let isl_rs_result = unsafe { isl_set_wrapped_domain_map(set) };
3547 let isl_rs_result = Map { ptr: isl_rs_result,
3548 should_free_on_drop: true };
3549 let err = isl_rs_ctx.last_error();
3550 if err != Error::None_ {
3551 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3552 }
3553 Ok(isl_rs_result)
3554 }
3555
3556 pub fn wrapped_reverse(self) -> Result<Set, LibISLError> {
3558 let set = self;
3559 let isl_rs_ctx = set.get_ctx();
3560 let mut set = set;
3561 set.do_not_free_on_drop();
3562 let set = set.ptr;
3563 let isl_rs_result = unsafe { isl_set_wrapped_reverse(set) };
3564 let isl_rs_result = Set { ptr: isl_rs_result,
3565 should_free_on_drop: true };
3566 let err = isl_rs_ctx.last_error();
3567 if err != Error::None_ {
3568 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
3569 }
3570 Ok(isl_rs_result)
3571 }
3572
3573 pub fn do_not_free_on_drop(&mut self) {
3575 self.should_free_on_drop = false;
3576 }
3577}
3578
3579impl Drop for Set {
3580 fn drop(&mut self) {
3581 if self.should_free_on_drop {
3582 unsafe {
3583 isl_set_free(self.ptr);
3584 }
3585 }
3586 }
3587}