isl_rs/bindings/
multi_union_pw_aff.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    Aff, Context, DimType, Error, Id, LibISLError, MultiAff, MultiId, MultiPwAff, MultiVal, PwAff,
6    PwMultiAff, Set, Space, UnionMap, UnionPwAff, UnionPwAffList, UnionPwMultiAff, UnionSet, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12/// Wraps `isl_multi_union_pw_aff`.
13pub struct MultiUnionPwAff {
14    pub ptr: uintptr_t,
15    pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20    fn isl_multi_union_pw_aff_add(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
21
22    fn isl_multi_union_pw_aff_align_params(multi: uintptr_t, model: uintptr_t) -> uintptr_t;
23
24    fn isl_multi_union_pw_aff_apply_aff(mupa: uintptr_t, aff: uintptr_t) -> uintptr_t;
25
26    fn isl_multi_union_pw_aff_apply_multi_aff(mupa: uintptr_t, ma: uintptr_t) -> uintptr_t;
27
28    fn isl_multi_union_pw_aff_apply_pw_aff(mupa: uintptr_t, pa: uintptr_t) -> uintptr_t;
29
30    fn isl_multi_union_pw_aff_apply_pw_multi_aff(mupa: uintptr_t, pma: uintptr_t) -> uintptr_t;
31
32    fn isl_multi_union_pw_aff_bind(mupa: uintptr_t, tuple: uintptr_t) -> uintptr_t;
33
34    fn isl_multi_union_pw_aff_coalesce(mupa: uintptr_t) -> uintptr_t;
35
36    fn isl_multi_union_pw_aff_copy(multi: uintptr_t) -> uintptr_t;
37
38    fn isl_multi_union_pw_aff_dim(multi: uintptr_t, type_: i32) -> i32;
39
40    fn isl_multi_union_pw_aff_domain(mupa: uintptr_t) -> uintptr_t;
41
42    fn isl_multi_union_pw_aff_drop_dims(multi: uintptr_t, type_: i32, first: u32, n: u32)
43                                        -> uintptr_t;
44
45    fn isl_multi_union_pw_aff_dump(mupa: uintptr_t) -> ();
46
47    fn isl_multi_union_pw_aff_extract_multi_pw_aff(mupa: uintptr_t, space: uintptr_t) -> uintptr_t;
48
49    fn isl_multi_union_pw_aff_factor_range(multi: uintptr_t) -> uintptr_t;
50
51    fn isl_multi_union_pw_aff_find_dim_by_id(multi: uintptr_t, type_: i32, id: uintptr_t) -> i32;
52
53    fn isl_multi_union_pw_aff_find_dim_by_name(multi: uintptr_t, type_: i32, name: *const c_char)
54                                               -> i32;
55
56    fn isl_multi_union_pw_aff_flat_range_product(multi1: uintptr_t, multi2: uintptr_t)
57                                                 -> uintptr_t;
58
59    fn isl_multi_union_pw_aff_flatten_range(multi: uintptr_t) -> uintptr_t;
60
61    fn isl_multi_union_pw_aff_floor(mupa: uintptr_t) -> uintptr_t;
62
63    fn isl_multi_union_pw_aff_free(multi: uintptr_t) -> uintptr_t;
64
65    fn isl_multi_union_pw_aff_from_multi_aff(ma: uintptr_t) -> uintptr_t;
66
67    fn isl_multi_union_pw_aff_from_multi_pw_aff(mpa: uintptr_t) -> uintptr_t;
68
69    fn isl_multi_union_pw_aff_from_range(multi: uintptr_t) -> uintptr_t;
70
71    fn isl_multi_union_pw_aff_from_union_map(umap: uintptr_t) -> uintptr_t;
72
73    fn isl_multi_union_pw_aff_from_union_pw_aff(upa: uintptr_t) -> uintptr_t;
74
75    fn isl_multi_union_pw_aff_from_union_pw_aff_list(space: uintptr_t, list: uintptr_t)
76                                                     -> uintptr_t;
77
78    fn isl_multi_union_pw_aff_from_union_pw_multi_aff(upma: uintptr_t) -> uintptr_t;
79
80    fn isl_multi_union_pw_aff_get_at(multi: uintptr_t, pos: i32) -> uintptr_t;
81
82    fn isl_multi_union_pw_aff_get_ctx(multi: uintptr_t) -> uintptr_t;
83
84    fn isl_multi_union_pw_aff_get_dim_id(multi: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
85
86    fn isl_multi_union_pw_aff_get_domain_space(multi: uintptr_t) -> uintptr_t;
87
88    fn isl_multi_union_pw_aff_get_list(multi: uintptr_t) -> uintptr_t;
89
90    fn isl_multi_union_pw_aff_get_range_tuple_id(multi: uintptr_t) -> uintptr_t;
91
92    fn isl_multi_union_pw_aff_get_space(multi: uintptr_t) -> uintptr_t;
93
94    fn isl_multi_union_pw_aff_get_tuple_id(multi: uintptr_t, type_: i32) -> uintptr_t;
95
96    fn isl_multi_union_pw_aff_get_tuple_name(multi: uintptr_t, type_: i32) -> *const c_char;
97
98    fn isl_multi_union_pw_aff_get_union_pw_aff(multi: uintptr_t, pos: i32) -> uintptr_t;
99
100    fn isl_multi_union_pw_aff_gist(mupa: uintptr_t, context: uintptr_t) -> uintptr_t;
101
102    fn isl_multi_union_pw_aff_gist_params(mupa: uintptr_t, context: uintptr_t) -> uintptr_t;
103
104    fn isl_multi_union_pw_aff_has_range_tuple_id(multi: uintptr_t) -> i32;
105
106    fn isl_multi_union_pw_aff_has_tuple_id(multi: uintptr_t, type_: i32) -> i32;
107
108    fn isl_multi_union_pw_aff_intersect_domain(mupa: uintptr_t, uset: uintptr_t) -> uintptr_t;
109
110    fn isl_multi_union_pw_aff_intersect_params(mupa: uintptr_t, params: uintptr_t) -> uintptr_t;
111
112    fn isl_multi_union_pw_aff_intersect_range(mupa: uintptr_t, set: uintptr_t) -> uintptr_t;
113
114    fn isl_multi_union_pw_aff_involves_nan(multi: uintptr_t) -> i32;
115
116    fn isl_multi_union_pw_aff_max_multi_val(mupa: uintptr_t) -> uintptr_t;
117
118    fn isl_multi_union_pw_aff_min_multi_val(mupa: uintptr_t) -> uintptr_t;
119
120    fn isl_multi_union_pw_aff_mod_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
121
122    fn isl_multi_union_pw_aff_multi_aff_on_domain(domain: uintptr_t, ma: uintptr_t) -> uintptr_t;
123
124    fn isl_multi_union_pw_aff_multi_val_on_domain(domain: uintptr_t, mv: uintptr_t) -> uintptr_t;
125
126    fn isl_multi_union_pw_aff_neg(multi: uintptr_t) -> uintptr_t;
127
128    fn isl_multi_union_pw_aff_plain_is_equal(multi1: uintptr_t, multi2: uintptr_t) -> i32;
129
130    fn isl_multi_union_pw_aff_pullback_union_pw_multi_aff(mupa: uintptr_t, upma: uintptr_t)
131                                                          -> uintptr_t;
132
133    fn isl_multi_union_pw_aff_pw_multi_aff_on_domain(domain: uintptr_t, pma: uintptr_t)
134                                                     -> uintptr_t;
135
136    fn isl_multi_union_pw_aff_range_factor_domain(multi: uintptr_t) -> uintptr_t;
137
138    fn isl_multi_union_pw_aff_range_factor_range(multi: uintptr_t) -> uintptr_t;
139
140    fn isl_multi_union_pw_aff_range_is_wrapping(multi: uintptr_t) -> i32;
141
142    fn isl_multi_union_pw_aff_range_product(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
143
144    fn isl_multi_union_pw_aff_range_splice(multi1: uintptr_t, pos: u32, multi2: uintptr_t)
145                                           -> uintptr_t;
146
147    fn isl_multi_union_pw_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
148
149    fn isl_multi_union_pw_aff_reset_range_tuple_id(multi: uintptr_t) -> uintptr_t;
150
151    fn isl_multi_union_pw_aff_reset_tuple_id(multi: uintptr_t, type_: i32) -> uintptr_t;
152
153    fn isl_multi_union_pw_aff_reset_user(multi: uintptr_t) -> uintptr_t;
154
155    fn isl_multi_union_pw_aff_scale_down_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
156
157    fn isl_multi_union_pw_aff_scale_down_val(multi: uintptr_t, v: uintptr_t) -> uintptr_t;
158
159    fn isl_multi_union_pw_aff_scale_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
160
161    fn isl_multi_union_pw_aff_scale_val(multi: uintptr_t, v: uintptr_t) -> uintptr_t;
162
163    fn isl_multi_union_pw_aff_set_at(multi: uintptr_t, pos: i32, el: uintptr_t) -> uintptr_t;
164
165    fn isl_multi_union_pw_aff_set_dim_id(multi: uintptr_t, type_: i32, pos: u32, id: uintptr_t)
166                                         -> uintptr_t;
167
168    fn isl_multi_union_pw_aff_set_dim_name(multi: uintptr_t, type_: i32, pos: u32,
169                                           s: *const c_char)
170                                           -> uintptr_t;
171
172    fn isl_multi_union_pw_aff_set_range_tuple_id(multi: uintptr_t, id: uintptr_t) -> uintptr_t;
173
174    fn isl_multi_union_pw_aff_set_tuple_id(multi: uintptr_t, type_: i32, id: uintptr_t)
175                                           -> uintptr_t;
176
177    fn isl_multi_union_pw_aff_set_tuple_name(multi: uintptr_t, type_: i32, s: *const c_char)
178                                             -> uintptr_t;
179
180    fn isl_multi_union_pw_aff_set_union_pw_aff(multi: uintptr_t, pos: i32, el: uintptr_t)
181                                               -> uintptr_t;
182
183    fn isl_multi_union_pw_aff_size(multi: uintptr_t) -> i32;
184
185    fn isl_multi_union_pw_aff_sub(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
186
187    fn isl_multi_union_pw_aff_to_str(mupa: uintptr_t) -> *const c_char;
188
189    fn isl_multi_union_pw_aff_union_add(mupa1: uintptr_t, mupa2: uintptr_t) -> uintptr_t;
190
191    fn isl_multi_union_pw_aff_zero(space: uintptr_t) -> uintptr_t;
192
193    fn isl_multi_union_pw_aff_zero_union_set(mupa: uintptr_t) -> uintptr_t;
194
195}
196
197impl MultiUnionPwAff {
198    /// Wraps `isl_multi_union_pw_aff_add`.
199    pub fn add(self, multi2: MultiUnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
200        let multi1 = self;
201        let isl_rs_ctx = multi1.get_ctx();
202        let mut multi1 = multi1;
203        multi1.do_not_free_on_drop();
204        let multi1 = multi1.ptr;
205        let mut multi2 = multi2;
206        multi2.do_not_free_on_drop();
207        let multi2 = multi2.ptr;
208        let isl_rs_result = unsafe { isl_multi_union_pw_aff_add(multi1, multi2) };
209        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
210                                              should_free_on_drop: true };
211        let err = isl_rs_ctx.last_error();
212        if err != Error::None_ {
213            let err_msg = isl_rs_ctx.last_error_msg();
214            isl_rs_ctx.reset_error();
215            return Err(LibISLError::new(err, err_msg));
216        }
217        Ok(isl_rs_result)
218    }
219
220    /// Wraps `isl_multi_union_pw_aff_align_params`.
221    pub fn align_params(self, model: Space) -> Result<MultiUnionPwAff, LibISLError> {
222        let multi = self;
223        let isl_rs_ctx = multi.get_ctx();
224        let mut multi = multi;
225        multi.do_not_free_on_drop();
226        let multi = multi.ptr;
227        let mut model = model;
228        model.do_not_free_on_drop();
229        let model = model.ptr;
230        let isl_rs_result = unsafe { isl_multi_union_pw_aff_align_params(multi, model) };
231        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
232                                              should_free_on_drop: true };
233        let err = isl_rs_ctx.last_error();
234        if err != Error::None_ {
235            let err_msg = isl_rs_ctx.last_error_msg();
236            isl_rs_ctx.reset_error();
237            return Err(LibISLError::new(err, err_msg));
238        }
239        Ok(isl_rs_result)
240    }
241
242    /// Wraps `isl_multi_union_pw_aff_apply_aff`.
243    pub fn apply_aff(self, aff: Aff) -> Result<UnionPwAff, LibISLError> {
244        let mupa = self;
245        let isl_rs_ctx = mupa.get_ctx();
246        let mut mupa = mupa;
247        mupa.do_not_free_on_drop();
248        let mupa = mupa.ptr;
249        let mut aff = aff;
250        aff.do_not_free_on_drop();
251        let aff = aff.ptr;
252        let isl_rs_result = unsafe { isl_multi_union_pw_aff_apply_aff(mupa, aff) };
253        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
254                                         should_free_on_drop: true };
255        let err = isl_rs_ctx.last_error();
256        if err != Error::None_ {
257            let err_msg = isl_rs_ctx.last_error_msg();
258            isl_rs_ctx.reset_error();
259            return Err(LibISLError::new(err, err_msg));
260        }
261        Ok(isl_rs_result)
262    }
263
264    /// Wraps `isl_multi_union_pw_aff_apply_multi_aff`.
265    pub fn apply_multi_aff(self, ma: MultiAff) -> Result<MultiUnionPwAff, LibISLError> {
266        let mupa = self;
267        let isl_rs_ctx = mupa.get_ctx();
268        let mut mupa = mupa;
269        mupa.do_not_free_on_drop();
270        let mupa = mupa.ptr;
271        let mut ma = ma;
272        ma.do_not_free_on_drop();
273        let ma = ma.ptr;
274        let isl_rs_result = unsafe { isl_multi_union_pw_aff_apply_multi_aff(mupa, ma) };
275        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
276                                              should_free_on_drop: true };
277        let err = isl_rs_ctx.last_error();
278        if err != Error::None_ {
279            let err_msg = isl_rs_ctx.last_error_msg();
280            isl_rs_ctx.reset_error();
281            return Err(LibISLError::new(err, err_msg));
282        }
283        Ok(isl_rs_result)
284    }
285
286    /// Wraps `isl_multi_union_pw_aff_apply_pw_aff`.
287    pub fn apply_pw_aff(self, pa: PwAff) -> Result<UnionPwAff, LibISLError> {
288        let mupa = self;
289        let isl_rs_ctx = mupa.get_ctx();
290        let mut mupa = mupa;
291        mupa.do_not_free_on_drop();
292        let mupa = mupa.ptr;
293        let mut pa = pa;
294        pa.do_not_free_on_drop();
295        let pa = pa.ptr;
296        let isl_rs_result = unsafe { isl_multi_union_pw_aff_apply_pw_aff(mupa, pa) };
297        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
298                                         should_free_on_drop: true };
299        let err = isl_rs_ctx.last_error();
300        if err != Error::None_ {
301            let err_msg = isl_rs_ctx.last_error_msg();
302            isl_rs_ctx.reset_error();
303            return Err(LibISLError::new(err, err_msg));
304        }
305        Ok(isl_rs_result)
306    }
307
308    /// Wraps `isl_multi_union_pw_aff_apply_pw_multi_aff`.
309    pub fn apply_pw_multi_aff(self, pma: PwMultiAff) -> Result<MultiUnionPwAff, LibISLError> {
310        let mupa = self;
311        let isl_rs_ctx = mupa.get_ctx();
312        let mut mupa = mupa;
313        mupa.do_not_free_on_drop();
314        let mupa = mupa.ptr;
315        let mut pma = pma;
316        pma.do_not_free_on_drop();
317        let pma = pma.ptr;
318        let isl_rs_result = unsafe { isl_multi_union_pw_aff_apply_pw_multi_aff(mupa, pma) };
319        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
320                                              should_free_on_drop: true };
321        let err = isl_rs_ctx.last_error();
322        if err != Error::None_ {
323            let err_msg = isl_rs_ctx.last_error_msg();
324            isl_rs_ctx.reset_error();
325            return Err(LibISLError::new(err, err_msg));
326        }
327        Ok(isl_rs_result)
328    }
329
330    /// Wraps `isl_multi_union_pw_aff_bind`.
331    pub fn bind(self, tuple: MultiId) -> Result<UnionSet, LibISLError> {
332        let mupa = self;
333        let isl_rs_ctx = mupa.get_ctx();
334        let mut mupa = mupa;
335        mupa.do_not_free_on_drop();
336        let mupa = mupa.ptr;
337        let mut tuple = tuple;
338        tuple.do_not_free_on_drop();
339        let tuple = tuple.ptr;
340        let isl_rs_result = unsafe { isl_multi_union_pw_aff_bind(mupa, tuple) };
341        let isl_rs_result = UnionSet { ptr: isl_rs_result,
342                                       should_free_on_drop: true };
343        let err = isl_rs_ctx.last_error();
344        if err != Error::None_ {
345            let err_msg = isl_rs_ctx.last_error_msg();
346            isl_rs_ctx.reset_error();
347            return Err(LibISLError::new(err, err_msg));
348        }
349        Ok(isl_rs_result)
350    }
351
352    /// Wraps `isl_multi_union_pw_aff_coalesce`.
353    pub fn coalesce(self) -> Result<MultiUnionPwAff, LibISLError> {
354        let mupa = self;
355        let isl_rs_ctx = mupa.get_ctx();
356        let mut mupa = mupa;
357        mupa.do_not_free_on_drop();
358        let mupa = mupa.ptr;
359        let isl_rs_result = unsafe { isl_multi_union_pw_aff_coalesce(mupa) };
360        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
361                                              should_free_on_drop: true };
362        let err = isl_rs_ctx.last_error();
363        if err != Error::None_ {
364            let err_msg = isl_rs_ctx.last_error_msg();
365            isl_rs_ctx.reset_error();
366            return Err(LibISLError::new(err, err_msg));
367        }
368        Ok(isl_rs_result)
369    }
370
371    /// Wraps `isl_multi_union_pw_aff_copy`.
372    pub fn copy(&self) -> Result<MultiUnionPwAff, LibISLError> {
373        let multi = self;
374        let isl_rs_ctx = multi.get_ctx();
375        let multi = multi.ptr;
376        let isl_rs_result = unsafe { isl_multi_union_pw_aff_copy(multi) };
377        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
378                                              should_free_on_drop: true };
379        let err = isl_rs_ctx.last_error();
380        if err != Error::None_ {
381            let err_msg = isl_rs_ctx.last_error_msg();
382            isl_rs_ctx.reset_error();
383            return Err(LibISLError::new(err, err_msg));
384        }
385        Ok(isl_rs_result)
386    }
387
388    /// Wraps `isl_multi_union_pw_aff_dim`.
389    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
390        let multi = self;
391        let isl_rs_ctx = multi.get_ctx();
392        let multi = multi.ptr;
393        let type_ = type_.to_i32();
394        let isl_rs_result = unsafe { isl_multi_union_pw_aff_dim(multi, type_) };
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_multi_union_pw_aff_domain`.
405    pub fn domain(self) -> Result<UnionSet, LibISLError> {
406        let mupa = self;
407        let isl_rs_ctx = mupa.get_ctx();
408        let mut mupa = mupa;
409        mupa.do_not_free_on_drop();
410        let mupa = mupa.ptr;
411        let isl_rs_result = unsafe { isl_multi_union_pw_aff_domain(mupa) };
412        let isl_rs_result = UnionSet { 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_multi_union_pw_aff_drop_dims`.
424    pub fn drop_dims(self, type_: DimType, first: u32, n: u32)
425                     -> Result<MultiUnionPwAff, LibISLError> {
426        let multi = self;
427        let isl_rs_ctx = multi.get_ctx();
428        let mut multi = multi;
429        multi.do_not_free_on_drop();
430        let multi = multi.ptr;
431        let type_ = type_.to_i32();
432        let isl_rs_result = unsafe { isl_multi_union_pw_aff_drop_dims(multi, type_, first, n) };
433        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
434                                              should_free_on_drop: true };
435        let err = isl_rs_ctx.last_error();
436        if err != Error::None_ {
437            let err_msg = isl_rs_ctx.last_error_msg();
438            isl_rs_ctx.reset_error();
439            return Err(LibISLError::new(err, err_msg));
440        }
441        Ok(isl_rs_result)
442    }
443
444    /// Wraps `isl_multi_union_pw_aff_dump`.
445    pub fn dump(&self) -> Result<(), LibISLError> {
446        let mupa = self;
447        let isl_rs_ctx = mupa.get_ctx();
448        let mupa = mupa.ptr;
449        let isl_rs_result = unsafe { isl_multi_union_pw_aff_dump(mupa) };
450        let err = isl_rs_ctx.last_error();
451        if err != Error::None_ {
452            let err_msg = isl_rs_ctx.last_error_msg();
453            isl_rs_ctx.reset_error();
454            return Err(LibISLError::new(err, err_msg));
455        }
456        Ok(isl_rs_result)
457    }
458
459    /// Wraps `isl_multi_union_pw_aff_extract_multi_pw_aff`.
460    pub fn extract_multi_pw_aff(&self, space: Space) -> Result<MultiPwAff, LibISLError> {
461        let mupa = self;
462        let isl_rs_ctx = mupa.get_ctx();
463        let mupa = mupa.ptr;
464        let mut space = space;
465        space.do_not_free_on_drop();
466        let space = space.ptr;
467        let isl_rs_result = unsafe { isl_multi_union_pw_aff_extract_multi_pw_aff(mupa, space) };
468        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
469                                         should_free_on_drop: true };
470        let err = isl_rs_ctx.last_error();
471        if err != Error::None_ {
472            let err_msg = isl_rs_ctx.last_error_msg();
473            isl_rs_ctx.reset_error();
474            return Err(LibISLError::new(err, err_msg));
475        }
476        Ok(isl_rs_result)
477    }
478
479    /// Wraps `isl_multi_union_pw_aff_factor_range`.
480    pub fn factor_range(self) -> Result<MultiUnionPwAff, LibISLError> {
481        let multi = self;
482        let isl_rs_ctx = multi.get_ctx();
483        let mut multi = multi;
484        multi.do_not_free_on_drop();
485        let multi = multi.ptr;
486        let isl_rs_result = unsafe { isl_multi_union_pw_aff_factor_range(multi) };
487        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
488                                              should_free_on_drop: true };
489        let err = isl_rs_ctx.last_error();
490        if err != Error::None_ {
491            let err_msg = isl_rs_ctx.last_error_msg();
492            isl_rs_ctx.reset_error();
493            return Err(LibISLError::new(err, err_msg));
494        }
495        Ok(isl_rs_result)
496    }
497
498    /// Wraps `isl_multi_union_pw_aff_find_dim_by_id`.
499    pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> Result<i32, LibISLError> {
500        let multi = self;
501        let isl_rs_ctx = multi.get_ctx();
502        let multi = multi.ptr;
503        let type_ = type_.to_i32();
504        let id = id.ptr;
505        let isl_rs_result = unsafe { isl_multi_union_pw_aff_find_dim_by_id(multi, type_, id) };
506        let err = isl_rs_ctx.last_error();
507        if err != Error::None_ {
508            let err_msg = isl_rs_ctx.last_error_msg();
509            isl_rs_ctx.reset_error();
510            return Err(LibISLError::new(err, err_msg));
511        }
512        Ok(isl_rs_result)
513    }
514
515    /// Wraps `isl_multi_union_pw_aff_find_dim_by_name`.
516    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
517        let multi = self;
518        let isl_rs_ctx = multi.get_ctx();
519        let multi = multi.ptr;
520        let type_ = type_.to_i32();
521        let name = CString::new(name).unwrap();
522        let name = name.as_ptr();
523        let isl_rs_result = unsafe { isl_multi_union_pw_aff_find_dim_by_name(multi, type_, name) };
524        let err = isl_rs_ctx.last_error();
525        if err != Error::None_ {
526            let err_msg = isl_rs_ctx.last_error_msg();
527            isl_rs_ctx.reset_error();
528            return Err(LibISLError::new(err, err_msg));
529        }
530        Ok(isl_rs_result)
531    }
532
533    /// Wraps `isl_multi_union_pw_aff_flat_range_product`.
534    pub fn flat_range_product(self, multi2: MultiUnionPwAff)
535                              -> Result<MultiUnionPwAff, LibISLError> {
536        let multi1 = self;
537        let isl_rs_ctx = multi1.get_ctx();
538        let mut multi1 = multi1;
539        multi1.do_not_free_on_drop();
540        let multi1 = multi1.ptr;
541        let mut multi2 = multi2;
542        multi2.do_not_free_on_drop();
543        let multi2 = multi2.ptr;
544        let isl_rs_result = unsafe { isl_multi_union_pw_aff_flat_range_product(multi1, multi2) };
545        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
546                                              should_free_on_drop: true };
547        let err = isl_rs_ctx.last_error();
548        if err != Error::None_ {
549            let err_msg = isl_rs_ctx.last_error_msg();
550            isl_rs_ctx.reset_error();
551            return Err(LibISLError::new(err, err_msg));
552        }
553        Ok(isl_rs_result)
554    }
555
556    /// Wraps `isl_multi_union_pw_aff_flatten_range`.
557    pub fn flatten_range(self) -> Result<MultiUnionPwAff, LibISLError> {
558        let multi = self;
559        let isl_rs_ctx = multi.get_ctx();
560        let mut multi = multi;
561        multi.do_not_free_on_drop();
562        let multi = multi.ptr;
563        let isl_rs_result = unsafe { isl_multi_union_pw_aff_flatten_range(multi) };
564        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
565                                              should_free_on_drop: true };
566        let err = isl_rs_ctx.last_error();
567        if err != Error::None_ {
568            let err_msg = isl_rs_ctx.last_error_msg();
569            isl_rs_ctx.reset_error();
570            return Err(LibISLError::new(err, err_msg));
571        }
572        Ok(isl_rs_result)
573    }
574
575    /// Wraps `isl_multi_union_pw_aff_floor`.
576    pub fn floor(self) -> Result<MultiUnionPwAff, LibISLError> {
577        let mupa = self;
578        let isl_rs_ctx = mupa.get_ctx();
579        let mut mupa = mupa;
580        mupa.do_not_free_on_drop();
581        let mupa = mupa.ptr;
582        let isl_rs_result = unsafe { isl_multi_union_pw_aff_floor(mupa) };
583        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
584                                              should_free_on_drop: true };
585        let err = isl_rs_ctx.last_error();
586        if err != Error::None_ {
587            let err_msg = isl_rs_ctx.last_error_msg();
588            isl_rs_ctx.reset_error();
589            return Err(LibISLError::new(err, err_msg));
590        }
591        Ok(isl_rs_result)
592    }
593
594    /// Wraps `isl_multi_union_pw_aff_free`.
595    pub fn free(self) -> Result<MultiUnionPwAff, LibISLError> {
596        let multi = self;
597        let isl_rs_ctx = multi.get_ctx();
598        let mut multi = multi;
599        multi.do_not_free_on_drop();
600        let multi = multi.ptr;
601        let isl_rs_result = unsafe { isl_multi_union_pw_aff_free(multi) };
602        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
603                                              should_free_on_drop: true };
604        let err = isl_rs_ctx.last_error();
605        if err != Error::None_ {
606            let err_msg = isl_rs_ctx.last_error_msg();
607            isl_rs_ctx.reset_error();
608            return Err(LibISLError::new(err, err_msg));
609        }
610        Ok(isl_rs_result)
611    }
612
613    /// Wraps `isl_multi_union_pw_aff_from_multi_aff`.
614    pub fn from_multi_aff(ma: MultiAff) -> Result<MultiUnionPwAff, LibISLError> {
615        let isl_rs_ctx = ma.get_ctx();
616        let mut ma = ma;
617        ma.do_not_free_on_drop();
618        let ma = ma.ptr;
619        let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_multi_aff(ma) };
620        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
621                                              should_free_on_drop: true };
622        let err = isl_rs_ctx.last_error();
623        if err != Error::None_ {
624            let err_msg = isl_rs_ctx.last_error_msg();
625            isl_rs_ctx.reset_error();
626            return Err(LibISLError::new(err, err_msg));
627        }
628        Ok(isl_rs_result)
629    }
630
631    /// Wraps `isl_multi_union_pw_aff_from_multi_pw_aff`.
632    pub fn from_multi_pw_aff(mpa: MultiPwAff) -> Result<MultiUnionPwAff, LibISLError> {
633        let isl_rs_ctx = mpa.get_ctx();
634        let mut mpa = mpa;
635        mpa.do_not_free_on_drop();
636        let mpa = mpa.ptr;
637        let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_multi_pw_aff(mpa) };
638        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
639                                              should_free_on_drop: true };
640        let err = isl_rs_ctx.last_error();
641        if err != Error::None_ {
642            let err_msg = isl_rs_ctx.last_error_msg();
643            isl_rs_ctx.reset_error();
644            return Err(LibISLError::new(err, err_msg));
645        }
646        Ok(isl_rs_result)
647    }
648
649    /// Wraps `isl_multi_union_pw_aff_from_range`.
650    pub fn from_range(self) -> Result<MultiUnionPwAff, LibISLError> {
651        let multi = self;
652        let isl_rs_ctx = multi.get_ctx();
653        let mut multi = multi;
654        multi.do_not_free_on_drop();
655        let multi = multi.ptr;
656        let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_range(multi) };
657        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
658                                              should_free_on_drop: true };
659        let err = isl_rs_ctx.last_error();
660        if err != Error::None_ {
661            let err_msg = isl_rs_ctx.last_error_msg();
662            isl_rs_ctx.reset_error();
663            return Err(LibISLError::new(err, err_msg));
664        }
665        Ok(isl_rs_result)
666    }
667
668    /// Wraps `isl_multi_union_pw_aff_from_union_map`.
669    pub fn from_union_map(umap: UnionMap) -> Result<MultiUnionPwAff, LibISLError> {
670        let isl_rs_ctx = umap.get_ctx();
671        let mut umap = umap;
672        umap.do_not_free_on_drop();
673        let umap = umap.ptr;
674        let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_union_map(umap) };
675        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
676                                              should_free_on_drop: true };
677        let err = isl_rs_ctx.last_error();
678        if err != Error::None_ {
679            let err_msg = isl_rs_ctx.last_error_msg();
680            isl_rs_ctx.reset_error();
681            return Err(LibISLError::new(err, err_msg));
682        }
683        Ok(isl_rs_result)
684    }
685
686    /// Wraps `isl_multi_union_pw_aff_from_union_pw_aff`.
687    pub fn from_union_pw_aff(upa: UnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
688        let isl_rs_ctx = upa.get_ctx();
689        let mut upa = upa;
690        upa.do_not_free_on_drop();
691        let upa = upa.ptr;
692        let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_union_pw_aff(upa) };
693        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
694                                              should_free_on_drop: true };
695        let err = isl_rs_ctx.last_error();
696        if err != Error::None_ {
697            let err_msg = isl_rs_ctx.last_error_msg();
698            isl_rs_ctx.reset_error();
699            return Err(LibISLError::new(err, err_msg));
700        }
701        Ok(isl_rs_result)
702    }
703
704    /// Wraps `isl_multi_union_pw_aff_from_union_pw_aff_list`.
705    pub fn from_union_pw_aff_list(space: Space, list: UnionPwAffList)
706                                  -> Result<MultiUnionPwAff, LibISLError> {
707        let isl_rs_ctx = space.get_ctx();
708        let mut space = space;
709        space.do_not_free_on_drop();
710        let space = space.ptr;
711        let mut list = list;
712        list.do_not_free_on_drop();
713        let list = list.ptr;
714        let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_union_pw_aff_list(space, list) };
715        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
716                                              should_free_on_drop: true };
717        let err = isl_rs_ctx.last_error();
718        if err != Error::None_ {
719            let err_msg = isl_rs_ctx.last_error_msg();
720            isl_rs_ctx.reset_error();
721            return Err(LibISLError::new(err, err_msg));
722        }
723        Ok(isl_rs_result)
724    }
725
726    /// Wraps `isl_multi_union_pw_aff_from_union_pw_multi_aff`.
727    pub fn from_union_pw_multi_aff(upma: UnionPwMultiAff) -> Result<MultiUnionPwAff, LibISLError> {
728        let isl_rs_ctx = upma.get_ctx();
729        let mut upma = upma;
730        upma.do_not_free_on_drop();
731        let upma = upma.ptr;
732        let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_union_pw_multi_aff(upma) };
733        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
734                                              should_free_on_drop: true };
735        let err = isl_rs_ctx.last_error();
736        if err != Error::None_ {
737            let err_msg = isl_rs_ctx.last_error_msg();
738            isl_rs_ctx.reset_error();
739            return Err(LibISLError::new(err, err_msg));
740        }
741        Ok(isl_rs_result)
742    }
743
744    /// Wraps `isl_multi_union_pw_aff_get_at`.
745    pub fn get_at(&self, pos: i32) -> Result<UnionPwAff, LibISLError> {
746        let multi = self;
747        let isl_rs_ctx = multi.get_ctx();
748        let multi = multi.ptr;
749        let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_at(multi, pos) };
750        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
751                                         should_free_on_drop: true };
752        let err = isl_rs_ctx.last_error();
753        if err != Error::None_ {
754            let err_msg = isl_rs_ctx.last_error_msg();
755            isl_rs_ctx.reset_error();
756            return Err(LibISLError::new(err, err_msg));
757        }
758        Ok(isl_rs_result)
759    }
760
761    /// Wraps `isl_multi_union_pw_aff_get_ctx`.
762    pub fn get_ctx(&self) -> Context {
763        let multi = self;
764        let multi = multi.ptr;
765        let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_ctx(multi) };
766        let isl_rs_result = Context { ptr: isl_rs_result,
767                                      should_free_on_drop: false };
768        isl_rs_result
769    }
770
771    /// Wraps `isl_multi_union_pw_aff_get_dim_id`.
772    pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
773        let multi = self;
774        let isl_rs_ctx = multi.get_ctx();
775        let multi = multi.ptr;
776        let type_ = type_.to_i32();
777        let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_dim_id(multi, type_, pos) };
778        let isl_rs_result = Id { 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_multi_union_pw_aff_get_domain_space`.
790    pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
791        let multi = self;
792        let isl_rs_ctx = multi.get_ctx();
793        let multi = multi.ptr;
794        let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_domain_space(multi) };
795        let isl_rs_result = Space { ptr: isl_rs_result,
796                                    should_free_on_drop: true };
797        let err = isl_rs_ctx.last_error();
798        if err != Error::None_ {
799            let err_msg = isl_rs_ctx.last_error_msg();
800            isl_rs_ctx.reset_error();
801            return Err(LibISLError::new(err, err_msg));
802        }
803        Ok(isl_rs_result)
804    }
805
806    /// Wraps `isl_multi_union_pw_aff_get_list`.
807    pub fn get_list(&self) -> Result<UnionPwAffList, LibISLError> {
808        let multi = self;
809        let isl_rs_ctx = multi.get_ctx();
810        let multi = multi.ptr;
811        let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_list(multi) };
812        let isl_rs_result = UnionPwAffList { ptr: isl_rs_result,
813                                             should_free_on_drop: true };
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_multi_union_pw_aff_get_range_tuple_id`.
824    pub fn get_range_tuple_id(&self) -> Result<Id, LibISLError> {
825        let multi = self;
826        let isl_rs_ctx = multi.get_ctx();
827        let multi = multi.ptr;
828        let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_range_tuple_id(multi) };
829        let isl_rs_result = Id { ptr: isl_rs_result,
830                                 should_free_on_drop: true };
831        let err = isl_rs_ctx.last_error();
832        if err != Error::None_ {
833            let err_msg = isl_rs_ctx.last_error_msg();
834            isl_rs_ctx.reset_error();
835            return Err(LibISLError::new(err, err_msg));
836        }
837        Ok(isl_rs_result)
838    }
839
840    /// Wraps `isl_multi_union_pw_aff_get_space`.
841    pub fn get_space(&self) -> Result<Space, LibISLError> {
842        let multi = self;
843        let isl_rs_ctx = multi.get_ctx();
844        let multi = multi.ptr;
845        let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_space(multi) };
846        let isl_rs_result = Space { ptr: isl_rs_result,
847                                    should_free_on_drop: true };
848        let err = isl_rs_ctx.last_error();
849        if err != Error::None_ {
850            let err_msg = isl_rs_ctx.last_error_msg();
851            isl_rs_ctx.reset_error();
852            return Err(LibISLError::new(err, err_msg));
853        }
854        Ok(isl_rs_result)
855    }
856
857    /// Wraps `isl_multi_union_pw_aff_get_tuple_id`.
858    pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
859        let multi = self;
860        let isl_rs_ctx = multi.get_ctx();
861        let multi = multi.ptr;
862        let type_ = type_.to_i32();
863        let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_tuple_id(multi, type_) };
864        let isl_rs_result = Id { ptr: isl_rs_result,
865                                 should_free_on_drop: true };
866        let err = isl_rs_ctx.last_error();
867        if err != Error::None_ {
868            let err_msg = isl_rs_ctx.last_error_msg();
869            isl_rs_ctx.reset_error();
870            return Err(LibISLError::new(err, err_msg));
871        }
872        Ok(isl_rs_result)
873    }
874
875    /// Wraps `isl_multi_union_pw_aff_get_tuple_name`.
876    pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
877        let multi = self;
878        let isl_rs_ctx = multi.get_ctx();
879        let multi = multi.ptr;
880        let type_ = type_.to_i32();
881        let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_tuple_name(multi, type_) };
882        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
883        let isl_rs_result = isl_rs_result.to_str().unwrap();
884        let err = isl_rs_ctx.last_error();
885        if err != Error::None_ {
886            let err_msg = isl_rs_ctx.last_error_msg();
887            isl_rs_ctx.reset_error();
888            return Err(LibISLError::new(err, err_msg));
889        }
890        Ok(isl_rs_result)
891    }
892
893    /// Wraps `isl_multi_union_pw_aff_get_union_pw_aff`.
894    pub fn get_union_pw_aff(&self, pos: i32) -> Result<UnionPwAff, LibISLError> {
895        let multi = self;
896        let isl_rs_ctx = multi.get_ctx();
897        let multi = multi.ptr;
898        let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_union_pw_aff(multi, pos) };
899        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
900                                         should_free_on_drop: true };
901        let err = isl_rs_ctx.last_error();
902        if err != Error::None_ {
903            let err_msg = isl_rs_ctx.last_error_msg();
904            isl_rs_ctx.reset_error();
905            return Err(LibISLError::new(err, err_msg));
906        }
907        Ok(isl_rs_result)
908    }
909
910    /// Wraps `isl_multi_union_pw_aff_gist`.
911    pub fn gist(self, context: UnionSet) -> Result<MultiUnionPwAff, LibISLError> {
912        let mupa = self;
913        let isl_rs_ctx = mupa.get_ctx();
914        let mut mupa = mupa;
915        mupa.do_not_free_on_drop();
916        let mupa = mupa.ptr;
917        let mut context = context;
918        context.do_not_free_on_drop();
919        let context = context.ptr;
920        let isl_rs_result = unsafe { isl_multi_union_pw_aff_gist(mupa, context) };
921        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
922                                              should_free_on_drop: true };
923        let err = isl_rs_ctx.last_error();
924        if err != Error::None_ {
925            let err_msg = isl_rs_ctx.last_error_msg();
926            isl_rs_ctx.reset_error();
927            return Err(LibISLError::new(err, err_msg));
928        }
929        Ok(isl_rs_result)
930    }
931
932    /// Wraps `isl_multi_union_pw_aff_gist_params`.
933    pub fn gist_params(self, context: Set) -> Result<MultiUnionPwAff, LibISLError> {
934        let mupa = self;
935        let isl_rs_ctx = mupa.get_ctx();
936        let mut mupa = mupa;
937        mupa.do_not_free_on_drop();
938        let mupa = mupa.ptr;
939        let mut context = context;
940        context.do_not_free_on_drop();
941        let context = context.ptr;
942        let isl_rs_result = unsafe { isl_multi_union_pw_aff_gist_params(mupa, context) };
943        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
944                                              should_free_on_drop: true };
945        let err = isl_rs_ctx.last_error();
946        if err != Error::None_ {
947            let err_msg = isl_rs_ctx.last_error_msg();
948            isl_rs_ctx.reset_error();
949            return Err(LibISLError::new(err, err_msg));
950        }
951        Ok(isl_rs_result)
952    }
953
954    /// Wraps `isl_multi_union_pw_aff_has_range_tuple_id`.
955    pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
956        let multi = self;
957        let isl_rs_ctx = multi.get_ctx();
958        let multi = multi.ptr;
959        let isl_rs_result = unsafe { isl_multi_union_pw_aff_has_range_tuple_id(multi) };
960        let isl_rs_result = match isl_rs_result {
961            0 => false,
962            1 => true,
963            _ => {
964                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
965            }
966        };
967        let err = isl_rs_ctx.last_error();
968        if err != Error::None_ {
969            let err_msg = isl_rs_ctx.last_error_msg();
970            isl_rs_ctx.reset_error();
971            return Err(LibISLError::new(err, err_msg));
972        }
973        Ok(isl_rs_result)
974    }
975
976    /// Wraps `isl_multi_union_pw_aff_has_tuple_id`.
977    pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
978        let multi = self;
979        let isl_rs_ctx = multi.get_ctx();
980        let multi = multi.ptr;
981        let type_ = type_.to_i32();
982        let isl_rs_result = unsafe { isl_multi_union_pw_aff_has_tuple_id(multi, type_) };
983        let isl_rs_result = match isl_rs_result {
984            0 => false,
985            1 => true,
986            _ => {
987                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
988            }
989        };
990        let err = isl_rs_ctx.last_error();
991        if err != Error::None_ {
992            let err_msg = isl_rs_ctx.last_error_msg();
993            isl_rs_ctx.reset_error();
994            return Err(LibISLError::new(err, err_msg));
995        }
996        Ok(isl_rs_result)
997    }
998
999    /// Wraps `isl_multi_union_pw_aff_intersect_domain`.
1000    pub fn intersect_domain(self, uset: UnionSet) -> Result<MultiUnionPwAff, LibISLError> {
1001        let mupa = self;
1002        let isl_rs_ctx = mupa.get_ctx();
1003        let mut mupa = mupa;
1004        mupa.do_not_free_on_drop();
1005        let mupa = mupa.ptr;
1006        let mut uset = uset;
1007        uset.do_not_free_on_drop();
1008        let uset = uset.ptr;
1009        let isl_rs_result = unsafe { isl_multi_union_pw_aff_intersect_domain(mupa, uset) };
1010        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1011                                              should_free_on_drop: true };
1012        let err = isl_rs_ctx.last_error();
1013        if err != Error::None_ {
1014            let err_msg = isl_rs_ctx.last_error_msg();
1015            isl_rs_ctx.reset_error();
1016            return Err(LibISLError::new(err, err_msg));
1017        }
1018        Ok(isl_rs_result)
1019    }
1020
1021    /// Wraps `isl_multi_union_pw_aff_intersect_params`.
1022    pub fn intersect_params(self, params: Set) -> Result<MultiUnionPwAff, LibISLError> {
1023        let mupa = self;
1024        let isl_rs_ctx = mupa.get_ctx();
1025        let mut mupa = mupa;
1026        mupa.do_not_free_on_drop();
1027        let mupa = mupa.ptr;
1028        let mut params = params;
1029        params.do_not_free_on_drop();
1030        let params = params.ptr;
1031        let isl_rs_result = unsafe { isl_multi_union_pw_aff_intersect_params(mupa, params) };
1032        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1033                                              should_free_on_drop: true };
1034        let err = isl_rs_ctx.last_error();
1035        if err != Error::None_ {
1036            let err_msg = isl_rs_ctx.last_error_msg();
1037            isl_rs_ctx.reset_error();
1038            return Err(LibISLError::new(err, err_msg));
1039        }
1040        Ok(isl_rs_result)
1041    }
1042
1043    /// Wraps `isl_multi_union_pw_aff_intersect_range`.
1044    pub fn intersect_range(self, set: Set) -> Result<MultiUnionPwAff, LibISLError> {
1045        let mupa = self;
1046        let isl_rs_ctx = mupa.get_ctx();
1047        let mut mupa = mupa;
1048        mupa.do_not_free_on_drop();
1049        let mupa = mupa.ptr;
1050        let mut set = set;
1051        set.do_not_free_on_drop();
1052        let set = set.ptr;
1053        let isl_rs_result = unsafe { isl_multi_union_pw_aff_intersect_range(mupa, set) };
1054        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1055                                              should_free_on_drop: true };
1056        let err = isl_rs_ctx.last_error();
1057        if err != Error::None_ {
1058            let err_msg = isl_rs_ctx.last_error_msg();
1059            isl_rs_ctx.reset_error();
1060            return Err(LibISLError::new(err, err_msg));
1061        }
1062        Ok(isl_rs_result)
1063    }
1064
1065    /// Wraps `isl_multi_union_pw_aff_involves_nan`.
1066    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1067        let multi = self;
1068        let isl_rs_ctx = multi.get_ctx();
1069        let multi = multi.ptr;
1070        let isl_rs_result = unsafe { isl_multi_union_pw_aff_involves_nan(multi) };
1071        let isl_rs_result = match isl_rs_result {
1072            0 => false,
1073            1 => true,
1074            _ => {
1075                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1076            }
1077        };
1078        let err = isl_rs_ctx.last_error();
1079        if err != Error::None_ {
1080            let err_msg = isl_rs_ctx.last_error_msg();
1081            isl_rs_ctx.reset_error();
1082            return Err(LibISLError::new(err, err_msg));
1083        }
1084        Ok(isl_rs_result)
1085    }
1086
1087    /// Wraps `isl_multi_union_pw_aff_max_multi_val`.
1088    pub fn max_multi_val(self) -> Result<MultiVal, LibISLError> {
1089        let mupa = self;
1090        let isl_rs_ctx = mupa.get_ctx();
1091        let mut mupa = mupa;
1092        mupa.do_not_free_on_drop();
1093        let mupa = mupa.ptr;
1094        let isl_rs_result = unsafe { isl_multi_union_pw_aff_max_multi_val(mupa) };
1095        let isl_rs_result = MultiVal { ptr: isl_rs_result,
1096                                       should_free_on_drop: true };
1097        let err = isl_rs_ctx.last_error();
1098        if err != Error::None_ {
1099            let err_msg = isl_rs_ctx.last_error_msg();
1100            isl_rs_ctx.reset_error();
1101            return Err(LibISLError::new(err, err_msg));
1102        }
1103        Ok(isl_rs_result)
1104    }
1105
1106    /// Wraps `isl_multi_union_pw_aff_min_multi_val`.
1107    pub fn min_multi_val(self) -> Result<MultiVal, LibISLError> {
1108        let mupa = self;
1109        let isl_rs_ctx = mupa.get_ctx();
1110        let mut mupa = mupa;
1111        mupa.do_not_free_on_drop();
1112        let mupa = mupa.ptr;
1113        let isl_rs_result = unsafe { isl_multi_union_pw_aff_min_multi_val(mupa) };
1114        let isl_rs_result = MultiVal { ptr: isl_rs_result,
1115                                       should_free_on_drop: true };
1116        let err = isl_rs_ctx.last_error();
1117        if err != Error::None_ {
1118            let err_msg = isl_rs_ctx.last_error_msg();
1119            isl_rs_ctx.reset_error();
1120            return Err(LibISLError::new(err, err_msg));
1121        }
1122        Ok(isl_rs_result)
1123    }
1124
1125    /// Wraps `isl_multi_union_pw_aff_mod_multi_val`.
1126    pub fn mod_multi_val(self, mv: MultiVal) -> Result<MultiUnionPwAff, LibISLError> {
1127        let multi = self;
1128        let isl_rs_ctx = multi.get_ctx();
1129        let mut multi = multi;
1130        multi.do_not_free_on_drop();
1131        let multi = multi.ptr;
1132        let mut mv = mv;
1133        mv.do_not_free_on_drop();
1134        let mv = mv.ptr;
1135        let isl_rs_result = unsafe { isl_multi_union_pw_aff_mod_multi_val(multi, mv) };
1136        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1137                                              should_free_on_drop: true };
1138        let err = isl_rs_ctx.last_error();
1139        if err != Error::None_ {
1140            let err_msg = isl_rs_ctx.last_error_msg();
1141            isl_rs_ctx.reset_error();
1142            return Err(LibISLError::new(err, err_msg));
1143        }
1144        Ok(isl_rs_result)
1145    }
1146
1147    /// Wraps `isl_multi_union_pw_aff_multi_aff_on_domain`.
1148    pub fn multi_aff_on_domain(domain: UnionSet, ma: MultiAff)
1149                               -> Result<MultiUnionPwAff, LibISLError> {
1150        let isl_rs_ctx = domain.get_ctx();
1151        let mut domain = domain;
1152        domain.do_not_free_on_drop();
1153        let domain = domain.ptr;
1154        let mut ma = ma;
1155        ma.do_not_free_on_drop();
1156        let ma = ma.ptr;
1157        let isl_rs_result = unsafe { isl_multi_union_pw_aff_multi_aff_on_domain(domain, ma) };
1158        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1159                                              should_free_on_drop: true };
1160        let err = isl_rs_ctx.last_error();
1161        if err != Error::None_ {
1162            let err_msg = isl_rs_ctx.last_error_msg();
1163            isl_rs_ctx.reset_error();
1164            return Err(LibISLError::new(err, err_msg));
1165        }
1166        Ok(isl_rs_result)
1167    }
1168
1169    /// Wraps `isl_multi_union_pw_aff_multi_val_on_domain`.
1170    pub fn multi_val_on_domain(domain: UnionSet, mv: MultiVal)
1171                               -> Result<MultiUnionPwAff, LibISLError> {
1172        let isl_rs_ctx = domain.get_ctx();
1173        let mut domain = domain;
1174        domain.do_not_free_on_drop();
1175        let domain = domain.ptr;
1176        let mut mv = mv;
1177        mv.do_not_free_on_drop();
1178        let mv = mv.ptr;
1179        let isl_rs_result = unsafe { isl_multi_union_pw_aff_multi_val_on_domain(domain, mv) };
1180        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1181                                              should_free_on_drop: true };
1182        let err = isl_rs_ctx.last_error();
1183        if err != Error::None_ {
1184            let err_msg = isl_rs_ctx.last_error_msg();
1185            isl_rs_ctx.reset_error();
1186            return Err(LibISLError::new(err, err_msg));
1187        }
1188        Ok(isl_rs_result)
1189    }
1190
1191    /// Wraps `isl_multi_union_pw_aff_neg`.
1192    pub fn neg(self) -> Result<MultiUnionPwAff, LibISLError> {
1193        let multi = self;
1194        let isl_rs_ctx = multi.get_ctx();
1195        let mut multi = multi;
1196        multi.do_not_free_on_drop();
1197        let multi = multi.ptr;
1198        let isl_rs_result = unsafe { isl_multi_union_pw_aff_neg(multi) };
1199        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1200                                              should_free_on_drop: true };
1201        let err = isl_rs_ctx.last_error();
1202        if err != Error::None_ {
1203            let err_msg = isl_rs_ctx.last_error_msg();
1204            isl_rs_ctx.reset_error();
1205            return Err(LibISLError::new(err, err_msg));
1206        }
1207        Ok(isl_rs_result)
1208    }
1209
1210    /// Wraps `isl_multi_union_pw_aff_plain_is_equal`.
1211    pub fn plain_is_equal(&self, multi2: &MultiUnionPwAff) -> Result<bool, LibISLError> {
1212        let multi1 = self;
1213        let isl_rs_ctx = multi1.get_ctx();
1214        let multi1 = multi1.ptr;
1215        let multi2 = multi2.ptr;
1216        let isl_rs_result = unsafe { isl_multi_union_pw_aff_plain_is_equal(multi1, multi2) };
1217        let isl_rs_result = match isl_rs_result {
1218            0 => false,
1219            1 => true,
1220            _ => {
1221                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1222            }
1223        };
1224        let err = isl_rs_ctx.last_error();
1225        if err != Error::None_ {
1226            let err_msg = isl_rs_ctx.last_error_msg();
1227            isl_rs_ctx.reset_error();
1228            return Err(LibISLError::new(err, err_msg));
1229        }
1230        Ok(isl_rs_result)
1231    }
1232
1233    /// Wraps `isl_multi_union_pw_aff_pullback_union_pw_multi_aff`.
1234    pub fn pullback_union_pw_multi_aff(self, upma: UnionPwMultiAff)
1235                                       -> Result<MultiUnionPwAff, LibISLError> {
1236        let mupa = self;
1237        let isl_rs_ctx = mupa.get_ctx();
1238        let mut mupa = mupa;
1239        mupa.do_not_free_on_drop();
1240        let mupa = mupa.ptr;
1241        let mut upma = upma;
1242        upma.do_not_free_on_drop();
1243        let upma = upma.ptr;
1244        let isl_rs_result =
1245            unsafe { isl_multi_union_pw_aff_pullback_union_pw_multi_aff(mupa, upma) };
1246        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1247                                              should_free_on_drop: true };
1248        let err = isl_rs_ctx.last_error();
1249        if err != Error::None_ {
1250            let err_msg = isl_rs_ctx.last_error_msg();
1251            isl_rs_ctx.reset_error();
1252            return Err(LibISLError::new(err, err_msg));
1253        }
1254        Ok(isl_rs_result)
1255    }
1256
1257    /// Wraps `isl_multi_union_pw_aff_pw_multi_aff_on_domain`.
1258    pub fn pw_multi_aff_on_domain(domain: UnionSet, pma: PwMultiAff)
1259                                  -> Result<MultiUnionPwAff, LibISLError> {
1260        let isl_rs_ctx = domain.get_ctx();
1261        let mut domain = domain;
1262        domain.do_not_free_on_drop();
1263        let domain = domain.ptr;
1264        let mut pma = pma;
1265        pma.do_not_free_on_drop();
1266        let pma = pma.ptr;
1267        let isl_rs_result = unsafe { isl_multi_union_pw_aff_pw_multi_aff_on_domain(domain, pma) };
1268        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1269                                              should_free_on_drop: true };
1270        let err = isl_rs_ctx.last_error();
1271        if err != Error::None_ {
1272            let err_msg = isl_rs_ctx.last_error_msg();
1273            isl_rs_ctx.reset_error();
1274            return Err(LibISLError::new(err, err_msg));
1275        }
1276        Ok(isl_rs_result)
1277    }
1278
1279    /// Wraps `isl_multi_union_pw_aff_range_factor_domain`.
1280    pub fn range_factor_domain(self) -> Result<MultiUnionPwAff, LibISLError> {
1281        let multi = self;
1282        let isl_rs_ctx = multi.get_ctx();
1283        let mut multi = multi;
1284        multi.do_not_free_on_drop();
1285        let multi = multi.ptr;
1286        let isl_rs_result = unsafe { isl_multi_union_pw_aff_range_factor_domain(multi) };
1287        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1288                                              should_free_on_drop: true };
1289        let err = isl_rs_ctx.last_error();
1290        if err != Error::None_ {
1291            let err_msg = isl_rs_ctx.last_error_msg();
1292            isl_rs_ctx.reset_error();
1293            return Err(LibISLError::new(err, err_msg));
1294        }
1295        Ok(isl_rs_result)
1296    }
1297
1298    /// Wraps `isl_multi_union_pw_aff_range_factor_range`.
1299    pub fn range_factor_range(self) -> Result<MultiUnionPwAff, LibISLError> {
1300        let multi = self;
1301        let isl_rs_ctx = multi.get_ctx();
1302        let mut multi = multi;
1303        multi.do_not_free_on_drop();
1304        let multi = multi.ptr;
1305        let isl_rs_result = unsafe { isl_multi_union_pw_aff_range_factor_range(multi) };
1306        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1307                                              should_free_on_drop: true };
1308        let err = isl_rs_ctx.last_error();
1309        if err != Error::None_ {
1310            let err_msg = isl_rs_ctx.last_error_msg();
1311            isl_rs_ctx.reset_error();
1312            return Err(LibISLError::new(err, err_msg));
1313        }
1314        Ok(isl_rs_result)
1315    }
1316
1317    /// Wraps `isl_multi_union_pw_aff_range_is_wrapping`.
1318    pub fn range_is_wrapping(&self) -> Result<bool, LibISLError> {
1319        let multi = self;
1320        let isl_rs_ctx = multi.get_ctx();
1321        let multi = multi.ptr;
1322        let isl_rs_result = unsafe { isl_multi_union_pw_aff_range_is_wrapping(multi) };
1323        let isl_rs_result = match isl_rs_result {
1324            0 => false,
1325            1 => true,
1326            _ => {
1327                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1328            }
1329        };
1330        let err = isl_rs_ctx.last_error();
1331        if err != Error::None_ {
1332            let err_msg = isl_rs_ctx.last_error_msg();
1333            isl_rs_ctx.reset_error();
1334            return Err(LibISLError::new(err, err_msg));
1335        }
1336        Ok(isl_rs_result)
1337    }
1338
1339    /// Wraps `isl_multi_union_pw_aff_range_product`.
1340    pub fn range_product(self, multi2: MultiUnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
1341        let multi1 = self;
1342        let isl_rs_ctx = multi1.get_ctx();
1343        let mut multi1 = multi1;
1344        multi1.do_not_free_on_drop();
1345        let multi1 = multi1.ptr;
1346        let mut multi2 = multi2;
1347        multi2.do_not_free_on_drop();
1348        let multi2 = multi2.ptr;
1349        let isl_rs_result = unsafe { isl_multi_union_pw_aff_range_product(multi1, multi2) };
1350        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1351                                              should_free_on_drop: true };
1352        let err = isl_rs_ctx.last_error();
1353        if err != Error::None_ {
1354            let err_msg = isl_rs_ctx.last_error_msg();
1355            isl_rs_ctx.reset_error();
1356            return Err(LibISLError::new(err, err_msg));
1357        }
1358        Ok(isl_rs_result)
1359    }
1360
1361    /// Wraps `isl_multi_union_pw_aff_range_splice`.
1362    pub fn range_splice(self, pos: u32, multi2: MultiUnionPwAff)
1363                        -> Result<MultiUnionPwAff, LibISLError> {
1364        let multi1 = self;
1365        let isl_rs_ctx = multi1.get_ctx();
1366        let mut multi1 = multi1;
1367        multi1.do_not_free_on_drop();
1368        let multi1 = multi1.ptr;
1369        let mut multi2 = multi2;
1370        multi2.do_not_free_on_drop();
1371        let multi2 = multi2.ptr;
1372        let isl_rs_result = unsafe { isl_multi_union_pw_aff_range_splice(multi1, pos, multi2) };
1373        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1374                                              should_free_on_drop: true };
1375        let err = isl_rs_ctx.last_error();
1376        if err != Error::None_ {
1377            let err_msg = isl_rs_ctx.last_error_msg();
1378            isl_rs_ctx.reset_error();
1379            return Err(LibISLError::new(err, err_msg));
1380        }
1381        Ok(isl_rs_result)
1382    }
1383
1384    /// Wraps `isl_multi_union_pw_aff_read_from_str`.
1385    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<MultiUnionPwAff, LibISLError> {
1386        let isl_rs_ctx = Context { ptr: ctx.ptr,
1387                                   should_free_on_drop: false };
1388        let ctx = ctx.ptr;
1389        let str_ = CString::new(str_).unwrap();
1390        let str_ = str_.as_ptr();
1391        let isl_rs_result = unsafe { isl_multi_union_pw_aff_read_from_str(ctx, str_) };
1392        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1393                                              should_free_on_drop: true };
1394        let err = isl_rs_ctx.last_error();
1395        if err != Error::None_ {
1396            let err_msg = isl_rs_ctx.last_error_msg();
1397            isl_rs_ctx.reset_error();
1398            return Err(LibISLError::new(err, err_msg));
1399        }
1400        Ok(isl_rs_result)
1401    }
1402
1403    /// Wraps `isl_multi_union_pw_aff_reset_range_tuple_id`.
1404    pub fn reset_range_tuple_id(self) -> Result<MultiUnionPwAff, LibISLError> {
1405        let multi = self;
1406        let isl_rs_ctx = multi.get_ctx();
1407        let mut multi = multi;
1408        multi.do_not_free_on_drop();
1409        let multi = multi.ptr;
1410        let isl_rs_result = unsafe { isl_multi_union_pw_aff_reset_range_tuple_id(multi) };
1411        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1412                                              should_free_on_drop: true };
1413        let err = isl_rs_ctx.last_error();
1414        if err != Error::None_ {
1415            let err_msg = isl_rs_ctx.last_error_msg();
1416            isl_rs_ctx.reset_error();
1417            return Err(LibISLError::new(err, err_msg));
1418        }
1419        Ok(isl_rs_result)
1420    }
1421
1422    /// Wraps `isl_multi_union_pw_aff_reset_tuple_id`.
1423    pub fn reset_tuple_id(self, type_: DimType) -> Result<MultiUnionPwAff, LibISLError> {
1424        let multi = self;
1425        let isl_rs_ctx = multi.get_ctx();
1426        let mut multi = multi;
1427        multi.do_not_free_on_drop();
1428        let multi = multi.ptr;
1429        let type_ = type_.to_i32();
1430        let isl_rs_result = unsafe { isl_multi_union_pw_aff_reset_tuple_id(multi, type_) };
1431        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1432                                              should_free_on_drop: true };
1433        let err = isl_rs_ctx.last_error();
1434        if err != Error::None_ {
1435            let err_msg = isl_rs_ctx.last_error_msg();
1436            isl_rs_ctx.reset_error();
1437            return Err(LibISLError::new(err, err_msg));
1438        }
1439        Ok(isl_rs_result)
1440    }
1441
1442    /// Wraps `isl_multi_union_pw_aff_reset_user`.
1443    pub fn reset_user(self) -> Result<MultiUnionPwAff, LibISLError> {
1444        let multi = self;
1445        let isl_rs_ctx = multi.get_ctx();
1446        let mut multi = multi;
1447        multi.do_not_free_on_drop();
1448        let multi = multi.ptr;
1449        let isl_rs_result = unsafe { isl_multi_union_pw_aff_reset_user(multi) };
1450        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1451                                              should_free_on_drop: true };
1452        let err = isl_rs_ctx.last_error();
1453        if err != Error::None_ {
1454            let err_msg = isl_rs_ctx.last_error_msg();
1455            isl_rs_ctx.reset_error();
1456            return Err(LibISLError::new(err, err_msg));
1457        }
1458        Ok(isl_rs_result)
1459    }
1460
1461    /// Wraps `isl_multi_union_pw_aff_scale_down_multi_val`.
1462    pub fn scale_down_multi_val(self, mv: MultiVal) -> Result<MultiUnionPwAff, LibISLError> {
1463        let multi = self;
1464        let isl_rs_ctx = multi.get_ctx();
1465        let mut multi = multi;
1466        multi.do_not_free_on_drop();
1467        let multi = multi.ptr;
1468        let mut mv = mv;
1469        mv.do_not_free_on_drop();
1470        let mv = mv.ptr;
1471        let isl_rs_result = unsafe { isl_multi_union_pw_aff_scale_down_multi_val(multi, mv) };
1472        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1473                                              should_free_on_drop: true };
1474        let err = isl_rs_ctx.last_error();
1475        if err != Error::None_ {
1476            let err_msg = isl_rs_ctx.last_error_msg();
1477            isl_rs_ctx.reset_error();
1478            return Err(LibISLError::new(err, err_msg));
1479        }
1480        Ok(isl_rs_result)
1481    }
1482
1483    /// Wraps `isl_multi_union_pw_aff_scale_down_val`.
1484    pub fn scale_down_val(self, v: Val) -> Result<MultiUnionPwAff, LibISLError> {
1485        let multi = self;
1486        let isl_rs_ctx = multi.get_ctx();
1487        let mut multi = multi;
1488        multi.do_not_free_on_drop();
1489        let multi = multi.ptr;
1490        let mut v = v;
1491        v.do_not_free_on_drop();
1492        let v = v.ptr;
1493        let isl_rs_result = unsafe { isl_multi_union_pw_aff_scale_down_val(multi, v) };
1494        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1495                                              should_free_on_drop: true };
1496        let err = isl_rs_ctx.last_error();
1497        if err != Error::None_ {
1498            let err_msg = isl_rs_ctx.last_error_msg();
1499            isl_rs_ctx.reset_error();
1500            return Err(LibISLError::new(err, err_msg));
1501        }
1502        Ok(isl_rs_result)
1503    }
1504
1505    /// Wraps `isl_multi_union_pw_aff_scale_multi_val`.
1506    pub fn scale_multi_val(self, mv: MultiVal) -> Result<MultiUnionPwAff, LibISLError> {
1507        let multi = self;
1508        let isl_rs_ctx = multi.get_ctx();
1509        let mut multi = multi;
1510        multi.do_not_free_on_drop();
1511        let multi = multi.ptr;
1512        let mut mv = mv;
1513        mv.do_not_free_on_drop();
1514        let mv = mv.ptr;
1515        let isl_rs_result = unsafe { isl_multi_union_pw_aff_scale_multi_val(multi, mv) };
1516        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1517                                              should_free_on_drop: true };
1518        let err = isl_rs_ctx.last_error();
1519        if err != Error::None_ {
1520            let err_msg = isl_rs_ctx.last_error_msg();
1521            isl_rs_ctx.reset_error();
1522            return Err(LibISLError::new(err, err_msg));
1523        }
1524        Ok(isl_rs_result)
1525    }
1526
1527    /// Wraps `isl_multi_union_pw_aff_scale_val`.
1528    pub fn scale_val(self, v: Val) -> Result<MultiUnionPwAff, LibISLError> {
1529        let multi = self;
1530        let isl_rs_ctx = multi.get_ctx();
1531        let mut multi = multi;
1532        multi.do_not_free_on_drop();
1533        let multi = multi.ptr;
1534        let mut v = v;
1535        v.do_not_free_on_drop();
1536        let v = v.ptr;
1537        let isl_rs_result = unsafe { isl_multi_union_pw_aff_scale_val(multi, v) };
1538        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1539                                              should_free_on_drop: true };
1540        let err = isl_rs_ctx.last_error();
1541        if err != Error::None_ {
1542            let err_msg = isl_rs_ctx.last_error_msg();
1543            isl_rs_ctx.reset_error();
1544            return Err(LibISLError::new(err, err_msg));
1545        }
1546        Ok(isl_rs_result)
1547    }
1548
1549    /// Wraps `isl_multi_union_pw_aff_set_at`.
1550    pub fn set_at(self, pos: i32, el: UnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
1551        let multi = self;
1552        let isl_rs_ctx = multi.get_ctx();
1553        let mut multi = multi;
1554        multi.do_not_free_on_drop();
1555        let multi = multi.ptr;
1556        let mut el = el;
1557        el.do_not_free_on_drop();
1558        let el = el.ptr;
1559        let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_at(multi, pos, el) };
1560        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1561                                              should_free_on_drop: true };
1562        let err = isl_rs_ctx.last_error();
1563        if err != Error::None_ {
1564            let err_msg = isl_rs_ctx.last_error_msg();
1565            isl_rs_ctx.reset_error();
1566            return Err(LibISLError::new(err, err_msg));
1567        }
1568        Ok(isl_rs_result)
1569    }
1570
1571    /// Wraps `isl_multi_union_pw_aff_set_dim_id`.
1572    pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id)
1573                      -> Result<MultiUnionPwAff, LibISLError> {
1574        let multi = self;
1575        let isl_rs_ctx = multi.get_ctx();
1576        let mut multi = multi;
1577        multi.do_not_free_on_drop();
1578        let multi = multi.ptr;
1579        let type_ = type_.to_i32();
1580        let mut id = id;
1581        id.do_not_free_on_drop();
1582        let id = id.ptr;
1583        let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_dim_id(multi, type_, pos, id) };
1584        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1585                                              should_free_on_drop: true };
1586        let err = isl_rs_ctx.last_error();
1587        if err != Error::None_ {
1588            let err_msg = isl_rs_ctx.last_error_msg();
1589            isl_rs_ctx.reset_error();
1590            return Err(LibISLError::new(err, err_msg));
1591        }
1592        Ok(isl_rs_result)
1593    }
1594
1595    /// Wraps `isl_multi_union_pw_aff_set_dim_name`.
1596    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
1597                        -> Result<MultiUnionPwAff, LibISLError> {
1598        let multi = self;
1599        let isl_rs_ctx = multi.get_ctx();
1600        let mut multi = multi;
1601        multi.do_not_free_on_drop();
1602        let multi = multi.ptr;
1603        let type_ = type_.to_i32();
1604        let s = CString::new(s).unwrap();
1605        let s = s.as_ptr();
1606        let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_dim_name(multi, type_, pos, s) };
1607        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1608                                              should_free_on_drop: true };
1609        let err = isl_rs_ctx.last_error();
1610        if err != Error::None_ {
1611            let err_msg = isl_rs_ctx.last_error_msg();
1612            isl_rs_ctx.reset_error();
1613            return Err(LibISLError::new(err, err_msg));
1614        }
1615        Ok(isl_rs_result)
1616    }
1617
1618    /// Wraps `isl_multi_union_pw_aff_set_range_tuple_id`.
1619    pub fn set_range_tuple_id(self, id: Id) -> Result<MultiUnionPwAff, LibISLError> {
1620        let multi = self;
1621        let isl_rs_ctx = multi.get_ctx();
1622        let mut multi = multi;
1623        multi.do_not_free_on_drop();
1624        let multi = multi.ptr;
1625        let mut id = id;
1626        id.do_not_free_on_drop();
1627        let id = id.ptr;
1628        let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_range_tuple_id(multi, id) };
1629        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1630                                              should_free_on_drop: true };
1631        let err = isl_rs_ctx.last_error();
1632        if err != Error::None_ {
1633            let err_msg = isl_rs_ctx.last_error_msg();
1634            isl_rs_ctx.reset_error();
1635            return Err(LibISLError::new(err, err_msg));
1636        }
1637        Ok(isl_rs_result)
1638    }
1639
1640    /// Wraps `isl_multi_union_pw_aff_set_tuple_id`.
1641    pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<MultiUnionPwAff, LibISLError> {
1642        let multi = self;
1643        let isl_rs_ctx = multi.get_ctx();
1644        let mut multi = multi;
1645        multi.do_not_free_on_drop();
1646        let multi = multi.ptr;
1647        let type_ = type_.to_i32();
1648        let mut id = id;
1649        id.do_not_free_on_drop();
1650        let id = id.ptr;
1651        let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_tuple_id(multi, type_, id) };
1652        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1653                                              should_free_on_drop: true };
1654        let err = isl_rs_ctx.last_error();
1655        if err != Error::None_ {
1656            let err_msg = isl_rs_ctx.last_error_msg();
1657            isl_rs_ctx.reset_error();
1658            return Err(LibISLError::new(err, err_msg));
1659        }
1660        Ok(isl_rs_result)
1661    }
1662
1663    /// Wraps `isl_multi_union_pw_aff_set_tuple_name`.
1664    pub fn set_tuple_name(self, type_: DimType, s: &str) -> Result<MultiUnionPwAff, LibISLError> {
1665        let multi = self;
1666        let isl_rs_ctx = multi.get_ctx();
1667        let mut multi = multi;
1668        multi.do_not_free_on_drop();
1669        let multi = multi.ptr;
1670        let type_ = type_.to_i32();
1671        let s = CString::new(s).unwrap();
1672        let s = s.as_ptr();
1673        let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_tuple_name(multi, type_, s) };
1674        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1675                                              should_free_on_drop: true };
1676        let err = isl_rs_ctx.last_error();
1677        if err != Error::None_ {
1678            let err_msg = isl_rs_ctx.last_error_msg();
1679            isl_rs_ctx.reset_error();
1680            return Err(LibISLError::new(err, err_msg));
1681        }
1682        Ok(isl_rs_result)
1683    }
1684
1685    /// Wraps `isl_multi_union_pw_aff_set_union_pw_aff`.
1686    pub fn set_union_pw_aff(self, pos: i32, el: UnionPwAff)
1687                            -> Result<MultiUnionPwAff, LibISLError> {
1688        let multi = self;
1689        let isl_rs_ctx = multi.get_ctx();
1690        let mut multi = multi;
1691        multi.do_not_free_on_drop();
1692        let multi = multi.ptr;
1693        let mut el = el;
1694        el.do_not_free_on_drop();
1695        let el = el.ptr;
1696        let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_union_pw_aff(multi, pos, el) };
1697        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1698                                              should_free_on_drop: true };
1699        let err = isl_rs_ctx.last_error();
1700        if err != Error::None_ {
1701            let err_msg = isl_rs_ctx.last_error_msg();
1702            isl_rs_ctx.reset_error();
1703            return Err(LibISLError::new(err, err_msg));
1704        }
1705        Ok(isl_rs_result)
1706    }
1707
1708    /// Wraps `isl_multi_union_pw_aff_size`.
1709    pub fn size(&self) -> Result<i32, LibISLError> {
1710        let multi = self;
1711        let isl_rs_ctx = multi.get_ctx();
1712        let multi = multi.ptr;
1713        let isl_rs_result = unsafe { isl_multi_union_pw_aff_size(multi) };
1714        let err = isl_rs_ctx.last_error();
1715        if err != Error::None_ {
1716            let err_msg = isl_rs_ctx.last_error_msg();
1717            isl_rs_ctx.reset_error();
1718            return Err(LibISLError::new(err, err_msg));
1719        }
1720        Ok(isl_rs_result)
1721    }
1722
1723    /// Wraps `isl_multi_union_pw_aff_sub`.
1724    pub fn sub(self, multi2: MultiUnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
1725        let multi1 = self;
1726        let isl_rs_ctx = multi1.get_ctx();
1727        let mut multi1 = multi1;
1728        multi1.do_not_free_on_drop();
1729        let multi1 = multi1.ptr;
1730        let mut multi2 = multi2;
1731        multi2.do_not_free_on_drop();
1732        let multi2 = multi2.ptr;
1733        let isl_rs_result = unsafe { isl_multi_union_pw_aff_sub(multi1, multi2) };
1734        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1735                                              should_free_on_drop: true };
1736        let err = isl_rs_ctx.last_error();
1737        if err != Error::None_ {
1738            let err_msg = isl_rs_ctx.last_error_msg();
1739            isl_rs_ctx.reset_error();
1740            return Err(LibISLError::new(err, err_msg));
1741        }
1742        Ok(isl_rs_result)
1743    }
1744
1745    /// Wraps `isl_multi_union_pw_aff_to_str`.
1746    pub fn to_str(&self) -> Result<&str, LibISLError> {
1747        let mupa = self;
1748        let isl_rs_ctx = mupa.get_ctx();
1749        let mupa = mupa.ptr;
1750        let isl_rs_result = unsafe { isl_multi_union_pw_aff_to_str(mupa) };
1751        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1752        let isl_rs_result = isl_rs_result.to_str().unwrap();
1753        let err = isl_rs_ctx.last_error();
1754        if err != Error::None_ {
1755            let err_msg = isl_rs_ctx.last_error_msg();
1756            isl_rs_ctx.reset_error();
1757            return Err(LibISLError::new(err, err_msg));
1758        }
1759        Ok(isl_rs_result)
1760    }
1761
1762    /// Wraps `isl_multi_union_pw_aff_union_add`.
1763    pub fn union_add(self, mupa2: MultiUnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
1764        let mupa1 = self;
1765        let isl_rs_ctx = mupa1.get_ctx();
1766        let mut mupa1 = mupa1;
1767        mupa1.do_not_free_on_drop();
1768        let mupa1 = mupa1.ptr;
1769        let mut mupa2 = mupa2;
1770        mupa2.do_not_free_on_drop();
1771        let mupa2 = mupa2.ptr;
1772        let isl_rs_result = unsafe { isl_multi_union_pw_aff_union_add(mupa1, mupa2) };
1773        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1774                                              should_free_on_drop: true };
1775        let err = isl_rs_ctx.last_error();
1776        if err != Error::None_ {
1777            let err_msg = isl_rs_ctx.last_error_msg();
1778            isl_rs_ctx.reset_error();
1779            return Err(LibISLError::new(err, err_msg));
1780        }
1781        Ok(isl_rs_result)
1782    }
1783
1784    /// Wraps `isl_multi_union_pw_aff_zero`.
1785    pub fn zero(space: Space) -> Result<MultiUnionPwAff, LibISLError> {
1786        let isl_rs_ctx = space.get_ctx();
1787        let mut space = space;
1788        space.do_not_free_on_drop();
1789        let space = space.ptr;
1790        let isl_rs_result = unsafe { isl_multi_union_pw_aff_zero(space) };
1791        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1792                                              should_free_on_drop: true };
1793        let err = isl_rs_ctx.last_error();
1794        if err != Error::None_ {
1795            let err_msg = isl_rs_ctx.last_error_msg();
1796            isl_rs_ctx.reset_error();
1797            return Err(LibISLError::new(err, err_msg));
1798        }
1799        Ok(isl_rs_result)
1800    }
1801
1802    /// Wraps `isl_multi_union_pw_aff_zero_union_set`.
1803    pub fn zero_union_set(self) -> Result<UnionSet, LibISLError> {
1804        let mupa = self;
1805        let isl_rs_ctx = mupa.get_ctx();
1806        let mut mupa = mupa;
1807        mupa.do_not_free_on_drop();
1808        let mupa = mupa.ptr;
1809        let isl_rs_result = unsafe { isl_multi_union_pw_aff_zero_union_set(mupa) };
1810        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1811                                       should_free_on_drop: true };
1812        let err = isl_rs_ctx.last_error();
1813        if err != Error::None_ {
1814            let err_msg = isl_rs_ctx.last_error_msg();
1815            isl_rs_ctx.reset_error();
1816            return Err(LibISLError::new(err, err_msg));
1817        }
1818        Ok(isl_rs_result)
1819    }
1820
1821    /// Does not call isl_multi_union_pw_aff_free() on being dropped. (For
1822    /// internal use only.)
1823    pub fn do_not_free_on_drop(&mut self) {
1824        self.should_free_on_drop = false;
1825    }
1826}
1827
1828impl Drop for MultiUnionPwAff {
1829    fn drop(&mut self) {
1830        if self.should_free_on_drop {
1831            unsafe {
1832                isl_multi_union_pw_aff_free(self.ptr);
1833            }
1834        }
1835    }
1836}