isl_rs/bindings/
union_set.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    BasicSet, BasicSetList, Context, DimType, Error, LibISLError, MultiAff, MultiUnionPwAff,
6    MultiVal, Point, PwMultiAff, Schedule, Set, SetList, Space, UnionMap, UnionPwMultiAff,
7    UnionSetList,
8};
9use libc::uintptr_t;
10use std::ffi::{CStr, CString};
11use std::os::raw::c_char;
12
13/// Wraps `isl_union_set`.
14pub struct UnionSet {
15    pub ptr: uintptr_t,
16    pub should_free_on_drop: bool,
17}
18
19extern "C" {
20
21    fn isl_union_set_add_set(uset: uintptr_t, set: uintptr_t) -> uintptr_t;
22
23    fn isl_union_set_affine_hull(uset: uintptr_t) -> uintptr_t;
24
25    fn isl_union_set_align_params(uset: uintptr_t, model: uintptr_t) -> uintptr_t;
26
27    fn isl_union_set_apply(uset: uintptr_t, umap: uintptr_t) -> uintptr_t;
28
29    fn isl_union_set_as_set(uset: uintptr_t) -> uintptr_t;
30
31    fn isl_union_set_coalesce(uset: uintptr_t) -> uintptr_t;
32
33    fn isl_union_set_coefficients(bset: uintptr_t) -> uintptr_t;
34
35    fn isl_union_set_compute_divs(uset: uintptr_t) -> uintptr_t;
36
37    fn isl_union_set_compute_schedule(domain: uintptr_t, validity: uintptr_t, proximity: uintptr_t)
38                                      -> uintptr_t;
39
40    fn isl_union_set_contains(uset: uintptr_t, space: uintptr_t) -> i32;
41
42    fn isl_union_set_copy(uset: uintptr_t) -> uintptr_t;
43
44    fn isl_union_set_detect_equalities(uset: uintptr_t) -> uintptr_t;
45
46    fn isl_union_set_dim(uset: uintptr_t, type_: i32) -> i32;
47
48    fn isl_union_set_drop_unused_params(uset: uintptr_t) -> uintptr_t;
49
50    fn isl_union_set_dump(uset: uintptr_t) -> ();
51
52    fn isl_union_set_empty(space: uintptr_t) -> uintptr_t;
53
54    fn isl_union_set_empty_ctx(ctx: uintptr_t) -> uintptr_t;
55
56    fn isl_union_set_empty_space(space: uintptr_t) -> uintptr_t;
57
58    fn isl_union_set_extract_set(uset: uintptr_t, space: uintptr_t) -> uintptr_t;
59
60    fn isl_union_set_free(uset: uintptr_t) -> uintptr_t;
61
62    fn isl_union_set_from_basic_set(bset: uintptr_t) -> uintptr_t;
63
64    fn isl_union_set_from_point(pnt: uintptr_t) -> uintptr_t;
65
66    fn isl_union_set_from_set(set: uintptr_t) -> uintptr_t;
67
68    fn isl_union_set_get_basic_set_list(uset: uintptr_t) -> uintptr_t;
69
70    fn isl_union_set_get_ctx(uset: uintptr_t) -> uintptr_t;
71
72    fn isl_union_set_get_hash(uset: uintptr_t) -> u32;
73
74    fn isl_union_set_get_set_list(uset: uintptr_t) -> uintptr_t;
75
76    fn isl_union_set_get_space(uset: uintptr_t) -> uintptr_t;
77
78    fn isl_union_set_gist(uset: uintptr_t, context: uintptr_t) -> uintptr_t;
79
80    fn isl_union_set_gist_params(uset: uintptr_t, set: uintptr_t) -> uintptr_t;
81
82    fn isl_union_set_identity(uset: uintptr_t) -> uintptr_t;
83
84    fn isl_union_set_identity_union_pw_multi_aff(uset: uintptr_t) -> uintptr_t;
85
86    fn isl_union_set_intersect(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
87
88    fn isl_union_set_intersect_params(uset: uintptr_t, set: uintptr_t) -> uintptr_t;
89
90    fn isl_union_set_is_disjoint(uset1: uintptr_t, uset2: uintptr_t) -> i32;
91
92    fn isl_union_set_is_empty(uset: uintptr_t) -> i32;
93
94    fn isl_union_set_is_equal(uset1: uintptr_t, uset2: uintptr_t) -> i32;
95
96    fn isl_union_set_is_params(uset: uintptr_t) -> i32;
97
98    fn isl_union_set_is_strict_subset(uset1: uintptr_t, uset2: uintptr_t) -> i32;
99
100    fn isl_union_set_is_subset(uset1: uintptr_t, uset2: uintptr_t) -> i32;
101
102    fn isl_union_set_isa_set(uset: uintptr_t) -> i32;
103
104    fn isl_union_set_lex_ge_union_set(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
105
106    fn isl_union_set_lex_gt_union_set(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
107
108    fn isl_union_set_lex_le_union_set(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
109
110    fn isl_union_set_lex_lt_union_set(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
111
112    fn isl_union_set_lexmax(uset: uintptr_t) -> uintptr_t;
113
114    fn isl_union_set_lexmin(uset: uintptr_t) -> uintptr_t;
115
116    fn isl_union_set_lift(uset: uintptr_t) -> uintptr_t;
117
118    fn isl_union_set_min_multi_union_pw_aff(uset: uintptr_t, obj: uintptr_t) -> uintptr_t;
119
120    fn isl_union_set_n_set(uset: uintptr_t) -> i32;
121
122    fn isl_union_set_params(uset: uintptr_t) -> uintptr_t;
123
124    fn isl_union_set_plain_unshifted_simple_hull(uset: uintptr_t) -> uintptr_t;
125
126    fn isl_union_set_polyhedral_hull(uset: uintptr_t) -> uintptr_t;
127
128    fn isl_union_set_preimage_multi_aff(uset: uintptr_t, ma: uintptr_t) -> uintptr_t;
129
130    fn isl_union_set_preimage_pw_multi_aff(uset: uintptr_t, pma: uintptr_t) -> uintptr_t;
131
132    fn isl_union_set_preimage_union_pw_multi_aff(uset: uintptr_t, upma: uintptr_t) -> uintptr_t;
133
134    fn isl_union_set_product(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
135
136    fn isl_union_set_project_out(uset: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
137
138    fn isl_union_set_project_out_all_params(uset: uintptr_t) -> uintptr_t;
139
140    fn isl_union_set_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
141
142    fn isl_union_set_remove_divs(bset: uintptr_t) -> uintptr_t;
143
144    fn isl_union_set_remove_redundancies(uset: uintptr_t) -> uintptr_t;
145
146    fn isl_union_set_reset_user(uset: uintptr_t) -> uintptr_t;
147
148    fn isl_union_set_sample(uset: uintptr_t) -> uintptr_t;
149
150    fn isl_union_set_sample_point(uset: uintptr_t) -> uintptr_t;
151
152    fn isl_union_set_simple_hull(uset: uintptr_t) -> uintptr_t;
153
154    fn isl_union_set_solutions(bset: uintptr_t) -> uintptr_t;
155
156    fn isl_union_set_subtract(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
157
158    fn isl_union_set_to_list(el: uintptr_t) -> uintptr_t;
159
160    fn isl_union_set_to_str(uset: uintptr_t) -> *const c_char;
161
162    fn isl_union_set_union(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
163
164    fn isl_union_set_universe(uset: uintptr_t) -> uintptr_t;
165
166    fn isl_union_set_unwrap(uset: uintptr_t) -> uintptr_t;
167
168    fn isl_union_set_wrapped_domain_map(uset: uintptr_t) -> uintptr_t;
169
170}
171
172impl UnionSet {
173    /// Wraps `isl_union_set_add_set`.
174    pub fn add_set(self, set: Set) -> Result<UnionSet, LibISLError> {
175        let uset = self;
176        let isl_rs_ctx = uset.get_ctx();
177        let mut uset = uset;
178        uset.do_not_free_on_drop();
179        let uset = uset.ptr;
180        let mut set = set;
181        set.do_not_free_on_drop();
182        let set = set.ptr;
183        let isl_rs_result = unsafe { isl_union_set_add_set(uset, set) };
184        let isl_rs_result = UnionSet { ptr: isl_rs_result,
185                                       should_free_on_drop: true };
186        let err = isl_rs_ctx.last_error();
187        if err != Error::None_ {
188            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
189        }
190        Ok(isl_rs_result)
191    }
192
193    /// Wraps `isl_union_set_affine_hull`.
194    pub fn affine_hull(self) -> Result<UnionSet, LibISLError> {
195        let uset = self;
196        let isl_rs_ctx = uset.get_ctx();
197        let mut uset = uset;
198        uset.do_not_free_on_drop();
199        let uset = uset.ptr;
200        let isl_rs_result = unsafe { isl_union_set_affine_hull(uset) };
201        let isl_rs_result = UnionSet { ptr: isl_rs_result,
202                                       should_free_on_drop: true };
203        let err = isl_rs_ctx.last_error();
204        if err != Error::None_ {
205            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
206        }
207        Ok(isl_rs_result)
208    }
209
210    /// Wraps `isl_union_set_align_params`.
211    pub fn align_params(self, model: Space) -> Result<UnionSet, LibISLError> {
212        let uset = self;
213        let isl_rs_ctx = uset.get_ctx();
214        let mut uset = uset;
215        uset.do_not_free_on_drop();
216        let uset = uset.ptr;
217        let mut model = model;
218        model.do_not_free_on_drop();
219        let model = model.ptr;
220        let isl_rs_result = unsafe { isl_union_set_align_params(uset, model) };
221        let isl_rs_result = UnionSet { ptr: isl_rs_result,
222                                       should_free_on_drop: true };
223        let err = isl_rs_ctx.last_error();
224        if err != Error::None_ {
225            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
226        }
227        Ok(isl_rs_result)
228    }
229
230    /// Wraps `isl_union_set_apply`.
231    pub fn apply(self, umap: UnionMap) -> Result<UnionSet, LibISLError> {
232        let uset = self;
233        let isl_rs_ctx = uset.get_ctx();
234        let mut uset = uset;
235        uset.do_not_free_on_drop();
236        let uset = uset.ptr;
237        let mut umap = umap;
238        umap.do_not_free_on_drop();
239        let umap = umap.ptr;
240        let isl_rs_result = unsafe { isl_union_set_apply(uset, umap) };
241        let isl_rs_result = UnionSet { ptr: isl_rs_result,
242                                       should_free_on_drop: true };
243        let err = isl_rs_ctx.last_error();
244        if err != Error::None_ {
245            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
246        }
247        Ok(isl_rs_result)
248    }
249
250    /// Wraps `isl_union_set_as_set`.
251    pub fn as_set(self) -> Result<Set, LibISLError> {
252        let uset = self;
253        let isl_rs_ctx = uset.get_ctx();
254        let mut uset = uset;
255        uset.do_not_free_on_drop();
256        let uset = uset.ptr;
257        let isl_rs_result = unsafe { isl_union_set_as_set(uset) };
258        let isl_rs_result = Set { ptr: isl_rs_result,
259                                  should_free_on_drop: true };
260        let err = isl_rs_ctx.last_error();
261        if err != Error::None_ {
262            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
263        }
264        Ok(isl_rs_result)
265    }
266
267    /// Wraps `isl_union_set_coalesce`.
268    pub fn coalesce(self) -> Result<UnionSet, LibISLError> {
269        let uset = self;
270        let isl_rs_ctx = uset.get_ctx();
271        let mut uset = uset;
272        uset.do_not_free_on_drop();
273        let uset = uset.ptr;
274        let isl_rs_result = unsafe { isl_union_set_coalesce(uset) };
275        let isl_rs_result = UnionSet { ptr: isl_rs_result,
276                                       should_free_on_drop: true };
277        let err = isl_rs_ctx.last_error();
278        if err != Error::None_ {
279            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
280        }
281        Ok(isl_rs_result)
282    }
283
284    /// Wraps `isl_union_set_coefficients`.
285    pub fn coefficients(self) -> Result<UnionSet, LibISLError> {
286        let bset = self;
287        let isl_rs_ctx = bset.get_ctx();
288        let mut bset = bset;
289        bset.do_not_free_on_drop();
290        let bset = bset.ptr;
291        let isl_rs_result = unsafe { isl_union_set_coefficients(bset) };
292        let isl_rs_result = UnionSet { ptr: isl_rs_result,
293                                       should_free_on_drop: true };
294        let err = isl_rs_ctx.last_error();
295        if err != Error::None_ {
296            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
297        }
298        Ok(isl_rs_result)
299    }
300
301    /// Wraps `isl_union_set_compute_divs`.
302    pub fn compute_divs(self) -> Result<UnionSet, LibISLError> {
303        let uset = self;
304        let isl_rs_ctx = uset.get_ctx();
305        let mut uset = uset;
306        uset.do_not_free_on_drop();
307        let uset = uset.ptr;
308        let isl_rs_result = unsafe { isl_union_set_compute_divs(uset) };
309        let isl_rs_result = UnionSet { ptr: isl_rs_result,
310                                       should_free_on_drop: true };
311        let err = isl_rs_ctx.last_error();
312        if err != Error::None_ {
313            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
314        }
315        Ok(isl_rs_result)
316    }
317
318    /// Wraps `isl_union_set_compute_schedule`.
319    pub fn compute_schedule(self, validity: UnionMap, proximity: UnionMap)
320                            -> Result<Schedule, LibISLError> {
321        let domain = self;
322        let isl_rs_ctx = domain.get_ctx();
323        let mut domain = domain;
324        domain.do_not_free_on_drop();
325        let domain = domain.ptr;
326        let mut validity = validity;
327        validity.do_not_free_on_drop();
328        let validity = validity.ptr;
329        let mut proximity = proximity;
330        proximity.do_not_free_on_drop();
331        let proximity = proximity.ptr;
332        let isl_rs_result = unsafe { isl_union_set_compute_schedule(domain, validity, proximity) };
333        let isl_rs_result = Schedule { ptr: isl_rs_result,
334                                       should_free_on_drop: true };
335        let err = isl_rs_ctx.last_error();
336        if err != Error::None_ {
337            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
338        }
339        Ok(isl_rs_result)
340    }
341
342    /// Wraps `isl_union_set_contains`.
343    pub fn contains(&self, space: &Space) -> Result<bool, LibISLError> {
344        let uset = self;
345        let isl_rs_ctx = uset.get_ctx();
346        let uset = uset.ptr;
347        let space = space.ptr;
348        let isl_rs_result = unsafe { isl_union_set_contains(uset, space) };
349        let isl_rs_result = match isl_rs_result {
350            0 => false,
351            1 => true,
352            _ => panic!("Got isl_bool = -1"),
353        };
354        let err = isl_rs_ctx.last_error();
355        if err != Error::None_ {
356            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
357        }
358        Ok(isl_rs_result)
359    }
360
361    /// Wraps `isl_union_set_copy`.
362    pub fn copy(&self) -> Result<UnionSet, LibISLError> {
363        let uset = self;
364        let isl_rs_ctx = uset.get_ctx();
365        let uset = uset.ptr;
366        let isl_rs_result = unsafe { isl_union_set_copy(uset) };
367        let isl_rs_result = UnionSet { ptr: isl_rs_result,
368                                       should_free_on_drop: true };
369        let err = isl_rs_ctx.last_error();
370        if err != Error::None_ {
371            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
372        }
373        Ok(isl_rs_result)
374    }
375
376    /// Wraps `isl_union_set_detect_equalities`.
377    pub fn detect_equalities(self) -> Result<UnionSet, LibISLError> {
378        let uset = self;
379        let isl_rs_ctx = uset.get_ctx();
380        let mut uset = uset;
381        uset.do_not_free_on_drop();
382        let uset = uset.ptr;
383        let isl_rs_result = unsafe { isl_union_set_detect_equalities(uset) };
384        let isl_rs_result = UnionSet { ptr: isl_rs_result,
385                                       should_free_on_drop: true };
386        let err = isl_rs_ctx.last_error();
387        if err != Error::None_ {
388            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
389        }
390        Ok(isl_rs_result)
391    }
392
393    /// Wraps `isl_union_set_dim`.
394    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
395        let uset = self;
396        let isl_rs_ctx = uset.get_ctx();
397        let uset = uset.ptr;
398        let type_ = type_.to_i32();
399        let isl_rs_result = unsafe { isl_union_set_dim(uset, type_) };
400        let err = isl_rs_ctx.last_error();
401        if err != Error::None_ {
402            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
403        }
404        Ok(isl_rs_result)
405    }
406
407    /// Wraps `isl_union_set_drop_unused_params`.
408    pub fn drop_unused_params(self) -> Result<UnionSet, LibISLError> {
409        let uset = self;
410        let isl_rs_ctx = uset.get_ctx();
411        let mut uset = uset;
412        uset.do_not_free_on_drop();
413        let uset = uset.ptr;
414        let isl_rs_result = unsafe { isl_union_set_drop_unused_params(uset) };
415        let isl_rs_result = UnionSet { ptr: isl_rs_result,
416                                       should_free_on_drop: true };
417        let err = isl_rs_ctx.last_error();
418        if err != Error::None_ {
419            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
420        }
421        Ok(isl_rs_result)
422    }
423
424    /// Wraps `isl_union_set_dump`.
425    pub fn dump(&self) -> Result<(), LibISLError> {
426        let uset = self;
427        let isl_rs_ctx = uset.get_ctx();
428        let uset = uset.ptr;
429        let isl_rs_result = unsafe { isl_union_set_dump(uset) };
430        let err = isl_rs_ctx.last_error();
431        if err != Error::None_ {
432            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
433        }
434        Ok(isl_rs_result)
435    }
436
437    /// Wraps `isl_union_set_empty`.
438    pub fn empty(space: Space) -> Result<UnionSet, LibISLError> {
439        let isl_rs_ctx = space.get_ctx();
440        let mut space = space;
441        space.do_not_free_on_drop();
442        let space = space.ptr;
443        let isl_rs_result = unsafe { isl_union_set_empty(space) };
444        let isl_rs_result = UnionSet { ptr: isl_rs_result,
445                                       should_free_on_drop: true };
446        let err = isl_rs_ctx.last_error();
447        if err != Error::None_ {
448            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
449        }
450        Ok(isl_rs_result)
451    }
452
453    /// Wraps `isl_union_set_empty_ctx`.
454    pub fn empty_ctx(ctx: &Context) -> Result<UnionSet, LibISLError> {
455        let isl_rs_ctx = Context { ptr: ctx.ptr,
456                                   should_free_on_drop: false };
457        let ctx = ctx.ptr;
458        let isl_rs_result = unsafe { isl_union_set_empty_ctx(ctx) };
459        let isl_rs_result = UnionSet { ptr: isl_rs_result,
460                                       should_free_on_drop: true };
461        let err = isl_rs_ctx.last_error();
462        if err != Error::None_ {
463            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
464        }
465        Ok(isl_rs_result)
466    }
467
468    /// Wraps `isl_union_set_empty_space`.
469    pub fn empty_space(space: Space) -> Result<UnionSet, LibISLError> {
470        let isl_rs_ctx = space.get_ctx();
471        let mut space = space;
472        space.do_not_free_on_drop();
473        let space = space.ptr;
474        let isl_rs_result = unsafe { isl_union_set_empty_space(space) };
475        let isl_rs_result = UnionSet { ptr: isl_rs_result,
476                                       should_free_on_drop: true };
477        let err = isl_rs_ctx.last_error();
478        if err != Error::None_ {
479            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
480        }
481        Ok(isl_rs_result)
482    }
483
484    /// Wraps `isl_union_set_extract_set`.
485    pub fn extract_set(&self, space: Space) -> Result<Set, LibISLError> {
486        let uset = self;
487        let isl_rs_ctx = uset.get_ctx();
488        let uset = uset.ptr;
489        let mut space = space;
490        space.do_not_free_on_drop();
491        let space = space.ptr;
492        let isl_rs_result = unsafe { isl_union_set_extract_set(uset, space) };
493        let isl_rs_result = Set { ptr: isl_rs_result,
494                                  should_free_on_drop: true };
495        let err = isl_rs_ctx.last_error();
496        if err != Error::None_ {
497            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
498        }
499        Ok(isl_rs_result)
500    }
501
502    /// Wraps `isl_union_set_free`.
503    pub fn free(self) -> Result<UnionSet, LibISLError> {
504        let uset = self;
505        let isl_rs_ctx = uset.get_ctx();
506        let mut uset = uset;
507        uset.do_not_free_on_drop();
508        let uset = uset.ptr;
509        let isl_rs_result = unsafe { isl_union_set_free(uset) };
510        let isl_rs_result = UnionSet { ptr: isl_rs_result,
511                                       should_free_on_drop: true };
512        let err = isl_rs_ctx.last_error();
513        if err != Error::None_ {
514            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
515        }
516        Ok(isl_rs_result)
517    }
518
519    /// Wraps `isl_union_set_from_basic_set`.
520    pub fn from_basic_set(bset: BasicSet) -> Result<UnionSet, LibISLError> {
521        let isl_rs_ctx = bset.get_ctx();
522        let mut bset = bset;
523        bset.do_not_free_on_drop();
524        let bset = bset.ptr;
525        let isl_rs_result = unsafe { isl_union_set_from_basic_set(bset) };
526        let isl_rs_result = UnionSet { ptr: isl_rs_result,
527                                       should_free_on_drop: true };
528        let err = isl_rs_ctx.last_error();
529        if err != Error::None_ {
530            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
531        }
532        Ok(isl_rs_result)
533    }
534
535    /// Wraps `isl_union_set_from_point`.
536    pub fn from_point(pnt: Point) -> Result<UnionSet, LibISLError> {
537        let isl_rs_ctx = pnt.get_ctx();
538        let mut pnt = pnt;
539        pnt.do_not_free_on_drop();
540        let pnt = pnt.ptr;
541        let isl_rs_result = unsafe { isl_union_set_from_point(pnt) };
542        let isl_rs_result = UnionSet { ptr: isl_rs_result,
543                                       should_free_on_drop: true };
544        let err = isl_rs_ctx.last_error();
545        if err != Error::None_ {
546            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
547        }
548        Ok(isl_rs_result)
549    }
550
551    /// Wraps `isl_union_set_from_set`.
552    pub fn from_set(set: Set) -> Result<UnionSet, LibISLError> {
553        let isl_rs_ctx = set.get_ctx();
554        let mut set = set;
555        set.do_not_free_on_drop();
556        let set = set.ptr;
557        let isl_rs_result = unsafe { isl_union_set_from_set(set) };
558        let isl_rs_result = UnionSet { ptr: isl_rs_result,
559                                       should_free_on_drop: true };
560        let err = isl_rs_ctx.last_error();
561        if err != Error::None_ {
562            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
563        }
564        Ok(isl_rs_result)
565    }
566
567    /// Wraps `isl_union_set_get_basic_set_list`.
568    pub fn get_basic_set_list(&self) -> Result<BasicSetList, LibISLError> {
569        let uset = self;
570        let isl_rs_ctx = uset.get_ctx();
571        let uset = uset.ptr;
572        let isl_rs_result = unsafe { isl_union_set_get_basic_set_list(uset) };
573        let isl_rs_result = BasicSetList { ptr: isl_rs_result,
574                                           should_free_on_drop: true };
575        let err = isl_rs_ctx.last_error();
576        if err != Error::None_ {
577            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
578        }
579        Ok(isl_rs_result)
580    }
581
582    /// Wraps `isl_union_set_get_ctx`.
583    pub fn get_ctx(&self) -> Context {
584        let uset = self;
585        let uset = uset.ptr;
586        let isl_rs_result = unsafe { isl_union_set_get_ctx(uset) };
587        let isl_rs_result = Context { ptr: isl_rs_result,
588                                      should_free_on_drop: false };
589        isl_rs_result
590    }
591
592    /// Wraps `isl_union_set_get_hash`.
593    pub fn get_hash(&self) -> Result<u32, LibISLError> {
594        let uset = self;
595        let isl_rs_ctx = uset.get_ctx();
596        let uset = uset.ptr;
597        let isl_rs_result = unsafe { isl_union_set_get_hash(uset) };
598        let err = isl_rs_ctx.last_error();
599        if err != Error::None_ {
600            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
601        }
602        Ok(isl_rs_result)
603    }
604
605    /// Wraps `isl_union_set_get_set_list`.
606    pub fn get_set_list(&self) -> Result<SetList, LibISLError> {
607        let uset = self;
608        let isl_rs_ctx = uset.get_ctx();
609        let uset = uset.ptr;
610        let isl_rs_result = unsafe { isl_union_set_get_set_list(uset) };
611        let isl_rs_result = SetList { ptr: isl_rs_result,
612                                      should_free_on_drop: true };
613        let err = isl_rs_ctx.last_error();
614        if err != Error::None_ {
615            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
616        }
617        Ok(isl_rs_result)
618    }
619
620    /// Wraps `isl_union_set_get_space`.
621    pub fn get_space(&self) -> Result<Space, LibISLError> {
622        let uset = self;
623        let isl_rs_ctx = uset.get_ctx();
624        let uset = uset.ptr;
625        let isl_rs_result = unsafe { isl_union_set_get_space(uset) };
626        let isl_rs_result = Space { ptr: isl_rs_result,
627                                    should_free_on_drop: true };
628        let err = isl_rs_ctx.last_error();
629        if err != Error::None_ {
630            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
631        }
632        Ok(isl_rs_result)
633    }
634
635    /// Wraps `isl_union_set_gist`.
636    pub fn gist(self, context: UnionSet) -> Result<UnionSet, LibISLError> {
637        let uset = self;
638        let isl_rs_ctx = uset.get_ctx();
639        let mut uset = uset;
640        uset.do_not_free_on_drop();
641        let uset = uset.ptr;
642        let mut context = context;
643        context.do_not_free_on_drop();
644        let context = context.ptr;
645        let isl_rs_result = unsafe { isl_union_set_gist(uset, context) };
646        let isl_rs_result = UnionSet { ptr: isl_rs_result,
647                                       should_free_on_drop: true };
648        let err = isl_rs_ctx.last_error();
649        if err != Error::None_ {
650            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
651        }
652        Ok(isl_rs_result)
653    }
654
655    /// Wraps `isl_union_set_gist_params`.
656    pub fn gist_params(self, set: Set) -> Result<UnionSet, LibISLError> {
657        let uset = self;
658        let isl_rs_ctx = uset.get_ctx();
659        let mut uset = uset;
660        uset.do_not_free_on_drop();
661        let uset = uset.ptr;
662        let mut set = set;
663        set.do_not_free_on_drop();
664        let set = set.ptr;
665        let isl_rs_result = unsafe { isl_union_set_gist_params(uset, set) };
666        let isl_rs_result = UnionSet { ptr: isl_rs_result,
667                                       should_free_on_drop: true };
668        let err = isl_rs_ctx.last_error();
669        if err != Error::None_ {
670            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
671        }
672        Ok(isl_rs_result)
673    }
674
675    /// Wraps `isl_union_set_identity`.
676    pub fn identity(self) -> Result<UnionMap, LibISLError> {
677        let uset = self;
678        let isl_rs_ctx = uset.get_ctx();
679        let mut uset = uset;
680        uset.do_not_free_on_drop();
681        let uset = uset.ptr;
682        let isl_rs_result = unsafe { isl_union_set_identity(uset) };
683        let isl_rs_result = UnionMap { ptr: isl_rs_result,
684                                       should_free_on_drop: true };
685        let err = isl_rs_ctx.last_error();
686        if err != Error::None_ {
687            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
688        }
689        Ok(isl_rs_result)
690    }
691
692    /// Wraps `isl_union_set_identity_union_pw_multi_aff`.
693    pub fn identity_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
694        let uset = self;
695        let isl_rs_ctx = uset.get_ctx();
696        let mut uset = uset;
697        uset.do_not_free_on_drop();
698        let uset = uset.ptr;
699        let isl_rs_result = unsafe { isl_union_set_identity_union_pw_multi_aff(uset) };
700        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
701                                              should_free_on_drop: true };
702        let err = isl_rs_ctx.last_error();
703        if err != Error::None_ {
704            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
705        }
706        Ok(isl_rs_result)
707    }
708
709    /// Wraps `isl_union_set_intersect`.
710    pub fn intersect(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
711        let uset1 = self;
712        let isl_rs_ctx = uset1.get_ctx();
713        let mut uset1 = uset1;
714        uset1.do_not_free_on_drop();
715        let uset1 = uset1.ptr;
716        let mut uset2 = uset2;
717        uset2.do_not_free_on_drop();
718        let uset2 = uset2.ptr;
719        let isl_rs_result = unsafe { isl_union_set_intersect(uset1, uset2) };
720        let isl_rs_result = UnionSet { ptr: isl_rs_result,
721                                       should_free_on_drop: true };
722        let err = isl_rs_ctx.last_error();
723        if err != Error::None_ {
724            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
725        }
726        Ok(isl_rs_result)
727    }
728
729    /// Wraps `isl_union_set_intersect_params`.
730    pub fn intersect_params(self, set: Set) -> Result<UnionSet, LibISLError> {
731        let uset = self;
732        let isl_rs_ctx = uset.get_ctx();
733        let mut uset = uset;
734        uset.do_not_free_on_drop();
735        let uset = uset.ptr;
736        let mut set = set;
737        set.do_not_free_on_drop();
738        let set = set.ptr;
739        let isl_rs_result = unsafe { isl_union_set_intersect_params(uset, set) };
740        let isl_rs_result = UnionSet { ptr: isl_rs_result,
741                                       should_free_on_drop: true };
742        let err = isl_rs_ctx.last_error();
743        if err != Error::None_ {
744            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
745        }
746        Ok(isl_rs_result)
747    }
748
749    /// Wraps `isl_union_set_is_disjoint`.
750    pub fn is_disjoint(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
751        let uset1 = self;
752        let isl_rs_ctx = uset1.get_ctx();
753        let uset1 = uset1.ptr;
754        let uset2 = uset2.ptr;
755        let isl_rs_result = unsafe { isl_union_set_is_disjoint(uset1, uset2) };
756        let isl_rs_result = match isl_rs_result {
757            0 => false,
758            1 => true,
759            _ => panic!("Got isl_bool = -1"),
760        };
761        let err = isl_rs_ctx.last_error();
762        if err != Error::None_ {
763            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
764        }
765        Ok(isl_rs_result)
766    }
767
768    /// Wraps `isl_union_set_is_empty`.
769    pub fn is_empty(&self) -> Result<bool, LibISLError> {
770        let uset = self;
771        let isl_rs_ctx = uset.get_ctx();
772        let uset = uset.ptr;
773        let isl_rs_result = unsafe { isl_union_set_is_empty(uset) };
774        let isl_rs_result = match isl_rs_result {
775            0 => false,
776            1 => true,
777            _ => panic!("Got isl_bool = -1"),
778        };
779        let err = isl_rs_ctx.last_error();
780        if err != Error::None_ {
781            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
782        }
783        Ok(isl_rs_result)
784    }
785
786    /// Wraps `isl_union_set_is_equal`.
787    pub fn is_equal(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
788        let uset1 = self;
789        let isl_rs_ctx = uset1.get_ctx();
790        let uset1 = uset1.ptr;
791        let uset2 = uset2.ptr;
792        let isl_rs_result = unsafe { isl_union_set_is_equal(uset1, uset2) };
793        let isl_rs_result = match isl_rs_result {
794            0 => false,
795            1 => true,
796            _ => panic!("Got isl_bool = -1"),
797        };
798        let err = isl_rs_ctx.last_error();
799        if err != Error::None_ {
800            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
801        }
802        Ok(isl_rs_result)
803    }
804
805    /// Wraps `isl_union_set_is_params`.
806    pub fn is_params(&self) -> Result<bool, LibISLError> {
807        let uset = self;
808        let isl_rs_ctx = uset.get_ctx();
809        let uset = uset.ptr;
810        let isl_rs_result = unsafe { isl_union_set_is_params(uset) };
811        let isl_rs_result = match isl_rs_result {
812            0 => false,
813            1 => true,
814            _ => panic!("Got isl_bool = -1"),
815        };
816        let err = isl_rs_ctx.last_error();
817        if err != Error::None_ {
818            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
819        }
820        Ok(isl_rs_result)
821    }
822
823    /// Wraps `isl_union_set_is_strict_subset`.
824    pub fn is_strict_subset(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
825        let uset1 = self;
826        let isl_rs_ctx = uset1.get_ctx();
827        let uset1 = uset1.ptr;
828        let uset2 = uset2.ptr;
829        let isl_rs_result = unsafe { isl_union_set_is_strict_subset(uset1, uset2) };
830        let isl_rs_result = match isl_rs_result {
831            0 => false,
832            1 => true,
833            _ => panic!("Got isl_bool = -1"),
834        };
835        let err = isl_rs_ctx.last_error();
836        if err != Error::None_ {
837            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
838        }
839        Ok(isl_rs_result)
840    }
841
842    /// Wraps `isl_union_set_is_subset`.
843    pub fn is_subset(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
844        let uset1 = self;
845        let isl_rs_ctx = uset1.get_ctx();
846        let uset1 = uset1.ptr;
847        let uset2 = uset2.ptr;
848        let isl_rs_result = unsafe { isl_union_set_is_subset(uset1, uset2) };
849        let isl_rs_result = match isl_rs_result {
850            0 => false,
851            1 => true,
852            _ => panic!("Got isl_bool = -1"),
853        };
854        let err = isl_rs_ctx.last_error();
855        if err != Error::None_ {
856            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
857        }
858        Ok(isl_rs_result)
859    }
860
861    /// Wraps `isl_union_set_isa_set`.
862    pub fn isa_set(&self) -> Result<bool, LibISLError> {
863        let uset = self;
864        let isl_rs_ctx = uset.get_ctx();
865        let uset = uset.ptr;
866        let isl_rs_result = unsafe { isl_union_set_isa_set(uset) };
867        let isl_rs_result = match isl_rs_result {
868            0 => false,
869            1 => true,
870            _ => panic!("Got isl_bool = -1"),
871        };
872        let err = isl_rs_ctx.last_error();
873        if err != Error::None_ {
874            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
875        }
876        Ok(isl_rs_result)
877    }
878
879    /// Wraps `isl_union_set_lex_ge_union_set`.
880    pub fn lex_ge_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
881        let uset1 = self;
882        let isl_rs_ctx = uset1.get_ctx();
883        let mut uset1 = uset1;
884        uset1.do_not_free_on_drop();
885        let uset1 = uset1.ptr;
886        let mut uset2 = uset2;
887        uset2.do_not_free_on_drop();
888        let uset2 = uset2.ptr;
889        let isl_rs_result = unsafe { isl_union_set_lex_ge_union_set(uset1, uset2) };
890        let isl_rs_result = UnionMap { ptr: isl_rs_result,
891                                       should_free_on_drop: true };
892        let err = isl_rs_ctx.last_error();
893        if err != Error::None_ {
894            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
895        }
896        Ok(isl_rs_result)
897    }
898
899    /// Wraps `isl_union_set_lex_gt_union_set`.
900    pub fn lex_gt_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
901        let uset1 = self;
902        let isl_rs_ctx = uset1.get_ctx();
903        let mut uset1 = uset1;
904        uset1.do_not_free_on_drop();
905        let uset1 = uset1.ptr;
906        let mut uset2 = uset2;
907        uset2.do_not_free_on_drop();
908        let uset2 = uset2.ptr;
909        let isl_rs_result = unsafe { isl_union_set_lex_gt_union_set(uset1, uset2) };
910        let isl_rs_result = UnionMap { ptr: isl_rs_result,
911                                       should_free_on_drop: true };
912        let err = isl_rs_ctx.last_error();
913        if err != Error::None_ {
914            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
915        }
916        Ok(isl_rs_result)
917    }
918
919    /// Wraps `isl_union_set_lex_le_union_set`.
920    pub fn lex_le_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
921        let uset1 = self;
922        let isl_rs_ctx = uset1.get_ctx();
923        let mut uset1 = uset1;
924        uset1.do_not_free_on_drop();
925        let uset1 = uset1.ptr;
926        let mut uset2 = uset2;
927        uset2.do_not_free_on_drop();
928        let uset2 = uset2.ptr;
929        let isl_rs_result = unsafe { isl_union_set_lex_le_union_set(uset1, uset2) };
930        let isl_rs_result = UnionMap { ptr: isl_rs_result,
931                                       should_free_on_drop: true };
932        let err = isl_rs_ctx.last_error();
933        if err != Error::None_ {
934            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
935        }
936        Ok(isl_rs_result)
937    }
938
939    /// Wraps `isl_union_set_lex_lt_union_set`.
940    pub fn lex_lt_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
941        let uset1 = self;
942        let isl_rs_ctx = uset1.get_ctx();
943        let mut uset1 = uset1;
944        uset1.do_not_free_on_drop();
945        let uset1 = uset1.ptr;
946        let mut uset2 = uset2;
947        uset2.do_not_free_on_drop();
948        let uset2 = uset2.ptr;
949        let isl_rs_result = unsafe { isl_union_set_lex_lt_union_set(uset1, uset2) };
950        let isl_rs_result = UnionMap { ptr: isl_rs_result,
951                                       should_free_on_drop: true };
952        let err = isl_rs_ctx.last_error();
953        if err != Error::None_ {
954            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
955        }
956        Ok(isl_rs_result)
957    }
958
959    /// Wraps `isl_union_set_lexmax`.
960    pub fn lexmax(self) -> Result<UnionSet, LibISLError> {
961        let uset = self;
962        let isl_rs_ctx = uset.get_ctx();
963        let mut uset = uset;
964        uset.do_not_free_on_drop();
965        let uset = uset.ptr;
966        let isl_rs_result = unsafe { isl_union_set_lexmax(uset) };
967        let isl_rs_result = UnionSet { ptr: isl_rs_result,
968                                       should_free_on_drop: true };
969        let err = isl_rs_ctx.last_error();
970        if err != Error::None_ {
971            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
972        }
973        Ok(isl_rs_result)
974    }
975
976    /// Wraps `isl_union_set_lexmin`.
977    pub fn lexmin(self) -> Result<UnionSet, LibISLError> {
978        let uset = self;
979        let isl_rs_ctx = uset.get_ctx();
980        let mut uset = uset;
981        uset.do_not_free_on_drop();
982        let uset = uset.ptr;
983        let isl_rs_result = unsafe { isl_union_set_lexmin(uset) };
984        let isl_rs_result = UnionSet { ptr: isl_rs_result,
985                                       should_free_on_drop: true };
986        let err = isl_rs_ctx.last_error();
987        if err != Error::None_ {
988            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
989        }
990        Ok(isl_rs_result)
991    }
992
993    /// Wraps `isl_union_set_lift`.
994    pub fn lift(self) -> Result<UnionSet, LibISLError> {
995        let uset = self;
996        let isl_rs_ctx = uset.get_ctx();
997        let mut uset = uset;
998        uset.do_not_free_on_drop();
999        let uset = uset.ptr;
1000        let isl_rs_result = unsafe { isl_union_set_lift(uset) };
1001        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1002                                       should_free_on_drop: true };
1003        let err = isl_rs_ctx.last_error();
1004        if err != Error::None_ {
1005            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1006        }
1007        Ok(isl_rs_result)
1008    }
1009
1010    /// Wraps `isl_union_set_min_multi_union_pw_aff`.
1011    pub fn min_multi_union_pw_aff(&self, obj: &MultiUnionPwAff) -> Result<MultiVal, LibISLError> {
1012        let uset = self;
1013        let isl_rs_ctx = uset.get_ctx();
1014        let uset = uset.ptr;
1015        let obj = obj.ptr;
1016        let isl_rs_result = unsafe { isl_union_set_min_multi_union_pw_aff(uset, obj) };
1017        let isl_rs_result = MultiVal { 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_union_set_n_set`.
1027    pub fn n_set(&self) -> Result<i32, LibISLError> {
1028        let uset = self;
1029        let isl_rs_ctx = uset.get_ctx();
1030        let uset = uset.ptr;
1031        let isl_rs_result = unsafe { isl_union_set_n_set(uset) };
1032        let err = isl_rs_ctx.last_error();
1033        if err != Error::None_ {
1034            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1035        }
1036        Ok(isl_rs_result)
1037    }
1038
1039    /// Wraps `isl_union_set_params`.
1040    pub fn params(self) -> Result<Set, LibISLError> {
1041        let uset = self;
1042        let isl_rs_ctx = uset.get_ctx();
1043        let mut uset = uset;
1044        uset.do_not_free_on_drop();
1045        let uset = uset.ptr;
1046        let isl_rs_result = unsafe { isl_union_set_params(uset) };
1047        let isl_rs_result = Set { ptr: isl_rs_result,
1048                                  should_free_on_drop: true };
1049        let err = isl_rs_ctx.last_error();
1050        if err != Error::None_ {
1051            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1052        }
1053        Ok(isl_rs_result)
1054    }
1055
1056    /// Wraps `isl_union_set_plain_unshifted_simple_hull`.
1057    pub fn plain_unshifted_simple_hull(self) -> Result<UnionSet, LibISLError> {
1058        let uset = self;
1059        let isl_rs_ctx = uset.get_ctx();
1060        let mut uset = uset;
1061        uset.do_not_free_on_drop();
1062        let uset = uset.ptr;
1063        let isl_rs_result = unsafe { isl_union_set_plain_unshifted_simple_hull(uset) };
1064        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1065                                       should_free_on_drop: true };
1066        let err = isl_rs_ctx.last_error();
1067        if err != Error::None_ {
1068            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1069        }
1070        Ok(isl_rs_result)
1071    }
1072
1073    /// Wraps `isl_union_set_polyhedral_hull`.
1074    pub fn polyhedral_hull(self) -> Result<UnionSet, LibISLError> {
1075        let uset = self;
1076        let isl_rs_ctx = uset.get_ctx();
1077        let mut uset = uset;
1078        uset.do_not_free_on_drop();
1079        let uset = uset.ptr;
1080        let isl_rs_result = unsafe { isl_union_set_polyhedral_hull(uset) };
1081        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1082                                       should_free_on_drop: true };
1083        let err = isl_rs_ctx.last_error();
1084        if err != Error::None_ {
1085            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1086        }
1087        Ok(isl_rs_result)
1088    }
1089
1090    /// Wraps `isl_union_set_preimage_multi_aff`.
1091    pub fn preimage_multi_aff(self, ma: MultiAff) -> Result<UnionSet, LibISLError> {
1092        let uset = self;
1093        let isl_rs_ctx = uset.get_ctx();
1094        let mut uset = uset;
1095        uset.do_not_free_on_drop();
1096        let uset = uset.ptr;
1097        let mut ma = ma;
1098        ma.do_not_free_on_drop();
1099        let ma = ma.ptr;
1100        let isl_rs_result = unsafe { isl_union_set_preimage_multi_aff(uset, ma) };
1101        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1102                                       should_free_on_drop: true };
1103        let err = isl_rs_ctx.last_error();
1104        if err != Error::None_ {
1105            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1106        }
1107        Ok(isl_rs_result)
1108    }
1109
1110    /// Wraps `isl_union_set_preimage_pw_multi_aff`.
1111    pub fn preimage_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionSet, LibISLError> {
1112        let uset = self;
1113        let isl_rs_ctx = uset.get_ctx();
1114        let mut uset = uset;
1115        uset.do_not_free_on_drop();
1116        let uset = uset.ptr;
1117        let mut pma = pma;
1118        pma.do_not_free_on_drop();
1119        let pma = pma.ptr;
1120        let isl_rs_result = unsafe { isl_union_set_preimage_pw_multi_aff(uset, pma) };
1121        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1122                                       should_free_on_drop: true };
1123        let err = isl_rs_ctx.last_error();
1124        if err != Error::None_ {
1125            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1126        }
1127        Ok(isl_rs_result)
1128    }
1129
1130    /// Wraps `isl_union_set_preimage_union_pw_multi_aff`.
1131    pub fn preimage_union_pw_multi_aff(self, upma: UnionPwMultiAff)
1132                                       -> Result<UnionSet, LibISLError> {
1133        let uset = self;
1134        let isl_rs_ctx = uset.get_ctx();
1135        let mut uset = uset;
1136        uset.do_not_free_on_drop();
1137        let uset = uset.ptr;
1138        let mut upma = upma;
1139        upma.do_not_free_on_drop();
1140        let upma = upma.ptr;
1141        let isl_rs_result = unsafe { isl_union_set_preimage_union_pw_multi_aff(uset, upma) };
1142        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1143                                       should_free_on_drop: true };
1144        let err = isl_rs_ctx.last_error();
1145        if err != Error::None_ {
1146            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1147        }
1148        Ok(isl_rs_result)
1149    }
1150
1151    /// Wraps `isl_union_set_product`.
1152    pub fn product(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
1153        let uset1 = self;
1154        let isl_rs_ctx = uset1.get_ctx();
1155        let mut uset1 = uset1;
1156        uset1.do_not_free_on_drop();
1157        let uset1 = uset1.ptr;
1158        let mut uset2 = uset2;
1159        uset2.do_not_free_on_drop();
1160        let uset2 = uset2.ptr;
1161        let isl_rs_result = unsafe { isl_union_set_product(uset1, uset2) };
1162        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1163                                       should_free_on_drop: true };
1164        let err = isl_rs_ctx.last_error();
1165        if err != Error::None_ {
1166            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1167        }
1168        Ok(isl_rs_result)
1169    }
1170
1171    /// Wraps `isl_union_set_project_out`.
1172    pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<UnionSet, LibISLError> {
1173        let uset = self;
1174        let isl_rs_ctx = uset.get_ctx();
1175        let mut uset = uset;
1176        uset.do_not_free_on_drop();
1177        let uset = uset.ptr;
1178        let type_ = type_.to_i32();
1179        let isl_rs_result = unsafe { isl_union_set_project_out(uset, type_, first, n) };
1180        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1181                                       should_free_on_drop: true };
1182        let err = isl_rs_ctx.last_error();
1183        if err != Error::None_ {
1184            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1185        }
1186        Ok(isl_rs_result)
1187    }
1188
1189    /// Wraps `isl_union_set_project_out_all_params`.
1190    pub fn project_out_all_params(self) -> Result<UnionSet, LibISLError> {
1191        let uset = self;
1192        let isl_rs_ctx = uset.get_ctx();
1193        let mut uset = uset;
1194        uset.do_not_free_on_drop();
1195        let uset = uset.ptr;
1196        let isl_rs_result = unsafe { isl_union_set_project_out_all_params(uset) };
1197        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1198                                       should_free_on_drop: true };
1199        let err = isl_rs_ctx.last_error();
1200        if err != Error::None_ {
1201            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1202        }
1203        Ok(isl_rs_result)
1204    }
1205
1206    /// Wraps `isl_union_set_read_from_str`.
1207    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<UnionSet, LibISLError> {
1208        let isl_rs_ctx = Context { ptr: ctx.ptr,
1209                                   should_free_on_drop: false };
1210        let ctx = ctx.ptr;
1211        let str_ = CString::new(str_).unwrap();
1212        let str_ = str_.as_ptr();
1213        let isl_rs_result = unsafe { isl_union_set_read_from_str(ctx, str_) };
1214        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1215                                       should_free_on_drop: true };
1216        let err = isl_rs_ctx.last_error();
1217        if err != Error::None_ {
1218            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1219        }
1220        Ok(isl_rs_result)
1221    }
1222
1223    /// Wraps `isl_union_set_remove_divs`.
1224    pub fn remove_divs(self) -> Result<UnionSet, LibISLError> {
1225        let bset = self;
1226        let isl_rs_ctx = bset.get_ctx();
1227        let mut bset = bset;
1228        bset.do_not_free_on_drop();
1229        let bset = bset.ptr;
1230        let isl_rs_result = unsafe { isl_union_set_remove_divs(bset) };
1231        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1232                                       should_free_on_drop: true };
1233        let err = isl_rs_ctx.last_error();
1234        if err != Error::None_ {
1235            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1236        }
1237        Ok(isl_rs_result)
1238    }
1239
1240    /// Wraps `isl_union_set_remove_redundancies`.
1241    pub fn remove_redundancies(self) -> Result<UnionSet, LibISLError> {
1242        let uset = self;
1243        let isl_rs_ctx = uset.get_ctx();
1244        let mut uset = uset;
1245        uset.do_not_free_on_drop();
1246        let uset = uset.ptr;
1247        let isl_rs_result = unsafe { isl_union_set_remove_redundancies(uset) };
1248        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1249                                       should_free_on_drop: true };
1250        let err = isl_rs_ctx.last_error();
1251        if err != Error::None_ {
1252            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1253        }
1254        Ok(isl_rs_result)
1255    }
1256
1257    /// Wraps `isl_union_set_reset_user`.
1258    pub fn reset_user(self) -> Result<UnionSet, LibISLError> {
1259        let uset = self;
1260        let isl_rs_ctx = uset.get_ctx();
1261        let mut uset = uset;
1262        uset.do_not_free_on_drop();
1263        let uset = uset.ptr;
1264        let isl_rs_result = unsafe { isl_union_set_reset_user(uset) };
1265        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1266                                       should_free_on_drop: true };
1267        let err = isl_rs_ctx.last_error();
1268        if err != Error::None_ {
1269            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1270        }
1271        Ok(isl_rs_result)
1272    }
1273
1274    /// Wraps `isl_union_set_sample`.
1275    pub fn sample(self) -> Result<BasicSet, LibISLError> {
1276        let uset = self;
1277        let isl_rs_ctx = uset.get_ctx();
1278        let mut uset = uset;
1279        uset.do_not_free_on_drop();
1280        let uset = uset.ptr;
1281        let isl_rs_result = unsafe { isl_union_set_sample(uset) };
1282        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1283                                       should_free_on_drop: true };
1284        let err = isl_rs_ctx.last_error();
1285        if err != Error::None_ {
1286            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1287        }
1288        Ok(isl_rs_result)
1289    }
1290
1291    /// Wraps `isl_union_set_sample_point`.
1292    pub fn sample_point(self) -> Result<Point, LibISLError> {
1293        let uset = self;
1294        let isl_rs_ctx = uset.get_ctx();
1295        let mut uset = uset;
1296        uset.do_not_free_on_drop();
1297        let uset = uset.ptr;
1298        let isl_rs_result = unsafe { isl_union_set_sample_point(uset) };
1299        let isl_rs_result = Point { ptr: isl_rs_result,
1300                                    should_free_on_drop: true };
1301        let err = isl_rs_ctx.last_error();
1302        if err != Error::None_ {
1303            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1304        }
1305        Ok(isl_rs_result)
1306    }
1307
1308    /// Wraps `isl_union_set_simple_hull`.
1309    pub fn simple_hull(self) -> Result<UnionSet, LibISLError> {
1310        let uset = self;
1311        let isl_rs_ctx = uset.get_ctx();
1312        let mut uset = uset;
1313        uset.do_not_free_on_drop();
1314        let uset = uset.ptr;
1315        let isl_rs_result = unsafe { isl_union_set_simple_hull(uset) };
1316        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1317                                       should_free_on_drop: true };
1318        let err = isl_rs_ctx.last_error();
1319        if err != Error::None_ {
1320            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1321        }
1322        Ok(isl_rs_result)
1323    }
1324
1325    /// Wraps `isl_union_set_solutions`.
1326    pub fn solutions(self) -> Result<UnionSet, LibISLError> {
1327        let bset = self;
1328        let isl_rs_ctx = bset.get_ctx();
1329        let mut bset = bset;
1330        bset.do_not_free_on_drop();
1331        let bset = bset.ptr;
1332        let isl_rs_result = unsafe { isl_union_set_solutions(bset) };
1333        let isl_rs_result = UnionSet { 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_union_set_subtract`.
1343    pub fn subtract(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
1344        let uset1 = self;
1345        let isl_rs_ctx = uset1.get_ctx();
1346        let mut uset1 = uset1;
1347        uset1.do_not_free_on_drop();
1348        let uset1 = uset1.ptr;
1349        let mut uset2 = uset2;
1350        uset2.do_not_free_on_drop();
1351        let uset2 = uset2.ptr;
1352        let isl_rs_result = unsafe { isl_union_set_subtract(uset1, uset2) };
1353        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1354                                       should_free_on_drop: true };
1355        let err = isl_rs_ctx.last_error();
1356        if err != Error::None_ {
1357            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1358        }
1359        Ok(isl_rs_result)
1360    }
1361
1362    /// Wraps `isl_union_set_to_list`.
1363    pub fn to_list(self) -> Result<UnionSetList, LibISLError> {
1364        let el = self;
1365        let isl_rs_ctx = el.get_ctx();
1366        let mut el = el;
1367        el.do_not_free_on_drop();
1368        let el = el.ptr;
1369        let isl_rs_result = unsafe { isl_union_set_to_list(el) };
1370        let isl_rs_result = UnionSetList { ptr: isl_rs_result,
1371                                           should_free_on_drop: true };
1372        let err = isl_rs_ctx.last_error();
1373        if err != Error::None_ {
1374            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1375        }
1376        Ok(isl_rs_result)
1377    }
1378
1379    /// Wraps `isl_union_set_to_str`.
1380    pub fn to_str(&self) -> Result<&str, LibISLError> {
1381        let uset = self;
1382        let isl_rs_ctx = uset.get_ctx();
1383        let uset = uset.ptr;
1384        let isl_rs_result = unsafe { isl_union_set_to_str(uset) };
1385        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1386        let isl_rs_result = isl_rs_result.to_str().unwrap();
1387        let err = isl_rs_ctx.last_error();
1388        if err != Error::None_ {
1389            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1390        }
1391        Ok(isl_rs_result)
1392    }
1393
1394    /// Wraps `isl_union_set_union`.
1395    pub fn union(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
1396        let uset1 = self;
1397        let isl_rs_ctx = uset1.get_ctx();
1398        let mut uset1 = uset1;
1399        uset1.do_not_free_on_drop();
1400        let uset1 = uset1.ptr;
1401        let mut uset2 = uset2;
1402        uset2.do_not_free_on_drop();
1403        let uset2 = uset2.ptr;
1404        let isl_rs_result = unsafe { isl_union_set_union(uset1, uset2) };
1405        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1406                                       should_free_on_drop: true };
1407        let err = isl_rs_ctx.last_error();
1408        if err != Error::None_ {
1409            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1410        }
1411        Ok(isl_rs_result)
1412    }
1413
1414    /// Wraps `isl_union_set_universe`.
1415    pub fn universe(self) -> Result<UnionSet, LibISLError> {
1416        let uset = self;
1417        let isl_rs_ctx = uset.get_ctx();
1418        let mut uset = uset;
1419        uset.do_not_free_on_drop();
1420        let uset = uset.ptr;
1421        let isl_rs_result = unsafe { isl_union_set_universe(uset) };
1422        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1423                                       should_free_on_drop: true };
1424        let err = isl_rs_ctx.last_error();
1425        if err != Error::None_ {
1426            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1427        }
1428        Ok(isl_rs_result)
1429    }
1430
1431    /// Wraps `isl_union_set_unwrap`.
1432    pub fn unwrap(self) -> Result<UnionMap, LibISLError> {
1433        let uset = self;
1434        let isl_rs_ctx = uset.get_ctx();
1435        let mut uset = uset;
1436        uset.do_not_free_on_drop();
1437        let uset = uset.ptr;
1438        let isl_rs_result = unsafe { isl_union_set_unwrap(uset) };
1439        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1440                                       should_free_on_drop: true };
1441        let err = isl_rs_ctx.last_error();
1442        if err != Error::None_ {
1443            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1444        }
1445        Ok(isl_rs_result)
1446    }
1447
1448    /// Wraps `isl_union_set_wrapped_domain_map`.
1449    pub fn wrapped_domain_map(self) -> Result<UnionMap, LibISLError> {
1450        let uset = self;
1451        let isl_rs_ctx = uset.get_ctx();
1452        let mut uset = uset;
1453        uset.do_not_free_on_drop();
1454        let uset = uset.ptr;
1455        let isl_rs_result = unsafe { isl_union_set_wrapped_domain_map(uset) };
1456        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1457                                       should_free_on_drop: true };
1458        let err = isl_rs_ctx.last_error();
1459        if err != Error::None_ {
1460            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1461        }
1462        Ok(isl_rs_result)
1463    }
1464
1465    /// Does not call isl_union_set_free() on being dropped. (For internal use
1466    /// only.)
1467    pub fn do_not_free_on_drop(&mut self) {
1468        self.should_free_on_drop = false;
1469    }
1470}
1471
1472impl Drop for UnionSet {
1473    fn drop(&mut self) {
1474        if self.should_free_on_drop {
1475            unsafe {
1476                isl_union_set_free(self.ptr);
1477            }
1478        }
1479    }
1480}