isl_rs/bindings/
set.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use 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
13/// Wraps `isl_set`.
14pub 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    /// Wraps `isl_set_add_constraint`.
392    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    /// Wraps `isl_set_add_dims`.
412    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    /// Wraps `isl_set_affine_hull`.
430    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    /// Wraps `isl_set_align_divs`.
447    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    /// Wraps `isl_set_align_params`.
464    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    /// Wraps `isl_set_apply`.
484    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    /// Wraps `isl_set_as_pw_multi_aff`.
504    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    /// Wraps `isl_set_bind`.
521    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    /// Wraps `isl_set_bounded_simple_hull`.
541    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    /// Wraps `isl_set_box_from_points`.
558    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    /// Wraps `isl_set_coalesce`.
577    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    /// Wraps `isl_set_coefficients`.
594    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    /// Wraps `isl_set_complement`.
611    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    /// Wraps `isl_set_compute_divs`.
628    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    /// Wraps `isl_set_convex_hull`.
645    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    /// Wraps `isl_set_copy`.
662    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    /// Wraps `isl_set_count_val`.
677    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    /// Wraps `isl_set_detect_equalities`.
692    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    /// Wraps `isl_set_dim`.
709    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    /// Wraps `isl_set_dim_has_any_lower_bound`.
723    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    /// Wraps `isl_set_dim_has_any_upper_bound`.
742    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    /// Wraps `isl_set_dim_has_lower_bound`.
761    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    /// Wraps `isl_set_dim_has_upper_bound`.
780    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    /// Wraps `isl_set_dim_is_bounded`.
799    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    /// Wraps `isl_set_dim_max`.
818    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    /// Wraps `isl_set_dim_max_val`.
835    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    /// Wraps `isl_set_dim_min`.
852    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    /// Wraps `isl_set_dim_min_val`.
869    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    /// Wraps `isl_set_drop_constraints_involving_dims`.
886    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    /// Wraps `isl_set_drop_constraints_not_involving_dims`.
906    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    /// Wraps `isl_set_drop_unused_params`.
926    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    /// Wraps `isl_set_dump`.
943    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    /// Wraps `isl_set_eliminate`.
956    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    /// Wraps `isl_set_eliminate_dims`.
974    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    /// Wraps `isl_set_empty`.
991    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    /// Wraps `isl_set_equate`.
1007    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    /// Wraps `isl_set_find_dim_by_id`.
1027    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    /// Wraps `isl_set_find_dim_by_name`.
1042    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    /// Wraps `isl_set_fix_dim_si`.
1058    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    /// Wraps `isl_set_fix_si`.
1075    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    /// Wraps `isl_set_fix_val`.
1093    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    /// Wraps `isl_set_flat_product`.
1114    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    /// Wraps `isl_set_flatten`.
1134    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    /// Wraps `isl_set_flatten_map`.
1151    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    /// Wraps `isl_set_follows_at`.
1168    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    /// Wraps `isl_set_free`.
1182    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    /// Wraps `isl_set_from_basic_set`.
1199    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    /// Wraps `isl_set_from_multi_aff`.
1215    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    /// Wraps `isl_set_from_multi_pw_aff`.
1231    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    /// Wraps `isl_set_from_params`.
1247    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    /// Wraps `isl_set_from_point`.
1264    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    /// Wraps `isl_set_from_pw_aff`.
1280    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    /// Wraps `isl_set_from_pw_multi_aff`.
1296    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    /// Wraps `isl_set_from_union_set`.
1312    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    /// Wraps `isl_set_get_basic_set_list`.
1328    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    /// Wraps `isl_set_get_ctx`.
1343    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    /// Wraps `isl_set_get_dim_id`.
1353    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    /// Wraps `isl_set_get_dim_name`.
1369    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    /// Wraps `isl_set_get_hash`.
1385    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    /// Wraps `isl_set_get_lattice_tile`.
1398    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    /// Wraps `isl_set_get_plain_multi_val_if_fixed`.
1413    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    /// Wraps `isl_set_get_simple_fixed_box_hull`.
1428    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    /// Wraps `isl_set_get_space`.
1443    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    /// Wraps `isl_set_get_stride`.
1458    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    /// Wraps `isl_set_get_stride_info`.
1473    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    /// Wraps `isl_set_get_tuple_id`.
1488    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    /// Wraps `isl_set_get_tuple_name`.
1503    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    /// Wraps `isl_set_gist`.
1518    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    /// Wraps `isl_set_gist_basic_set`.
1538    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    /// Wraps `isl_set_gist_params`.
1558    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    /// Wraps `isl_set_has_dim_id`.
1578    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    /// Wraps `isl_set_has_dim_name`.
1597    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    /// Wraps `isl_set_has_equal_space`.
1616    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    /// Wraps `isl_set_has_tuple_id`.
1635    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    /// Wraps `isl_set_has_tuple_name`.
1653    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    /// Wraps `isl_set_identity`.
1671    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    /// Wraps `isl_set_indicator_function`.
1688    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    /// Wraps `isl_set_insert_dims`.
1705    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    /// Wraps `isl_set_insert_domain`.
1723    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    /// Wraps `isl_set_intersect`.
1743    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    /// Wraps `isl_set_intersect_factor_domain`.
1763    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    /// Wraps `isl_set_intersect_factor_range`.
1783    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    /// Wraps `isl_set_intersect_params`.
1803    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    /// Wraps `isl_set_involves_dims`.
1823    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    /// Wraps `isl_set_involves_locals`.
1842    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    /// Wraps `isl_set_is_bounded`.
1860    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    /// Wraps `isl_set_is_box`.
1878    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    /// Wraps `isl_set_is_disjoint`.
1896    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    /// Wraps `isl_set_is_empty`.
1915    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    /// Wraps `isl_set_is_equal`.
1933    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    /// Wraps `isl_set_is_params`.
1952    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    /// Wraps `isl_set_is_singleton`.
1970    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    /// Wraps `isl_set_is_strict_subset`.
1988    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    /// Wraps `isl_set_is_subset`.
2007    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    /// Wraps `isl_set_is_wrapping`.
2026    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    /// Wraps `isl_set_lex_ge_set`.
2044    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    /// Wraps `isl_set_lex_gt_set`.
2064    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    /// Wraps `isl_set_lex_le_set`.
2084    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    /// Wraps `isl_set_lex_lt_set`.
2104    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    /// Wraps `isl_set_lexmax`.
2124    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    /// Wraps `isl_set_lexmax_pw_multi_aff`.
2141    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    /// Wraps `isl_set_lexmin`.
2158    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    /// Wraps `isl_set_lexmin_pw_multi_aff`.
2175    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    /// Wraps `isl_set_lift`.
2192    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    /// Wraps `isl_set_lower_bound_multi_pw_aff`.
2209    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    /// Wraps `isl_set_lower_bound_multi_val`.
2229    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    /// Wraps `isl_set_lower_bound_si`.
2249    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    /// Wraps `isl_set_lower_bound_val`.
2267    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    /// Wraps `isl_set_make_disjoint`.
2288    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    /// Wraps `isl_set_max_multi_pw_aff`.
2305    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    /// Wraps `isl_set_max_val`.
2322    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    /// Wraps `isl_set_min_multi_pw_aff`.
2338    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    /// Wraps `isl_set_min_val`.
2355    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    /// Wraps `isl_set_move_dims`.
2371    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    /// Wraps `isl_set_n_basic_set`.
2393    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    /// Wraps `isl_set_n_dim`.
2406    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    /// Wraps `isl_set_n_param`.
2419    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    /// Wraps `isl_set_nat_universe`.
2432    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    /// Wraps `isl_set_neg`.
2448    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    /// Wraps `isl_set_param_pw_aff_on_domain_id`.
2465    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    /// Wraps `isl_set_params`.
2485    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    /// Wraps `isl_set_plain_cmp`.
2502    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    /// Wraps `isl_set_plain_get_val_if_fixed`.
2516    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    /// Wraps `isl_set_plain_is_disjoint`.
2532    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    /// Wraps `isl_set_plain_is_empty`.
2551    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    /// Wraps `isl_set_plain_is_equal`.
2569    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    /// Wraps `isl_set_plain_is_universe`.
2588    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    /// Wraps `isl_set_plain_unshifted_simple_hull`.
2606    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    /// Wraps `isl_set_polyhedral_hull`.
2623    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    /// Wraps `isl_set_preimage_multi_aff`.
2640    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    /// Wraps `isl_set_preimage_multi_pw_aff`.
2660    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    /// Wraps `isl_set_preimage_pw_multi_aff`.
2680    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    /// Wraps `isl_set_product`.
2700    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    /// Wraps `isl_set_project_onto_map`.
2720    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    /// Wraps `isl_set_project_out`.
2738    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    /// Wraps `isl_set_project_out_all_params`.
2756    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    /// Wraps `isl_set_project_out_param_id`.
2773    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    /// Wraps `isl_set_project_out_param_id_list`.
2793    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    /// Wraps `isl_set_pw_aff_on_domain_val`.
2813    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    /// Wraps `isl_set_pw_multi_aff_on_domain_multi_val`.
2833    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    /// Wraps `isl_set_read_from_str`.
2853    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    /// Wraps `isl_set_remove_dims`.
2870    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    /// Wraps `isl_set_remove_divs`.
2888    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    /// Wraps `isl_set_remove_divs_involving_dims`.
2905    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    /// Wraps `isl_set_remove_redundancies`.
2924    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    /// Wraps `isl_set_remove_unknown_divs`.
2941    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    /// Wraps `isl_set_reset_space`.
2958    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    /// Wraps `isl_set_reset_tuple_id`.
2978    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    /// Wraps `isl_set_reset_user`.
2995    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    /// Wraps `isl_set_sample`.
3012    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    /// Wraps `isl_set_sample_point`.
3029    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    /// Wraps `isl_set_set_dim_id`.
3046    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    /// Wraps `isl_set_set_dim_name`.
3067    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    /// Wraps `isl_set_set_tuple_id`.
3087    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    /// Wraps `isl_set_set_tuple_name`.
3107    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    /// Wraps `isl_set_simple_hull`.
3126    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    /// Wraps `isl_set_size`.
3143    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    /// Wraps `isl_set_solutions`.
3156    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    /// Wraps `isl_set_split_dims`.
3173    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    /// Wraps `isl_set_subtract`.
3191    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    /// Wraps `isl_set_sum`.
3211    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    /// Wraps `isl_set_to_list`.
3231    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    /// Wraps `isl_set_to_str`.
3248    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    /// Wraps `isl_set_to_union_set`.
3263    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    /// Wraps `isl_set_translation`.
3280    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    /// Wraps `isl_set_tuple_dim`.
3297    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    /// Wraps `isl_set_unbind_params`.
3310    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    /// Wraps `isl_set_unbind_params_insert_domain`.
3330    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    /// Wraps `isl_set_union`.
3350    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    /// Wraps `isl_set_union_disjoint`.
3370    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    /// Wraps `isl_set_universe`.
3390    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    /// Wraps `isl_set_unshifted_simple_hull`.
3406    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    /// Wraps `isl_set_unshifted_simple_hull_from_set_list`.
3423    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    /// Wraps `isl_set_unwrap`.
3444    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    /// Wraps `isl_set_upper_bound_multi_pw_aff`.
3461    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    /// Wraps `isl_set_upper_bound_multi_val`.
3481    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    /// Wraps `isl_set_upper_bound_si`.
3501    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    /// Wraps `isl_set_upper_bound_val`.
3519    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    /// Wraps `isl_set_wrapped_domain_map`.
3540    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    /// Wraps `isl_set_wrapped_reverse`.
3557    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    /// Does not call isl_set_free() on being dropped. (For internal use only.)
3574    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}