isl_rs/bindings/
union_map.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    BasicMap, Context, DimType, Error, Id, IdList, LibISLError, Map, MapList, MultiAff, MultiId,
6    MultiPwAff, MultiUnionPwAff, PwMultiAff, Set, Space, UnionMapList, UnionPwAff, UnionPwMultiAff,
7    UnionSet, Val,
8};
9use libc::uintptr_t;
10use std::ffi::{CStr, CString};
11use std::os::raw::c_char;
12
13/// Wraps `isl_union_map`.
14pub struct UnionMap {
15    pub ptr: uintptr_t,
16    pub should_free_on_drop: bool,
17}
18
19extern "C" {
20
21    fn isl_union_map_add_map(umap: uintptr_t, map: uintptr_t) -> uintptr_t;
22
23    fn isl_union_map_affine_hull(umap: uintptr_t) -> uintptr_t;
24
25    fn isl_union_map_align_params(umap: uintptr_t, model: uintptr_t) -> uintptr_t;
26
27    fn isl_union_map_apply_domain(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
28
29    fn isl_union_map_apply_range(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
30
31    fn isl_union_map_as_map(umap: uintptr_t) -> uintptr_t;
32
33    fn isl_union_map_as_multi_union_pw_aff(umap: uintptr_t) -> uintptr_t;
34
35    fn isl_union_map_as_union_pw_multi_aff(umap: uintptr_t) -> uintptr_t;
36
37    fn isl_union_map_bind_range(umap: uintptr_t, tuple: uintptr_t) -> uintptr_t;
38
39    fn isl_union_map_coalesce(umap: uintptr_t) -> uintptr_t;
40
41    fn isl_union_map_compute_divs(umap: uintptr_t) -> uintptr_t;
42
43    fn isl_union_map_contains(umap: uintptr_t, space: uintptr_t) -> i32;
44
45    fn isl_union_map_copy(umap: uintptr_t) -> uintptr_t;
46
47    fn isl_union_map_curry(umap: uintptr_t) -> uintptr_t;
48
49    fn isl_union_map_deltas(umap: uintptr_t) -> uintptr_t;
50
51    fn isl_union_map_deltas_map(umap: uintptr_t) -> uintptr_t;
52
53    fn isl_union_map_detect_equalities(umap: uintptr_t) -> uintptr_t;
54
55    fn isl_union_map_dim(umap: uintptr_t, type_: i32) -> i32;
56
57    fn isl_union_map_domain(umap: uintptr_t) -> uintptr_t;
58
59    fn isl_union_map_domain_factor_domain(umap: uintptr_t) -> uintptr_t;
60
61    fn isl_union_map_domain_factor_range(umap: uintptr_t) -> uintptr_t;
62
63    fn isl_union_map_domain_map(umap: uintptr_t) -> uintptr_t;
64
65    fn isl_union_map_domain_map_union_pw_multi_aff(umap: uintptr_t) -> uintptr_t;
66
67    fn isl_union_map_domain_product(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
68
69    fn isl_union_map_domain_reverse(umap: uintptr_t) -> uintptr_t;
70
71    fn isl_union_map_drop_unused_params(umap: uintptr_t) -> uintptr_t;
72
73    fn isl_union_map_dump(umap: uintptr_t) -> ();
74
75    fn isl_union_map_empty(space: uintptr_t) -> uintptr_t;
76
77    fn isl_union_map_empty_ctx(ctx: uintptr_t) -> uintptr_t;
78
79    fn isl_union_map_empty_space(space: uintptr_t) -> uintptr_t;
80
81    fn isl_union_map_eq_at_multi_union_pw_aff(umap: uintptr_t, mupa: uintptr_t) -> uintptr_t;
82
83    fn isl_union_map_extract_map(umap: uintptr_t, space: uintptr_t) -> uintptr_t;
84
85    fn isl_union_map_factor_domain(umap: uintptr_t) -> uintptr_t;
86
87    fn isl_union_map_factor_range(umap: uintptr_t) -> uintptr_t;
88
89    fn isl_union_map_find_dim_by_name(umap: uintptr_t, type_: i32, name: *const c_char) -> i32;
90
91    fn isl_union_map_fixed_power_val(umap: uintptr_t, exp: uintptr_t) -> uintptr_t;
92
93    fn isl_union_map_flat_domain_product(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
94
95    fn isl_union_map_flat_range_product(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
96
97    fn isl_union_map_free(umap: uintptr_t) -> uintptr_t;
98
99    fn isl_union_map_from_basic_map(bmap: uintptr_t) -> uintptr_t;
100
101    fn isl_union_map_from_domain(uset: uintptr_t) -> uintptr_t;
102
103    fn isl_union_map_from_domain_and_range(domain: uintptr_t, range: uintptr_t) -> uintptr_t;
104
105    fn isl_union_map_from_map(map: uintptr_t) -> uintptr_t;
106
107    fn isl_union_map_from_multi_union_pw_aff(mupa: uintptr_t) -> uintptr_t;
108
109    fn isl_union_map_from_range(uset: uintptr_t) -> uintptr_t;
110
111    fn isl_union_map_from_union_pw_aff(upa: uintptr_t) -> uintptr_t;
112
113    fn isl_union_map_from_union_pw_multi_aff(upma: uintptr_t) -> uintptr_t;
114
115    fn isl_union_map_get_ctx(umap: uintptr_t) -> uintptr_t;
116
117    fn isl_union_map_get_dim_id(umap: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
118
119    fn isl_union_map_get_hash(umap: uintptr_t) -> u32;
120
121    fn isl_union_map_get_map_list(umap: uintptr_t) -> uintptr_t;
122
123    fn isl_union_map_get_space(umap: uintptr_t) -> uintptr_t;
124
125    fn isl_union_map_gist(umap: uintptr_t, context: uintptr_t) -> uintptr_t;
126
127    fn isl_union_map_gist_domain(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
128
129    fn isl_union_map_gist_params(umap: uintptr_t, set: uintptr_t) -> uintptr_t;
130
131    fn isl_union_map_gist_range(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
132
133    fn isl_union_map_intersect(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
134
135    fn isl_union_map_intersect_domain(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
136
137    fn isl_union_map_intersect_domain_factor_domain(umap: uintptr_t, factor: uintptr_t)
138                                                    -> uintptr_t;
139
140    fn isl_union_map_intersect_domain_factor_range(umap: uintptr_t, factor: uintptr_t)
141                                                   -> uintptr_t;
142
143    fn isl_union_map_intersect_domain_space(umap: uintptr_t, space: uintptr_t) -> uintptr_t;
144
145    fn isl_union_map_intersect_domain_union_set(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
146
147    fn isl_union_map_intersect_domain_wrapped_domain_union_set(umap: uintptr_t, domain: uintptr_t)
148                                                               -> uintptr_t;
149
150    fn isl_union_map_intersect_params(umap: uintptr_t, set: uintptr_t) -> uintptr_t;
151
152    fn isl_union_map_intersect_range(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
153
154    fn isl_union_map_intersect_range_factor_domain(umap: uintptr_t, factor: uintptr_t)
155                                                   -> uintptr_t;
156
157    fn isl_union_map_intersect_range_factor_range(umap: uintptr_t, factor: uintptr_t) -> uintptr_t;
158
159    fn isl_union_map_intersect_range_space(umap: uintptr_t, space: uintptr_t) -> uintptr_t;
160
161    fn isl_union_map_intersect_range_union_set(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
162
163    fn isl_union_map_intersect_range_wrapped_domain_union_set(umap: uintptr_t, domain: uintptr_t)
164                                                              -> uintptr_t;
165
166    fn isl_union_map_involves_dims(umap: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
167
168    fn isl_union_map_is_bijective(umap: uintptr_t) -> i32;
169
170    fn isl_union_map_is_disjoint(umap1: uintptr_t, umap2: uintptr_t) -> i32;
171
172    fn isl_union_map_is_empty(umap: uintptr_t) -> i32;
173
174    fn isl_union_map_is_equal(umap1: uintptr_t, umap2: uintptr_t) -> i32;
175
176    fn isl_union_map_is_identity(umap: uintptr_t) -> i32;
177
178    fn isl_union_map_is_injective(umap: uintptr_t) -> i32;
179
180    fn isl_union_map_is_single_valued(umap: uintptr_t) -> i32;
181
182    fn isl_union_map_is_strict_subset(umap1: uintptr_t, umap2: uintptr_t) -> i32;
183
184    fn isl_union_map_is_subset(umap1: uintptr_t, umap2: uintptr_t) -> i32;
185
186    fn isl_union_map_isa_map(umap: uintptr_t) -> i32;
187
188    fn isl_union_map_lex_ge_at_multi_union_pw_aff(umap: uintptr_t, mupa: uintptr_t) -> uintptr_t;
189
190    fn isl_union_map_lex_ge_union_map(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
191
192    fn isl_union_map_lex_gt_at_multi_union_pw_aff(umap: uintptr_t, mupa: uintptr_t) -> uintptr_t;
193
194    fn isl_union_map_lex_gt_union_map(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
195
196    fn isl_union_map_lex_le_at_multi_union_pw_aff(umap: uintptr_t, mupa: uintptr_t) -> uintptr_t;
197
198    fn isl_union_map_lex_le_union_map(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
199
200    fn isl_union_map_lex_lt_at_multi_union_pw_aff(umap: uintptr_t, mupa: uintptr_t) -> uintptr_t;
201
202    fn isl_union_map_lex_lt_union_map(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
203
204    fn isl_union_map_lexmax(umap: uintptr_t) -> uintptr_t;
205
206    fn isl_union_map_lexmin(umap: uintptr_t) -> uintptr_t;
207
208    fn isl_union_map_n_map(umap: uintptr_t) -> i32;
209
210    fn isl_union_map_params(umap: uintptr_t) -> uintptr_t;
211
212    fn isl_union_map_plain_is_empty(umap: uintptr_t) -> i32;
213
214    fn isl_union_map_plain_is_injective(umap: uintptr_t) -> i32;
215
216    fn isl_union_map_plain_unshifted_simple_hull(umap: uintptr_t) -> uintptr_t;
217
218    fn isl_union_map_polyhedral_hull(umap: uintptr_t) -> uintptr_t;
219
220    fn isl_union_map_preimage_domain_multi_aff(umap: uintptr_t, ma: uintptr_t) -> uintptr_t;
221
222    fn isl_union_map_preimage_domain_multi_pw_aff(umap: uintptr_t, mpa: uintptr_t) -> uintptr_t;
223
224    fn isl_union_map_preimage_domain_pw_multi_aff(umap: uintptr_t, pma: uintptr_t) -> uintptr_t;
225
226    fn isl_union_map_preimage_domain_union_pw_multi_aff(umap: uintptr_t, upma: uintptr_t)
227                                                        -> uintptr_t;
228
229    fn isl_union_map_preimage_range_multi_aff(umap: uintptr_t, ma: uintptr_t) -> uintptr_t;
230
231    fn isl_union_map_preimage_range_pw_multi_aff(umap: uintptr_t, pma: uintptr_t) -> uintptr_t;
232
233    fn isl_union_map_preimage_range_union_pw_multi_aff(umap: uintptr_t, upma: uintptr_t)
234                                                       -> uintptr_t;
235
236    fn isl_union_map_product(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
237
238    fn isl_union_map_project_out(umap: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
239
240    fn isl_union_map_project_out_all_params(umap: uintptr_t) -> uintptr_t;
241
242    fn isl_union_map_project_out_param_id(umap: uintptr_t, id: uintptr_t) -> uintptr_t;
243
244    fn isl_union_map_project_out_param_id_list(umap: uintptr_t, list: uintptr_t) -> uintptr_t;
245
246    fn isl_union_map_range(umap: uintptr_t) -> uintptr_t;
247
248    fn isl_union_map_range_curry(umap: uintptr_t) -> uintptr_t;
249
250    fn isl_union_map_range_factor_domain(umap: uintptr_t) -> uintptr_t;
251
252    fn isl_union_map_range_factor_range(umap: uintptr_t) -> uintptr_t;
253
254    fn isl_union_map_range_map(umap: uintptr_t) -> uintptr_t;
255
256    fn isl_union_map_range_product(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
257
258    fn isl_union_map_range_reverse(umap: uintptr_t) -> uintptr_t;
259
260    fn isl_union_map_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
261
262    fn isl_union_map_remove_divs(bmap: uintptr_t) -> uintptr_t;
263
264    fn isl_union_map_remove_redundancies(umap: uintptr_t) -> uintptr_t;
265
266    fn isl_union_map_reset_user(umap: uintptr_t) -> uintptr_t;
267
268    fn isl_union_map_reverse(umap: uintptr_t) -> uintptr_t;
269
270    fn isl_union_map_sample(umap: uintptr_t) -> uintptr_t;
271
272    fn isl_union_map_simple_hull(umap: uintptr_t) -> uintptr_t;
273
274    fn isl_union_map_subtract(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
275
276    fn isl_union_map_subtract_domain(umap: uintptr_t, dom: uintptr_t) -> uintptr_t;
277
278    fn isl_union_map_subtract_range(umap: uintptr_t, dom: uintptr_t) -> uintptr_t;
279
280    fn isl_union_map_to_list(el: uintptr_t) -> uintptr_t;
281
282    fn isl_union_map_to_str(umap: uintptr_t) -> *const c_char;
283
284    fn isl_union_map_uncurry(umap: uintptr_t) -> uintptr_t;
285
286    fn isl_union_map_union(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
287
288    fn isl_union_map_universe(umap: uintptr_t) -> uintptr_t;
289
290    fn isl_union_map_wrap(umap: uintptr_t) -> uintptr_t;
291
292    fn isl_union_map_zip(umap: uintptr_t) -> uintptr_t;
293
294}
295
296impl UnionMap {
297    /// Wraps `isl_union_map_add_map`.
298    pub fn add_map(self, map: Map) -> Result<UnionMap, LibISLError> {
299        let umap = self;
300        let isl_rs_ctx = umap.get_ctx();
301        let mut umap = umap;
302        umap.do_not_free_on_drop();
303        let umap = umap.ptr;
304        let mut map = map;
305        map.do_not_free_on_drop();
306        let map = map.ptr;
307        let isl_rs_result = unsafe { isl_union_map_add_map(umap, map) };
308        let isl_rs_result = UnionMap { ptr: isl_rs_result,
309                                       should_free_on_drop: true };
310        let err = isl_rs_ctx.last_error();
311        if err != Error::None_ {
312            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
313        }
314        Ok(isl_rs_result)
315    }
316
317    /// Wraps `isl_union_map_affine_hull`.
318    pub fn affine_hull(self) -> Result<UnionMap, LibISLError> {
319        let umap = self;
320        let isl_rs_ctx = umap.get_ctx();
321        let mut umap = umap;
322        umap.do_not_free_on_drop();
323        let umap = umap.ptr;
324        let isl_rs_result = unsafe { isl_union_map_affine_hull(umap) };
325        let isl_rs_result = UnionMap { ptr: isl_rs_result,
326                                       should_free_on_drop: true };
327        let err = isl_rs_ctx.last_error();
328        if err != Error::None_ {
329            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
330        }
331        Ok(isl_rs_result)
332    }
333
334    /// Wraps `isl_union_map_align_params`.
335    pub fn align_params(self, model: Space) -> Result<UnionMap, LibISLError> {
336        let umap = self;
337        let isl_rs_ctx = umap.get_ctx();
338        let mut umap = umap;
339        umap.do_not_free_on_drop();
340        let umap = umap.ptr;
341        let mut model = model;
342        model.do_not_free_on_drop();
343        let model = model.ptr;
344        let isl_rs_result = unsafe { isl_union_map_align_params(umap, model) };
345        let isl_rs_result = UnionMap { ptr: isl_rs_result,
346                                       should_free_on_drop: true };
347        let err = isl_rs_ctx.last_error();
348        if err != Error::None_ {
349            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
350        }
351        Ok(isl_rs_result)
352    }
353
354    /// Wraps `isl_union_map_apply_domain`.
355    pub fn apply_domain(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
356        let umap1 = self;
357        let isl_rs_ctx = umap1.get_ctx();
358        let mut umap1 = umap1;
359        umap1.do_not_free_on_drop();
360        let umap1 = umap1.ptr;
361        let mut umap2 = umap2;
362        umap2.do_not_free_on_drop();
363        let umap2 = umap2.ptr;
364        let isl_rs_result = unsafe { isl_union_map_apply_domain(umap1, umap2) };
365        let isl_rs_result = UnionMap { ptr: isl_rs_result,
366                                       should_free_on_drop: true };
367        let err = isl_rs_ctx.last_error();
368        if err != Error::None_ {
369            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
370        }
371        Ok(isl_rs_result)
372    }
373
374    /// Wraps `isl_union_map_apply_range`.
375    pub fn apply_range(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
376        let umap1 = self;
377        let isl_rs_ctx = umap1.get_ctx();
378        let mut umap1 = umap1;
379        umap1.do_not_free_on_drop();
380        let umap1 = umap1.ptr;
381        let mut umap2 = umap2;
382        umap2.do_not_free_on_drop();
383        let umap2 = umap2.ptr;
384        let isl_rs_result = unsafe { isl_union_map_apply_range(umap1, umap2) };
385        let isl_rs_result = UnionMap { ptr: isl_rs_result,
386                                       should_free_on_drop: true };
387        let err = isl_rs_ctx.last_error();
388        if err != Error::None_ {
389            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
390        }
391        Ok(isl_rs_result)
392    }
393
394    /// Wraps `isl_union_map_as_map`.
395    pub fn as_map(self) -> Result<Map, LibISLError> {
396        let umap = self;
397        let isl_rs_ctx = umap.get_ctx();
398        let mut umap = umap;
399        umap.do_not_free_on_drop();
400        let umap = umap.ptr;
401        let isl_rs_result = unsafe { isl_union_map_as_map(umap) };
402        let isl_rs_result = Map { 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_union_map_as_multi_union_pw_aff`.
412    pub fn as_multi_union_pw_aff(self) -> Result<MultiUnionPwAff, LibISLError> {
413        let umap = self;
414        let isl_rs_ctx = umap.get_ctx();
415        let mut umap = umap;
416        umap.do_not_free_on_drop();
417        let umap = umap.ptr;
418        let isl_rs_result = unsafe { isl_union_map_as_multi_union_pw_aff(umap) };
419        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
420                                              should_free_on_drop: true };
421        let err = isl_rs_ctx.last_error();
422        if err != Error::None_ {
423            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
424        }
425        Ok(isl_rs_result)
426    }
427
428    /// Wraps `isl_union_map_as_union_pw_multi_aff`.
429    pub fn as_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
430        let umap = self;
431        let isl_rs_ctx = umap.get_ctx();
432        let mut umap = umap;
433        umap.do_not_free_on_drop();
434        let umap = umap.ptr;
435        let isl_rs_result = unsafe { isl_union_map_as_union_pw_multi_aff(umap) };
436        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
437                                              should_free_on_drop: true };
438        let err = isl_rs_ctx.last_error();
439        if err != Error::None_ {
440            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
441        }
442        Ok(isl_rs_result)
443    }
444
445    /// Wraps `isl_union_map_bind_range`.
446    pub fn bind_range(self, tuple: MultiId) -> Result<UnionSet, LibISLError> {
447        let umap = self;
448        let isl_rs_ctx = umap.get_ctx();
449        let mut umap = umap;
450        umap.do_not_free_on_drop();
451        let umap = umap.ptr;
452        let mut tuple = tuple;
453        tuple.do_not_free_on_drop();
454        let tuple = tuple.ptr;
455        let isl_rs_result = unsafe { isl_union_map_bind_range(umap, tuple) };
456        let isl_rs_result = UnionSet { ptr: isl_rs_result,
457                                       should_free_on_drop: true };
458        let err = isl_rs_ctx.last_error();
459        if err != Error::None_ {
460            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
461        }
462        Ok(isl_rs_result)
463    }
464
465    /// Wraps `isl_union_map_coalesce`.
466    pub fn coalesce(self) -> Result<UnionMap, LibISLError> {
467        let umap = self;
468        let isl_rs_ctx = umap.get_ctx();
469        let mut umap = umap;
470        umap.do_not_free_on_drop();
471        let umap = umap.ptr;
472        let isl_rs_result = unsafe { isl_union_map_coalesce(umap) };
473        let isl_rs_result = UnionMap { ptr: isl_rs_result,
474                                       should_free_on_drop: true };
475        let err = isl_rs_ctx.last_error();
476        if err != Error::None_ {
477            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
478        }
479        Ok(isl_rs_result)
480    }
481
482    /// Wraps `isl_union_map_compute_divs`.
483    pub fn compute_divs(self) -> Result<UnionMap, LibISLError> {
484        let umap = self;
485        let isl_rs_ctx = umap.get_ctx();
486        let mut umap = umap;
487        umap.do_not_free_on_drop();
488        let umap = umap.ptr;
489        let isl_rs_result = unsafe { isl_union_map_compute_divs(umap) };
490        let isl_rs_result = UnionMap { ptr: isl_rs_result,
491                                       should_free_on_drop: true };
492        let err = isl_rs_ctx.last_error();
493        if err != Error::None_ {
494            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
495        }
496        Ok(isl_rs_result)
497    }
498
499    /// Wraps `isl_union_map_contains`.
500    pub fn contains(&self, space: &Space) -> Result<bool, LibISLError> {
501        let umap = self;
502        let isl_rs_ctx = umap.get_ctx();
503        let umap = umap.ptr;
504        let space = space.ptr;
505        let isl_rs_result = unsafe { isl_union_map_contains(umap, space) };
506        let isl_rs_result = match isl_rs_result {
507            0 => false,
508            1 => true,
509            _ => panic!("Got isl_bool = -1"),
510        };
511        let err = isl_rs_ctx.last_error();
512        if err != Error::None_ {
513            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
514        }
515        Ok(isl_rs_result)
516    }
517
518    /// Wraps `isl_union_map_copy`.
519    pub fn copy(&self) -> Result<UnionMap, LibISLError> {
520        let umap = self;
521        let isl_rs_ctx = umap.get_ctx();
522        let umap = umap.ptr;
523        let isl_rs_result = unsafe { isl_union_map_copy(umap) };
524        let isl_rs_result = UnionMap { ptr: isl_rs_result,
525                                       should_free_on_drop: true };
526        let err = isl_rs_ctx.last_error();
527        if err != Error::None_ {
528            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
529        }
530        Ok(isl_rs_result)
531    }
532
533    /// Wraps `isl_union_map_curry`.
534    pub fn curry(self) -> Result<UnionMap, LibISLError> {
535        let umap = self;
536        let isl_rs_ctx = umap.get_ctx();
537        let mut umap = umap;
538        umap.do_not_free_on_drop();
539        let umap = umap.ptr;
540        let isl_rs_result = unsafe { isl_union_map_curry(umap) };
541        let isl_rs_result = UnionMap { ptr: isl_rs_result,
542                                       should_free_on_drop: true };
543        let err = isl_rs_ctx.last_error();
544        if err != Error::None_ {
545            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
546        }
547        Ok(isl_rs_result)
548    }
549
550    /// Wraps `isl_union_map_deltas`.
551    pub fn deltas(self) -> Result<UnionSet, LibISLError> {
552        let umap = self;
553        let isl_rs_ctx = umap.get_ctx();
554        let mut umap = umap;
555        umap.do_not_free_on_drop();
556        let umap = umap.ptr;
557        let isl_rs_result = unsafe { isl_union_map_deltas(umap) };
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_map_deltas_map`.
568    pub fn deltas_map(self) -> Result<UnionMap, LibISLError> {
569        let umap = self;
570        let isl_rs_ctx = umap.get_ctx();
571        let mut umap = umap;
572        umap.do_not_free_on_drop();
573        let umap = umap.ptr;
574        let isl_rs_result = unsafe { isl_union_map_deltas_map(umap) };
575        let isl_rs_result = UnionMap { ptr: isl_rs_result,
576                                       should_free_on_drop: true };
577        let err = isl_rs_ctx.last_error();
578        if err != Error::None_ {
579            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
580        }
581        Ok(isl_rs_result)
582    }
583
584    /// Wraps `isl_union_map_detect_equalities`.
585    pub fn detect_equalities(self) -> Result<UnionMap, LibISLError> {
586        let umap = self;
587        let isl_rs_ctx = umap.get_ctx();
588        let mut umap = umap;
589        umap.do_not_free_on_drop();
590        let umap = umap.ptr;
591        let isl_rs_result = unsafe { isl_union_map_detect_equalities(umap) };
592        let isl_rs_result = UnionMap { ptr: isl_rs_result,
593                                       should_free_on_drop: true };
594        let err = isl_rs_ctx.last_error();
595        if err != Error::None_ {
596            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
597        }
598        Ok(isl_rs_result)
599    }
600
601    /// Wraps `isl_union_map_dim`.
602    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
603        let umap = self;
604        let isl_rs_ctx = umap.get_ctx();
605        let umap = umap.ptr;
606        let type_ = type_.to_i32();
607        let isl_rs_result = unsafe { isl_union_map_dim(umap, type_) };
608        let err = isl_rs_ctx.last_error();
609        if err != Error::None_ {
610            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
611        }
612        Ok(isl_rs_result)
613    }
614
615    /// Wraps `isl_union_map_domain`.
616    pub fn domain(self) -> Result<UnionSet, LibISLError> {
617        let umap = self;
618        let isl_rs_ctx = umap.get_ctx();
619        let mut umap = umap;
620        umap.do_not_free_on_drop();
621        let umap = umap.ptr;
622        let isl_rs_result = unsafe { isl_union_map_domain(umap) };
623        let isl_rs_result = UnionSet { ptr: isl_rs_result,
624                                       should_free_on_drop: true };
625        let err = isl_rs_ctx.last_error();
626        if err != Error::None_ {
627            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
628        }
629        Ok(isl_rs_result)
630    }
631
632    /// Wraps `isl_union_map_domain_factor_domain`.
633    pub fn domain_factor_domain(self) -> Result<UnionMap, LibISLError> {
634        let umap = self;
635        let isl_rs_ctx = umap.get_ctx();
636        let mut umap = umap;
637        umap.do_not_free_on_drop();
638        let umap = umap.ptr;
639        let isl_rs_result = unsafe { isl_union_map_domain_factor_domain(umap) };
640        let isl_rs_result = UnionMap { ptr: isl_rs_result,
641                                       should_free_on_drop: true };
642        let err = isl_rs_ctx.last_error();
643        if err != Error::None_ {
644            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
645        }
646        Ok(isl_rs_result)
647    }
648
649    /// Wraps `isl_union_map_domain_factor_range`.
650    pub fn domain_factor_range(self) -> Result<UnionMap, LibISLError> {
651        let umap = self;
652        let isl_rs_ctx = umap.get_ctx();
653        let mut umap = umap;
654        umap.do_not_free_on_drop();
655        let umap = umap.ptr;
656        let isl_rs_result = unsafe { isl_union_map_domain_factor_range(umap) };
657        let isl_rs_result = UnionMap { ptr: isl_rs_result,
658                                       should_free_on_drop: true };
659        let err = isl_rs_ctx.last_error();
660        if err != Error::None_ {
661            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
662        }
663        Ok(isl_rs_result)
664    }
665
666    /// Wraps `isl_union_map_domain_map`.
667    pub fn domain_map(self) -> Result<UnionMap, LibISLError> {
668        let umap = self;
669        let isl_rs_ctx = umap.get_ctx();
670        let mut umap = umap;
671        umap.do_not_free_on_drop();
672        let umap = umap.ptr;
673        let isl_rs_result = unsafe { isl_union_map_domain_map(umap) };
674        let isl_rs_result = UnionMap { ptr: isl_rs_result,
675                                       should_free_on_drop: true };
676        let err = isl_rs_ctx.last_error();
677        if err != Error::None_ {
678            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
679        }
680        Ok(isl_rs_result)
681    }
682
683    /// Wraps `isl_union_map_domain_map_union_pw_multi_aff`.
684    pub fn domain_map_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
685        let umap = self;
686        let isl_rs_ctx = umap.get_ctx();
687        let mut umap = umap;
688        umap.do_not_free_on_drop();
689        let umap = umap.ptr;
690        let isl_rs_result = unsafe { isl_union_map_domain_map_union_pw_multi_aff(umap) };
691        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
692                                              should_free_on_drop: true };
693        let err = isl_rs_ctx.last_error();
694        if err != Error::None_ {
695            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
696        }
697        Ok(isl_rs_result)
698    }
699
700    /// Wraps `isl_union_map_domain_product`.
701    pub fn domain_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
702        let umap1 = self;
703        let isl_rs_ctx = umap1.get_ctx();
704        let mut umap1 = umap1;
705        umap1.do_not_free_on_drop();
706        let umap1 = umap1.ptr;
707        let mut umap2 = umap2;
708        umap2.do_not_free_on_drop();
709        let umap2 = umap2.ptr;
710        let isl_rs_result = unsafe { isl_union_map_domain_product(umap1, umap2) };
711        let isl_rs_result = UnionMap { ptr: isl_rs_result,
712                                       should_free_on_drop: true };
713        let err = isl_rs_ctx.last_error();
714        if err != Error::None_ {
715            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
716        }
717        Ok(isl_rs_result)
718    }
719
720    /// Wraps `isl_union_map_domain_reverse`.
721    pub fn domain_reverse(self) -> Result<UnionMap, LibISLError> {
722        let umap = self;
723        let isl_rs_ctx = umap.get_ctx();
724        let mut umap = umap;
725        umap.do_not_free_on_drop();
726        let umap = umap.ptr;
727        let isl_rs_result = unsafe { isl_union_map_domain_reverse(umap) };
728        let isl_rs_result = UnionMap { ptr: isl_rs_result,
729                                       should_free_on_drop: true };
730        let err = isl_rs_ctx.last_error();
731        if err != Error::None_ {
732            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
733        }
734        Ok(isl_rs_result)
735    }
736
737    /// Wraps `isl_union_map_drop_unused_params`.
738    pub fn drop_unused_params(self) -> Result<UnionMap, LibISLError> {
739        let umap = self;
740        let isl_rs_ctx = umap.get_ctx();
741        let mut umap = umap;
742        umap.do_not_free_on_drop();
743        let umap = umap.ptr;
744        let isl_rs_result = unsafe { isl_union_map_drop_unused_params(umap) };
745        let isl_rs_result = UnionMap { ptr: isl_rs_result,
746                                       should_free_on_drop: true };
747        let err = isl_rs_ctx.last_error();
748        if err != Error::None_ {
749            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
750        }
751        Ok(isl_rs_result)
752    }
753
754    /// Wraps `isl_union_map_dump`.
755    pub fn dump(&self) -> Result<(), LibISLError> {
756        let umap = self;
757        let isl_rs_ctx = umap.get_ctx();
758        let umap = umap.ptr;
759        let isl_rs_result = unsafe { isl_union_map_dump(umap) };
760        let err = isl_rs_ctx.last_error();
761        if err != Error::None_ {
762            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
763        }
764        Ok(isl_rs_result)
765    }
766
767    /// Wraps `isl_union_map_empty`.
768    pub fn empty(space: Space) -> Result<UnionMap, LibISLError> {
769        let isl_rs_ctx = space.get_ctx();
770        let mut space = space;
771        space.do_not_free_on_drop();
772        let space = space.ptr;
773        let isl_rs_result = unsafe { isl_union_map_empty(space) };
774        let isl_rs_result = UnionMap { ptr: isl_rs_result,
775                                       should_free_on_drop: true };
776        let err = isl_rs_ctx.last_error();
777        if err != Error::None_ {
778            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
779        }
780        Ok(isl_rs_result)
781    }
782
783    /// Wraps `isl_union_map_empty_ctx`.
784    pub fn empty_ctx(ctx: &Context) -> Result<UnionMap, LibISLError> {
785        let isl_rs_ctx = Context { ptr: ctx.ptr,
786                                   should_free_on_drop: false };
787        let ctx = ctx.ptr;
788        let isl_rs_result = unsafe { isl_union_map_empty_ctx(ctx) };
789        let isl_rs_result = UnionMap { ptr: isl_rs_result,
790                                       should_free_on_drop: true };
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_union_map_empty_space`.
799    pub fn empty_space(space: Space) -> Result<UnionMap, LibISLError> {
800        let isl_rs_ctx = space.get_ctx();
801        let mut space = space;
802        space.do_not_free_on_drop();
803        let space = space.ptr;
804        let isl_rs_result = unsafe { isl_union_map_empty_space(space) };
805        let isl_rs_result = UnionMap { ptr: isl_rs_result,
806                                       should_free_on_drop: true };
807        let err = isl_rs_ctx.last_error();
808        if err != Error::None_ {
809            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
810        }
811        Ok(isl_rs_result)
812    }
813
814    /// Wraps `isl_union_map_eq_at_multi_union_pw_aff`.
815    pub fn eq_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff) -> Result<UnionMap, LibISLError> {
816        let umap = self;
817        let isl_rs_ctx = umap.get_ctx();
818        let mut umap = umap;
819        umap.do_not_free_on_drop();
820        let umap = umap.ptr;
821        let mut mupa = mupa;
822        mupa.do_not_free_on_drop();
823        let mupa = mupa.ptr;
824        let isl_rs_result = unsafe { isl_union_map_eq_at_multi_union_pw_aff(umap, mupa) };
825        let isl_rs_result = UnionMap { 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_union_map_extract_map`.
835    pub fn extract_map(&self, space: Space) -> Result<Map, LibISLError> {
836        let umap = self;
837        let isl_rs_ctx = umap.get_ctx();
838        let umap = umap.ptr;
839        let mut space = space;
840        space.do_not_free_on_drop();
841        let space = space.ptr;
842        let isl_rs_result = unsafe { isl_union_map_extract_map(umap, space) };
843        let isl_rs_result = Map { ptr: isl_rs_result,
844                                  should_free_on_drop: true };
845        let err = isl_rs_ctx.last_error();
846        if err != Error::None_ {
847            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
848        }
849        Ok(isl_rs_result)
850    }
851
852    /// Wraps `isl_union_map_factor_domain`.
853    pub fn factor_domain(self) -> Result<UnionMap, LibISLError> {
854        let umap = self;
855        let isl_rs_ctx = umap.get_ctx();
856        let mut umap = umap;
857        umap.do_not_free_on_drop();
858        let umap = umap.ptr;
859        let isl_rs_result = unsafe { isl_union_map_factor_domain(umap) };
860        let isl_rs_result = UnionMap { ptr: isl_rs_result,
861                                       should_free_on_drop: true };
862        let err = isl_rs_ctx.last_error();
863        if err != Error::None_ {
864            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
865        }
866        Ok(isl_rs_result)
867    }
868
869    /// Wraps `isl_union_map_factor_range`.
870    pub fn factor_range(self) -> Result<UnionMap, LibISLError> {
871        let umap = self;
872        let isl_rs_ctx = umap.get_ctx();
873        let mut umap = umap;
874        umap.do_not_free_on_drop();
875        let umap = umap.ptr;
876        let isl_rs_result = unsafe { isl_union_map_factor_range(umap) };
877        let isl_rs_result = UnionMap { ptr: isl_rs_result,
878                                       should_free_on_drop: true };
879        let err = isl_rs_ctx.last_error();
880        if err != Error::None_ {
881            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
882        }
883        Ok(isl_rs_result)
884    }
885
886    /// Wraps `isl_union_map_find_dim_by_name`.
887    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
888        let umap = self;
889        let isl_rs_ctx = umap.get_ctx();
890        let umap = umap.ptr;
891        let type_ = type_.to_i32();
892        let name = CString::new(name).unwrap();
893        let name = name.as_ptr();
894        let isl_rs_result = unsafe { isl_union_map_find_dim_by_name(umap, type_, name) };
895        let err = isl_rs_ctx.last_error();
896        if err != Error::None_ {
897            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
898        }
899        Ok(isl_rs_result)
900    }
901
902    /// Wraps `isl_union_map_fixed_power_val`.
903    pub fn fixed_power_val(self, exp: Val) -> Result<UnionMap, LibISLError> {
904        let umap = self;
905        let isl_rs_ctx = umap.get_ctx();
906        let mut umap = umap;
907        umap.do_not_free_on_drop();
908        let umap = umap.ptr;
909        let mut exp = exp;
910        exp.do_not_free_on_drop();
911        let exp = exp.ptr;
912        let isl_rs_result = unsafe { isl_union_map_fixed_power_val(umap, exp) };
913        let isl_rs_result = UnionMap { ptr: isl_rs_result,
914                                       should_free_on_drop: true };
915        let err = isl_rs_ctx.last_error();
916        if err != Error::None_ {
917            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
918        }
919        Ok(isl_rs_result)
920    }
921
922    /// Wraps `isl_union_map_flat_domain_product`.
923    pub fn flat_domain_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
924        let umap1 = self;
925        let isl_rs_ctx = umap1.get_ctx();
926        let mut umap1 = umap1;
927        umap1.do_not_free_on_drop();
928        let umap1 = umap1.ptr;
929        let mut umap2 = umap2;
930        umap2.do_not_free_on_drop();
931        let umap2 = umap2.ptr;
932        let isl_rs_result = unsafe { isl_union_map_flat_domain_product(umap1, umap2) };
933        let isl_rs_result = UnionMap { 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_union_map_flat_range_product`.
943    pub fn flat_range_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
944        let umap1 = self;
945        let isl_rs_ctx = umap1.get_ctx();
946        let mut umap1 = umap1;
947        umap1.do_not_free_on_drop();
948        let umap1 = umap1.ptr;
949        let mut umap2 = umap2;
950        umap2.do_not_free_on_drop();
951        let umap2 = umap2.ptr;
952        let isl_rs_result = unsafe { isl_union_map_flat_range_product(umap1, umap2) };
953        let isl_rs_result = UnionMap { ptr: isl_rs_result,
954                                       should_free_on_drop: true };
955        let err = isl_rs_ctx.last_error();
956        if err != Error::None_ {
957            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
958        }
959        Ok(isl_rs_result)
960    }
961
962    /// Wraps `isl_union_map_free`.
963    pub fn free(self) -> Result<UnionMap, LibISLError> {
964        let umap = self;
965        let isl_rs_ctx = umap.get_ctx();
966        let mut umap = umap;
967        umap.do_not_free_on_drop();
968        let umap = umap.ptr;
969        let isl_rs_result = unsafe { isl_union_map_free(umap) };
970        let isl_rs_result = UnionMap { ptr: isl_rs_result,
971                                       should_free_on_drop: true };
972        let err = isl_rs_ctx.last_error();
973        if err != Error::None_ {
974            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
975        }
976        Ok(isl_rs_result)
977    }
978
979    /// Wraps `isl_union_map_from_basic_map`.
980    pub fn from_basic_map(bmap: BasicMap) -> Result<UnionMap, LibISLError> {
981        let isl_rs_ctx = bmap.get_ctx();
982        let mut bmap = bmap;
983        bmap.do_not_free_on_drop();
984        let bmap = bmap.ptr;
985        let isl_rs_result = unsafe { isl_union_map_from_basic_map(bmap) };
986        let isl_rs_result = UnionMap { ptr: isl_rs_result,
987                                       should_free_on_drop: true };
988        let err = isl_rs_ctx.last_error();
989        if err != Error::None_ {
990            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
991        }
992        Ok(isl_rs_result)
993    }
994
995    /// Wraps `isl_union_map_from_domain`.
996    pub fn from_domain(uset: UnionSet) -> Result<UnionMap, LibISLError> {
997        let isl_rs_ctx = uset.get_ctx();
998        let mut uset = uset;
999        uset.do_not_free_on_drop();
1000        let uset = uset.ptr;
1001        let isl_rs_result = unsafe { isl_union_map_from_domain(uset) };
1002        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1003                                       should_free_on_drop: true };
1004        let err = isl_rs_ctx.last_error();
1005        if err != Error::None_ {
1006            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1007        }
1008        Ok(isl_rs_result)
1009    }
1010
1011    /// Wraps `isl_union_map_from_domain_and_range`.
1012    pub fn from_domain_and_range(domain: UnionSet, range: UnionSet)
1013                                 -> Result<UnionMap, LibISLError> {
1014        let isl_rs_ctx = domain.get_ctx();
1015        let mut domain = domain;
1016        domain.do_not_free_on_drop();
1017        let domain = domain.ptr;
1018        let mut range = range;
1019        range.do_not_free_on_drop();
1020        let range = range.ptr;
1021        let isl_rs_result = unsafe { isl_union_map_from_domain_and_range(domain, range) };
1022        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1023                                       should_free_on_drop: true };
1024        let err = isl_rs_ctx.last_error();
1025        if err != Error::None_ {
1026            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1027        }
1028        Ok(isl_rs_result)
1029    }
1030
1031    /// Wraps `isl_union_map_from_map`.
1032    pub fn from_map(map: Map) -> Result<UnionMap, LibISLError> {
1033        let isl_rs_ctx = map.get_ctx();
1034        let mut map = map;
1035        map.do_not_free_on_drop();
1036        let map = map.ptr;
1037        let isl_rs_result = unsafe { isl_union_map_from_map(map) };
1038        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1039                                       should_free_on_drop: true };
1040        let err = isl_rs_ctx.last_error();
1041        if err != Error::None_ {
1042            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1043        }
1044        Ok(isl_rs_result)
1045    }
1046
1047    /// Wraps `isl_union_map_from_multi_union_pw_aff`.
1048    pub fn from_multi_union_pw_aff(mupa: MultiUnionPwAff) -> Result<UnionMap, LibISLError> {
1049        let isl_rs_ctx = mupa.get_ctx();
1050        let mut mupa = mupa;
1051        mupa.do_not_free_on_drop();
1052        let mupa = mupa.ptr;
1053        let isl_rs_result = unsafe { isl_union_map_from_multi_union_pw_aff(mupa) };
1054        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1055                                       should_free_on_drop: true };
1056        let err = isl_rs_ctx.last_error();
1057        if err != Error::None_ {
1058            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1059        }
1060        Ok(isl_rs_result)
1061    }
1062
1063    /// Wraps `isl_union_map_from_range`.
1064    pub fn from_range(uset: UnionSet) -> Result<UnionMap, LibISLError> {
1065        let isl_rs_ctx = uset.get_ctx();
1066        let mut uset = uset;
1067        uset.do_not_free_on_drop();
1068        let uset = uset.ptr;
1069        let isl_rs_result = unsafe { isl_union_map_from_range(uset) };
1070        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1071                                       should_free_on_drop: true };
1072        let err = isl_rs_ctx.last_error();
1073        if err != Error::None_ {
1074            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1075        }
1076        Ok(isl_rs_result)
1077    }
1078
1079    /// Wraps `isl_union_map_from_union_pw_aff`.
1080    pub fn from_union_pw_aff(upa: UnionPwAff) -> Result<UnionMap, LibISLError> {
1081        let isl_rs_ctx = upa.get_ctx();
1082        let mut upa = upa;
1083        upa.do_not_free_on_drop();
1084        let upa = upa.ptr;
1085        let isl_rs_result = unsafe { isl_union_map_from_union_pw_aff(upa) };
1086        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1087                                       should_free_on_drop: true };
1088        let err = isl_rs_ctx.last_error();
1089        if err != Error::None_ {
1090            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1091        }
1092        Ok(isl_rs_result)
1093    }
1094
1095    /// Wraps `isl_union_map_from_union_pw_multi_aff`.
1096    pub fn from_union_pw_multi_aff(upma: UnionPwMultiAff) -> Result<UnionMap, LibISLError> {
1097        let isl_rs_ctx = upma.get_ctx();
1098        let mut upma = upma;
1099        upma.do_not_free_on_drop();
1100        let upma = upma.ptr;
1101        let isl_rs_result = unsafe { isl_union_map_from_union_pw_multi_aff(upma) };
1102        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1103                                       should_free_on_drop: true };
1104        let err = isl_rs_ctx.last_error();
1105        if err != Error::None_ {
1106            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1107        }
1108        Ok(isl_rs_result)
1109    }
1110
1111    /// Wraps `isl_union_map_get_ctx`.
1112    pub fn get_ctx(&self) -> Context {
1113        let umap = self;
1114        let umap = umap.ptr;
1115        let isl_rs_result = unsafe { isl_union_map_get_ctx(umap) };
1116        let isl_rs_result = Context { ptr: isl_rs_result,
1117                                      should_free_on_drop: false };
1118        isl_rs_result
1119    }
1120
1121    /// Wraps `isl_union_map_get_dim_id`.
1122    pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
1123        let umap = self;
1124        let isl_rs_ctx = umap.get_ctx();
1125        let umap = umap.ptr;
1126        let type_ = type_.to_i32();
1127        let isl_rs_result = unsafe { isl_union_map_get_dim_id(umap, type_, pos) };
1128        let isl_rs_result = Id { ptr: isl_rs_result,
1129                                 should_free_on_drop: true };
1130        let err = isl_rs_ctx.last_error();
1131        if err != Error::None_ {
1132            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1133        }
1134        Ok(isl_rs_result)
1135    }
1136
1137    /// Wraps `isl_union_map_get_hash`.
1138    pub fn get_hash(&self) -> Result<u32, LibISLError> {
1139        let umap = self;
1140        let isl_rs_ctx = umap.get_ctx();
1141        let umap = umap.ptr;
1142        let isl_rs_result = unsafe { isl_union_map_get_hash(umap) };
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_union_map_get_map_list`.
1151    pub fn get_map_list(&self) -> Result<MapList, LibISLError> {
1152        let umap = self;
1153        let isl_rs_ctx = umap.get_ctx();
1154        let umap = umap.ptr;
1155        let isl_rs_result = unsafe { isl_union_map_get_map_list(umap) };
1156        let isl_rs_result = MapList { ptr: isl_rs_result,
1157                                      should_free_on_drop: true };
1158        let err = isl_rs_ctx.last_error();
1159        if err != Error::None_ {
1160            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1161        }
1162        Ok(isl_rs_result)
1163    }
1164
1165    /// Wraps `isl_union_map_get_space`.
1166    pub fn get_space(&self) -> Result<Space, LibISLError> {
1167        let umap = self;
1168        let isl_rs_ctx = umap.get_ctx();
1169        let umap = umap.ptr;
1170        let isl_rs_result = unsafe { isl_union_map_get_space(umap) };
1171        let isl_rs_result = Space { ptr: isl_rs_result,
1172                                    should_free_on_drop: true };
1173        let err = isl_rs_ctx.last_error();
1174        if err != Error::None_ {
1175            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1176        }
1177        Ok(isl_rs_result)
1178    }
1179
1180    /// Wraps `isl_union_map_gist`.
1181    pub fn gist(self, context: UnionMap) -> Result<UnionMap, LibISLError> {
1182        let umap = self;
1183        let isl_rs_ctx = umap.get_ctx();
1184        let mut umap = umap;
1185        umap.do_not_free_on_drop();
1186        let umap = umap.ptr;
1187        let mut context = context;
1188        context.do_not_free_on_drop();
1189        let context = context.ptr;
1190        let isl_rs_result = unsafe { isl_union_map_gist(umap, context) };
1191        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1192                                       should_free_on_drop: true };
1193        let err = isl_rs_ctx.last_error();
1194        if err != Error::None_ {
1195            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1196        }
1197        Ok(isl_rs_result)
1198    }
1199
1200    /// Wraps `isl_union_map_gist_domain`.
1201    pub fn gist_domain(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1202        let umap = self;
1203        let isl_rs_ctx = umap.get_ctx();
1204        let mut umap = umap;
1205        umap.do_not_free_on_drop();
1206        let umap = umap.ptr;
1207        let mut uset = uset;
1208        uset.do_not_free_on_drop();
1209        let uset = uset.ptr;
1210        let isl_rs_result = unsafe { isl_union_map_gist_domain(umap, uset) };
1211        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1212                                       should_free_on_drop: true };
1213        let err = isl_rs_ctx.last_error();
1214        if err != Error::None_ {
1215            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1216        }
1217        Ok(isl_rs_result)
1218    }
1219
1220    /// Wraps `isl_union_map_gist_params`.
1221    pub fn gist_params(self, set: Set) -> Result<UnionMap, LibISLError> {
1222        let umap = self;
1223        let isl_rs_ctx = umap.get_ctx();
1224        let mut umap = umap;
1225        umap.do_not_free_on_drop();
1226        let umap = umap.ptr;
1227        let mut set = set;
1228        set.do_not_free_on_drop();
1229        let set = set.ptr;
1230        let isl_rs_result = unsafe { isl_union_map_gist_params(umap, set) };
1231        let isl_rs_result = UnionMap { 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_map_gist_range`.
1241    pub fn gist_range(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1242        let umap = self;
1243        let isl_rs_ctx = umap.get_ctx();
1244        let mut umap = umap;
1245        umap.do_not_free_on_drop();
1246        let umap = umap.ptr;
1247        let mut uset = uset;
1248        uset.do_not_free_on_drop();
1249        let uset = uset.ptr;
1250        let isl_rs_result = unsafe { isl_union_map_gist_range(umap, uset) };
1251        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1252                                       should_free_on_drop: true };
1253        let err = isl_rs_ctx.last_error();
1254        if err != Error::None_ {
1255            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1256        }
1257        Ok(isl_rs_result)
1258    }
1259
1260    /// Wraps `isl_union_map_intersect`.
1261    pub fn intersect(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1262        let umap1 = self;
1263        let isl_rs_ctx = umap1.get_ctx();
1264        let mut umap1 = umap1;
1265        umap1.do_not_free_on_drop();
1266        let umap1 = umap1.ptr;
1267        let mut umap2 = umap2;
1268        umap2.do_not_free_on_drop();
1269        let umap2 = umap2.ptr;
1270        let isl_rs_result = unsafe { isl_union_map_intersect(umap1, umap2) };
1271        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1272                                       should_free_on_drop: true };
1273        let err = isl_rs_ctx.last_error();
1274        if err != Error::None_ {
1275            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1276        }
1277        Ok(isl_rs_result)
1278    }
1279
1280    /// Wraps `isl_union_map_intersect_domain`.
1281    pub fn intersect_domain(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1282        let umap = self;
1283        let isl_rs_ctx = umap.get_ctx();
1284        let mut umap = umap;
1285        umap.do_not_free_on_drop();
1286        let umap = umap.ptr;
1287        let mut uset = uset;
1288        uset.do_not_free_on_drop();
1289        let uset = uset.ptr;
1290        let isl_rs_result = unsafe { isl_union_map_intersect_domain(umap, uset) };
1291        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1292                                       should_free_on_drop: true };
1293        let err = isl_rs_ctx.last_error();
1294        if err != Error::None_ {
1295            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1296        }
1297        Ok(isl_rs_result)
1298    }
1299
1300    /// Wraps `isl_union_map_intersect_domain_factor_domain`.
1301    pub fn intersect_domain_factor_domain(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1302        let umap = self;
1303        let isl_rs_ctx = umap.get_ctx();
1304        let mut umap = umap;
1305        umap.do_not_free_on_drop();
1306        let umap = umap.ptr;
1307        let mut factor = factor;
1308        factor.do_not_free_on_drop();
1309        let factor = factor.ptr;
1310        let isl_rs_result = unsafe { isl_union_map_intersect_domain_factor_domain(umap, factor) };
1311        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1312                                       should_free_on_drop: true };
1313        let err = isl_rs_ctx.last_error();
1314        if err != Error::None_ {
1315            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1316        }
1317        Ok(isl_rs_result)
1318    }
1319
1320    /// Wraps `isl_union_map_intersect_domain_factor_range`.
1321    pub fn intersect_domain_factor_range(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1322        let umap = self;
1323        let isl_rs_ctx = umap.get_ctx();
1324        let mut umap = umap;
1325        umap.do_not_free_on_drop();
1326        let umap = umap.ptr;
1327        let mut factor = factor;
1328        factor.do_not_free_on_drop();
1329        let factor = factor.ptr;
1330        let isl_rs_result = unsafe { isl_union_map_intersect_domain_factor_range(umap, factor) };
1331        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1332                                       should_free_on_drop: true };
1333        let err = isl_rs_ctx.last_error();
1334        if err != Error::None_ {
1335            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1336        }
1337        Ok(isl_rs_result)
1338    }
1339
1340    /// Wraps `isl_union_map_intersect_domain_space`.
1341    pub fn intersect_domain_space(self, space: Space) -> Result<UnionMap, LibISLError> {
1342        let umap = self;
1343        let isl_rs_ctx = umap.get_ctx();
1344        let mut umap = umap;
1345        umap.do_not_free_on_drop();
1346        let umap = umap.ptr;
1347        let mut space = space;
1348        space.do_not_free_on_drop();
1349        let space = space.ptr;
1350        let isl_rs_result = unsafe { isl_union_map_intersect_domain_space(umap, space) };
1351        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1352                                       should_free_on_drop: true };
1353        let err = isl_rs_ctx.last_error();
1354        if err != Error::None_ {
1355            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1356        }
1357        Ok(isl_rs_result)
1358    }
1359
1360    /// Wraps `isl_union_map_intersect_domain_union_set`.
1361    pub fn intersect_domain_union_set(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1362        let umap = self;
1363        let isl_rs_ctx = umap.get_ctx();
1364        let mut umap = umap;
1365        umap.do_not_free_on_drop();
1366        let umap = umap.ptr;
1367        let mut uset = uset;
1368        uset.do_not_free_on_drop();
1369        let uset = uset.ptr;
1370        let isl_rs_result = unsafe { isl_union_map_intersect_domain_union_set(umap, uset) };
1371        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1372                                       should_free_on_drop: true };
1373        let err = isl_rs_ctx.last_error();
1374        if err != Error::None_ {
1375            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1376        }
1377        Ok(isl_rs_result)
1378    }
1379
1380    /// Wraps `isl_union_map_intersect_domain_wrapped_domain_union_set`.
1381    pub fn intersect_domain_wrapped_domain_union_set(self, domain: UnionSet)
1382                                                     -> Result<UnionMap, LibISLError> {
1383        let umap = self;
1384        let isl_rs_ctx = umap.get_ctx();
1385        let mut umap = umap;
1386        umap.do_not_free_on_drop();
1387        let umap = umap.ptr;
1388        let mut domain = domain;
1389        domain.do_not_free_on_drop();
1390        let domain = domain.ptr;
1391        let isl_rs_result =
1392            unsafe { isl_union_map_intersect_domain_wrapped_domain_union_set(umap, domain) };
1393        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1394                                       should_free_on_drop: true };
1395        let err = isl_rs_ctx.last_error();
1396        if err != Error::None_ {
1397            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1398        }
1399        Ok(isl_rs_result)
1400    }
1401
1402    /// Wraps `isl_union_map_intersect_params`.
1403    pub fn intersect_params(self, set: Set) -> Result<UnionMap, LibISLError> {
1404        let umap = self;
1405        let isl_rs_ctx = umap.get_ctx();
1406        let mut umap = umap;
1407        umap.do_not_free_on_drop();
1408        let umap = umap.ptr;
1409        let mut set = set;
1410        set.do_not_free_on_drop();
1411        let set = set.ptr;
1412        let isl_rs_result = unsafe { isl_union_map_intersect_params(umap, set) };
1413        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1414                                       should_free_on_drop: true };
1415        let err = isl_rs_ctx.last_error();
1416        if err != Error::None_ {
1417            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1418        }
1419        Ok(isl_rs_result)
1420    }
1421
1422    /// Wraps `isl_union_map_intersect_range`.
1423    pub fn intersect_range(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1424        let umap = self;
1425        let isl_rs_ctx = umap.get_ctx();
1426        let mut umap = umap;
1427        umap.do_not_free_on_drop();
1428        let umap = umap.ptr;
1429        let mut uset = uset;
1430        uset.do_not_free_on_drop();
1431        let uset = uset.ptr;
1432        let isl_rs_result = unsafe { isl_union_map_intersect_range(umap, uset) };
1433        let isl_rs_result = UnionMap { 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_union_map_intersect_range_factor_domain`.
1443    pub fn intersect_range_factor_domain(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1444        let umap = self;
1445        let isl_rs_ctx = umap.get_ctx();
1446        let mut umap = umap;
1447        umap.do_not_free_on_drop();
1448        let umap = umap.ptr;
1449        let mut factor = factor;
1450        factor.do_not_free_on_drop();
1451        let factor = factor.ptr;
1452        let isl_rs_result = unsafe { isl_union_map_intersect_range_factor_domain(umap, factor) };
1453        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1454                                       should_free_on_drop: true };
1455        let err = isl_rs_ctx.last_error();
1456        if err != Error::None_ {
1457            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1458        }
1459        Ok(isl_rs_result)
1460    }
1461
1462    /// Wraps `isl_union_map_intersect_range_factor_range`.
1463    pub fn intersect_range_factor_range(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1464        let umap = self;
1465        let isl_rs_ctx = umap.get_ctx();
1466        let mut umap = umap;
1467        umap.do_not_free_on_drop();
1468        let umap = umap.ptr;
1469        let mut factor = factor;
1470        factor.do_not_free_on_drop();
1471        let factor = factor.ptr;
1472        let isl_rs_result = unsafe { isl_union_map_intersect_range_factor_range(umap, factor) };
1473        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1474                                       should_free_on_drop: true };
1475        let err = isl_rs_ctx.last_error();
1476        if err != Error::None_ {
1477            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1478        }
1479        Ok(isl_rs_result)
1480    }
1481
1482    /// Wraps `isl_union_map_intersect_range_space`.
1483    pub fn intersect_range_space(self, space: Space) -> Result<UnionMap, LibISLError> {
1484        let umap = self;
1485        let isl_rs_ctx = umap.get_ctx();
1486        let mut umap = umap;
1487        umap.do_not_free_on_drop();
1488        let umap = umap.ptr;
1489        let mut space = space;
1490        space.do_not_free_on_drop();
1491        let space = space.ptr;
1492        let isl_rs_result = unsafe { isl_union_map_intersect_range_space(umap, space) };
1493        let isl_rs_result = UnionMap { 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_union_map_intersect_range_union_set`.
1503    pub fn intersect_range_union_set(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1504        let umap = self;
1505        let isl_rs_ctx = umap.get_ctx();
1506        let mut umap = umap;
1507        umap.do_not_free_on_drop();
1508        let umap = umap.ptr;
1509        let mut uset = uset;
1510        uset.do_not_free_on_drop();
1511        let uset = uset.ptr;
1512        let isl_rs_result = unsafe { isl_union_map_intersect_range_union_set(umap, uset) };
1513        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1514                                       should_free_on_drop: true };
1515        let err = isl_rs_ctx.last_error();
1516        if err != Error::None_ {
1517            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1518        }
1519        Ok(isl_rs_result)
1520    }
1521
1522    /// Wraps `isl_union_map_intersect_range_wrapped_domain_union_set`.
1523    pub fn intersect_range_wrapped_domain_union_set(self, domain: UnionSet)
1524                                                    -> Result<UnionMap, LibISLError> {
1525        let umap = self;
1526        let isl_rs_ctx = umap.get_ctx();
1527        let mut umap = umap;
1528        umap.do_not_free_on_drop();
1529        let umap = umap.ptr;
1530        let mut domain = domain;
1531        domain.do_not_free_on_drop();
1532        let domain = domain.ptr;
1533        let isl_rs_result =
1534            unsafe { isl_union_map_intersect_range_wrapped_domain_union_set(umap, domain) };
1535        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1536                                       should_free_on_drop: true };
1537        let err = isl_rs_ctx.last_error();
1538        if err != Error::None_ {
1539            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1540        }
1541        Ok(isl_rs_result)
1542    }
1543
1544    /// Wraps `isl_union_map_involves_dims`.
1545    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1546        let umap = self;
1547        let isl_rs_ctx = umap.get_ctx();
1548        let umap = umap.ptr;
1549        let type_ = type_.to_i32();
1550        let isl_rs_result = unsafe { isl_union_map_involves_dims(umap, type_, first, n) };
1551        let isl_rs_result = match isl_rs_result {
1552            0 => false,
1553            1 => true,
1554            _ => panic!("Got isl_bool = -1"),
1555        };
1556        let err = isl_rs_ctx.last_error();
1557        if err != Error::None_ {
1558            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1559        }
1560        Ok(isl_rs_result)
1561    }
1562
1563    /// Wraps `isl_union_map_is_bijective`.
1564    pub fn is_bijective(&self) -> Result<bool, LibISLError> {
1565        let umap = self;
1566        let isl_rs_ctx = umap.get_ctx();
1567        let umap = umap.ptr;
1568        let isl_rs_result = unsafe { isl_union_map_is_bijective(umap) };
1569        let isl_rs_result = match isl_rs_result {
1570            0 => false,
1571            1 => true,
1572            _ => panic!("Got isl_bool = -1"),
1573        };
1574        let err = isl_rs_ctx.last_error();
1575        if err != Error::None_ {
1576            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1577        }
1578        Ok(isl_rs_result)
1579    }
1580
1581    /// Wraps `isl_union_map_is_disjoint`.
1582    pub fn is_disjoint(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1583        let umap1 = self;
1584        let isl_rs_ctx = umap1.get_ctx();
1585        let umap1 = umap1.ptr;
1586        let umap2 = umap2.ptr;
1587        let isl_rs_result = unsafe { isl_union_map_is_disjoint(umap1, umap2) };
1588        let isl_rs_result = match isl_rs_result {
1589            0 => false,
1590            1 => true,
1591            _ => panic!("Got isl_bool = -1"),
1592        };
1593        let err = isl_rs_ctx.last_error();
1594        if err != Error::None_ {
1595            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1596        }
1597        Ok(isl_rs_result)
1598    }
1599
1600    /// Wraps `isl_union_map_is_empty`.
1601    pub fn is_empty(&self) -> Result<bool, LibISLError> {
1602        let umap = self;
1603        let isl_rs_ctx = umap.get_ctx();
1604        let umap = umap.ptr;
1605        let isl_rs_result = unsafe { isl_union_map_is_empty(umap) };
1606        let isl_rs_result = match isl_rs_result {
1607            0 => false,
1608            1 => true,
1609            _ => panic!("Got isl_bool = -1"),
1610        };
1611        let err = isl_rs_ctx.last_error();
1612        if err != Error::None_ {
1613            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1614        }
1615        Ok(isl_rs_result)
1616    }
1617
1618    /// Wraps `isl_union_map_is_equal`.
1619    pub fn is_equal(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1620        let umap1 = self;
1621        let isl_rs_ctx = umap1.get_ctx();
1622        let umap1 = umap1.ptr;
1623        let umap2 = umap2.ptr;
1624        let isl_rs_result = unsafe { isl_union_map_is_equal(umap1, umap2) };
1625        let isl_rs_result = match isl_rs_result {
1626            0 => false,
1627            1 => true,
1628            _ => panic!("Got isl_bool = -1"),
1629        };
1630        let err = isl_rs_ctx.last_error();
1631        if err != Error::None_ {
1632            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1633        }
1634        Ok(isl_rs_result)
1635    }
1636
1637    /// Wraps `isl_union_map_is_identity`.
1638    pub fn is_identity(&self) -> Result<bool, LibISLError> {
1639        let umap = self;
1640        let isl_rs_ctx = umap.get_ctx();
1641        let umap = umap.ptr;
1642        let isl_rs_result = unsafe { isl_union_map_is_identity(umap) };
1643        let isl_rs_result = match isl_rs_result {
1644            0 => false,
1645            1 => true,
1646            _ => panic!("Got isl_bool = -1"),
1647        };
1648        let err = isl_rs_ctx.last_error();
1649        if err != Error::None_ {
1650            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1651        }
1652        Ok(isl_rs_result)
1653    }
1654
1655    /// Wraps `isl_union_map_is_injective`.
1656    pub fn is_injective(&self) -> Result<bool, LibISLError> {
1657        let umap = self;
1658        let isl_rs_ctx = umap.get_ctx();
1659        let umap = umap.ptr;
1660        let isl_rs_result = unsafe { isl_union_map_is_injective(umap) };
1661        let isl_rs_result = match isl_rs_result {
1662            0 => false,
1663            1 => true,
1664            _ => panic!("Got isl_bool = -1"),
1665        };
1666        let err = isl_rs_ctx.last_error();
1667        if err != Error::None_ {
1668            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1669        }
1670        Ok(isl_rs_result)
1671    }
1672
1673    /// Wraps `isl_union_map_is_single_valued`.
1674    pub fn is_single_valued(&self) -> Result<bool, LibISLError> {
1675        let umap = self;
1676        let isl_rs_ctx = umap.get_ctx();
1677        let umap = umap.ptr;
1678        let isl_rs_result = unsafe { isl_union_map_is_single_valued(umap) };
1679        let isl_rs_result = match isl_rs_result {
1680            0 => false,
1681            1 => true,
1682            _ => panic!("Got isl_bool = -1"),
1683        };
1684        let err = isl_rs_ctx.last_error();
1685        if err != Error::None_ {
1686            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1687        }
1688        Ok(isl_rs_result)
1689    }
1690
1691    /// Wraps `isl_union_map_is_strict_subset`.
1692    pub fn is_strict_subset(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1693        let umap1 = self;
1694        let isl_rs_ctx = umap1.get_ctx();
1695        let umap1 = umap1.ptr;
1696        let umap2 = umap2.ptr;
1697        let isl_rs_result = unsafe { isl_union_map_is_strict_subset(umap1, umap2) };
1698        let isl_rs_result = match isl_rs_result {
1699            0 => false,
1700            1 => true,
1701            _ => panic!("Got isl_bool = -1"),
1702        };
1703        let err = isl_rs_ctx.last_error();
1704        if err != Error::None_ {
1705            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1706        }
1707        Ok(isl_rs_result)
1708    }
1709
1710    /// Wraps `isl_union_map_is_subset`.
1711    pub fn is_subset(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1712        let umap1 = self;
1713        let isl_rs_ctx = umap1.get_ctx();
1714        let umap1 = umap1.ptr;
1715        let umap2 = umap2.ptr;
1716        let isl_rs_result = unsafe { isl_union_map_is_subset(umap1, umap2) };
1717        let isl_rs_result = match isl_rs_result {
1718            0 => false,
1719            1 => true,
1720            _ => panic!("Got isl_bool = -1"),
1721        };
1722        let err = isl_rs_ctx.last_error();
1723        if err != Error::None_ {
1724            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1725        }
1726        Ok(isl_rs_result)
1727    }
1728
1729    /// Wraps `isl_union_map_isa_map`.
1730    pub fn isa_map(&self) -> Result<bool, LibISLError> {
1731        let umap = self;
1732        let isl_rs_ctx = umap.get_ctx();
1733        let umap = umap.ptr;
1734        let isl_rs_result = unsafe { isl_union_map_isa_map(umap) };
1735        let isl_rs_result = match isl_rs_result {
1736            0 => false,
1737            1 => true,
1738            _ => panic!("Got isl_bool = -1"),
1739        };
1740        let err = isl_rs_ctx.last_error();
1741        if err != Error::None_ {
1742            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1743        }
1744        Ok(isl_rs_result)
1745    }
1746
1747    /// Wraps `isl_union_map_lex_ge_at_multi_union_pw_aff`.
1748    pub fn lex_ge_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1749                                        -> Result<UnionMap, LibISLError> {
1750        let umap = self;
1751        let isl_rs_ctx = umap.get_ctx();
1752        let mut umap = umap;
1753        umap.do_not_free_on_drop();
1754        let umap = umap.ptr;
1755        let mut mupa = mupa;
1756        mupa.do_not_free_on_drop();
1757        let mupa = mupa.ptr;
1758        let isl_rs_result = unsafe { isl_union_map_lex_ge_at_multi_union_pw_aff(umap, mupa) };
1759        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1760                                       should_free_on_drop: true };
1761        let err = isl_rs_ctx.last_error();
1762        if err != Error::None_ {
1763            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1764        }
1765        Ok(isl_rs_result)
1766    }
1767
1768    /// Wraps `isl_union_map_lex_ge_union_map`.
1769    pub fn lex_ge_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1770        let umap1 = self;
1771        let isl_rs_ctx = umap1.get_ctx();
1772        let mut umap1 = umap1;
1773        umap1.do_not_free_on_drop();
1774        let umap1 = umap1.ptr;
1775        let mut umap2 = umap2;
1776        umap2.do_not_free_on_drop();
1777        let umap2 = umap2.ptr;
1778        let isl_rs_result = unsafe { isl_union_map_lex_ge_union_map(umap1, umap2) };
1779        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1780                                       should_free_on_drop: true };
1781        let err = isl_rs_ctx.last_error();
1782        if err != Error::None_ {
1783            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1784        }
1785        Ok(isl_rs_result)
1786    }
1787
1788    /// Wraps `isl_union_map_lex_gt_at_multi_union_pw_aff`.
1789    pub fn lex_gt_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1790                                        -> Result<UnionMap, LibISLError> {
1791        let umap = self;
1792        let isl_rs_ctx = umap.get_ctx();
1793        let mut umap = umap;
1794        umap.do_not_free_on_drop();
1795        let umap = umap.ptr;
1796        let mut mupa = mupa;
1797        mupa.do_not_free_on_drop();
1798        let mupa = mupa.ptr;
1799        let isl_rs_result = unsafe { isl_union_map_lex_gt_at_multi_union_pw_aff(umap, mupa) };
1800        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1801                                       should_free_on_drop: true };
1802        let err = isl_rs_ctx.last_error();
1803        if err != Error::None_ {
1804            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1805        }
1806        Ok(isl_rs_result)
1807    }
1808
1809    /// Wraps `isl_union_map_lex_gt_union_map`.
1810    pub fn lex_gt_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1811        let umap1 = self;
1812        let isl_rs_ctx = umap1.get_ctx();
1813        let mut umap1 = umap1;
1814        umap1.do_not_free_on_drop();
1815        let umap1 = umap1.ptr;
1816        let mut umap2 = umap2;
1817        umap2.do_not_free_on_drop();
1818        let umap2 = umap2.ptr;
1819        let isl_rs_result = unsafe { isl_union_map_lex_gt_union_map(umap1, umap2) };
1820        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1821                                       should_free_on_drop: true };
1822        let err = isl_rs_ctx.last_error();
1823        if err != Error::None_ {
1824            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1825        }
1826        Ok(isl_rs_result)
1827    }
1828
1829    /// Wraps `isl_union_map_lex_le_at_multi_union_pw_aff`.
1830    pub fn lex_le_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1831                                        -> Result<UnionMap, LibISLError> {
1832        let umap = self;
1833        let isl_rs_ctx = umap.get_ctx();
1834        let mut umap = umap;
1835        umap.do_not_free_on_drop();
1836        let umap = umap.ptr;
1837        let mut mupa = mupa;
1838        mupa.do_not_free_on_drop();
1839        let mupa = mupa.ptr;
1840        let isl_rs_result = unsafe { isl_union_map_lex_le_at_multi_union_pw_aff(umap, mupa) };
1841        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1842                                       should_free_on_drop: true };
1843        let err = isl_rs_ctx.last_error();
1844        if err != Error::None_ {
1845            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1846        }
1847        Ok(isl_rs_result)
1848    }
1849
1850    /// Wraps `isl_union_map_lex_le_union_map`.
1851    pub fn lex_le_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1852        let umap1 = self;
1853        let isl_rs_ctx = umap1.get_ctx();
1854        let mut umap1 = umap1;
1855        umap1.do_not_free_on_drop();
1856        let umap1 = umap1.ptr;
1857        let mut umap2 = umap2;
1858        umap2.do_not_free_on_drop();
1859        let umap2 = umap2.ptr;
1860        let isl_rs_result = unsafe { isl_union_map_lex_le_union_map(umap1, umap2) };
1861        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1862                                       should_free_on_drop: true };
1863        let err = isl_rs_ctx.last_error();
1864        if err != Error::None_ {
1865            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1866        }
1867        Ok(isl_rs_result)
1868    }
1869
1870    /// Wraps `isl_union_map_lex_lt_at_multi_union_pw_aff`.
1871    pub fn lex_lt_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1872                                        -> Result<UnionMap, LibISLError> {
1873        let umap = self;
1874        let isl_rs_ctx = umap.get_ctx();
1875        let mut umap = umap;
1876        umap.do_not_free_on_drop();
1877        let umap = umap.ptr;
1878        let mut mupa = mupa;
1879        mupa.do_not_free_on_drop();
1880        let mupa = mupa.ptr;
1881        let isl_rs_result = unsafe { isl_union_map_lex_lt_at_multi_union_pw_aff(umap, mupa) };
1882        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1883                                       should_free_on_drop: true };
1884        let err = isl_rs_ctx.last_error();
1885        if err != Error::None_ {
1886            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1887        }
1888        Ok(isl_rs_result)
1889    }
1890
1891    /// Wraps `isl_union_map_lex_lt_union_map`.
1892    pub fn lex_lt_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1893        let umap1 = self;
1894        let isl_rs_ctx = umap1.get_ctx();
1895        let mut umap1 = umap1;
1896        umap1.do_not_free_on_drop();
1897        let umap1 = umap1.ptr;
1898        let mut umap2 = umap2;
1899        umap2.do_not_free_on_drop();
1900        let umap2 = umap2.ptr;
1901        let isl_rs_result = unsafe { isl_union_map_lex_lt_union_map(umap1, umap2) };
1902        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1903                                       should_free_on_drop: true };
1904        let err = isl_rs_ctx.last_error();
1905        if err != Error::None_ {
1906            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1907        }
1908        Ok(isl_rs_result)
1909    }
1910
1911    /// Wraps `isl_union_map_lexmax`.
1912    pub fn lexmax(self) -> Result<UnionMap, LibISLError> {
1913        let umap = self;
1914        let isl_rs_ctx = umap.get_ctx();
1915        let mut umap = umap;
1916        umap.do_not_free_on_drop();
1917        let umap = umap.ptr;
1918        let isl_rs_result = unsafe { isl_union_map_lexmax(umap) };
1919        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1920                                       should_free_on_drop: true };
1921        let err = isl_rs_ctx.last_error();
1922        if err != Error::None_ {
1923            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1924        }
1925        Ok(isl_rs_result)
1926    }
1927
1928    /// Wraps `isl_union_map_lexmin`.
1929    pub fn lexmin(self) -> Result<UnionMap, LibISLError> {
1930        let umap = self;
1931        let isl_rs_ctx = umap.get_ctx();
1932        let mut umap = umap;
1933        umap.do_not_free_on_drop();
1934        let umap = umap.ptr;
1935        let isl_rs_result = unsafe { isl_union_map_lexmin(umap) };
1936        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1937                                       should_free_on_drop: true };
1938        let err = isl_rs_ctx.last_error();
1939        if err != Error::None_ {
1940            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1941        }
1942        Ok(isl_rs_result)
1943    }
1944
1945    /// Wraps `isl_union_map_n_map`.
1946    pub fn n_map(&self) -> Result<i32, LibISLError> {
1947        let umap = self;
1948        let isl_rs_ctx = umap.get_ctx();
1949        let umap = umap.ptr;
1950        let isl_rs_result = unsafe { isl_union_map_n_map(umap) };
1951        let err = isl_rs_ctx.last_error();
1952        if err != Error::None_ {
1953            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1954        }
1955        Ok(isl_rs_result)
1956    }
1957
1958    /// Wraps `isl_union_map_params`.
1959    pub fn params(self) -> Result<Set, LibISLError> {
1960        let umap = self;
1961        let isl_rs_ctx = umap.get_ctx();
1962        let mut umap = umap;
1963        umap.do_not_free_on_drop();
1964        let umap = umap.ptr;
1965        let isl_rs_result = unsafe { isl_union_map_params(umap) };
1966        let isl_rs_result = Set { ptr: isl_rs_result,
1967                                  should_free_on_drop: true };
1968        let err = isl_rs_ctx.last_error();
1969        if err != Error::None_ {
1970            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1971        }
1972        Ok(isl_rs_result)
1973    }
1974
1975    /// Wraps `isl_union_map_plain_is_empty`.
1976    pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
1977        let umap = self;
1978        let isl_rs_ctx = umap.get_ctx();
1979        let umap = umap.ptr;
1980        let isl_rs_result = unsafe { isl_union_map_plain_is_empty(umap) };
1981        let isl_rs_result = match isl_rs_result {
1982            0 => false,
1983            1 => true,
1984            _ => panic!("Got isl_bool = -1"),
1985        };
1986        let err = isl_rs_ctx.last_error();
1987        if err != Error::None_ {
1988            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1989        }
1990        Ok(isl_rs_result)
1991    }
1992
1993    /// Wraps `isl_union_map_plain_is_injective`.
1994    pub fn plain_is_injective(&self) -> Result<bool, LibISLError> {
1995        let umap = self;
1996        let isl_rs_ctx = umap.get_ctx();
1997        let umap = umap.ptr;
1998        let isl_rs_result = unsafe { isl_union_map_plain_is_injective(umap) };
1999        let isl_rs_result = match isl_rs_result {
2000            0 => false,
2001            1 => true,
2002            _ => panic!("Got isl_bool = -1"),
2003        };
2004        let err = isl_rs_ctx.last_error();
2005        if err != Error::None_ {
2006            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2007        }
2008        Ok(isl_rs_result)
2009    }
2010
2011    /// Wraps `isl_union_map_plain_unshifted_simple_hull`.
2012    pub fn plain_unshifted_simple_hull(self) -> Result<UnionMap, LibISLError> {
2013        let umap = self;
2014        let isl_rs_ctx = umap.get_ctx();
2015        let mut umap = umap;
2016        umap.do_not_free_on_drop();
2017        let umap = umap.ptr;
2018        let isl_rs_result = unsafe { isl_union_map_plain_unshifted_simple_hull(umap) };
2019        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2020                                       should_free_on_drop: true };
2021        let err = isl_rs_ctx.last_error();
2022        if err != Error::None_ {
2023            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2024        }
2025        Ok(isl_rs_result)
2026    }
2027
2028    /// Wraps `isl_union_map_polyhedral_hull`.
2029    pub fn polyhedral_hull(self) -> Result<UnionMap, LibISLError> {
2030        let umap = self;
2031        let isl_rs_ctx = umap.get_ctx();
2032        let mut umap = umap;
2033        umap.do_not_free_on_drop();
2034        let umap = umap.ptr;
2035        let isl_rs_result = unsafe { isl_union_map_polyhedral_hull(umap) };
2036        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2037                                       should_free_on_drop: true };
2038        let err = isl_rs_ctx.last_error();
2039        if err != Error::None_ {
2040            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2041        }
2042        Ok(isl_rs_result)
2043    }
2044
2045    /// Wraps `isl_union_map_preimage_domain_multi_aff`.
2046    pub fn preimage_domain_multi_aff(self, ma: MultiAff) -> Result<UnionMap, LibISLError> {
2047        let umap = self;
2048        let isl_rs_ctx = umap.get_ctx();
2049        let mut umap = umap;
2050        umap.do_not_free_on_drop();
2051        let umap = umap.ptr;
2052        let mut ma = ma;
2053        ma.do_not_free_on_drop();
2054        let ma = ma.ptr;
2055        let isl_rs_result = unsafe { isl_union_map_preimage_domain_multi_aff(umap, ma) };
2056        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2057                                       should_free_on_drop: true };
2058        let err = isl_rs_ctx.last_error();
2059        if err != Error::None_ {
2060            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2061        }
2062        Ok(isl_rs_result)
2063    }
2064
2065    /// Wraps `isl_union_map_preimage_domain_multi_pw_aff`.
2066    pub fn preimage_domain_multi_pw_aff(self, mpa: MultiPwAff) -> Result<UnionMap, LibISLError> {
2067        let umap = self;
2068        let isl_rs_ctx = umap.get_ctx();
2069        let mut umap = umap;
2070        umap.do_not_free_on_drop();
2071        let umap = umap.ptr;
2072        let mut mpa = mpa;
2073        mpa.do_not_free_on_drop();
2074        let mpa = mpa.ptr;
2075        let isl_rs_result = unsafe { isl_union_map_preimage_domain_multi_pw_aff(umap, mpa) };
2076        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2077                                       should_free_on_drop: true };
2078        let err = isl_rs_ctx.last_error();
2079        if err != Error::None_ {
2080            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2081        }
2082        Ok(isl_rs_result)
2083    }
2084
2085    /// Wraps `isl_union_map_preimage_domain_pw_multi_aff`.
2086    pub fn preimage_domain_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionMap, LibISLError> {
2087        let umap = self;
2088        let isl_rs_ctx = umap.get_ctx();
2089        let mut umap = umap;
2090        umap.do_not_free_on_drop();
2091        let umap = umap.ptr;
2092        let mut pma = pma;
2093        pma.do_not_free_on_drop();
2094        let pma = pma.ptr;
2095        let isl_rs_result = unsafe { isl_union_map_preimage_domain_pw_multi_aff(umap, pma) };
2096        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2097                                       should_free_on_drop: true };
2098        let err = isl_rs_ctx.last_error();
2099        if err != Error::None_ {
2100            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2101        }
2102        Ok(isl_rs_result)
2103    }
2104
2105    /// Wraps `isl_union_map_preimage_domain_union_pw_multi_aff`.
2106    pub fn preimage_domain_union_pw_multi_aff(self, upma: UnionPwMultiAff)
2107                                              -> Result<UnionMap, LibISLError> {
2108        let umap = self;
2109        let isl_rs_ctx = umap.get_ctx();
2110        let mut umap = umap;
2111        umap.do_not_free_on_drop();
2112        let umap = umap.ptr;
2113        let mut upma = upma;
2114        upma.do_not_free_on_drop();
2115        let upma = upma.ptr;
2116        let isl_rs_result = unsafe { isl_union_map_preimage_domain_union_pw_multi_aff(umap, upma) };
2117        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2118                                       should_free_on_drop: true };
2119        let err = isl_rs_ctx.last_error();
2120        if err != Error::None_ {
2121            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2122        }
2123        Ok(isl_rs_result)
2124    }
2125
2126    /// Wraps `isl_union_map_preimage_range_multi_aff`.
2127    pub fn preimage_range_multi_aff(self, ma: MultiAff) -> Result<UnionMap, LibISLError> {
2128        let umap = self;
2129        let isl_rs_ctx = umap.get_ctx();
2130        let mut umap = umap;
2131        umap.do_not_free_on_drop();
2132        let umap = umap.ptr;
2133        let mut ma = ma;
2134        ma.do_not_free_on_drop();
2135        let ma = ma.ptr;
2136        let isl_rs_result = unsafe { isl_union_map_preimage_range_multi_aff(umap, ma) };
2137        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2138                                       should_free_on_drop: true };
2139        let err = isl_rs_ctx.last_error();
2140        if err != Error::None_ {
2141            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2142        }
2143        Ok(isl_rs_result)
2144    }
2145
2146    /// Wraps `isl_union_map_preimage_range_pw_multi_aff`.
2147    pub fn preimage_range_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionMap, LibISLError> {
2148        let umap = self;
2149        let isl_rs_ctx = umap.get_ctx();
2150        let mut umap = umap;
2151        umap.do_not_free_on_drop();
2152        let umap = umap.ptr;
2153        let mut pma = pma;
2154        pma.do_not_free_on_drop();
2155        let pma = pma.ptr;
2156        let isl_rs_result = unsafe { isl_union_map_preimage_range_pw_multi_aff(umap, pma) };
2157        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2158                                       should_free_on_drop: true };
2159        let err = isl_rs_ctx.last_error();
2160        if err != Error::None_ {
2161            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2162        }
2163        Ok(isl_rs_result)
2164    }
2165
2166    /// Wraps `isl_union_map_preimage_range_union_pw_multi_aff`.
2167    pub fn preimage_range_union_pw_multi_aff(self, upma: UnionPwMultiAff)
2168                                             -> Result<UnionMap, LibISLError> {
2169        let umap = self;
2170        let isl_rs_ctx = umap.get_ctx();
2171        let mut umap = umap;
2172        umap.do_not_free_on_drop();
2173        let umap = umap.ptr;
2174        let mut upma = upma;
2175        upma.do_not_free_on_drop();
2176        let upma = upma.ptr;
2177        let isl_rs_result = unsafe { isl_union_map_preimage_range_union_pw_multi_aff(umap, upma) };
2178        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2179                                       should_free_on_drop: true };
2180        let err = isl_rs_ctx.last_error();
2181        if err != Error::None_ {
2182            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2183        }
2184        Ok(isl_rs_result)
2185    }
2186
2187    /// Wraps `isl_union_map_product`.
2188    pub fn product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2189        let umap1 = self;
2190        let isl_rs_ctx = umap1.get_ctx();
2191        let mut umap1 = umap1;
2192        umap1.do_not_free_on_drop();
2193        let umap1 = umap1.ptr;
2194        let mut umap2 = umap2;
2195        umap2.do_not_free_on_drop();
2196        let umap2 = umap2.ptr;
2197        let isl_rs_result = unsafe { isl_union_map_product(umap1, umap2) };
2198        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2199                                       should_free_on_drop: true };
2200        let err = isl_rs_ctx.last_error();
2201        if err != Error::None_ {
2202            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2203        }
2204        Ok(isl_rs_result)
2205    }
2206
2207    /// Wraps `isl_union_map_project_out`.
2208    pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<UnionMap, LibISLError> {
2209        let umap = self;
2210        let isl_rs_ctx = umap.get_ctx();
2211        let mut umap = umap;
2212        umap.do_not_free_on_drop();
2213        let umap = umap.ptr;
2214        let type_ = type_.to_i32();
2215        let isl_rs_result = unsafe { isl_union_map_project_out(umap, type_, first, n) };
2216        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2217                                       should_free_on_drop: true };
2218        let err = isl_rs_ctx.last_error();
2219        if err != Error::None_ {
2220            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2221        }
2222        Ok(isl_rs_result)
2223    }
2224
2225    /// Wraps `isl_union_map_project_out_all_params`.
2226    pub fn project_out_all_params(self) -> Result<UnionMap, LibISLError> {
2227        let umap = self;
2228        let isl_rs_ctx = umap.get_ctx();
2229        let mut umap = umap;
2230        umap.do_not_free_on_drop();
2231        let umap = umap.ptr;
2232        let isl_rs_result = unsafe { isl_union_map_project_out_all_params(umap) };
2233        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2234                                       should_free_on_drop: true };
2235        let err = isl_rs_ctx.last_error();
2236        if err != Error::None_ {
2237            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2238        }
2239        Ok(isl_rs_result)
2240    }
2241
2242    /// Wraps `isl_union_map_project_out_param_id`.
2243    pub fn project_out_param_id(self, id: Id) -> Result<UnionMap, LibISLError> {
2244        let umap = self;
2245        let isl_rs_ctx = umap.get_ctx();
2246        let mut umap = umap;
2247        umap.do_not_free_on_drop();
2248        let umap = umap.ptr;
2249        let mut id = id;
2250        id.do_not_free_on_drop();
2251        let id = id.ptr;
2252        let isl_rs_result = unsafe { isl_union_map_project_out_param_id(umap, id) };
2253        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2254                                       should_free_on_drop: true };
2255        let err = isl_rs_ctx.last_error();
2256        if err != Error::None_ {
2257            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2258        }
2259        Ok(isl_rs_result)
2260    }
2261
2262    /// Wraps `isl_union_map_project_out_param_id_list`.
2263    pub fn project_out_param_id_list(self, list: IdList) -> Result<UnionMap, LibISLError> {
2264        let umap = self;
2265        let isl_rs_ctx = umap.get_ctx();
2266        let mut umap = umap;
2267        umap.do_not_free_on_drop();
2268        let umap = umap.ptr;
2269        let mut list = list;
2270        list.do_not_free_on_drop();
2271        let list = list.ptr;
2272        let isl_rs_result = unsafe { isl_union_map_project_out_param_id_list(umap, list) };
2273        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2274                                       should_free_on_drop: true };
2275        let err = isl_rs_ctx.last_error();
2276        if err != Error::None_ {
2277            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2278        }
2279        Ok(isl_rs_result)
2280    }
2281
2282    /// Wraps `isl_union_map_range`.
2283    pub fn range(self) -> Result<UnionSet, LibISLError> {
2284        let umap = self;
2285        let isl_rs_ctx = umap.get_ctx();
2286        let mut umap = umap;
2287        umap.do_not_free_on_drop();
2288        let umap = umap.ptr;
2289        let isl_rs_result = unsafe { isl_union_map_range(umap) };
2290        let isl_rs_result = UnionSet { ptr: isl_rs_result,
2291                                       should_free_on_drop: true };
2292        let err = isl_rs_ctx.last_error();
2293        if err != Error::None_ {
2294            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2295        }
2296        Ok(isl_rs_result)
2297    }
2298
2299    /// Wraps `isl_union_map_range_curry`.
2300    pub fn range_curry(self) -> Result<UnionMap, LibISLError> {
2301        let umap = self;
2302        let isl_rs_ctx = umap.get_ctx();
2303        let mut umap = umap;
2304        umap.do_not_free_on_drop();
2305        let umap = umap.ptr;
2306        let isl_rs_result = unsafe { isl_union_map_range_curry(umap) };
2307        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2308                                       should_free_on_drop: true };
2309        let err = isl_rs_ctx.last_error();
2310        if err != Error::None_ {
2311            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2312        }
2313        Ok(isl_rs_result)
2314    }
2315
2316    /// Wraps `isl_union_map_range_factor_domain`.
2317    pub fn range_factor_domain(self) -> Result<UnionMap, LibISLError> {
2318        let umap = self;
2319        let isl_rs_ctx = umap.get_ctx();
2320        let mut umap = umap;
2321        umap.do_not_free_on_drop();
2322        let umap = umap.ptr;
2323        let isl_rs_result = unsafe { isl_union_map_range_factor_domain(umap) };
2324        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2325                                       should_free_on_drop: true };
2326        let err = isl_rs_ctx.last_error();
2327        if err != Error::None_ {
2328            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2329        }
2330        Ok(isl_rs_result)
2331    }
2332
2333    /// Wraps `isl_union_map_range_factor_range`.
2334    pub fn range_factor_range(self) -> Result<UnionMap, LibISLError> {
2335        let umap = self;
2336        let isl_rs_ctx = umap.get_ctx();
2337        let mut umap = umap;
2338        umap.do_not_free_on_drop();
2339        let umap = umap.ptr;
2340        let isl_rs_result = unsafe { isl_union_map_range_factor_range(umap) };
2341        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2342                                       should_free_on_drop: true };
2343        let err = isl_rs_ctx.last_error();
2344        if err != Error::None_ {
2345            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2346        }
2347        Ok(isl_rs_result)
2348    }
2349
2350    /// Wraps `isl_union_map_range_map`.
2351    pub fn range_map(self) -> Result<UnionMap, LibISLError> {
2352        let umap = self;
2353        let isl_rs_ctx = umap.get_ctx();
2354        let mut umap = umap;
2355        umap.do_not_free_on_drop();
2356        let umap = umap.ptr;
2357        let isl_rs_result = unsafe { isl_union_map_range_map(umap) };
2358        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2359                                       should_free_on_drop: true };
2360        let err = isl_rs_ctx.last_error();
2361        if err != Error::None_ {
2362            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2363        }
2364        Ok(isl_rs_result)
2365    }
2366
2367    /// Wraps `isl_union_map_range_product`.
2368    pub fn range_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2369        let umap1 = self;
2370        let isl_rs_ctx = umap1.get_ctx();
2371        let mut umap1 = umap1;
2372        umap1.do_not_free_on_drop();
2373        let umap1 = umap1.ptr;
2374        let mut umap2 = umap2;
2375        umap2.do_not_free_on_drop();
2376        let umap2 = umap2.ptr;
2377        let isl_rs_result = unsafe { isl_union_map_range_product(umap1, umap2) };
2378        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2379                                       should_free_on_drop: true };
2380        let err = isl_rs_ctx.last_error();
2381        if err != Error::None_ {
2382            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2383        }
2384        Ok(isl_rs_result)
2385    }
2386
2387    /// Wraps `isl_union_map_range_reverse`.
2388    pub fn range_reverse(self) -> Result<UnionMap, LibISLError> {
2389        let umap = self;
2390        let isl_rs_ctx = umap.get_ctx();
2391        let mut umap = umap;
2392        umap.do_not_free_on_drop();
2393        let umap = umap.ptr;
2394        let isl_rs_result = unsafe { isl_union_map_range_reverse(umap) };
2395        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2396                                       should_free_on_drop: true };
2397        let err = isl_rs_ctx.last_error();
2398        if err != Error::None_ {
2399            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2400        }
2401        Ok(isl_rs_result)
2402    }
2403
2404    /// Wraps `isl_union_map_read_from_str`.
2405    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<UnionMap, LibISLError> {
2406        let isl_rs_ctx = Context { ptr: ctx.ptr,
2407                                   should_free_on_drop: false };
2408        let ctx = ctx.ptr;
2409        let str_ = CString::new(str_).unwrap();
2410        let str_ = str_.as_ptr();
2411        let isl_rs_result = unsafe { isl_union_map_read_from_str(ctx, str_) };
2412        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2413                                       should_free_on_drop: true };
2414        let err = isl_rs_ctx.last_error();
2415        if err != Error::None_ {
2416            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2417        }
2418        Ok(isl_rs_result)
2419    }
2420
2421    /// Wraps `isl_union_map_remove_divs`.
2422    pub fn remove_divs(self) -> Result<UnionMap, LibISLError> {
2423        let bmap = self;
2424        let isl_rs_ctx = bmap.get_ctx();
2425        let mut bmap = bmap;
2426        bmap.do_not_free_on_drop();
2427        let bmap = bmap.ptr;
2428        let isl_rs_result = unsafe { isl_union_map_remove_divs(bmap) };
2429        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2430                                       should_free_on_drop: true };
2431        let err = isl_rs_ctx.last_error();
2432        if err != Error::None_ {
2433            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2434        }
2435        Ok(isl_rs_result)
2436    }
2437
2438    /// Wraps `isl_union_map_remove_redundancies`.
2439    pub fn remove_redundancies(self) -> Result<UnionMap, LibISLError> {
2440        let umap = self;
2441        let isl_rs_ctx = umap.get_ctx();
2442        let mut umap = umap;
2443        umap.do_not_free_on_drop();
2444        let umap = umap.ptr;
2445        let isl_rs_result = unsafe { isl_union_map_remove_redundancies(umap) };
2446        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2447                                       should_free_on_drop: true };
2448        let err = isl_rs_ctx.last_error();
2449        if err != Error::None_ {
2450            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2451        }
2452        Ok(isl_rs_result)
2453    }
2454
2455    /// Wraps `isl_union_map_reset_user`.
2456    pub fn reset_user(self) -> Result<UnionMap, LibISLError> {
2457        let umap = self;
2458        let isl_rs_ctx = umap.get_ctx();
2459        let mut umap = umap;
2460        umap.do_not_free_on_drop();
2461        let umap = umap.ptr;
2462        let isl_rs_result = unsafe { isl_union_map_reset_user(umap) };
2463        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2464                                       should_free_on_drop: true };
2465        let err = isl_rs_ctx.last_error();
2466        if err != Error::None_ {
2467            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2468        }
2469        Ok(isl_rs_result)
2470    }
2471
2472    /// Wraps `isl_union_map_reverse`.
2473    pub fn reverse(self) -> Result<UnionMap, LibISLError> {
2474        let umap = self;
2475        let isl_rs_ctx = umap.get_ctx();
2476        let mut umap = umap;
2477        umap.do_not_free_on_drop();
2478        let umap = umap.ptr;
2479        let isl_rs_result = unsafe { isl_union_map_reverse(umap) };
2480        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2481                                       should_free_on_drop: true };
2482        let err = isl_rs_ctx.last_error();
2483        if err != Error::None_ {
2484            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2485        }
2486        Ok(isl_rs_result)
2487    }
2488
2489    /// Wraps `isl_union_map_sample`.
2490    pub fn sample(self) -> Result<BasicMap, LibISLError> {
2491        let umap = self;
2492        let isl_rs_ctx = umap.get_ctx();
2493        let mut umap = umap;
2494        umap.do_not_free_on_drop();
2495        let umap = umap.ptr;
2496        let isl_rs_result = unsafe { isl_union_map_sample(umap) };
2497        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2498                                       should_free_on_drop: true };
2499        let err = isl_rs_ctx.last_error();
2500        if err != Error::None_ {
2501            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2502        }
2503        Ok(isl_rs_result)
2504    }
2505
2506    /// Wraps `isl_union_map_simple_hull`.
2507    pub fn simple_hull(self) -> Result<UnionMap, LibISLError> {
2508        let umap = self;
2509        let isl_rs_ctx = umap.get_ctx();
2510        let mut umap = umap;
2511        umap.do_not_free_on_drop();
2512        let umap = umap.ptr;
2513        let isl_rs_result = unsafe { isl_union_map_simple_hull(umap) };
2514        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2515                                       should_free_on_drop: true };
2516        let err = isl_rs_ctx.last_error();
2517        if err != Error::None_ {
2518            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2519        }
2520        Ok(isl_rs_result)
2521    }
2522
2523    /// Wraps `isl_union_map_subtract`.
2524    pub fn subtract(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2525        let umap1 = self;
2526        let isl_rs_ctx = umap1.get_ctx();
2527        let mut umap1 = umap1;
2528        umap1.do_not_free_on_drop();
2529        let umap1 = umap1.ptr;
2530        let mut umap2 = umap2;
2531        umap2.do_not_free_on_drop();
2532        let umap2 = umap2.ptr;
2533        let isl_rs_result = unsafe { isl_union_map_subtract(umap1, umap2) };
2534        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2535                                       should_free_on_drop: true };
2536        let err = isl_rs_ctx.last_error();
2537        if err != Error::None_ {
2538            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2539        }
2540        Ok(isl_rs_result)
2541    }
2542
2543    /// Wraps `isl_union_map_subtract_domain`.
2544    pub fn subtract_domain(self, dom: UnionSet) -> Result<UnionMap, LibISLError> {
2545        let umap = self;
2546        let isl_rs_ctx = umap.get_ctx();
2547        let mut umap = umap;
2548        umap.do_not_free_on_drop();
2549        let umap = umap.ptr;
2550        let mut dom = dom;
2551        dom.do_not_free_on_drop();
2552        let dom = dom.ptr;
2553        let isl_rs_result = unsafe { isl_union_map_subtract_domain(umap, dom) };
2554        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2555                                       should_free_on_drop: true };
2556        let err = isl_rs_ctx.last_error();
2557        if err != Error::None_ {
2558            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2559        }
2560        Ok(isl_rs_result)
2561    }
2562
2563    /// Wraps `isl_union_map_subtract_range`.
2564    pub fn subtract_range(self, dom: UnionSet) -> Result<UnionMap, LibISLError> {
2565        let umap = self;
2566        let isl_rs_ctx = umap.get_ctx();
2567        let mut umap = umap;
2568        umap.do_not_free_on_drop();
2569        let umap = umap.ptr;
2570        let mut dom = dom;
2571        dom.do_not_free_on_drop();
2572        let dom = dom.ptr;
2573        let isl_rs_result = unsafe { isl_union_map_subtract_range(umap, dom) };
2574        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2575                                       should_free_on_drop: true };
2576        let err = isl_rs_ctx.last_error();
2577        if err != Error::None_ {
2578            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2579        }
2580        Ok(isl_rs_result)
2581    }
2582
2583    /// Wraps `isl_union_map_to_list`.
2584    pub fn to_list(self) -> Result<UnionMapList, LibISLError> {
2585        let el = self;
2586        let isl_rs_ctx = el.get_ctx();
2587        let mut el = el;
2588        el.do_not_free_on_drop();
2589        let el = el.ptr;
2590        let isl_rs_result = unsafe { isl_union_map_to_list(el) };
2591        let isl_rs_result = UnionMapList { ptr: isl_rs_result,
2592                                           should_free_on_drop: true };
2593        let err = isl_rs_ctx.last_error();
2594        if err != Error::None_ {
2595            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2596        }
2597        Ok(isl_rs_result)
2598    }
2599
2600    /// Wraps `isl_union_map_to_str`.
2601    pub fn to_str(&self) -> Result<&str, LibISLError> {
2602        let umap = self;
2603        let isl_rs_ctx = umap.get_ctx();
2604        let umap = umap.ptr;
2605        let isl_rs_result = unsafe { isl_union_map_to_str(umap) };
2606        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2607        let isl_rs_result = isl_rs_result.to_str().unwrap();
2608        let err = isl_rs_ctx.last_error();
2609        if err != Error::None_ {
2610            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2611        }
2612        Ok(isl_rs_result)
2613    }
2614
2615    /// Wraps `isl_union_map_uncurry`.
2616    pub fn uncurry(self) -> Result<UnionMap, LibISLError> {
2617        let umap = self;
2618        let isl_rs_ctx = umap.get_ctx();
2619        let mut umap = umap;
2620        umap.do_not_free_on_drop();
2621        let umap = umap.ptr;
2622        let isl_rs_result = unsafe { isl_union_map_uncurry(umap) };
2623        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2624                                       should_free_on_drop: true };
2625        let err = isl_rs_ctx.last_error();
2626        if err != Error::None_ {
2627            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2628        }
2629        Ok(isl_rs_result)
2630    }
2631
2632    /// Wraps `isl_union_map_union`.
2633    pub fn union(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2634        let umap1 = self;
2635        let isl_rs_ctx = umap1.get_ctx();
2636        let mut umap1 = umap1;
2637        umap1.do_not_free_on_drop();
2638        let umap1 = umap1.ptr;
2639        let mut umap2 = umap2;
2640        umap2.do_not_free_on_drop();
2641        let umap2 = umap2.ptr;
2642        let isl_rs_result = unsafe { isl_union_map_union(umap1, umap2) };
2643        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2644                                       should_free_on_drop: true };
2645        let err = isl_rs_ctx.last_error();
2646        if err != Error::None_ {
2647            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2648        }
2649        Ok(isl_rs_result)
2650    }
2651
2652    /// Wraps `isl_union_map_universe`.
2653    pub fn universe(self) -> Result<UnionMap, LibISLError> {
2654        let umap = self;
2655        let isl_rs_ctx = umap.get_ctx();
2656        let mut umap = umap;
2657        umap.do_not_free_on_drop();
2658        let umap = umap.ptr;
2659        let isl_rs_result = unsafe { isl_union_map_universe(umap) };
2660        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2661                                       should_free_on_drop: true };
2662        let err = isl_rs_ctx.last_error();
2663        if err != Error::None_ {
2664            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2665        }
2666        Ok(isl_rs_result)
2667    }
2668
2669    /// Wraps `isl_union_map_wrap`.
2670    pub fn wrap(self) -> Result<UnionSet, LibISLError> {
2671        let umap = self;
2672        let isl_rs_ctx = umap.get_ctx();
2673        let mut umap = umap;
2674        umap.do_not_free_on_drop();
2675        let umap = umap.ptr;
2676        let isl_rs_result = unsafe { isl_union_map_wrap(umap) };
2677        let isl_rs_result = UnionSet { ptr: isl_rs_result,
2678                                       should_free_on_drop: true };
2679        let err = isl_rs_ctx.last_error();
2680        if err != Error::None_ {
2681            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2682        }
2683        Ok(isl_rs_result)
2684    }
2685
2686    /// Wraps `isl_union_map_zip`.
2687    pub fn zip(self) -> Result<UnionMap, LibISLError> {
2688        let umap = self;
2689        let isl_rs_ctx = umap.get_ctx();
2690        let mut umap = umap;
2691        umap.do_not_free_on_drop();
2692        let umap = umap.ptr;
2693        let isl_rs_result = unsafe { isl_union_map_zip(umap) };
2694        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2695                                       should_free_on_drop: true };
2696        let err = isl_rs_ctx.last_error();
2697        if err != Error::None_ {
2698            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2699        }
2700        Ok(isl_rs_result)
2701    }
2702
2703    /// Does not call isl_union_map_free() on being dropped. (For internal use
2704    /// only.)
2705    pub fn do_not_free_on_drop(&mut self) {
2706        self.should_free_on_drop = false;
2707    }
2708}
2709
2710impl Drop for UnionMap {
2711    fn drop(&mut self) {
2712        if self.should_free_on_drop {
2713            unsafe {
2714                isl_union_map_free(self.ptr);
2715            }
2716        }
2717    }
2718}