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            let err_msg = isl_rs_ctx.last_error_msg();
313            isl_rs_ctx.reset_error();
314            return Err(LibISLError::new(err, err_msg));
315        }
316        Ok(isl_rs_result)
317    }
318
319    /// Wraps `isl_union_map_affine_hull`.
320    pub fn affine_hull(self) -> Result<UnionMap, LibISLError> {
321        let umap = self;
322        let isl_rs_ctx = umap.get_ctx();
323        let mut umap = umap;
324        umap.do_not_free_on_drop();
325        let umap = umap.ptr;
326        let isl_rs_result = unsafe { isl_union_map_affine_hull(umap) };
327        let isl_rs_result = UnionMap { ptr: isl_rs_result,
328                                       should_free_on_drop: true };
329        let err = isl_rs_ctx.last_error();
330        if err != Error::None_ {
331            let err_msg = isl_rs_ctx.last_error_msg();
332            isl_rs_ctx.reset_error();
333            return Err(LibISLError::new(err, err_msg));
334        }
335        Ok(isl_rs_result)
336    }
337
338    /// Wraps `isl_union_map_align_params`.
339    pub fn align_params(self, model: Space) -> Result<UnionMap, LibISLError> {
340        let umap = self;
341        let isl_rs_ctx = umap.get_ctx();
342        let mut umap = umap;
343        umap.do_not_free_on_drop();
344        let umap = umap.ptr;
345        let mut model = model;
346        model.do_not_free_on_drop();
347        let model = model.ptr;
348        let isl_rs_result = unsafe { isl_union_map_align_params(umap, model) };
349        let isl_rs_result = UnionMap { ptr: isl_rs_result,
350                                       should_free_on_drop: true };
351        let err = isl_rs_ctx.last_error();
352        if err != Error::None_ {
353            let err_msg = isl_rs_ctx.last_error_msg();
354            isl_rs_ctx.reset_error();
355            return Err(LibISLError::new(err, err_msg));
356        }
357        Ok(isl_rs_result)
358    }
359
360    /// Wraps `isl_union_map_apply_domain`.
361    pub fn apply_domain(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
362        let umap1 = self;
363        let isl_rs_ctx = umap1.get_ctx();
364        let mut umap1 = umap1;
365        umap1.do_not_free_on_drop();
366        let umap1 = umap1.ptr;
367        let mut umap2 = umap2;
368        umap2.do_not_free_on_drop();
369        let umap2 = umap2.ptr;
370        let isl_rs_result = unsafe { isl_union_map_apply_domain(umap1, umap2) };
371        let isl_rs_result = UnionMap { ptr: isl_rs_result,
372                                       should_free_on_drop: true };
373        let err = isl_rs_ctx.last_error();
374        if err != Error::None_ {
375            let err_msg = isl_rs_ctx.last_error_msg();
376            isl_rs_ctx.reset_error();
377            return Err(LibISLError::new(err, err_msg));
378        }
379        Ok(isl_rs_result)
380    }
381
382    /// Wraps `isl_union_map_apply_range`.
383    pub fn apply_range(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
384        let umap1 = self;
385        let isl_rs_ctx = umap1.get_ctx();
386        let mut umap1 = umap1;
387        umap1.do_not_free_on_drop();
388        let umap1 = umap1.ptr;
389        let mut umap2 = umap2;
390        umap2.do_not_free_on_drop();
391        let umap2 = umap2.ptr;
392        let isl_rs_result = unsafe { isl_union_map_apply_range(umap1, umap2) };
393        let isl_rs_result = UnionMap { ptr: isl_rs_result,
394                                       should_free_on_drop: true };
395        let err = isl_rs_ctx.last_error();
396        if err != Error::None_ {
397            let err_msg = isl_rs_ctx.last_error_msg();
398            isl_rs_ctx.reset_error();
399            return Err(LibISLError::new(err, err_msg));
400        }
401        Ok(isl_rs_result)
402    }
403
404    /// Wraps `isl_union_map_as_map`.
405    pub fn as_map(self) -> Result<Map, LibISLError> {
406        let umap = self;
407        let isl_rs_ctx = umap.get_ctx();
408        let mut umap = umap;
409        umap.do_not_free_on_drop();
410        let umap = umap.ptr;
411        let isl_rs_result = unsafe { isl_union_map_as_map(umap) };
412        let isl_rs_result = Map { ptr: isl_rs_result,
413                                  should_free_on_drop: true };
414        let err = isl_rs_ctx.last_error();
415        if err != Error::None_ {
416            let err_msg = isl_rs_ctx.last_error_msg();
417            isl_rs_ctx.reset_error();
418            return Err(LibISLError::new(err, err_msg));
419        }
420        Ok(isl_rs_result)
421    }
422
423    /// Wraps `isl_union_map_as_multi_union_pw_aff`.
424    pub fn as_multi_union_pw_aff(self) -> Result<MultiUnionPwAff, LibISLError> {
425        let umap = self;
426        let isl_rs_ctx = umap.get_ctx();
427        let mut umap = umap;
428        umap.do_not_free_on_drop();
429        let umap = umap.ptr;
430        let isl_rs_result = unsafe { isl_union_map_as_multi_union_pw_aff(umap) };
431        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
432                                              should_free_on_drop: true };
433        let err = isl_rs_ctx.last_error();
434        if err != Error::None_ {
435            let err_msg = isl_rs_ctx.last_error_msg();
436            isl_rs_ctx.reset_error();
437            return Err(LibISLError::new(err, err_msg));
438        }
439        Ok(isl_rs_result)
440    }
441
442    /// Wraps `isl_union_map_as_union_pw_multi_aff`.
443    pub fn as_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
444        let umap = self;
445        let isl_rs_ctx = umap.get_ctx();
446        let mut umap = umap;
447        umap.do_not_free_on_drop();
448        let umap = umap.ptr;
449        let isl_rs_result = unsafe { isl_union_map_as_union_pw_multi_aff(umap) };
450        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
451                                              should_free_on_drop: true };
452        let err = isl_rs_ctx.last_error();
453        if err != Error::None_ {
454            let err_msg = isl_rs_ctx.last_error_msg();
455            isl_rs_ctx.reset_error();
456            return Err(LibISLError::new(err, err_msg));
457        }
458        Ok(isl_rs_result)
459    }
460
461    /// Wraps `isl_union_map_bind_range`.
462    pub fn bind_range(self, tuple: MultiId) -> Result<UnionSet, LibISLError> {
463        let umap = self;
464        let isl_rs_ctx = umap.get_ctx();
465        let mut umap = umap;
466        umap.do_not_free_on_drop();
467        let umap = umap.ptr;
468        let mut tuple = tuple;
469        tuple.do_not_free_on_drop();
470        let tuple = tuple.ptr;
471        let isl_rs_result = unsafe { isl_union_map_bind_range(umap, tuple) };
472        let isl_rs_result = UnionSet { ptr: isl_rs_result,
473                                       should_free_on_drop: true };
474        let err = isl_rs_ctx.last_error();
475        if err != Error::None_ {
476            let err_msg = isl_rs_ctx.last_error_msg();
477            isl_rs_ctx.reset_error();
478            return Err(LibISLError::new(err, err_msg));
479        }
480        Ok(isl_rs_result)
481    }
482
483    /// Wraps `isl_union_map_coalesce`.
484    pub fn coalesce(self) -> Result<UnionMap, LibISLError> {
485        let umap = self;
486        let isl_rs_ctx = umap.get_ctx();
487        let mut umap = umap;
488        umap.do_not_free_on_drop();
489        let umap = umap.ptr;
490        let isl_rs_result = unsafe { isl_union_map_coalesce(umap) };
491        let isl_rs_result = UnionMap { ptr: isl_rs_result,
492                                       should_free_on_drop: true };
493        let err = isl_rs_ctx.last_error();
494        if err != Error::None_ {
495            let err_msg = isl_rs_ctx.last_error_msg();
496            isl_rs_ctx.reset_error();
497            return Err(LibISLError::new(err, err_msg));
498        }
499        Ok(isl_rs_result)
500    }
501
502    /// Wraps `isl_union_map_compute_divs`.
503    pub fn compute_divs(self) -> Result<UnionMap, LibISLError> {
504        let umap = self;
505        let isl_rs_ctx = umap.get_ctx();
506        let mut umap = umap;
507        umap.do_not_free_on_drop();
508        let umap = umap.ptr;
509        let isl_rs_result = unsafe { isl_union_map_compute_divs(umap) };
510        let isl_rs_result = UnionMap { ptr: isl_rs_result,
511                                       should_free_on_drop: true };
512        let err = isl_rs_ctx.last_error();
513        if err != Error::None_ {
514            let err_msg = isl_rs_ctx.last_error_msg();
515            isl_rs_ctx.reset_error();
516            return Err(LibISLError::new(err, err_msg));
517        }
518        Ok(isl_rs_result)
519    }
520
521    /// Wraps `isl_union_map_contains`.
522    pub fn contains(&self, space: &Space) -> Result<bool, LibISLError> {
523        let umap = self;
524        let isl_rs_ctx = umap.get_ctx();
525        let umap = umap.ptr;
526        let space = space.ptr;
527        let isl_rs_result = unsafe { isl_union_map_contains(umap, space) };
528        let isl_rs_result = match isl_rs_result {
529            0 => false,
530            1 => true,
531            _ => {
532                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
533            }
534        };
535        let err = isl_rs_ctx.last_error();
536        if err != Error::None_ {
537            let err_msg = isl_rs_ctx.last_error_msg();
538            isl_rs_ctx.reset_error();
539            return Err(LibISLError::new(err, err_msg));
540        }
541        Ok(isl_rs_result)
542    }
543
544    /// Wraps `isl_union_map_copy`.
545    pub fn copy(&self) -> Result<UnionMap, LibISLError> {
546        let umap = self;
547        let isl_rs_ctx = umap.get_ctx();
548        let umap = umap.ptr;
549        let isl_rs_result = unsafe { isl_union_map_copy(umap) };
550        let isl_rs_result = UnionMap { ptr: isl_rs_result,
551                                       should_free_on_drop: true };
552        let err = isl_rs_ctx.last_error();
553        if err != Error::None_ {
554            let err_msg = isl_rs_ctx.last_error_msg();
555            isl_rs_ctx.reset_error();
556            return Err(LibISLError::new(err, err_msg));
557        }
558        Ok(isl_rs_result)
559    }
560
561    /// Wraps `isl_union_map_curry`.
562    pub fn curry(self) -> Result<UnionMap, LibISLError> {
563        let umap = self;
564        let isl_rs_ctx = umap.get_ctx();
565        let mut umap = umap;
566        umap.do_not_free_on_drop();
567        let umap = umap.ptr;
568        let isl_rs_result = unsafe { isl_union_map_curry(umap) };
569        let isl_rs_result = UnionMap { ptr: isl_rs_result,
570                                       should_free_on_drop: true };
571        let err = isl_rs_ctx.last_error();
572        if err != Error::None_ {
573            let err_msg = isl_rs_ctx.last_error_msg();
574            isl_rs_ctx.reset_error();
575            return Err(LibISLError::new(err, err_msg));
576        }
577        Ok(isl_rs_result)
578    }
579
580    /// Wraps `isl_union_map_deltas`.
581    pub fn deltas(self) -> Result<UnionSet, LibISLError> {
582        let umap = self;
583        let isl_rs_ctx = umap.get_ctx();
584        let mut umap = umap;
585        umap.do_not_free_on_drop();
586        let umap = umap.ptr;
587        let isl_rs_result = unsafe { isl_union_map_deltas(umap) };
588        let isl_rs_result = UnionSet { ptr: isl_rs_result,
589                                       should_free_on_drop: true };
590        let err = isl_rs_ctx.last_error();
591        if err != Error::None_ {
592            let err_msg = isl_rs_ctx.last_error_msg();
593            isl_rs_ctx.reset_error();
594            return Err(LibISLError::new(err, err_msg));
595        }
596        Ok(isl_rs_result)
597    }
598
599    /// Wraps `isl_union_map_deltas_map`.
600    pub fn deltas_map(self) -> Result<UnionMap, LibISLError> {
601        let umap = self;
602        let isl_rs_ctx = umap.get_ctx();
603        let mut umap = umap;
604        umap.do_not_free_on_drop();
605        let umap = umap.ptr;
606        let isl_rs_result = unsafe { isl_union_map_deltas_map(umap) };
607        let isl_rs_result = UnionMap { ptr: isl_rs_result,
608                                       should_free_on_drop: true };
609        let err = isl_rs_ctx.last_error();
610        if err != Error::None_ {
611            let err_msg = isl_rs_ctx.last_error_msg();
612            isl_rs_ctx.reset_error();
613            return Err(LibISLError::new(err, err_msg));
614        }
615        Ok(isl_rs_result)
616    }
617
618    /// Wraps `isl_union_map_detect_equalities`.
619    pub fn detect_equalities(self) -> Result<UnionMap, LibISLError> {
620        let umap = self;
621        let isl_rs_ctx = umap.get_ctx();
622        let mut umap = umap;
623        umap.do_not_free_on_drop();
624        let umap = umap.ptr;
625        let isl_rs_result = unsafe { isl_union_map_detect_equalities(umap) };
626        let isl_rs_result = UnionMap { ptr: isl_rs_result,
627                                       should_free_on_drop: true };
628        let err = isl_rs_ctx.last_error();
629        if err != Error::None_ {
630            let err_msg = isl_rs_ctx.last_error_msg();
631            isl_rs_ctx.reset_error();
632            return Err(LibISLError::new(err, err_msg));
633        }
634        Ok(isl_rs_result)
635    }
636
637    /// Wraps `isl_union_map_dim`.
638    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
639        let umap = self;
640        let isl_rs_ctx = umap.get_ctx();
641        let umap = umap.ptr;
642        let type_ = type_.to_i32();
643        let isl_rs_result = unsafe { isl_union_map_dim(umap, type_) };
644        let err = isl_rs_ctx.last_error();
645        if err != Error::None_ {
646            let err_msg = isl_rs_ctx.last_error_msg();
647            isl_rs_ctx.reset_error();
648            return Err(LibISLError::new(err, err_msg));
649        }
650        Ok(isl_rs_result)
651    }
652
653    /// Wraps `isl_union_map_domain`.
654    pub fn domain(self) -> Result<UnionSet, LibISLError> {
655        let umap = self;
656        let isl_rs_ctx = umap.get_ctx();
657        let mut umap = umap;
658        umap.do_not_free_on_drop();
659        let umap = umap.ptr;
660        let isl_rs_result = unsafe { isl_union_map_domain(umap) };
661        let isl_rs_result = UnionSet { ptr: isl_rs_result,
662                                       should_free_on_drop: true };
663        let err = isl_rs_ctx.last_error();
664        if err != Error::None_ {
665            let err_msg = isl_rs_ctx.last_error_msg();
666            isl_rs_ctx.reset_error();
667            return Err(LibISLError::new(err, err_msg));
668        }
669        Ok(isl_rs_result)
670    }
671
672    /// Wraps `isl_union_map_domain_factor_domain`.
673    pub fn domain_factor_domain(self) -> Result<UnionMap, LibISLError> {
674        let umap = self;
675        let isl_rs_ctx = umap.get_ctx();
676        let mut umap = umap;
677        umap.do_not_free_on_drop();
678        let umap = umap.ptr;
679        let isl_rs_result = unsafe { isl_union_map_domain_factor_domain(umap) };
680        let isl_rs_result = UnionMap { ptr: isl_rs_result,
681                                       should_free_on_drop: true };
682        let err = isl_rs_ctx.last_error();
683        if err != Error::None_ {
684            let err_msg = isl_rs_ctx.last_error_msg();
685            isl_rs_ctx.reset_error();
686            return Err(LibISLError::new(err, err_msg));
687        }
688        Ok(isl_rs_result)
689    }
690
691    /// Wraps `isl_union_map_domain_factor_range`.
692    pub fn domain_factor_range(self) -> Result<UnionMap, LibISLError> {
693        let umap = self;
694        let isl_rs_ctx = umap.get_ctx();
695        let mut umap = umap;
696        umap.do_not_free_on_drop();
697        let umap = umap.ptr;
698        let isl_rs_result = unsafe { isl_union_map_domain_factor_range(umap) };
699        let isl_rs_result = UnionMap { ptr: isl_rs_result,
700                                       should_free_on_drop: true };
701        let err = isl_rs_ctx.last_error();
702        if err != Error::None_ {
703            let err_msg = isl_rs_ctx.last_error_msg();
704            isl_rs_ctx.reset_error();
705            return Err(LibISLError::new(err, err_msg));
706        }
707        Ok(isl_rs_result)
708    }
709
710    /// Wraps `isl_union_map_domain_map`.
711    pub fn domain_map(self) -> Result<UnionMap, LibISLError> {
712        let umap = self;
713        let isl_rs_ctx = umap.get_ctx();
714        let mut umap = umap;
715        umap.do_not_free_on_drop();
716        let umap = umap.ptr;
717        let isl_rs_result = unsafe { isl_union_map_domain_map(umap) };
718        let isl_rs_result = UnionMap { ptr: isl_rs_result,
719                                       should_free_on_drop: true };
720        let err = isl_rs_ctx.last_error();
721        if err != Error::None_ {
722            let err_msg = isl_rs_ctx.last_error_msg();
723            isl_rs_ctx.reset_error();
724            return Err(LibISLError::new(err, err_msg));
725        }
726        Ok(isl_rs_result)
727    }
728
729    /// Wraps `isl_union_map_domain_map_union_pw_multi_aff`.
730    pub fn domain_map_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
731        let umap = self;
732        let isl_rs_ctx = umap.get_ctx();
733        let mut umap = umap;
734        umap.do_not_free_on_drop();
735        let umap = umap.ptr;
736        let isl_rs_result = unsafe { isl_union_map_domain_map_union_pw_multi_aff(umap) };
737        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
738                                              should_free_on_drop: true };
739        let err = isl_rs_ctx.last_error();
740        if err != Error::None_ {
741            let err_msg = isl_rs_ctx.last_error_msg();
742            isl_rs_ctx.reset_error();
743            return Err(LibISLError::new(err, err_msg));
744        }
745        Ok(isl_rs_result)
746    }
747
748    /// Wraps `isl_union_map_domain_product`.
749    pub fn domain_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
750        let umap1 = self;
751        let isl_rs_ctx = umap1.get_ctx();
752        let mut umap1 = umap1;
753        umap1.do_not_free_on_drop();
754        let umap1 = umap1.ptr;
755        let mut umap2 = umap2;
756        umap2.do_not_free_on_drop();
757        let umap2 = umap2.ptr;
758        let isl_rs_result = unsafe { isl_union_map_domain_product(umap1, umap2) };
759        let isl_rs_result = UnionMap { ptr: isl_rs_result,
760                                       should_free_on_drop: true };
761        let err = isl_rs_ctx.last_error();
762        if err != Error::None_ {
763            let err_msg = isl_rs_ctx.last_error_msg();
764            isl_rs_ctx.reset_error();
765            return Err(LibISLError::new(err, err_msg));
766        }
767        Ok(isl_rs_result)
768    }
769
770    /// Wraps `isl_union_map_domain_reverse`.
771    pub fn domain_reverse(self) -> Result<UnionMap, LibISLError> {
772        let umap = self;
773        let isl_rs_ctx = umap.get_ctx();
774        let mut umap = umap;
775        umap.do_not_free_on_drop();
776        let umap = umap.ptr;
777        let isl_rs_result = unsafe { isl_union_map_domain_reverse(umap) };
778        let isl_rs_result = UnionMap { ptr: isl_rs_result,
779                                       should_free_on_drop: true };
780        let err = isl_rs_ctx.last_error();
781        if err != Error::None_ {
782            let err_msg = isl_rs_ctx.last_error_msg();
783            isl_rs_ctx.reset_error();
784            return Err(LibISLError::new(err, err_msg));
785        }
786        Ok(isl_rs_result)
787    }
788
789    /// Wraps `isl_union_map_drop_unused_params`.
790    pub fn drop_unused_params(self) -> Result<UnionMap, LibISLError> {
791        let umap = self;
792        let isl_rs_ctx = umap.get_ctx();
793        let mut umap = umap;
794        umap.do_not_free_on_drop();
795        let umap = umap.ptr;
796        let isl_rs_result = unsafe { isl_union_map_drop_unused_params(umap) };
797        let isl_rs_result = UnionMap { ptr: isl_rs_result,
798                                       should_free_on_drop: true };
799        let err = isl_rs_ctx.last_error();
800        if err != Error::None_ {
801            let err_msg = isl_rs_ctx.last_error_msg();
802            isl_rs_ctx.reset_error();
803            return Err(LibISLError::new(err, err_msg));
804        }
805        Ok(isl_rs_result)
806    }
807
808    /// Wraps `isl_union_map_dump`.
809    pub fn dump(&self) -> Result<(), LibISLError> {
810        let umap = self;
811        let isl_rs_ctx = umap.get_ctx();
812        let umap = umap.ptr;
813        let isl_rs_result = unsafe { isl_union_map_dump(umap) };
814        let err = isl_rs_ctx.last_error();
815        if err != Error::None_ {
816            let err_msg = isl_rs_ctx.last_error_msg();
817            isl_rs_ctx.reset_error();
818            return Err(LibISLError::new(err, err_msg));
819        }
820        Ok(isl_rs_result)
821    }
822
823    /// Wraps `isl_union_map_empty`.
824    pub fn empty(space: Space) -> Result<UnionMap, LibISLError> {
825        let isl_rs_ctx = space.get_ctx();
826        let mut space = space;
827        space.do_not_free_on_drop();
828        let space = space.ptr;
829        let isl_rs_result = unsafe { isl_union_map_empty(space) };
830        let isl_rs_result = UnionMap { ptr: isl_rs_result,
831                                       should_free_on_drop: true };
832        let err = isl_rs_ctx.last_error();
833        if err != Error::None_ {
834            let err_msg = isl_rs_ctx.last_error_msg();
835            isl_rs_ctx.reset_error();
836            return Err(LibISLError::new(err, err_msg));
837        }
838        Ok(isl_rs_result)
839    }
840
841    /// Wraps `isl_union_map_empty_ctx`.
842    pub fn empty_ctx(ctx: &Context) -> Result<UnionMap, LibISLError> {
843        let isl_rs_ctx = Context { ptr: ctx.ptr,
844                                   should_free_on_drop: false };
845        let ctx = ctx.ptr;
846        let isl_rs_result = unsafe { isl_union_map_empty_ctx(ctx) };
847        let isl_rs_result = UnionMap { ptr: isl_rs_result,
848                                       should_free_on_drop: true };
849        let err = isl_rs_ctx.last_error();
850        if err != Error::None_ {
851            let err_msg = isl_rs_ctx.last_error_msg();
852            isl_rs_ctx.reset_error();
853            return Err(LibISLError::new(err, err_msg));
854        }
855        Ok(isl_rs_result)
856    }
857
858    /// Wraps `isl_union_map_empty_space`.
859    pub fn empty_space(space: Space) -> Result<UnionMap, LibISLError> {
860        let isl_rs_ctx = space.get_ctx();
861        let mut space = space;
862        space.do_not_free_on_drop();
863        let space = space.ptr;
864        let isl_rs_result = unsafe { isl_union_map_empty_space(space) };
865        let isl_rs_result = UnionMap { ptr: isl_rs_result,
866                                       should_free_on_drop: true };
867        let err = isl_rs_ctx.last_error();
868        if err != Error::None_ {
869            let err_msg = isl_rs_ctx.last_error_msg();
870            isl_rs_ctx.reset_error();
871            return Err(LibISLError::new(err, err_msg));
872        }
873        Ok(isl_rs_result)
874    }
875
876    /// Wraps `isl_union_map_eq_at_multi_union_pw_aff`.
877    pub fn eq_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff) -> Result<UnionMap, LibISLError> {
878        let umap = self;
879        let isl_rs_ctx = umap.get_ctx();
880        let mut umap = umap;
881        umap.do_not_free_on_drop();
882        let umap = umap.ptr;
883        let mut mupa = mupa;
884        mupa.do_not_free_on_drop();
885        let mupa = mupa.ptr;
886        let isl_rs_result = unsafe { isl_union_map_eq_at_multi_union_pw_aff(umap, mupa) };
887        let isl_rs_result = UnionMap { ptr: isl_rs_result,
888                                       should_free_on_drop: true };
889        let err = isl_rs_ctx.last_error();
890        if err != Error::None_ {
891            let err_msg = isl_rs_ctx.last_error_msg();
892            isl_rs_ctx.reset_error();
893            return Err(LibISLError::new(err, err_msg));
894        }
895        Ok(isl_rs_result)
896    }
897
898    /// Wraps `isl_union_map_extract_map`.
899    pub fn extract_map(&self, space: Space) -> Result<Map, LibISLError> {
900        let umap = self;
901        let isl_rs_ctx = umap.get_ctx();
902        let umap = umap.ptr;
903        let mut space = space;
904        space.do_not_free_on_drop();
905        let space = space.ptr;
906        let isl_rs_result = unsafe { isl_union_map_extract_map(umap, space) };
907        let isl_rs_result = Map { ptr: isl_rs_result,
908                                  should_free_on_drop: true };
909        let err = isl_rs_ctx.last_error();
910        if err != Error::None_ {
911            let err_msg = isl_rs_ctx.last_error_msg();
912            isl_rs_ctx.reset_error();
913            return Err(LibISLError::new(err, err_msg));
914        }
915        Ok(isl_rs_result)
916    }
917
918    /// Wraps `isl_union_map_factor_domain`.
919    pub fn factor_domain(self) -> Result<UnionMap, LibISLError> {
920        let umap = self;
921        let isl_rs_ctx = umap.get_ctx();
922        let mut umap = umap;
923        umap.do_not_free_on_drop();
924        let umap = umap.ptr;
925        let isl_rs_result = unsafe { isl_union_map_factor_domain(umap) };
926        let isl_rs_result = UnionMap { ptr: isl_rs_result,
927                                       should_free_on_drop: true };
928        let err = isl_rs_ctx.last_error();
929        if err != Error::None_ {
930            let err_msg = isl_rs_ctx.last_error_msg();
931            isl_rs_ctx.reset_error();
932            return Err(LibISLError::new(err, err_msg));
933        }
934        Ok(isl_rs_result)
935    }
936
937    /// Wraps `isl_union_map_factor_range`.
938    pub fn factor_range(self) -> Result<UnionMap, LibISLError> {
939        let umap = self;
940        let isl_rs_ctx = umap.get_ctx();
941        let mut umap = umap;
942        umap.do_not_free_on_drop();
943        let umap = umap.ptr;
944        let isl_rs_result = unsafe { isl_union_map_factor_range(umap) };
945        let isl_rs_result = UnionMap { ptr: isl_rs_result,
946                                       should_free_on_drop: true };
947        let err = isl_rs_ctx.last_error();
948        if err != Error::None_ {
949            let err_msg = isl_rs_ctx.last_error_msg();
950            isl_rs_ctx.reset_error();
951            return Err(LibISLError::new(err, err_msg));
952        }
953        Ok(isl_rs_result)
954    }
955
956    /// Wraps `isl_union_map_find_dim_by_name`.
957    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
958        let umap = self;
959        let isl_rs_ctx = umap.get_ctx();
960        let umap = umap.ptr;
961        let type_ = type_.to_i32();
962        let name = CString::new(name).unwrap();
963        let name = name.as_ptr();
964        let isl_rs_result = unsafe { isl_union_map_find_dim_by_name(umap, type_, name) };
965        let err = isl_rs_ctx.last_error();
966        if err != Error::None_ {
967            let err_msg = isl_rs_ctx.last_error_msg();
968            isl_rs_ctx.reset_error();
969            return Err(LibISLError::new(err, err_msg));
970        }
971        Ok(isl_rs_result)
972    }
973
974    /// Wraps `isl_union_map_fixed_power_val`.
975    pub fn fixed_power_val(self, exp: Val) -> Result<UnionMap, LibISLError> {
976        let umap = self;
977        let isl_rs_ctx = umap.get_ctx();
978        let mut umap = umap;
979        umap.do_not_free_on_drop();
980        let umap = umap.ptr;
981        let mut exp = exp;
982        exp.do_not_free_on_drop();
983        let exp = exp.ptr;
984        let isl_rs_result = unsafe { isl_union_map_fixed_power_val(umap, exp) };
985        let isl_rs_result = UnionMap { ptr: isl_rs_result,
986                                       should_free_on_drop: true };
987        let err = isl_rs_ctx.last_error();
988        if err != Error::None_ {
989            let err_msg = isl_rs_ctx.last_error_msg();
990            isl_rs_ctx.reset_error();
991            return Err(LibISLError::new(err, err_msg));
992        }
993        Ok(isl_rs_result)
994    }
995
996    /// Wraps `isl_union_map_flat_domain_product`.
997    pub fn flat_domain_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
998        let umap1 = self;
999        let isl_rs_ctx = umap1.get_ctx();
1000        let mut umap1 = umap1;
1001        umap1.do_not_free_on_drop();
1002        let umap1 = umap1.ptr;
1003        let mut umap2 = umap2;
1004        umap2.do_not_free_on_drop();
1005        let umap2 = umap2.ptr;
1006        let isl_rs_result = unsafe { isl_union_map_flat_domain_product(umap1, umap2) };
1007        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1008                                       should_free_on_drop: true };
1009        let err = isl_rs_ctx.last_error();
1010        if err != Error::None_ {
1011            let err_msg = isl_rs_ctx.last_error_msg();
1012            isl_rs_ctx.reset_error();
1013            return Err(LibISLError::new(err, err_msg));
1014        }
1015        Ok(isl_rs_result)
1016    }
1017
1018    /// Wraps `isl_union_map_flat_range_product`.
1019    pub fn flat_range_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1020        let umap1 = self;
1021        let isl_rs_ctx = umap1.get_ctx();
1022        let mut umap1 = umap1;
1023        umap1.do_not_free_on_drop();
1024        let umap1 = umap1.ptr;
1025        let mut umap2 = umap2;
1026        umap2.do_not_free_on_drop();
1027        let umap2 = umap2.ptr;
1028        let isl_rs_result = unsafe { isl_union_map_flat_range_product(umap1, umap2) };
1029        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1030                                       should_free_on_drop: true };
1031        let err = isl_rs_ctx.last_error();
1032        if err != Error::None_ {
1033            let err_msg = isl_rs_ctx.last_error_msg();
1034            isl_rs_ctx.reset_error();
1035            return Err(LibISLError::new(err, err_msg));
1036        }
1037        Ok(isl_rs_result)
1038    }
1039
1040    /// Wraps `isl_union_map_free`.
1041    pub fn free(self) -> Result<UnionMap, LibISLError> {
1042        let umap = self;
1043        let isl_rs_ctx = umap.get_ctx();
1044        let mut umap = umap;
1045        umap.do_not_free_on_drop();
1046        let umap = umap.ptr;
1047        let isl_rs_result = unsafe { isl_union_map_free(umap) };
1048        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1049                                       should_free_on_drop: true };
1050        let err = isl_rs_ctx.last_error();
1051        if err != Error::None_ {
1052            let err_msg = isl_rs_ctx.last_error_msg();
1053            isl_rs_ctx.reset_error();
1054            return Err(LibISLError::new(err, err_msg));
1055        }
1056        Ok(isl_rs_result)
1057    }
1058
1059    /// Wraps `isl_union_map_from_basic_map`.
1060    pub fn from_basic_map(bmap: BasicMap) -> Result<UnionMap, LibISLError> {
1061        let isl_rs_ctx = bmap.get_ctx();
1062        let mut bmap = bmap;
1063        bmap.do_not_free_on_drop();
1064        let bmap = bmap.ptr;
1065        let isl_rs_result = unsafe { isl_union_map_from_basic_map(bmap) };
1066        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1067                                       should_free_on_drop: true };
1068        let err = isl_rs_ctx.last_error();
1069        if err != Error::None_ {
1070            let err_msg = isl_rs_ctx.last_error_msg();
1071            isl_rs_ctx.reset_error();
1072            return Err(LibISLError::new(err, err_msg));
1073        }
1074        Ok(isl_rs_result)
1075    }
1076
1077    /// Wraps `isl_union_map_from_domain`.
1078    pub fn from_domain(uset: UnionSet) -> Result<UnionMap, LibISLError> {
1079        let isl_rs_ctx = uset.get_ctx();
1080        let mut uset = uset;
1081        uset.do_not_free_on_drop();
1082        let uset = uset.ptr;
1083        let isl_rs_result = unsafe { isl_union_map_from_domain(uset) };
1084        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1085                                       should_free_on_drop: true };
1086        let err = isl_rs_ctx.last_error();
1087        if err != Error::None_ {
1088            let err_msg = isl_rs_ctx.last_error_msg();
1089            isl_rs_ctx.reset_error();
1090            return Err(LibISLError::new(err, err_msg));
1091        }
1092        Ok(isl_rs_result)
1093    }
1094
1095    /// Wraps `isl_union_map_from_domain_and_range`.
1096    pub fn from_domain_and_range(domain: UnionSet, range: UnionSet)
1097                                 -> Result<UnionMap, LibISLError> {
1098        let isl_rs_ctx = domain.get_ctx();
1099        let mut domain = domain;
1100        domain.do_not_free_on_drop();
1101        let domain = domain.ptr;
1102        let mut range = range;
1103        range.do_not_free_on_drop();
1104        let range = range.ptr;
1105        let isl_rs_result = unsafe { isl_union_map_from_domain_and_range(domain, range) };
1106        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1107                                       should_free_on_drop: true };
1108        let err = isl_rs_ctx.last_error();
1109        if err != Error::None_ {
1110            let err_msg = isl_rs_ctx.last_error_msg();
1111            isl_rs_ctx.reset_error();
1112            return Err(LibISLError::new(err, err_msg));
1113        }
1114        Ok(isl_rs_result)
1115    }
1116
1117    /// Wraps `isl_union_map_from_map`.
1118    pub fn from_map(map: Map) -> Result<UnionMap, LibISLError> {
1119        let isl_rs_ctx = map.get_ctx();
1120        let mut map = map;
1121        map.do_not_free_on_drop();
1122        let map = map.ptr;
1123        let isl_rs_result = unsafe { isl_union_map_from_map(map) };
1124        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1125                                       should_free_on_drop: true };
1126        let err = isl_rs_ctx.last_error();
1127        if err != Error::None_ {
1128            let err_msg = isl_rs_ctx.last_error_msg();
1129            isl_rs_ctx.reset_error();
1130            return Err(LibISLError::new(err, err_msg));
1131        }
1132        Ok(isl_rs_result)
1133    }
1134
1135    /// Wraps `isl_union_map_from_multi_union_pw_aff`.
1136    pub fn from_multi_union_pw_aff(mupa: MultiUnionPwAff) -> Result<UnionMap, LibISLError> {
1137        let isl_rs_ctx = mupa.get_ctx();
1138        let mut mupa = mupa;
1139        mupa.do_not_free_on_drop();
1140        let mupa = mupa.ptr;
1141        let isl_rs_result = unsafe { isl_union_map_from_multi_union_pw_aff(mupa) };
1142        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1143                                       should_free_on_drop: true };
1144        let err = isl_rs_ctx.last_error();
1145        if err != Error::None_ {
1146            let err_msg = isl_rs_ctx.last_error_msg();
1147            isl_rs_ctx.reset_error();
1148            return Err(LibISLError::new(err, err_msg));
1149        }
1150        Ok(isl_rs_result)
1151    }
1152
1153    /// Wraps `isl_union_map_from_range`.
1154    pub fn from_range(uset: UnionSet) -> Result<UnionMap, LibISLError> {
1155        let isl_rs_ctx = uset.get_ctx();
1156        let mut uset = uset;
1157        uset.do_not_free_on_drop();
1158        let uset = uset.ptr;
1159        let isl_rs_result = unsafe { isl_union_map_from_range(uset) };
1160        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1161                                       should_free_on_drop: true };
1162        let err = isl_rs_ctx.last_error();
1163        if err != Error::None_ {
1164            let err_msg = isl_rs_ctx.last_error_msg();
1165            isl_rs_ctx.reset_error();
1166            return Err(LibISLError::new(err, err_msg));
1167        }
1168        Ok(isl_rs_result)
1169    }
1170
1171    /// Wraps `isl_union_map_from_union_pw_aff`.
1172    pub fn from_union_pw_aff(upa: UnionPwAff) -> Result<UnionMap, LibISLError> {
1173        let isl_rs_ctx = upa.get_ctx();
1174        let mut upa = upa;
1175        upa.do_not_free_on_drop();
1176        let upa = upa.ptr;
1177        let isl_rs_result = unsafe { isl_union_map_from_union_pw_aff(upa) };
1178        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1179                                       should_free_on_drop: true };
1180        let err = isl_rs_ctx.last_error();
1181        if err != Error::None_ {
1182            let err_msg = isl_rs_ctx.last_error_msg();
1183            isl_rs_ctx.reset_error();
1184            return Err(LibISLError::new(err, err_msg));
1185        }
1186        Ok(isl_rs_result)
1187    }
1188
1189    /// Wraps `isl_union_map_from_union_pw_multi_aff`.
1190    pub fn from_union_pw_multi_aff(upma: UnionPwMultiAff) -> Result<UnionMap, LibISLError> {
1191        let isl_rs_ctx = upma.get_ctx();
1192        let mut upma = upma;
1193        upma.do_not_free_on_drop();
1194        let upma = upma.ptr;
1195        let isl_rs_result = unsafe { isl_union_map_from_union_pw_multi_aff(upma) };
1196        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1197                                       should_free_on_drop: true };
1198        let err = isl_rs_ctx.last_error();
1199        if err != Error::None_ {
1200            let err_msg = isl_rs_ctx.last_error_msg();
1201            isl_rs_ctx.reset_error();
1202            return Err(LibISLError::new(err, err_msg));
1203        }
1204        Ok(isl_rs_result)
1205    }
1206
1207    /// Wraps `isl_union_map_get_ctx`.
1208    pub fn get_ctx(&self) -> Context {
1209        let umap = self;
1210        let umap = umap.ptr;
1211        let isl_rs_result = unsafe { isl_union_map_get_ctx(umap) };
1212        let isl_rs_result = Context { ptr: isl_rs_result,
1213                                      should_free_on_drop: false };
1214        isl_rs_result
1215    }
1216
1217    /// Wraps `isl_union_map_get_dim_id`.
1218    pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
1219        let umap = self;
1220        let isl_rs_ctx = umap.get_ctx();
1221        let umap = umap.ptr;
1222        let type_ = type_.to_i32();
1223        let isl_rs_result = unsafe { isl_union_map_get_dim_id(umap, type_, pos) };
1224        let isl_rs_result = Id { ptr: isl_rs_result,
1225                                 should_free_on_drop: true };
1226        let err = isl_rs_ctx.last_error();
1227        if err != Error::None_ {
1228            let err_msg = isl_rs_ctx.last_error_msg();
1229            isl_rs_ctx.reset_error();
1230            return Err(LibISLError::new(err, err_msg));
1231        }
1232        Ok(isl_rs_result)
1233    }
1234
1235    /// Wraps `isl_union_map_get_hash`.
1236    pub fn get_hash(&self) -> Result<u32, LibISLError> {
1237        let umap = self;
1238        let isl_rs_ctx = umap.get_ctx();
1239        let umap = umap.ptr;
1240        let isl_rs_result = unsafe { isl_union_map_get_hash(umap) };
1241        let err = isl_rs_ctx.last_error();
1242        if err != Error::None_ {
1243            let err_msg = isl_rs_ctx.last_error_msg();
1244            isl_rs_ctx.reset_error();
1245            return Err(LibISLError::new(err, err_msg));
1246        }
1247        Ok(isl_rs_result)
1248    }
1249
1250    /// Wraps `isl_union_map_get_map_list`.
1251    pub fn get_map_list(&self) -> Result<MapList, LibISLError> {
1252        let umap = self;
1253        let isl_rs_ctx = umap.get_ctx();
1254        let umap = umap.ptr;
1255        let isl_rs_result = unsafe { isl_union_map_get_map_list(umap) };
1256        let isl_rs_result = MapList { ptr: isl_rs_result,
1257                                      should_free_on_drop: true };
1258        let err = isl_rs_ctx.last_error();
1259        if err != Error::None_ {
1260            let err_msg = isl_rs_ctx.last_error_msg();
1261            isl_rs_ctx.reset_error();
1262            return Err(LibISLError::new(err, err_msg));
1263        }
1264        Ok(isl_rs_result)
1265    }
1266
1267    /// Wraps `isl_union_map_get_space`.
1268    pub fn get_space(&self) -> Result<Space, LibISLError> {
1269        let umap = self;
1270        let isl_rs_ctx = umap.get_ctx();
1271        let umap = umap.ptr;
1272        let isl_rs_result = unsafe { isl_union_map_get_space(umap) };
1273        let isl_rs_result = Space { ptr: isl_rs_result,
1274                                    should_free_on_drop: true };
1275        let err = isl_rs_ctx.last_error();
1276        if err != Error::None_ {
1277            let err_msg = isl_rs_ctx.last_error_msg();
1278            isl_rs_ctx.reset_error();
1279            return Err(LibISLError::new(err, err_msg));
1280        }
1281        Ok(isl_rs_result)
1282    }
1283
1284    /// Wraps `isl_union_map_gist`.
1285    pub fn gist(self, context: UnionMap) -> Result<UnionMap, LibISLError> {
1286        let umap = self;
1287        let isl_rs_ctx = umap.get_ctx();
1288        let mut umap = umap;
1289        umap.do_not_free_on_drop();
1290        let umap = umap.ptr;
1291        let mut context = context;
1292        context.do_not_free_on_drop();
1293        let context = context.ptr;
1294        let isl_rs_result = unsafe { isl_union_map_gist(umap, context) };
1295        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1296                                       should_free_on_drop: true };
1297        let err = isl_rs_ctx.last_error();
1298        if err != Error::None_ {
1299            let err_msg = isl_rs_ctx.last_error_msg();
1300            isl_rs_ctx.reset_error();
1301            return Err(LibISLError::new(err, err_msg));
1302        }
1303        Ok(isl_rs_result)
1304    }
1305
1306    /// Wraps `isl_union_map_gist_domain`.
1307    pub fn gist_domain(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1308        let umap = self;
1309        let isl_rs_ctx = umap.get_ctx();
1310        let mut umap = umap;
1311        umap.do_not_free_on_drop();
1312        let umap = umap.ptr;
1313        let mut uset = uset;
1314        uset.do_not_free_on_drop();
1315        let uset = uset.ptr;
1316        let isl_rs_result = unsafe { isl_union_map_gist_domain(umap, uset) };
1317        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1318                                       should_free_on_drop: true };
1319        let err = isl_rs_ctx.last_error();
1320        if err != Error::None_ {
1321            let err_msg = isl_rs_ctx.last_error_msg();
1322            isl_rs_ctx.reset_error();
1323            return Err(LibISLError::new(err, err_msg));
1324        }
1325        Ok(isl_rs_result)
1326    }
1327
1328    /// Wraps `isl_union_map_gist_params`.
1329    pub fn gist_params(self, set: Set) -> Result<UnionMap, LibISLError> {
1330        let umap = self;
1331        let isl_rs_ctx = umap.get_ctx();
1332        let mut umap = umap;
1333        umap.do_not_free_on_drop();
1334        let umap = umap.ptr;
1335        let mut set = set;
1336        set.do_not_free_on_drop();
1337        let set = set.ptr;
1338        let isl_rs_result = unsafe { isl_union_map_gist_params(umap, set) };
1339        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1340                                       should_free_on_drop: true };
1341        let err = isl_rs_ctx.last_error();
1342        if err != Error::None_ {
1343            let err_msg = isl_rs_ctx.last_error_msg();
1344            isl_rs_ctx.reset_error();
1345            return Err(LibISLError::new(err, err_msg));
1346        }
1347        Ok(isl_rs_result)
1348    }
1349
1350    /// Wraps `isl_union_map_gist_range`.
1351    pub fn gist_range(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1352        let umap = self;
1353        let isl_rs_ctx = umap.get_ctx();
1354        let mut umap = umap;
1355        umap.do_not_free_on_drop();
1356        let umap = umap.ptr;
1357        let mut uset = uset;
1358        uset.do_not_free_on_drop();
1359        let uset = uset.ptr;
1360        let isl_rs_result = unsafe { isl_union_map_gist_range(umap, uset) };
1361        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1362                                       should_free_on_drop: true };
1363        let err = isl_rs_ctx.last_error();
1364        if err != Error::None_ {
1365            let err_msg = isl_rs_ctx.last_error_msg();
1366            isl_rs_ctx.reset_error();
1367            return Err(LibISLError::new(err, err_msg));
1368        }
1369        Ok(isl_rs_result)
1370    }
1371
1372    /// Wraps `isl_union_map_intersect`.
1373    pub fn intersect(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1374        let umap1 = self;
1375        let isl_rs_ctx = umap1.get_ctx();
1376        let mut umap1 = umap1;
1377        umap1.do_not_free_on_drop();
1378        let umap1 = umap1.ptr;
1379        let mut umap2 = umap2;
1380        umap2.do_not_free_on_drop();
1381        let umap2 = umap2.ptr;
1382        let isl_rs_result = unsafe { isl_union_map_intersect(umap1, umap2) };
1383        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1384                                       should_free_on_drop: true };
1385        let err = isl_rs_ctx.last_error();
1386        if err != Error::None_ {
1387            let err_msg = isl_rs_ctx.last_error_msg();
1388            isl_rs_ctx.reset_error();
1389            return Err(LibISLError::new(err, err_msg));
1390        }
1391        Ok(isl_rs_result)
1392    }
1393
1394    /// Wraps `isl_union_map_intersect_domain`.
1395    pub fn intersect_domain(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1396        let umap = self;
1397        let isl_rs_ctx = umap.get_ctx();
1398        let mut umap = umap;
1399        umap.do_not_free_on_drop();
1400        let umap = umap.ptr;
1401        let mut uset = uset;
1402        uset.do_not_free_on_drop();
1403        let uset = uset.ptr;
1404        let isl_rs_result = unsafe { isl_union_map_intersect_domain(umap, uset) };
1405        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1406                                       should_free_on_drop: true };
1407        let err = isl_rs_ctx.last_error();
1408        if err != Error::None_ {
1409            let err_msg = isl_rs_ctx.last_error_msg();
1410            isl_rs_ctx.reset_error();
1411            return Err(LibISLError::new(err, err_msg));
1412        }
1413        Ok(isl_rs_result)
1414    }
1415
1416    /// Wraps `isl_union_map_intersect_domain_factor_domain`.
1417    pub fn intersect_domain_factor_domain(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1418        let umap = self;
1419        let isl_rs_ctx = umap.get_ctx();
1420        let mut umap = umap;
1421        umap.do_not_free_on_drop();
1422        let umap = umap.ptr;
1423        let mut factor = factor;
1424        factor.do_not_free_on_drop();
1425        let factor = factor.ptr;
1426        let isl_rs_result = unsafe { isl_union_map_intersect_domain_factor_domain(umap, factor) };
1427        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1428                                       should_free_on_drop: true };
1429        let err = isl_rs_ctx.last_error();
1430        if err != Error::None_ {
1431            let err_msg = isl_rs_ctx.last_error_msg();
1432            isl_rs_ctx.reset_error();
1433            return Err(LibISLError::new(err, err_msg));
1434        }
1435        Ok(isl_rs_result)
1436    }
1437
1438    /// Wraps `isl_union_map_intersect_domain_factor_range`.
1439    pub fn intersect_domain_factor_range(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1440        let umap = self;
1441        let isl_rs_ctx = umap.get_ctx();
1442        let mut umap = umap;
1443        umap.do_not_free_on_drop();
1444        let umap = umap.ptr;
1445        let mut factor = factor;
1446        factor.do_not_free_on_drop();
1447        let factor = factor.ptr;
1448        let isl_rs_result = unsafe { isl_union_map_intersect_domain_factor_range(umap, factor) };
1449        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1450                                       should_free_on_drop: true };
1451        let err = isl_rs_ctx.last_error();
1452        if err != Error::None_ {
1453            let err_msg = isl_rs_ctx.last_error_msg();
1454            isl_rs_ctx.reset_error();
1455            return Err(LibISLError::new(err, err_msg));
1456        }
1457        Ok(isl_rs_result)
1458    }
1459
1460    /// Wraps `isl_union_map_intersect_domain_space`.
1461    pub fn intersect_domain_space(self, space: Space) -> Result<UnionMap, LibISLError> {
1462        let umap = self;
1463        let isl_rs_ctx = umap.get_ctx();
1464        let mut umap = umap;
1465        umap.do_not_free_on_drop();
1466        let umap = umap.ptr;
1467        let mut space = space;
1468        space.do_not_free_on_drop();
1469        let space = space.ptr;
1470        let isl_rs_result = unsafe { isl_union_map_intersect_domain_space(umap, space) };
1471        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1472                                       should_free_on_drop: true };
1473        let err = isl_rs_ctx.last_error();
1474        if err != Error::None_ {
1475            let err_msg = isl_rs_ctx.last_error_msg();
1476            isl_rs_ctx.reset_error();
1477            return Err(LibISLError::new(err, err_msg));
1478        }
1479        Ok(isl_rs_result)
1480    }
1481
1482    /// Wraps `isl_union_map_intersect_domain_union_set`.
1483    pub fn intersect_domain_union_set(self, uset: UnionSet) -> 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 uset = uset;
1490        uset.do_not_free_on_drop();
1491        let uset = uset.ptr;
1492        let isl_rs_result = unsafe { isl_union_map_intersect_domain_union_set(umap, uset) };
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            let err_msg = isl_rs_ctx.last_error_msg();
1498            isl_rs_ctx.reset_error();
1499            return Err(LibISLError::new(err, err_msg));
1500        }
1501        Ok(isl_rs_result)
1502    }
1503
1504    /// Wraps `isl_union_map_intersect_domain_wrapped_domain_union_set`.
1505    pub fn intersect_domain_wrapped_domain_union_set(self, domain: UnionSet)
1506                                                     -> Result<UnionMap, LibISLError> {
1507        let umap = self;
1508        let isl_rs_ctx = umap.get_ctx();
1509        let mut umap = umap;
1510        umap.do_not_free_on_drop();
1511        let umap = umap.ptr;
1512        let mut domain = domain;
1513        domain.do_not_free_on_drop();
1514        let domain = domain.ptr;
1515        let isl_rs_result =
1516            unsafe { isl_union_map_intersect_domain_wrapped_domain_union_set(umap, domain) };
1517        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1518                                       should_free_on_drop: true };
1519        let err = isl_rs_ctx.last_error();
1520        if err != Error::None_ {
1521            let err_msg = isl_rs_ctx.last_error_msg();
1522            isl_rs_ctx.reset_error();
1523            return Err(LibISLError::new(err, err_msg));
1524        }
1525        Ok(isl_rs_result)
1526    }
1527
1528    /// Wraps `isl_union_map_intersect_params`.
1529    pub fn intersect_params(self, set: Set) -> Result<UnionMap, LibISLError> {
1530        let umap = self;
1531        let isl_rs_ctx = umap.get_ctx();
1532        let mut umap = umap;
1533        umap.do_not_free_on_drop();
1534        let umap = umap.ptr;
1535        let mut set = set;
1536        set.do_not_free_on_drop();
1537        let set = set.ptr;
1538        let isl_rs_result = unsafe { isl_union_map_intersect_params(umap, set) };
1539        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1540                                       should_free_on_drop: true };
1541        let err = isl_rs_ctx.last_error();
1542        if err != Error::None_ {
1543            let err_msg = isl_rs_ctx.last_error_msg();
1544            isl_rs_ctx.reset_error();
1545            return Err(LibISLError::new(err, err_msg));
1546        }
1547        Ok(isl_rs_result)
1548    }
1549
1550    /// Wraps `isl_union_map_intersect_range`.
1551    pub fn intersect_range(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1552        let umap = self;
1553        let isl_rs_ctx = umap.get_ctx();
1554        let mut umap = umap;
1555        umap.do_not_free_on_drop();
1556        let umap = umap.ptr;
1557        let mut uset = uset;
1558        uset.do_not_free_on_drop();
1559        let uset = uset.ptr;
1560        let isl_rs_result = unsafe { isl_union_map_intersect_range(umap, uset) };
1561        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1562                                       should_free_on_drop: true };
1563        let err = isl_rs_ctx.last_error();
1564        if err != Error::None_ {
1565            let err_msg = isl_rs_ctx.last_error_msg();
1566            isl_rs_ctx.reset_error();
1567            return Err(LibISLError::new(err, err_msg));
1568        }
1569        Ok(isl_rs_result)
1570    }
1571
1572    /// Wraps `isl_union_map_intersect_range_factor_domain`.
1573    pub fn intersect_range_factor_domain(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1574        let umap = self;
1575        let isl_rs_ctx = umap.get_ctx();
1576        let mut umap = umap;
1577        umap.do_not_free_on_drop();
1578        let umap = umap.ptr;
1579        let mut factor = factor;
1580        factor.do_not_free_on_drop();
1581        let factor = factor.ptr;
1582        let isl_rs_result = unsafe { isl_union_map_intersect_range_factor_domain(umap, factor) };
1583        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1584                                       should_free_on_drop: true };
1585        let err = isl_rs_ctx.last_error();
1586        if err != Error::None_ {
1587            let err_msg = isl_rs_ctx.last_error_msg();
1588            isl_rs_ctx.reset_error();
1589            return Err(LibISLError::new(err, err_msg));
1590        }
1591        Ok(isl_rs_result)
1592    }
1593
1594    /// Wraps `isl_union_map_intersect_range_factor_range`.
1595    pub fn intersect_range_factor_range(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1596        let umap = self;
1597        let isl_rs_ctx = umap.get_ctx();
1598        let mut umap = umap;
1599        umap.do_not_free_on_drop();
1600        let umap = umap.ptr;
1601        let mut factor = factor;
1602        factor.do_not_free_on_drop();
1603        let factor = factor.ptr;
1604        let isl_rs_result = unsafe { isl_union_map_intersect_range_factor_range(umap, factor) };
1605        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1606                                       should_free_on_drop: true };
1607        let err = isl_rs_ctx.last_error();
1608        if err != Error::None_ {
1609            let err_msg = isl_rs_ctx.last_error_msg();
1610            isl_rs_ctx.reset_error();
1611            return Err(LibISLError::new(err, err_msg));
1612        }
1613        Ok(isl_rs_result)
1614    }
1615
1616    /// Wraps `isl_union_map_intersect_range_space`.
1617    pub fn intersect_range_space(self, space: Space) -> Result<UnionMap, LibISLError> {
1618        let umap = self;
1619        let isl_rs_ctx = umap.get_ctx();
1620        let mut umap = umap;
1621        umap.do_not_free_on_drop();
1622        let umap = umap.ptr;
1623        let mut space = space;
1624        space.do_not_free_on_drop();
1625        let space = space.ptr;
1626        let isl_rs_result = unsafe { isl_union_map_intersect_range_space(umap, space) };
1627        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1628                                       should_free_on_drop: true };
1629        let err = isl_rs_ctx.last_error();
1630        if err != Error::None_ {
1631            let err_msg = isl_rs_ctx.last_error_msg();
1632            isl_rs_ctx.reset_error();
1633            return Err(LibISLError::new(err, err_msg));
1634        }
1635        Ok(isl_rs_result)
1636    }
1637
1638    /// Wraps `isl_union_map_intersect_range_union_set`.
1639    pub fn intersect_range_union_set(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1640        let umap = self;
1641        let isl_rs_ctx = umap.get_ctx();
1642        let mut umap = umap;
1643        umap.do_not_free_on_drop();
1644        let umap = umap.ptr;
1645        let mut uset = uset;
1646        uset.do_not_free_on_drop();
1647        let uset = uset.ptr;
1648        let isl_rs_result = unsafe { isl_union_map_intersect_range_union_set(umap, uset) };
1649        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1650                                       should_free_on_drop: true };
1651        let err = isl_rs_ctx.last_error();
1652        if err != Error::None_ {
1653            let err_msg = isl_rs_ctx.last_error_msg();
1654            isl_rs_ctx.reset_error();
1655            return Err(LibISLError::new(err, err_msg));
1656        }
1657        Ok(isl_rs_result)
1658    }
1659
1660    /// Wraps `isl_union_map_intersect_range_wrapped_domain_union_set`.
1661    pub fn intersect_range_wrapped_domain_union_set(self, domain: UnionSet)
1662                                                    -> Result<UnionMap, LibISLError> {
1663        let umap = self;
1664        let isl_rs_ctx = umap.get_ctx();
1665        let mut umap = umap;
1666        umap.do_not_free_on_drop();
1667        let umap = umap.ptr;
1668        let mut domain = domain;
1669        domain.do_not_free_on_drop();
1670        let domain = domain.ptr;
1671        let isl_rs_result =
1672            unsafe { isl_union_map_intersect_range_wrapped_domain_union_set(umap, domain) };
1673        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1674                                       should_free_on_drop: true };
1675        let err = isl_rs_ctx.last_error();
1676        if err != Error::None_ {
1677            let err_msg = isl_rs_ctx.last_error_msg();
1678            isl_rs_ctx.reset_error();
1679            return Err(LibISLError::new(err, err_msg));
1680        }
1681        Ok(isl_rs_result)
1682    }
1683
1684    /// Wraps `isl_union_map_involves_dims`.
1685    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1686        let umap = self;
1687        let isl_rs_ctx = umap.get_ctx();
1688        let umap = umap.ptr;
1689        let type_ = type_.to_i32();
1690        let isl_rs_result = unsafe { isl_union_map_involves_dims(umap, type_, first, n) };
1691        let isl_rs_result = match isl_rs_result {
1692            0 => false,
1693            1 => true,
1694            _ => {
1695                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1696            }
1697        };
1698        let err = isl_rs_ctx.last_error();
1699        if err != Error::None_ {
1700            let err_msg = isl_rs_ctx.last_error_msg();
1701            isl_rs_ctx.reset_error();
1702            return Err(LibISLError::new(err, err_msg));
1703        }
1704        Ok(isl_rs_result)
1705    }
1706
1707    /// Wraps `isl_union_map_is_bijective`.
1708    pub fn is_bijective(&self) -> Result<bool, LibISLError> {
1709        let umap = self;
1710        let isl_rs_ctx = umap.get_ctx();
1711        let umap = umap.ptr;
1712        let isl_rs_result = unsafe { isl_union_map_is_bijective(umap) };
1713        let isl_rs_result = match isl_rs_result {
1714            0 => false,
1715            1 => true,
1716            _ => {
1717                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1718            }
1719        };
1720        let err = isl_rs_ctx.last_error();
1721        if err != Error::None_ {
1722            let err_msg = isl_rs_ctx.last_error_msg();
1723            isl_rs_ctx.reset_error();
1724            return Err(LibISLError::new(err, err_msg));
1725        }
1726        Ok(isl_rs_result)
1727    }
1728
1729    /// Wraps `isl_union_map_is_disjoint`.
1730    pub fn is_disjoint(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1731        let umap1 = self;
1732        let isl_rs_ctx = umap1.get_ctx();
1733        let umap1 = umap1.ptr;
1734        let umap2 = umap2.ptr;
1735        let isl_rs_result = unsafe { isl_union_map_is_disjoint(umap1, umap2) };
1736        let isl_rs_result = match isl_rs_result {
1737            0 => false,
1738            1 => true,
1739            _ => {
1740                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1741            }
1742        };
1743        let err = isl_rs_ctx.last_error();
1744        if err != Error::None_ {
1745            let err_msg = isl_rs_ctx.last_error_msg();
1746            isl_rs_ctx.reset_error();
1747            return Err(LibISLError::new(err, err_msg));
1748        }
1749        Ok(isl_rs_result)
1750    }
1751
1752    /// Wraps `isl_union_map_is_empty`.
1753    pub fn is_empty(&self) -> Result<bool, LibISLError> {
1754        let umap = self;
1755        let isl_rs_ctx = umap.get_ctx();
1756        let umap = umap.ptr;
1757        let isl_rs_result = unsafe { isl_union_map_is_empty(umap) };
1758        let isl_rs_result = match isl_rs_result {
1759            0 => false,
1760            1 => true,
1761            _ => {
1762                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1763            }
1764        };
1765        let err = isl_rs_ctx.last_error();
1766        if err != Error::None_ {
1767            let err_msg = isl_rs_ctx.last_error_msg();
1768            isl_rs_ctx.reset_error();
1769            return Err(LibISLError::new(err, err_msg));
1770        }
1771        Ok(isl_rs_result)
1772    }
1773
1774    /// Wraps `isl_union_map_is_equal`.
1775    pub fn is_equal(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1776        let umap1 = self;
1777        let isl_rs_ctx = umap1.get_ctx();
1778        let umap1 = umap1.ptr;
1779        let umap2 = umap2.ptr;
1780        let isl_rs_result = unsafe { isl_union_map_is_equal(umap1, umap2) };
1781        let isl_rs_result = match isl_rs_result {
1782            0 => false,
1783            1 => true,
1784            _ => {
1785                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1786            }
1787        };
1788        let err = isl_rs_ctx.last_error();
1789        if err != Error::None_ {
1790            let err_msg = isl_rs_ctx.last_error_msg();
1791            isl_rs_ctx.reset_error();
1792            return Err(LibISLError::new(err, err_msg));
1793        }
1794        Ok(isl_rs_result)
1795    }
1796
1797    /// Wraps `isl_union_map_is_identity`.
1798    pub fn is_identity(&self) -> Result<bool, LibISLError> {
1799        let umap = self;
1800        let isl_rs_ctx = umap.get_ctx();
1801        let umap = umap.ptr;
1802        let isl_rs_result = unsafe { isl_union_map_is_identity(umap) };
1803        let isl_rs_result = match isl_rs_result {
1804            0 => false,
1805            1 => true,
1806            _ => {
1807                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1808            }
1809        };
1810        let err = isl_rs_ctx.last_error();
1811        if err != Error::None_ {
1812            let err_msg = isl_rs_ctx.last_error_msg();
1813            isl_rs_ctx.reset_error();
1814            return Err(LibISLError::new(err, err_msg));
1815        }
1816        Ok(isl_rs_result)
1817    }
1818
1819    /// Wraps `isl_union_map_is_injective`.
1820    pub fn is_injective(&self) -> Result<bool, LibISLError> {
1821        let umap = self;
1822        let isl_rs_ctx = umap.get_ctx();
1823        let umap = umap.ptr;
1824        let isl_rs_result = unsafe { isl_union_map_is_injective(umap) };
1825        let isl_rs_result = match isl_rs_result {
1826            0 => false,
1827            1 => true,
1828            _ => {
1829                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1830            }
1831        };
1832        let err = isl_rs_ctx.last_error();
1833        if err != Error::None_ {
1834            let err_msg = isl_rs_ctx.last_error_msg();
1835            isl_rs_ctx.reset_error();
1836            return Err(LibISLError::new(err, err_msg));
1837        }
1838        Ok(isl_rs_result)
1839    }
1840
1841    /// Wraps `isl_union_map_is_single_valued`.
1842    pub fn is_single_valued(&self) -> Result<bool, LibISLError> {
1843        let umap = self;
1844        let isl_rs_ctx = umap.get_ctx();
1845        let umap = umap.ptr;
1846        let isl_rs_result = unsafe { isl_union_map_is_single_valued(umap) };
1847        let isl_rs_result = match isl_rs_result {
1848            0 => false,
1849            1 => true,
1850            _ => {
1851                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1852            }
1853        };
1854        let err = isl_rs_ctx.last_error();
1855        if err != Error::None_ {
1856            let err_msg = isl_rs_ctx.last_error_msg();
1857            isl_rs_ctx.reset_error();
1858            return Err(LibISLError::new(err, err_msg));
1859        }
1860        Ok(isl_rs_result)
1861    }
1862
1863    /// Wraps `isl_union_map_is_strict_subset`.
1864    pub fn is_strict_subset(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1865        let umap1 = self;
1866        let isl_rs_ctx = umap1.get_ctx();
1867        let umap1 = umap1.ptr;
1868        let umap2 = umap2.ptr;
1869        let isl_rs_result = unsafe { isl_union_map_is_strict_subset(umap1, umap2) };
1870        let isl_rs_result = match isl_rs_result {
1871            0 => false,
1872            1 => true,
1873            _ => {
1874                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1875            }
1876        };
1877        let err = isl_rs_ctx.last_error();
1878        if err != Error::None_ {
1879            let err_msg = isl_rs_ctx.last_error_msg();
1880            isl_rs_ctx.reset_error();
1881            return Err(LibISLError::new(err, err_msg));
1882        }
1883        Ok(isl_rs_result)
1884    }
1885
1886    /// Wraps `isl_union_map_is_subset`.
1887    pub fn is_subset(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1888        let umap1 = self;
1889        let isl_rs_ctx = umap1.get_ctx();
1890        let umap1 = umap1.ptr;
1891        let umap2 = umap2.ptr;
1892        let isl_rs_result = unsafe { isl_union_map_is_subset(umap1, umap2) };
1893        let isl_rs_result = match isl_rs_result {
1894            0 => false,
1895            1 => true,
1896            _ => {
1897                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1898            }
1899        };
1900        let err = isl_rs_ctx.last_error();
1901        if err != Error::None_ {
1902            let err_msg = isl_rs_ctx.last_error_msg();
1903            isl_rs_ctx.reset_error();
1904            return Err(LibISLError::new(err, err_msg));
1905        }
1906        Ok(isl_rs_result)
1907    }
1908
1909    /// Wraps `isl_union_map_isa_map`.
1910    pub fn isa_map(&self) -> Result<bool, LibISLError> {
1911        let umap = self;
1912        let isl_rs_ctx = umap.get_ctx();
1913        let umap = umap.ptr;
1914        let isl_rs_result = unsafe { isl_union_map_isa_map(umap) };
1915        let isl_rs_result = match isl_rs_result {
1916            0 => false,
1917            1 => true,
1918            _ => {
1919                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1920            }
1921        };
1922        let err = isl_rs_ctx.last_error();
1923        if err != Error::None_ {
1924            let err_msg = isl_rs_ctx.last_error_msg();
1925            isl_rs_ctx.reset_error();
1926            return Err(LibISLError::new(err, err_msg));
1927        }
1928        Ok(isl_rs_result)
1929    }
1930
1931    /// Wraps `isl_union_map_lex_ge_at_multi_union_pw_aff`.
1932    pub fn lex_ge_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1933                                        -> Result<UnionMap, LibISLError> {
1934        let umap = self;
1935        let isl_rs_ctx = umap.get_ctx();
1936        let mut umap = umap;
1937        umap.do_not_free_on_drop();
1938        let umap = umap.ptr;
1939        let mut mupa = mupa;
1940        mupa.do_not_free_on_drop();
1941        let mupa = mupa.ptr;
1942        let isl_rs_result = unsafe { isl_union_map_lex_ge_at_multi_union_pw_aff(umap, mupa) };
1943        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1944                                       should_free_on_drop: true };
1945        let err = isl_rs_ctx.last_error();
1946        if err != Error::None_ {
1947            let err_msg = isl_rs_ctx.last_error_msg();
1948            isl_rs_ctx.reset_error();
1949            return Err(LibISLError::new(err, err_msg));
1950        }
1951        Ok(isl_rs_result)
1952    }
1953
1954    /// Wraps `isl_union_map_lex_ge_union_map`.
1955    pub fn lex_ge_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1956        let umap1 = self;
1957        let isl_rs_ctx = umap1.get_ctx();
1958        let mut umap1 = umap1;
1959        umap1.do_not_free_on_drop();
1960        let umap1 = umap1.ptr;
1961        let mut umap2 = umap2;
1962        umap2.do_not_free_on_drop();
1963        let umap2 = umap2.ptr;
1964        let isl_rs_result = unsafe { isl_union_map_lex_ge_union_map(umap1, umap2) };
1965        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1966                                       should_free_on_drop: true };
1967        let err = isl_rs_ctx.last_error();
1968        if err != Error::None_ {
1969            let err_msg = isl_rs_ctx.last_error_msg();
1970            isl_rs_ctx.reset_error();
1971            return Err(LibISLError::new(err, err_msg));
1972        }
1973        Ok(isl_rs_result)
1974    }
1975
1976    /// Wraps `isl_union_map_lex_gt_at_multi_union_pw_aff`.
1977    pub fn lex_gt_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1978                                        -> Result<UnionMap, LibISLError> {
1979        let umap = self;
1980        let isl_rs_ctx = umap.get_ctx();
1981        let mut umap = umap;
1982        umap.do_not_free_on_drop();
1983        let umap = umap.ptr;
1984        let mut mupa = mupa;
1985        mupa.do_not_free_on_drop();
1986        let mupa = mupa.ptr;
1987        let isl_rs_result = unsafe { isl_union_map_lex_gt_at_multi_union_pw_aff(umap, mupa) };
1988        let isl_rs_result = UnionMap { ptr: isl_rs_result,
1989                                       should_free_on_drop: true };
1990        let err = isl_rs_ctx.last_error();
1991        if err != Error::None_ {
1992            let err_msg = isl_rs_ctx.last_error_msg();
1993            isl_rs_ctx.reset_error();
1994            return Err(LibISLError::new(err, err_msg));
1995        }
1996        Ok(isl_rs_result)
1997    }
1998
1999    /// Wraps `isl_union_map_lex_gt_union_map`.
2000    pub fn lex_gt_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2001        let umap1 = self;
2002        let isl_rs_ctx = umap1.get_ctx();
2003        let mut umap1 = umap1;
2004        umap1.do_not_free_on_drop();
2005        let umap1 = umap1.ptr;
2006        let mut umap2 = umap2;
2007        umap2.do_not_free_on_drop();
2008        let umap2 = umap2.ptr;
2009        let isl_rs_result = unsafe { isl_union_map_lex_gt_union_map(umap1, umap2) };
2010        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2011                                       should_free_on_drop: true };
2012        let err = isl_rs_ctx.last_error();
2013        if err != Error::None_ {
2014            let err_msg = isl_rs_ctx.last_error_msg();
2015            isl_rs_ctx.reset_error();
2016            return Err(LibISLError::new(err, err_msg));
2017        }
2018        Ok(isl_rs_result)
2019    }
2020
2021    /// Wraps `isl_union_map_lex_le_at_multi_union_pw_aff`.
2022    pub fn lex_le_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
2023                                        -> Result<UnionMap, LibISLError> {
2024        let umap = self;
2025        let isl_rs_ctx = umap.get_ctx();
2026        let mut umap = umap;
2027        umap.do_not_free_on_drop();
2028        let umap = umap.ptr;
2029        let mut mupa = mupa;
2030        mupa.do_not_free_on_drop();
2031        let mupa = mupa.ptr;
2032        let isl_rs_result = unsafe { isl_union_map_lex_le_at_multi_union_pw_aff(umap, mupa) };
2033        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2034                                       should_free_on_drop: true };
2035        let err = isl_rs_ctx.last_error();
2036        if err != Error::None_ {
2037            let err_msg = isl_rs_ctx.last_error_msg();
2038            isl_rs_ctx.reset_error();
2039            return Err(LibISLError::new(err, err_msg));
2040        }
2041        Ok(isl_rs_result)
2042    }
2043
2044    /// Wraps `isl_union_map_lex_le_union_map`.
2045    pub fn lex_le_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2046        let umap1 = self;
2047        let isl_rs_ctx = umap1.get_ctx();
2048        let mut umap1 = umap1;
2049        umap1.do_not_free_on_drop();
2050        let umap1 = umap1.ptr;
2051        let mut umap2 = umap2;
2052        umap2.do_not_free_on_drop();
2053        let umap2 = umap2.ptr;
2054        let isl_rs_result = unsafe { isl_union_map_lex_le_union_map(umap1, umap2) };
2055        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2056                                       should_free_on_drop: true };
2057        let err = isl_rs_ctx.last_error();
2058        if err != Error::None_ {
2059            let err_msg = isl_rs_ctx.last_error_msg();
2060            isl_rs_ctx.reset_error();
2061            return Err(LibISLError::new(err, err_msg));
2062        }
2063        Ok(isl_rs_result)
2064    }
2065
2066    /// Wraps `isl_union_map_lex_lt_at_multi_union_pw_aff`.
2067    pub fn lex_lt_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
2068                                        -> Result<UnionMap, LibISLError> {
2069        let umap = self;
2070        let isl_rs_ctx = umap.get_ctx();
2071        let mut umap = umap;
2072        umap.do_not_free_on_drop();
2073        let umap = umap.ptr;
2074        let mut mupa = mupa;
2075        mupa.do_not_free_on_drop();
2076        let mupa = mupa.ptr;
2077        let isl_rs_result = unsafe { isl_union_map_lex_lt_at_multi_union_pw_aff(umap, mupa) };
2078        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2079                                       should_free_on_drop: true };
2080        let err = isl_rs_ctx.last_error();
2081        if err != Error::None_ {
2082            let err_msg = isl_rs_ctx.last_error_msg();
2083            isl_rs_ctx.reset_error();
2084            return Err(LibISLError::new(err, err_msg));
2085        }
2086        Ok(isl_rs_result)
2087    }
2088
2089    /// Wraps `isl_union_map_lex_lt_union_map`.
2090    pub fn lex_lt_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2091        let umap1 = self;
2092        let isl_rs_ctx = umap1.get_ctx();
2093        let mut umap1 = umap1;
2094        umap1.do_not_free_on_drop();
2095        let umap1 = umap1.ptr;
2096        let mut umap2 = umap2;
2097        umap2.do_not_free_on_drop();
2098        let umap2 = umap2.ptr;
2099        let isl_rs_result = unsafe { isl_union_map_lex_lt_union_map(umap1, umap2) };
2100        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2101                                       should_free_on_drop: true };
2102        let err = isl_rs_ctx.last_error();
2103        if err != Error::None_ {
2104            let err_msg = isl_rs_ctx.last_error_msg();
2105            isl_rs_ctx.reset_error();
2106            return Err(LibISLError::new(err, err_msg));
2107        }
2108        Ok(isl_rs_result)
2109    }
2110
2111    /// Wraps `isl_union_map_lexmax`.
2112    pub fn lexmax(self) -> Result<UnionMap, LibISLError> {
2113        let umap = self;
2114        let isl_rs_ctx = umap.get_ctx();
2115        let mut umap = umap;
2116        umap.do_not_free_on_drop();
2117        let umap = umap.ptr;
2118        let isl_rs_result = unsafe { isl_union_map_lexmax(umap) };
2119        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2120                                       should_free_on_drop: true };
2121        let err = isl_rs_ctx.last_error();
2122        if err != Error::None_ {
2123            let err_msg = isl_rs_ctx.last_error_msg();
2124            isl_rs_ctx.reset_error();
2125            return Err(LibISLError::new(err, err_msg));
2126        }
2127        Ok(isl_rs_result)
2128    }
2129
2130    /// Wraps `isl_union_map_lexmin`.
2131    pub fn lexmin(self) -> Result<UnionMap, LibISLError> {
2132        let umap = self;
2133        let isl_rs_ctx = umap.get_ctx();
2134        let mut umap = umap;
2135        umap.do_not_free_on_drop();
2136        let umap = umap.ptr;
2137        let isl_rs_result = unsafe { isl_union_map_lexmin(umap) };
2138        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2139                                       should_free_on_drop: true };
2140        let err = isl_rs_ctx.last_error();
2141        if err != Error::None_ {
2142            let err_msg = isl_rs_ctx.last_error_msg();
2143            isl_rs_ctx.reset_error();
2144            return Err(LibISLError::new(err, err_msg));
2145        }
2146        Ok(isl_rs_result)
2147    }
2148
2149    /// Wraps `isl_union_map_n_map`.
2150    pub fn n_map(&self) -> Result<i32, LibISLError> {
2151        let umap = self;
2152        let isl_rs_ctx = umap.get_ctx();
2153        let umap = umap.ptr;
2154        let isl_rs_result = unsafe { isl_union_map_n_map(umap) };
2155        let err = isl_rs_ctx.last_error();
2156        if err != Error::None_ {
2157            let err_msg = isl_rs_ctx.last_error_msg();
2158            isl_rs_ctx.reset_error();
2159            return Err(LibISLError::new(err, err_msg));
2160        }
2161        Ok(isl_rs_result)
2162    }
2163
2164    /// Wraps `isl_union_map_params`.
2165    pub fn params(self) -> Result<Set, LibISLError> {
2166        let umap = self;
2167        let isl_rs_ctx = umap.get_ctx();
2168        let mut umap = umap;
2169        umap.do_not_free_on_drop();
2170        let umap = umap.ptr;
2171        let isl_rs_result = unsafe { isl_union_map_params(umap) };
2172        let isl_rs_result = Set { ptr: isl_rs_result,
2173                                  should_free_on_drop: true };
2174        let err = isl_rs_ctx.last_error();
2175        if err != Error::None_ {
2176            let err_msg = isl_rs_ctx.last_error_msg();
2177            isl_rs_ctx.reset_error();
2178            return Err(LibISLError::new(err, err_msg));
2179        }
2180        Ok(isl_rs_result)
2181    }
2182
2183    /// Wraps `isl_union_map_plain_is_empty`.
2184    pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
2185        let umap = self;
2186        let isl_rs_ctx = umap.get_ctx();
2187        let umap = umap.ptr;
2188        let isl_rs_result = unsafe { isl_union_map_plain_is_empty(umap) };
2189        let isl_rs_result = match isl_rs_result {
2190            0 => false,
2191            1 => true,
2192            _ => {
2193                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2194            }
2195        };
2196        let err = isl_rs_ctx.last_error();
2197        if err != Error::None_ {
2198            let err_msg = isl_rs_ctx.last_error_msg();
2199            isl_rs_ctx.reset_error();
2200            return Err(LibISLError::new(err, err_msg));
2201        }
2202        Ok(isl_rs_result)
2203    }
2204
2205    /// Wraps `isl_union_map_plain_is_injective`.
2206    pub fn plain_is_injective(&self) -> Result<bool, LibISLError> {
2207        let umap = self;
2208        let isl_rs_ctx = umap.get_ctx();
2209        let umap = umap.ptr;
2210        let isl_rs_result = unsafe { isl_union_map_plain_is_injective(umap) };
2211        let isl_rs_result = match isl_rs_result {
2212            0 => false,
2213            1 => true,
2214            _ => {
2215                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2216            }
2217        };
2218        let err = isl_rs_ctx.last_error();
2219        if err != Error::None_ {
2220            let err_msg = isl_rs_ctx.last_error_msg();
2221            isl_rs_ctx.reset_error();
2222            return Err(LibISLError::new(err, err_msg));
2223        }
2224        Ok(isl_rs_result)
2225    }
2226
2227    /// Wraps `isl_union_map_plain_unshifted_simple_hull`.
2228    pub fn plain_unshifted_simple_hull(self) -> Result<UnionMap, LibISLError> {
2229        let umap = self;
2230        let isl_rs_ctx = umap.get_ctx();
2231        let mut umap = umap;
2232        umap.do_not_free_on_drop();
2233        let umap = umap.ptr;
2234        let isl_rs_result = unsafe { isl_union_map_plain_unshifted_simple_hull(umap) };
2235        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2236                                       should_free_on_drop: true };
2237        let err = isl_rs_ctx.last_error();
2238        if err != Error::None_ {
2239            let err_msg = isl_rs_ctx.last_error_msg();
2240            isl_rs_ctx.reset_error();
2241            return Err(LibISLError::new(err, err_msg));
2242        }
2243        Ok(isl_rs_result)
2244    }
2245
2246    /// Wraps `isl_union_map_polyhedral_hull`.
2247    pub fn polyhedral_hull(self) -> Result<UnionMap, LibISLError> {
2248        let umap = self;
2249        let isl_rs_ctx = umap.get_ctx();
2250        let mut umap = umap;
2251        umap.do_not_free_on_drop();
2252        let umap = umap.ptr;
2253        let isl_rs_result = unsafe { isl_union_map_polyhedral_hull(umap) };
2254        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2255                                       should_free_on_drop: true };
2256        let err = isl_rs_ctx.last_error();
2257        if err != Error::None_ {
2258            let err_msg = isl_rs_ctx.last_error_msg();
2259            isl_rs_ctx.reset_error();
2260            return Err(LibISLError::new(err, err_msg));
2261        }
2262        Ok(isl_rs_result)
2263    }
2264
2265    /// Wraps `isl_union_map_preimage_domain_multi_aff`.
2266    pub fn preimage_domain_multi_aff(self, ma: MultiAff) -> Result<UnionMap, LibISLError> {
2267        let umap = self;
2268        let isl_rs_ctx = umap.get_ctx();
2269        let mut umap = umap;
2270        umap.do_not_free_on_drop();
2271        let umap = umap.ptr;
2272        let mut ma = ma;
2273        ma.do_not_free_on_drop();
2274        let ma = ma.ptr;
2275        let isl_rs_result = unsafe { isl_union_map_preimage_domain_multi_aff(umap, ma) };
2276        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2277                                       should_free_on_drop: true };
2278        let err = isl_rs_ctx.last_error();
2279        if err != Error::None_ {
2280            let err_msg = isl_rs_ctx.last_error_msg();
2281            isl_rs_ctx.reset_error();
2282            return Err(LibISLError::new(err, err_msg));
2283        }
2284        Ok(isl_rs_result)
2285    }
2286
2287    /// Wraps `isl_union_map_preimage_domain_multi_pw_aff`.
2288    pub fn preimage_domain_multi_pw_aff(self, mpa: MultiPwAff) -> Result<UnionMap, LibISLError> {
2289        let umap = self;
2290        let isl_rs_ctx = umap.get_ctx();
2291        let mut umap = umap;
2292        umap.do_not_free_on_drop();
2293        let umap = umap.ptr;
2294        let mut mpa = mpa;
2295        mpa.do_not_free_on_drop();
2296        let mpa = mpa.ptr;
2297        let isl_rs_result = unsafe { isl_union_map_preimage_domain_multi_pw_aff(umap, mpa) };
2298        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2299                                       should_free_on_drop: true };
2300        let err = isl_rs_ctx.last_error();
2301        if err != Error::None_ {
2302            let err_msg = isl_rs_ctx.last_error_msg();
2303            isl_rs_ctx.reset_error();
2304            return Err(LibISLError::new(err, err_msg));
2305        }
2306        Ok(isl_rs_result)
2307    }
2308
2309    /// Wraps `isl_union_map_preimage_domain_pw_multi_aff`.
2310    pub fn preimage_domain_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionMap, LibISLError> {
2311        let umap = self;
2312        let isl_rs_ctx = umap.get_ctx();
2313        let mut umap = umap;
2314        umap.do_not_free_on_drop();
2315        let umap = umap.ptr;
2316        let mut pma = pma;
2317        pma.do_not_free_on_drop();
2318        let pma = pma.ptr;
2319        let isl_rs_result = unsafe { isl_union_map_preimage_domain_pw_multi_aff(umap, pma) };
2320        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2321                                       should_free_on_drop: true };
2322        let err = isl_rs_ctx.last_error();
2323        if err != Error::None_ {
2324            let err_msg = isl_rs_ctx.last_error_msg();
2325            isl_rs_ctx.reset_error();
2326            return Err(LibISLError::new(err, err_msg));
2327        }
2328        Ok(isl_rs_result)
2329    }
2330
2331    /// Wraps `isl_union_map_preimage_domain_union_pw_multi_aff`.
2332    pub fn preimage_domain_union_pw_multi_aff(self, upma: UnionPwMultiAff)
2333                                              -> Result<UnionMap, LibISLError> {
2334        let umap = self;
2335        let isl_rs_ctx = umap.get_ctx();
2336        let mut umap = umap;
2337        umap.do_not_free_on_drop();
2338        let umap = umap.ptr;
2339        let mut upma = upma;
2340        upma.do_not_free_on_drop();
2341        let upma = upma.ptr;
2342        let isl_rs_result = unsafe { isl_union_map_preimage_domain_union_pw_multi_aff(umap, upma) };
2343        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2344                                       should_free_on_drop: true };
2345        let err = isl_rs_ctx.last_error();
2346        if err != Error::None_ {
2347            let err_msg = isl_rs_ctx.last_error_msg();
2348            isl_rs_ctx.reset_error();
2349            return Err(LibISLError::new(err, err_msg));
2350        }
2351        Ok(isl_rs_result)
2352    }
2353
2354    /// Wraps `isl_union_map_preimage_range_multi_aff`.
2355    pub fn preimage_range_multi_aff(self, ma: MultiAff) -> Result<UnionMap, LibISLError> {
2356        let umap = self;
2357        let isl_rs_ctx = umap.get_ctx();
2358        let mut umap = umap;
2359        umap.do_not_free_on_drop();
2360        let umap = umap.ptr;
2361        let mut ma = ma;
2362        ma.do_not_free_on_drop();
2363        let ma = ma.ptr;
2364        let isl_rs_result = unsafe { isl_union_map_preimage_range_multi_aff(umap, ma) };
2365        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2366                                       should_free_on_drop: true };
2367        let err = isl_rs_ctx.last_error();
2368        if err != Error::None_ {
2369            let err_msg = isl_rs_ctx.last_error_msg();
2370            isl_rs_ctx.reset_error();
2371            return Err(LibISLError::new(err, err_msg));
2372        }
2373        Ok(isl_rs_result)
2374    }
2375
2376    /// Wraps `isl_union_map_preimage_range_pw_multi_aff`.
2377    pub fn preimage_range_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionMap, LibISLError> {
2378        let umap = self;
2379        let isl_rs_ctx = umap.get_ctx();
2380        let mut umap = umap;
2381        umap.do_not_free_on_drop();
2382        let umap = umap.ptr;
2383        let mut pma = pma;
2384        pma.do_not_free_on_drop();
2385        let pma = pma.ptr;
2386        let isl_rs_result = unsafe { isl_union_map_preimage_range_pw_multi_aff(umap, pma) };
2387        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2388                                       should_free_on_drop: true };
2389        let err = isl_rs_ctx.last_error();
2390        if err != Error::None_ {
2391            let err_msg = isl_rs_ctx.last_error_msg();
2392            isl_rs_ctx.reset_error();
2393            return Err(LibISLError::new(err, err_msg));
2394        }
2395        Ok(isl_rs_result)
2396    }
2397
2398    /// Wraps `isl_union_map_preimage_range_union_pw_multi_aff`.
2399    pub fn preimage_range_union_pw_multi_aff(self, upma: UnionPwMultiAff)
2400                                             -> Result<UnionMap, LibISLError> {
2401        let umap = self;
2402        let isl_rs_ctx = umap.get_ctx();
2403        let mut umap = umap;
2404        umap.do_not_free_on_drop();
2405        let umap = umap.ptr;
2406        let mut upma = upma;
2407        upma.do_not_free_on_drop();
2408        let upma = upma.ptr;
2409        let isl_rs_result = unsafe { isl_union_map_preimage_range_union_pw_multi_aff(umap, upma) };
2410        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2411                                       should_free_on_drop: true };
2412        let err = isl_rs_ctx.last_error();
2413        if err != Error::None_ {
2414            let err_msg = isl_rs_ctx.last_error_msg();
2415            isl_rs_ctx.reset_error();
2416            return Err(LibISLError::new(err, err_msg));
2417        }
2418        Ok(isl_rs_result)
2419    }
2420
2421    /// Wraps `isl_union_map_product`.
2422    pub fn product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2423        let umap1 = self;
2424        let isl_rs_ctx = umap1.get_ctx();
2425        let mut umap1 = umap1;
2426        umap1.do_not_free_on_drop();
2427        let umap1 = umap1.ptr;
2428        let mut umap2 = umap2;
2429        umap2.do_not_free_on_drop();
2430        let umap2 = umap2.ptr;
2431        let isl_rs_result = unsafe { isl_union_map_product(umap1, umap2) };
2432        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2433                                       should_free_on_drop: true };
2434        let err = isl_rs_ctx.last_error();
2435        if err != Error::None_ {
2436            let err_msg = isl_rs_ctx.last_error_msg();
2437            isl_rs_ctx.reset_error();
2438            return Err(LibISLError::new(err, err_msg));
2439        }
2440        Ok(isl_rs_result)
2441    }
2442
2443    /// Wraps `isl_union_map_project_out`.
2444    pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<UnionMap, LibISLError> {
2445        let umap = self;
2446        let isl_rs_ctx = umap.get_ctx();
2447        let mut umap = umap;
2448        umap.do_not_free_on_drop();
2449        let umap = umap.ptr;
2450        let type_ = type_.to_i32();
2451        let isl_rs_result = unsafe { isl_union_map_project_out(umap, type_, first, n) };
2452        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2453                                       should_free_on_drop: true };
2454        let err = isl_rs_ctx.last_error();
2455        if err != Error::None_ {
2456            let err_msg = isl_rs_ctx.last_error_msg();
2457            isl_rs_ctx.reset_error();
2458            return Err(LibISLError::new(err, err_msg));
2459        }
2460        Ok(isl_rs_result)
2461    }
2462
2463    /// Wraps `isl_union_map_project_out_all_params`.
2464    pub fn project_out_all_params(self) -> Result<UnionMap, LibISLError> {
2465        let umap = self;
2466        let isl_rs_ctx = umap.get_ctx();
2467        let mut umap = umap;
2468        umap.do_not_free_on_drop();
2469        let umap = umap.ptr;
2470        let isl_rs_result = unsafe { isl_union_map_project_out_all_params(umap) };
2471        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2472                                       should_free_on_drop: true };
2473        let err = isl_rs_ctx.last_error();
2474        if err != Error::None_ {
2475            let err_msg = isl_rs_ctx.last_error_msg();
2476            isl_rs_ctx.reset_error();
2477            return Err(LibISLError::new(err, err_msg));
2478        }
2479        Ok(isl_rs_result)
2480    }
2481
2482    /// Wraps `isl_union_map_project_out_param_id`.
2483    pub fn project_out_param_id(self, id: Id) -> Result<UnionMap, LibISLError> {
2484        let umap = self;
2485        let isl_rs_ctx = umap.get_ctx();
2486        let mut umap = umap;
2487        umap.do_not_free_on_drop();
2488        let umap = umap.ptr;
2489        let mut id = id;
2490        id.do_not_free_on_drop();
2491        let id = id.ptr;
2492        let isl_rs_result = unsafe { isl_union_map_project_out_param_id(umap, id) };
2493        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2494                                       should_free_on_drop: true };
2495        let err = isl_rs_ctx.last_error();
2496        if err != Error::None_ {
2497            let err_msg = isl_rs_ctx.last_error_msg();
2498            isl_rs_ctx.reset_error();
2499            return Err(LibISLError::new(err, err_msg));
2500        }
2501        Ok(isl_rs_result)
2502    }
2503
2504    /// Wraps `isl_union_map_project_out_param_id_list`.
2505    pub fn project_out_param_id_list(self, list: IdList) -> Result<UnionMap, LibISLError> {
2506        let umap = self;
2507        let isl_rs_ctx = umap.get_ctx();
2508        let mut umap = umap;
2509        umap.do_not_free_on_drop();
2510        let umap = umap.ptr;
2511        let mut list = list;
2512        list.do_not_free_on_drop();
2513        let list = list.ptr;
2514        let isl_rs_result = unsafe { isl_union_map_project_out_param_id_list(umap, list) };
2515        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2516                                       should_free_on_drop: true };
2517        let err = isl_rs_ctx.last_error();
2518        if err != Error::None_ {
2519            let err_msg = isl_rs_ctx.last_error_msg();
2520            isl_rs_ctx.reset_error();
2521            return Err(LibISLError::new(err, err_msg));
2522        }
2523        Ok(isl_rs_result)
2524    }
2525
2526    /// Wraps `isl_union_map_range`.
2527    pub fn range(self) -> Result<UnionSet, LibISLError> {
2528        let umap = self;
2529        let isl_rs_ctx = umap.get_ctx();
2530        let mut umap = umap;
2531        umap.do_not_free_on_drop();
2532        let umap = umap.ptr;
2533        let isl_rs_result = unsafe { isl_union_map_range(umap) };
2534        let isl_rs_result = UnionSet { ptr: isl_rs_result,
2535                                       should_free_on_drop: true };
2536        let err = isl_rs_ctx.last_error();
2537        if err != Error::None_ {
2538            let err_msg = isl_rs_ctx.last_error_msg();
2539            isl_rs_ctx.reset_error();
2540            return Err(LibISLError::new(err, err_msg));
2541        }
2542        Ok(isl_rs_result)
2543    }
2544
2545    /// Wraps `isl_union_map_range_curry`.
2546    pub fn range_curry(self) -> Result<UnionMap, LibISLError> {
2547        let umap = self;
2548        let isl_rs_ctx = umap.get_ctx();
2549        let mut umap = umap;
2550        umap.do_not_free_on_drop();
2551        let umap = umap.ptr;
2552        let isl_rs_result = unsafe { isl_union_map_range_curry(umap) };
2553        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2554                                       should_free_on_drop: true };
2555        let err = isl_rs_ctx.last_error();
2556        if err != Error::None_ {
2557            let err_msg = isl_rs_ctx.last_error_msg();
2558            isl_rs_ctx.reset_error();
2559            return Err(LibISLError::new(err, err_msg));
2560        }
2561        Ok(isl_rs_result)
2562    }
2563
2564    /// Wraps `isl_union_map_range_factor_domain`.
2565    pub fn range_factor_domain(self) -> Result<UnionMap, LibISLError> {
2566        let umap = self;
2567        let isl_rs_ctx = umap.get_ctx();
2568        let mut umap = umap;
2569        umap.do_not_free_on_drop();
2570        let umap = umap.ptr;
2571        let isl_rs_result = unsafe { isl_union_map_range_factor_domain(umap) };
2572        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2573                                       should_free_on_drop: true };
2574        let err = isl_rs_ctx.last_error();
2575        if err != Error::None_ {
2576            let err_msg = isl_rs_ctx.last_error_msg();
2577            isl_rs_ctx.reset_error();
2578            return Err(LibISLError::new(err, err_msg));
2579        }
2580        Ok(isl_rs_result)
2581    }
2582
2583    /// Wraps `isl_union_map_range_factor_range`.
2584    pub fn range_factor_range(self) -> Result<UnionMap, LibISLError> {
2585        let umap = self;
2586        let isl_rs_ctx = umap.get_ctx();
2587        let mut umap = umap;
2588        umap.do_not_free_on_drop();
2589        let umap = umap.ptr;
2590        let isl_rs_result = unsafe { isl_union_map_range_factor_range(umap) };
2591        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2592                                       should_free_on_drop: true };
2593        let err = isl_rs_ctx.last_error();
2594        if err != Error::None_ {
2595            let err_msg = isl_rs_ctx.last_error_msg();
2596            isl_rs_ctx.reset_error();
2597            return Err(LibISLError::new(err, err_msg));
2598        }
2599        Ok(isl_rs_result)
2600    }
2601
2602    /// Wraps `isl_union_map_range_map`.
2603    pub fn range_map(self) -> Result<UnionMap, LibISLError> {
2604        let umap = self;
2605        let isl_rs_ctx = umap.get_ctx();
2606        let mut umap = umap;
2607        umap.do_not_free_on_drop();
2608        let umap = umap.ptr;
2609        let isl_rs_result = unsafe { isl_union_map_range_map(umap) };
2610        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2611                                       should_free_on_drop: true };
2612        let err = isl_rs_ctx.last_error();
2613        if err != Error::None_ {
2614            let err_msg = isl_rs_ctx.last_error_msg();
2615            isl_rs_ctx.reset_error();
2616            return Err(LibISLError::new(err, err_msg));
2617        }
2618        Ok(isl_rs_result)
2619    }
2620
2621    /// Wraps `isl_union_map_range_product`.
2622    pub fn range_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2623        let umap1 = self;
2624        let isl_rs_ctx = umap1.get_ctx();
2625        let mut umap1 = umap1;
2626        umap1.do_not_free_on_drop();
2627        let umap1 = umap1.ptr;
2628        let mut umap2 = umap2;
2629        umap2.do_not_free_on_drop();
2630        let umap2 = umap2.ptr;
2631        let isl_rs_result = unsafe { isl_union_map_range_product(umap1, umap2) };
2632        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2633                                       should_free_on_drop: true };
2634        let err = isl_rs_ctx.last_error();
2635        if err != Error::None_ {
2636            let err_msg = isl_rs_ctx.last_error_msg();
2637            isl_rs_ctx.reset_error();
2638            return Err(LibISLError::new(err, err_msg));
2639        }
2640        Ok(isl_rs_result)
2641    }
2642
2643    /// Wraps `isl_union_map_range_reverse`.
2644    pub fn range_reverse(self) -> Result<UnionMap, LibISLError> {
2645        let umap = self;
2646        let isl_rs_ctx = umap.get_ctx();
2647        let mut umap = umap;
2648        umap.do_not_free_on_drop();
2649        let umap = umap.ptr;
2650        let isl_rs_result = unsafe { isl_union_map_range_reverse(umap) };
2651        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2652                                       should_free_on_drop: true };
2653        let err = isl_rs_ctx.last_error();
2654        if err != Error::None_ {
2655            let err_msg = isl_rs_ctx.last_error_msg();
2656            isl_rs_ctx.reset_error();
2657            return Err(LibISLError::new(err, err_msg));
2658        }
2659        Ok(isl_rs_result)
2660    }
2661
2662    /// Wraps `isl_union_map_read_from_str`.
2663    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<UnionMap, LibISLError> {
2664        let isl_rs_ctx = Context { ptr: ctx.ptr,
2665                                   should_free_on_drop: false };
2666        let ctx = ctx.ptr;
2667        let str_ = CString::new(str_).unwrap();
2668        let str_ = str_.as_ptr();
2669        let isl_rs_result = unsafe { isl_union_map_read_from_str(ctx, str_) };
2670        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2671                                       should_free_on_drop: true };
2672        let err = isl_rs_ctx.last_error();
2673        if err != Error::None_ {
2674            let err_msg = isl_rs_ctx.last_error_msg();
2675            isl_rs_ctx.reset_error();
2676            return Err(LibISLError::new(err, err_msg));
2677        }
2678        Ok(isl_rs_result)
2679    }
2680
2681    /// Wraps `isl_union_map_remove_divs`.
2682    pub fn remove_divs(self) -> Result<UnionMap, LibISLError> {
2683        let bmap = self;
2684        let isl_rs_ctx = bmap.get_ctx();
2685        let mut bmap = bmap;
2686        bmap.do_not_free_on_drop();
2687        let bmap = bmap.ptr;
2688        let isl_rs_result = unsafe { isl_union_map_remove_divs(bmap) };
2689        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2690                                       should_free_on_drop: true };
2691        let err = isl_rs_ctx.last_error();
2692        if err != Error::None_ {
2693            let err_msg = isl_rs_ctx.last_error_msg();
2694            isl_rs_ctx.reset_error();
2695            return Err(LibISLError::new(err, err_msg));
2696        }
2697        Ok(isl_rs_result)
2698    }
2699
2700    /// Wraps `isl_union_map_remove_redundancies`.
2701    pub fn remove_redundancies(self) -> Result<UnionMap, LibISLError> {
2702        let umap = self;
2703        let isl_rs_ctx = umap.get_ctx();
2704        let mut umap = umap;
2705        umap.do_not_free_on_drop();
2706        let umap = umap.ptr;
2707        let isl_rs_result = unsafe { isl_union_map_remove_redundancies(umap) };
2708        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2709                                       should_free_on_drop: true };
2710        let err = isl_rs_ctx.last_error();
2711        if err != Error::None_ {
2712            let err_msg = isl_rs_ctx.last_error_msg();
2713            isl_rs_ctx.reset_error();
2714            return Err(LibISLError::new(err, err_msg));
2715        }
2716        Ok(isl_rs_result)
2717    }
2718
2719    /// Wraps `isl_union_map_reset_user`.
2720    pub fn reset_user(self) -> Result<UnionMap, LibISLError> {
2721        let umap = self;
2722        let isl_rs_ctx = umap.get_ctx();
2723        let mut umap = umap;
2724        umap.do_not_free_on_drop();
2725        let umap = umap.ptr;
2726        let isl_rs_result = unsafe { isl_union_map_reset_user(umap) };
2727        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2728                                       should_free_on_drop: true };
2729        let err = isl_rs_ctx.last_error();
2730        if err != Error::None_ {
2731            let err_msg = isl_rs_ctx.last_error_msg();
2732            isl_rs_ctx.reset_error();
2733            return Err(LibISLError::new(err, err_msg));
2734        }
2735        Ok(isl_rs_result)
2736    }
2737
2738    /// Wraps `isl_union_map_reverse`.
2739    pub fn reverse(self) -> Result<UnionMap, LibISLError> {
2740        let umap = self;
2741        let isl_rs_ctx = umap.get_ctx();
2742        let mut umap = umap;
2743        umap.do_not_free_on_drop();
2744        let umap = umap.ptr;
2745        let isl_rs_result = unsafe { isl_union_map_reverse(umap) };
2746        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2747                                       should_free_on_drop: true };
2748        let err = isl_rs_ctx.last_error();
2749        if err != Error::None_ {
2750            let err_msg = isl_rs_ctx.last_error_msg();
2751            isl_rs_ctx.reset_error();
2752            return Err(LibISLError::new(err, err_msg));
2753        }
2754        Ok(isl_rs_result)
2755    }
2756
2757    /// Wraps `isl_union_map_sample`.
2758    pub fn sample(self) -> Result<BasicMap, LibISLError> {
2759        let umap = self;
2760        let isl_rs_ctx = umap.get_ctx();
2761        let mut umap = umap;
2762        umap.do_not_free_on_drop();
2763        let umap = umap.ptr;
2764        let isl_rs_result = unsafe { isl_union_map_sample(umap) };
2765        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2766                                       should_free_on_drop: true };
2767        let err = isl_rs_ctx.last_error();
2768        if err != Error::None_ {
2769            let err_msg = isl_rs_ctx.last_error_msg();
2770            isl_rs_ctx.reset_error();
2771            return Err(LibISLError::new(err, err_msg));
2772        }
2773        Ok(isl_rs_result)
2774    }
2775
2776    /// Wraps `isl_union_map_simple_hull`.
2777    pub fn simple_hull(self) -> Result<UnionMap, LibISLError> {
2778        let umap = self;
2779        let isl_rs_ctx = umap.get_ctx();
2780        let mut umap = umap;
2781        umap.do_not_free_on_drop();
2782        let umap = umap.ptr;
2783        let isl_rs_result = unsafe { isl_union_map_simple_hull(umap) };
2784        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2785                                       should_free_on_drop: true };
2786        let err = isl_rs_ctx.last_error();
2787        if err != Error::None_ {
2788            let err_msg = isl_rs_ctx.last_error_msg();
2789            isl_rs_ctx.reset_error();
2790            return Err(LibISLError::new(err, err_msg));
2791        }
2792        Ok(isl_rs_result)
2793    }
2794
2795    /// Wraps `isl_union_map_subtract`.
2796    pub fn subtract(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2797        let umap1 = self;
2798        let isl_rs_ctx = umap1.get_ctx();
2799        let mut umap1 = umap1;
2800        umap1.do_not_free_on_drop();
2801        let umap1 = umap1.ptr;
2802        let mut umap2 = umap2;
2803        umap2.do_not_free_on_drop();
2804        let umap2 = umap2.ptr;
2805        let isl_rs_result = unsafe { isl_union_map_subtract(umap1, umap2) };
2806        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2807                                       should_free_on_drop: true };
2808        let err = isl_rs_ctx.last_error();
2809        if err != Error::None_ {
2810            let err_msg = isl_rs_ctx.last_error_msg();
2811            isl_rs_ctx.reset_error();
2812            return Err(LibISLError::new(err, err_msg));
2813        }
2814        Ok(isl_rs_result)
2815    }
2816
2817    /// Wraps `isl_union_map_subtract_domain`.
2818    pub fn subtract_domain(self, dom: UnionSet) -> Result<UnionMap, LibISLError> {
2819        let umap = self;
2820        let isl_rs_ctx = umap.get_ctx();
2821        let mut umap = umap;
2822        umap.do_not_free_on_drop();
2823        let umap = umap.ptr;
2824        let mut dom = dom;
2825        dom.do_not_free_on_drop();
2826        let dom = dom.ptr;
2827        let isl_rs_result = unsafe { isl_union_map_subtract_domain(umap, dom) };
2828        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2829                                       should_free_on_drop: true };
2830        let err = isl_rs_ctx.last_error();
2831        if err != Error::None_ {
2832            let err_msg = isl_rs_ctx.last_error_msg();
2833            isl_rs_ctx.reset_error();
2834            return Err(LibISLError::new(err, err_msg));
2835        }
2836        Ok(isl_rs_result)
2837    }
2838
2839    /// Wraps `isl_union_map_subtract_range`.
2840    pub fn subtract_range(self, dom: UnionSet) -> Result<UnionMap, LibISLError> {
2841        let umap = self;
2842        let isl_rs_ctx = umap.get_ctx();
2843        let mut umap = umap;
2844        umap.do_not_free_on_drop();
2845        let umap = umap.ptr;
2846        let mut dom = dom;
2847        dom.do_not_free_on_drop();
2848        let dom = dom.ptr;
2849        let isl_rs_result = unsafe { isl_union_map_subtract_range(umap, dom) };
2850        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2851                                       should_free_on_drop: true };
2852        let err = isl_rs_ctx.last_error();
2853        if err != Error::None_ {
2854            let err_msg = isl_rs_ctx.last_error_msg();
2855            isl_rs_ctx.reset_error();
2856            return Err(LibISLError::new(err, err_msg));
2857        }
2858        Ok(isl_rs_result)
2859    }
2860
2861    /// Wraps `isl_union_map_to_list`.
2862    pub fn to_list(self) -> Result<UnionMapList, LibISLError> {
2863        let el = self;
2864        let isl_rs_ctx = el.get_ctx();
2865        let mut el = el;
2866        el.do_not_free_on_drop();
2867        let el = el.ptr;
2868        let isl_rs_result = unsafe { isl_union_map_to_list(el) };
2869        let isl_rs_result = UnionMapList { ptr: isl_rs_result,
2870                                           should_free_on_drop: true };
2871        let err = isl_rs_ctx.last_error();
2872        if err != Error::None_ {
2873            let err_msg = isl_rs_ctx.last_error_msg();
2874            isl_rs_ctx.reset_error();
2875            return Err(LibISLError::new(err, err_msg));
2876        }
2877        Ok(isl_rs_result)
2878    }
2879
2880    /// Wraps `isl_union_map_to_str`.
2881    pub fn to_str(&self) -> Result<&str, LibISLError> {
2882        let umap = self;
2883        let isl_rs_ctx = umap.get_ctx();
2884        let umap = umap.ptr;
2885        let isl_rs_result = unsafe { isl_union_map_to_str(umap) };
2886        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2887        let isl_rs_result = isl_rs_result.to_str().unwrap();
2888        let err = isl_rs_ctx.last_error();
2889        if err != Error::None_ {
2890            let err_msg = isl_rs_ctx.last_error_msg();
2891            isl_rs_ctx.reset_error();
2892            return Err(LibISLError::new(err, err_msg));
2893        }
2894        Ok(isl_rs_result)
2895    }
2896
2897    /// Wraps `isl_union_map_uncurry`.
2898    pub fn uncurry(self) -> Result<UnionMap, LibISLError> {
2899        let umap = self;
2900        let isl_rs_ctx = umap.get_ctx();
2901        let mut umap = umap;
2902        umap.do_not_free_on_drop();
2903        let umap = umap.ptr;
2904        let isl_rs_result = unsafe { isl_union_map_uncurry(umap) };
2905        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2906                                       should_free_on_drop: true };
2907        let err = isl_rs_ctx.last_error();
2908        if err != Error::None_ {
2909            let err_msg = isl_rs_ctx.last_error_msg();
2910            isl_rs_ctx.reset_error();
2911            return Err(LibISLError::new(err, err_msg));
2912        }
2913        Ok(isl_rs_result)
2914    }
2915
2916    /// Wraps `isl_union_map_union`.
2917    pub fn union(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2918        let umap1 = self;
2919        let isl_rs_ctx = umap1.get_ctx();
2920        let mut umap1 = umap1;
2921        umap1.do_not_free_on_drop();
2922        let umap1 = umap1.ptr;
2923        let mut umap2 = umap2;
2924        umap2.do_not_free_on_drop();
2925        let umap2 = umap2.ptr;
2926        let isl_rs_result = unsafe { isl_union_map_union(umap1, umap2) };
2927        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2928                                       should_free_on_drop: true };
2929        let err = isl_rs_ctx.last_error();
2930        if err != Error::None_ {
2931            let err_msg = isl_rs_ctx.last_error_msg();
2932            isl_rs_ctx.reset_error();
2933            return Err(LibISLError::new(err, err_msg));
2934        }
2935        Ok(isl_rs_result)
2936    }
2937
2938    /// Wraps `isl_union_map_universe`.
2939    pub fn universe(self) -> Result<UnionMap, LibISLError> {
2940        let umap = self;
2941        let isl_rs_ctx = umap.get_ctx();
2942        let mut umap = umap;
2943        umap.do_not_free_on_drop();
2944        let umap = umap.ptr;
2945        let isl_rs_result = unsafe { isl_union_map_universe(umap) };
2946        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2947                                       should_free_on_drop: true };
2948        let err = isl_rs_ctx.last_error();
2949        if err != Error::None_ {
2950            let err_msg = isl_rs_ctx.last_error_msg();
2951            isl_rs_ctx.reset_error();
2952            return Err(LibISLError::new(err, err_msg));
2953        }
2954        Ok(isl_rs_result)
2955    }
2956
2957    /// Wraps `isl_union_map_wrap`.
2958    pub fn wrap(self) -> Result<UnionSet, LibISLError> {
2959        let umap = self;
2960        let isl_rs_ctx = umap.get_ctx();
2961        let mut umap = umap;
2962        umap.do_not_free_on_drop();
2963        let umap = umap.ptr;
2964        let isl_rs_result = unsafe { isl_union_map_wrap(umap) };
2965        let isl_rs_result = UnionSet { ptr: isl_rs_result,
2966                                       should_free_on_drop: true };
2967        let err = isl_rs_ctx.last_error();
2968        if err != Error::None_ {
2969            let err_msg = isl_rs_ctx.last_error_msg();
2970            isl_rs_ctx.reset_error();
2971            return Err(LibISLError::new(err, err_msg));
2972        }
2973        Ok(isl_rs_result)
2974    }
2975
2976    /// Wraps `isl_union_map_zip`.
2977    pub fn zip(self) -> Result<UnionMap, LibISLError> {
2978        let umap = self;
2979        let isl_rs_ctx = umap.get_ctx();
2980        let mut umap = umap;
2981        umap.do_not_free_on_drop();
2982        let umap = umap.ptr;
2983        let isl_rs_result = unsafe { isl_union_map_zip(umap) };
2984        let isl_rs_result = UnionMap { ptr: isl_rs_result,
2985                                       should_free_on_drop: true };
2986        let err = isl_rs_ctx.last_error();
2987        if err != Error::None_ {
2988            let err_msg = isl_rs_ctx.last_error_msg();
2989            isl_rs_ctx.reset_error();
2990            return Err(LibISLError::new(err, err_msg));
2991        }
2992        Ok(isl_rs_result)
2993    }
2994
2995    /// Does not call isl_union_map_free() on being dropped. (For internal use
2996    /// only.)
2997    pub fn do_not_free_on_drop(&mut self) {
2998        self.should_free_on_drop = false;
2999    }
3000}
3001
3002impl Drop for UnionMap {
3003    fn drop(&mut self) {
3004        if self.should_free_on_drop {
3005            unsafe {
3006                isl_union_map_free(self.ptr);
3007            }
3008        }
3009    }
3010}