isl_rs/bindings/
multi_pw_aff.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    Aff, Context, DimType, Error, Id, IdList, LibISLError, Map, MultiAff, MultiId, MultiVal, PwAff,
6    PwAffList, PwMultiAff, Set, Space, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12/// Wraps `isl_multi_pw_aff`.
13pub struct MultiPwAff {
14    pub ptr: uintptr_t,
15    pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20    fn isl_multi_pw_aff_add(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
21
22    fn isl_multi_pw_aff_add_constant_multi_val(mpa: uintptr_t, mv: uintptr_t) -> uintptr_t;
23
24    fn isl_multi_pw_aff_add_constant_val(mpa: uintptr_t, v: uintptr_t) -> uintptr_t;
25
26    fn isl_multi_pw_aff_add_dims(multi: uintptr_t, type_: i32, n: u32) -> uintptr_t;
27
28    fn isl_multi_pw_aff_align_params(multi: uintptr_t, model: uintptr_t) -> uintptr_t;
29
30    fn isl_multi_pw_aff_as_map(mpa: uintptr_t) -> uintptr_t;
31
32    fn isl_multi_pw_aff_as_multi_aff(mpa: uintptr_t) -> uintptr_t;
33
34    fn isl_multi_pw_aff_as_set(mpa: uintptr_t) -> uintptr_t;
35
36    fn isl_multi_pw_aff_bind(mpa: uintptr_t, tuple: uintptr_t) -> uintptr_t;
37
38    fn isl_multi_pw_aff_bind_domain(multi: uintptr_t, tuple: uintptr_t) -> uintptr_t;
39
40    fn isl_multi_pw_aff_bind_domain_wrapped_domain(multi: uintptr_t, tuple: uintptr_t)
41                                                   -> uintptr_t;
42
43    fn isl_multi_pw_aff_coalesce(mpa: uintptr_t) -> uintptr_t;
44
45    fn isl_multi_pw_aff_copy(multi: uintptr_t) -> uintptr_t;
46
47    fn isl_multi_pw_aff_dim(multi: uintptr_t, type_: i32) -> i32;
48
49    fn isl_multi_pw_aff_domain(mpa: uintptr_t) -> uintptr_t;
50
51    fn isl_multi_pw_aff_domain_reverse(multi: uintptr_t) -> uintptr_t;
52
53    fn isl_multi_pw_aff_drop_dims(multi: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
54
55    fn isl_multi_pw_aff_dump(mpa: uintptr_t) -> ();
56
57    fn isl_multi_pw_aff_eq_map(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
58
59    fn isl_multi_pw_aff_factor_range(multi: uintptr_t) -> uintptr_t;
60
61    fn isl_multi_pw_aff_find_dim_by_id(multi: uintptr_t, type_: i32, id: uintptr_t) -> i32;
62
63    fn isl_multi_pw_aff_find_dim_by_name(multi: uintptr_t, type_: i32, name: *const c_char) -> i32;
64
65    fn isl_multi_pw_aff_flat_range_product(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
66
67    fn isl_multi_pw_aff_flatten_range(multi: uintptr_t) -> uintptr_t;
68
69    fn isl_multi_pw_aff_free(multi: uintptr_t) -> uintptr_t;
70
71    fn isl_multi_pw_aff_from_aff(aff: uintptr_t) -> uintptr_t;
72
73    fn isl_multi_pw_aff_from_multi_aff(ma: uintptr_t) -> uintptr_t;
74
75    fn isl_multi_pw_aff_from_pw_aff(pa: uintptr_t) -> uintptr_t;
76
77    fn isl_multi_pw_aff_from_pw_aff_list(space: uintptr_t, list: uintptr_t) -> uintptr_t;
78
79    fn isl_multi_pw_aff_from_pw_multi_aff(pma: uintptr_t) -> uintptr_t;
80
81    fn isl_multi_pw_aff_from_range(multi: uintptr_t) -> uintptr_t;
82
83    fn isl_multi_pw_aff_get_at(multi: uintptr_t, pos: i32) -> uintptr_t;
84
85    fn isl_multi_pw_aff_get_ctx(multi: uintptr_t) -> uintptr_t;
86
87    fn isl_multi_pw_aff_get_dim_id(multi: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
88
89    fn isl_multi_pw_aff_get_domain_space(multi: uintptr_t) -> uintptr_t;
90
91    fn isl_multi_pw_aff_get_hash(mpa: uintptr_t) -> u32;
92
93    fn isl_multi_pw_aff_get_list(multi: uintptr_t) -> uintptr_t;
94
95    fn isl_multi_pw_aff_get_pw_aff(multi: uintptr_t, pos: i32) -> uintptr_t;
96
97    fn isl_multi_pw_aff_get_range_tuple_id(multi: uintptr_t) -> uintptr_t;
98
99    fn isl_multi_pw_aff_get_space(multi: uintptr_t) -> uintptr_t;
100
101    fn isl_multi_pw_aff_get_tuple_id(multi: uintptr_t, type_: i32) -> uintptr_t;
102
103    fn isl_multi_pw_aff_get_tuple_name(multi: uintptr_t, type_: i32) -> *const c_char;
104
105    fn isl_multi_pw_aff_gist(mpa: uintptr_t, set: uintptr_t) -> uintptr_t;
106
107    fn isl_multi_pw_aff_gist_params(mpa: uintptr_t, set: uintptr_t) -> uintptr_t;
108
109    fn isl_multi_pw_aff_has_range_tuple_id(multi: uintptr_t) -> i32;
110
111    fn isl_multi_pw_aff_has_tuple_id(multi: uintptr_t, type_: i32) -> i32;
112
113    fn isl_multi_pw_aff_identity(space: uintptr_t) -> uintptr_t;
114
115    fn isl_multi_pw_aff_identity_multi_pw_aff(multi: uintptr_t) -> uintptr_t;
116
117    fn isl_multi_pw_aff_identity_on_domain_space(space: uintptr_t) -> uintptr_t;
118
119    fn isl_multi_pw_aff_insert_dims(multi: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
120
121    fn isl_multi_pw_aff_insert_domain(multi: uintptr_t, domain: uintptr_t) -> uintptr_t;
122
123    fn isl_multi_pw_aff_intersect_domain(mpa: uintptr_t, domain: uintptr_t) -> uintptr_t;
124
125    fn isl_multi_pw_aff_intersect_params(mpa: uintptr_t, set: uintptr_t) -> uintptr_t;
126
127    fn isl_multi_pw_aff_involves_dims(multi: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
128
129    fn isl_multi_pw_aff_involves_nan(multi: uintptr_t) -> i32;
130
131    fn isl_multi_pw_aff_involves_param_id(multi: uintptr_t, id: uintptr_t) -> i32;
132
133    fn isl_multi_pw_aff_involves_param_id_list(multi: uintptr_t, list: uintptr_t) -> i32;
134
135    fn isl_multi_pw_aff_is_cst(mpa: uintptr_t) -> i32;
136
137    fn isl_multi_pw_aff_is_equal(mpa1: uintptr_t, mpa2: uintptr_t) -> i32;
138
139    fn isl_multi_pw_aff_isa_multi_aff(mpa: uintptr_t) -> i32;
140
141    fn isl_multi_pw_aff_lex_ge_map(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
142
143    fn isl_multi_pw_aff_lex_gt_map(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
144
145    fn isl_multi_pw_aff_lex_le_map(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
146
147    fn isl_multi_pw_aff_lex_lt_map(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
148
149    fn isl_multi_pw_aff_max(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
150
151    fn isl_multi_pw_aff_max_multi_val(mpa: uintptr_t) -> uintptr_t;
152
153    fn isl_multi_pw_aff_min(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
154
155    fn isl_multi_pw_aff_min_multi_val(mpa: uintptr_t) -> uintptr_t;
156
157    fn isl_multi_pw_aff_mod_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
158
159    fn isl_multi_pw_aff_move_dims(pma: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32,
160                                  src_pos: u32, n: u32)
161                                  -> uintptr_t;
162
163    fn isl_multi_pw_aff_neg(multi: uintptr_t) -> uintptr_t;
164
165    fn isl_multi_pw_aff_plain_is_equal(multi1: uintptr_t, multi2: uintptr_t) -> i32;
166
167    fn isl_multi_pw_aff_product(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
168
169    fn isl_multi_pw_aff_project_domain_on_params(multi: uintptr_t) -> uintptr_t;
170
171    fn isl_multi_pw_aff_pullback_multi_aff(mpa: uintptr_t, ma: uintptr_t) -> uintptr_t;
172
173    fn isl_multi_pw_aff_pullback_multi_pw_aff(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
174
175    fn isl_multi_pw_aff_pullback_pw_multi_aff(mpa: uintptr_t, pma: uintptr_t) -> uintptr_t;
176
177    fn isl_multi_pw_aff_range_factor_domain(multi: uintptr_t) -> uintptr_t;
178
179    fn isl_multi_pw_aff_range_factor_range(multi: uintptr_t) -> uintptr_t;
180
181    fn isl_multi_pw_aff_range_is_wrapping(multi: uintptr_t) -> i32;
182
183    fn isl_multi_pw_aff_range_product(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
184
185    fn isl_multi_pw_aff_range_splice(multi1: uintptr_t, pos: u32, multi2: uintptr_t) -> uintptr_t;
186
187    fn isl_multi_pw_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
188
189    fn isl_multi_pw_aff_reset_range_tuple_id(multi: uintptr_t) -> uintptr_t;
190
191    fn isl_multi_pw_aff_reset_tuple_id(multi: uintptr_t, type_: i32) -> uintptr_t;
192
193    fn isl_multi_pw_aff_reset_user(multi: uintptr_t) -> uintptr_t;
194
195    fn isl_multi_pw_aff_scale_down_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
196
197    fn isl_multi_pw_aff_scale_down_val(multi: uintptr_t, v: uintptr_t) -> uintptr_t;
198
199    fn isl_multi_pw_aff_scale_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
200
201    fn isl_multi_pw_aff_scale_val(multi: uintptr_t, v: uintptr_t) -> uintptr_t;
202
203    fn isl_multi_pw_aff_set_at(multi: uintptr_t, pos: i32, el: uintptr_t) -> uintptr_t;
204
205    fn isl_multi_pw_aff_set_dim_id(multi: uintptr_t, type_: i32, pos: u32, id: uintptr_t)
206                                   -> uintptr_t;
207
208    fn isl_multi_pw_aff_set_dim_name(multi: uintptr_t, type_: i32, pos: u32, s: *const c_char)
209                                     -> uintptr_t;
210
211    fn isl_multi_pw_aff_set_pw_aff(multi: uintptr_t, pos: i32, el: uintptr_t) -> uintptr_t;
212
213    fn isl_multi_pw_aff_set_range_tuple_id(multi: uintptr_t, id: uintptr_t) -> uintptr_t;
214
215    fn isl_multi_pw_aff_set_tuple_id(multi: uintptr_t, type_: i32, id: uintptr_t) -> uintptr_t;
216
217    fn isl_multi_pw_aff_set_tuple_name(multi: uintptr_t, type_: i32, s: *const c_char)
218                                       -> uintptr_t;
219
220    fn isl_multi_pw_aff_size(multi: uintptr_t) -> i32;
221
222    fn isl_multi_pw_aff_splice(multi1: uintptr_t, in_pos: u32, out_pos: u32, multi2: uintptr_t)
223                               -> uintptr_t;
224
225    fn isl_multi_pw_aff_sub(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
226
227    fn isl_multi_pw_aff_to_str(mpa: uintptr_t) -> *const c_char;
228
229    fn isl_multi_pw_aff_unbind_params_insert_domain(multi: uintptr_t, domain: uintptr_t)
230                                                    -> uintptr_t;
231
232    fn isl_multi_pw_aff_union_add(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
233
234    fn isl_multi_pw_aff_zero(space: uintptr_t) -> uintptr_t;
235
236}
237
238impl MultiPwAff {
239    /// Wraps `isl_multi_pw_aff_add`.
240    pub fn add(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
241        let multi1 = self;
242        let isl_rs_ctx = multi1.get_ctx();
243        let mut multi1 = multi1;
244        multi1.do_not_free_on_drop();
245        let multi1 = multi1.ptr;
246        let mut multi2 = multi2;
247        multi2.do_not_free_on_drop();
248        let multi2 = multi2.ptr;
249        let isl_rs_result = unsafe { isl_multi_pw_aff_add(multi1, multi2) };
250        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
251                                         should_free_on_drop: true };
252        let err = isl_rs_ctx.last_error();
253        if err != Error::None_ {
254            let err_msg = isl_rs_ctx.last_error_msg();
255            isl_rs_ctx.reset_error();
256            return Err(LibISLError::new(err, err_msg));
257        }
258        Ok(isl_rs_result)
259    }
260
261    /// Wraps `isl_multi_pw_aff_add_constant_multi_val`.
262    pub fn add_constant_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
263        let mpa = self;
264        let isl_rs_ctx = mpa.get_ctx();
265        let mut mpa = mpa;
266        mpa.do_not_free_on_drop();
267        let mpa = mpa.ptr;
268        let mut mv = mv;
269        mv.do_not_free_on_drop();
270        let mv = mv.ptr;
271        let isl_rs_result = unsafe { isl_multi_pw_aff_add_constant_multi_val(mpa, mv) };
272        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
273                                         should_free_on_drop: true };
274        let err = isl_rs_ctx.last_error();
275        if err != Error::None_ {
276            let err_msg = isl_rs_ctx.last_error_msg();
277            isl_rs_ctx.reset_error();
278            return Err(LibISLError::new(err, err_msg));
279        }
280        Ok(isl_rs_result)
281    }
282
283    /// Wraps `isl_multi_pw_aff_add_constant_val`.
284    pub fn add_constant_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
285        let mpa = self;
286        let isl_rs_ctx = mpa.get_ctx();
287        let mut mpa = mpa;
288        mpa.do_not_free_on_drop();
289        let mpa = mpa.ptr;
290        let mut v = v;
291        v.do_not_free_on_drop();
292        let v = v.ptr;
293        let isl_rs_result = unsafe { isl_multi_pw_aff_add_constant_val(mpa, v) };
294        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
295                                         should_free_on_drop: true };
296        let err = isl_rs_ctx.last_error();
297        if err != Error::None_ {
298            let err_msg = isl_rs_ctx.last_error_msg();
299            isl_rs_ctx.reset_error();
300            return Err(LibISLError::new(err, err_msg));
301        }
302        Ok(isl_rs_result)
303    }
304
305    /// Wraps `isl_multi_pw_aff_add_dims`.
306    pub fn add_dims(self, type_: DimType, n: u32) -> Result<MultiPwAff, LibISLError> {
307        let multi = self;
308        let isl_rs_ctx = multi.get_ctx();
309        let mut multi = multi;
310        multi.do_not_free_on_drop();
311        let multi = multi.ptr;
312        let type_ = type_.to_i32();
313        let isl_rs_result = unsafe { isl_multi_pw_aff_add_dims(multi, type_, n) };
314        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
315                                         should_free_on_drop: true };
316        let err = isl_rs_ctx.last_error();
317        if err != Error::None_ {
318            let err_msg = isl_rs_ctx.last_error_msg();
319            isl_rs_ctx.reset_error();
320            return Err(LibISLError::new(err, err_msg));
321        }
322        Ok(isl_rs_result)
323    }
324
325    /// Wraps `isl_multi_pw_aff_align_params`.
326    pub fn align_params(self, model: Space) -> Result<MultiPwAff, LibISLError> {
327        let multi = self;
328        let isl_rs_ctx = multi.get_ctx();
329        let mut multi = multi;
330        multi.do_not_free_on_drop();
331        let multi = multi.ptr;
332        let mut model = model;
333        model.do_not_free_on_drop();
334        let model = model.ptr;
335        let isl_rs_result = unsafe { isl_multi_pw_aff_align_params(multi, model) };
336        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
337                                         should_free_on_drop: true };
338        let err = isl_rs_ctx.last_error();
339        if err != Error::None_ {
340            let err_msg = isl_rs_ctx.last_error_msg();
341            isl_rs_ctx.reset_error();
342            return Err(LibISLError::new(err, err_msg));
343        }
344        Ok(isl_rs_result)
345    }
346
347    /// Wraps `isl_multi_pw_aff_as_map`.
348    pub fn as_map(self) -> Result<Map, LibISLError> {
349        let mpa = self;
350        let isl_rs_ctx = mpa.get_ctx();
351        let mut mpa = mpa;
352        mpa.do_not_free_on_drop();
353        let mpa = mpa.ptr;
354        let isl_rs_result = unsafe { isl_multi_pw_aff_as_map(mpa) };
355        let isl_rs_result = Map { ptr: isl_rs_result,
356                                  should_free_on_drop: true };
357        let err = isl_rs_ctx.last_error();
358        if err != Error::None_ {
359            let err_msg = isl_rs_ctx.last_error_msg();
360            isl_rs_ctx.reset_error();
361            return Err(LibISLError::new(err, err_msg));
362        }
363        Ok(isl_rs_result)
364    }
365
366    /// Wraps `isl_multi_pw_aff_as_multi_aff`.
367    pub fn as_multi_aff(self) -> Result<MultiAff, LibISLError> {
368        let mpa = self;
369        let isl_rs_ctx = mpa.get_ctx();
370        let mut mpa = mpa;
371        mpa.do_not_free_on_drop();
372        let mpa = mpa.ptr;
373        let isl_rs_result = unsafe { isl_multi_pw_aff_as_multi_aff(mpa) };
374        let isl_rs_result = MultiAff { ptr: isl_rs_result,
375                                       should_free_on_drop: true };
376        let err = isl_rs_ctx.last_error();
377        if err != Error::None_ {
378            let err_msg = isl_rs_ctx.last_error_msg();
379            isl_rs_ctx.reset_error();
380            return Err(LibISLError::new(err, err_msg));
381        }
382        Ok(isl_rs_result)
383    }
384
385    /// Wraps `isl_multi_pw_aff_as_set`.
386    pub fn as_set(self) -> Result<Set, LibISLError> {
387        let mpa = self;
388        let isl_rs_ctx = mpa.get_ctx();
389        let mut mpa = mpa;
390        mpa.do_not_free_on_drop();
391        let mpa = mpa.ptr;
392        let isl_rs_result = unsafe { isl_multi_pw_aff_as_set(mpa) };
393        let isl_rs_result = Set { 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_multi_pw_aff_bind`.
405    pub fn bind(self, tuple: MultiId) -> Result<Set, LibISLError> {
406        let mpa = self;
407        let isl_rs_ctx = mpa.get_ctx();
408        let mut mpa = mpa;
409        mpa.do_not_free_on_drop();
410        let mpa = mpa.ptr;
411        let mut tuple = tuple;
412        tuple.do_not_free_on_drop();
413        let tuple = tuple.ptr;
414        let isl_rs_result = unsafe { isl_multi_pw_aff_bind(mpa, tuple) };
415        let isl_rs_result = Set { ptr: isl_rs_result,
416                                  should_free_on_drop: true };
417        let err = isl_rs_ctx.last_error();
418        if err != Error::None_ {
419            let err_msg = isl_rs_ctx.last_error_msg();
420            isl_rs_ctx.reset_error();
421            return Err(LibISLError::new(err, err_msg));
422        }
423        Ok(isl_rs_result)
424    }
425
426    /// Wraps `isl_multi_pw_aff_bind_domain`.
427    pub fn bind_domain(self, tuple: MultiId) -> Result<MultiPwAff, LibISLError> {
428        let multi = self;
429        let isl_rs_ctx = multi.get_ctx();
430        let mut multi = multi;
431        multi.do_not_free_on_drop();
432        let multi = multi.ptr;
433        let mut tuple = tuple;
434        tuple.do_not_free_on_drop();
435        let tuple = tuple.ptr;
436        let isl_rs_result = unsafe { isl_multi_pw_aff_bind_domain(multi, tuple) };
437        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
438                                         should_free_on_drop: true };
439        let err = isl_rs_ctx.last_error();
440        if err != Error::None_ {
441            let err_msg = isl_rs_ctx.last_error_msg();
442            isl_rs_ctx.reset_error();
443            return Err(LibISLError::new(err, err_msg));
444        }
445        Ok(isl_rs_result)
446    }
447
448    /// Wraps `isl_multi_pw_aff_bind_domain_wrapped_domain`.
449    pub fn bind_domain_wrapped_domain(self, tuple: MultiId) -> Result<MultiPwAff, LibISLError> {
450        let multi = self;
451        let isl_rs_ctx = multi.get_ctx();
452        let mut multi = multi;
453        multi.do_not_free_on_drop();
454        let multi = multi.ptr;
455        let mut tuple = tuple;
456        tuple.do_not_free_on_drop();
457        let tuple = tuple.ptr;
458        let isl_rs_result = unsafe { isl_multi_pw_aff_bind_domain_wrapped_domain(multi, tuple) };
459        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
460                                         should_free_on_drop: true };
461        let err = isl_rs_ctx.last_error();
462        if err != Error::None_ {
463            let err_msg = isl_rs_ctx.last_error_msg();
464            isl_rs_ctx.reset_error();
465            return Err(LibISLError::new(err, err_msg));
466        }
467        Ok(isl_rs_result)
468    }
469
470    /// Wraps `isl_multi_pw_aff_coalesce`.
471    pub fn coalesce(self) -> Result<MultiPwAff, LibISLError> {
472        let mpa = self;
473        let isl_rs_ctx = mpa.get_ctx();
474        let mut mpa = mpa;
475        mpa.do_not_free_on_drop();
476        let mpa = mpa.ptr;
477        let isl_rs_result = unsafe { isl_multi_pw_aff_coalesce(mpa) };
478        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
479                                         should_free_on_drop: true };
480        let err = isl_rs_ctx.last_error();
481        if err != Error::None_ {
482            let err_msg = isl_rs_ctx.last_error_msg();
483            isl_rs_ctx.reset_error();
484            return Err(LibISLError::new(err, err_msg));
485        }
486        Ok(isl_rs_result)
487    }
488
489    /// Wraps `isl_multi_pw_aff_copy`.
490    pub fn copy(&self) -> Result<MultiPwAff, LibISLError> {
491        let multi = self;
492        let isl_rs_ctx = multi.get_ctx();
493        let multi = multi.ptr;
494        let isl_rs_result = unsafe { isl_multi_pw_aff_copy(multi) };
495        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
496                                         should_free_on_drop: true };
497        let err = isl_rs_ctx.last_error();
498        if err != Error::None_ {
499            let err_msg = isl_rs_ctx.last_error_msg();
500            isl_rs_ctx.reset_error();
501            return Err(LibISLError::new(err, err_msg));
502        }
503        Ok(isl_rs_result)
504    }
505
506    /// Wraps `isl_multi_pw_aff_dim`.
507    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
508        let multi = self;
509        let isl_rs_ctx = multi.get_ctx();
510        let multi = multi.ptr;
511        let type_ = type_.to_i32();
512        let isl_rs_result = unsafe { isl_multi_pw_aff_dim(multi, type_) };
513        let err = isl_rs_ctx.last_error();
514        if err != Error::None_ {
515            let err_msg = isl_rs_ctx.last_error_msg();
516            isl_rs_ctx.reset_error();
517            return Err(LibISLError::new(err, err_msg));
518        }
519        Ok(isl_rs_result)
520    }
521
522    /// Wraps `isl_multi_pw_aff_domain`.
523    pub fn domain(self) -> Result<Set, LibISLError> {
524        let mpa = self;
525        let isl_rs_ctx = mpa.get_ctx();
526        let mut mpa = mpa;
527        mpa.do_not_free_on_drop();
528        let mpa = mpa.ptr;
529        let isl_rs_result = unsafe { isl_multi_pw_aff_domain(mpa) };
530        let isl_rs_result = Set { ptr: isl_rs_result,
531                                  should_free_on_drop: true };
532        let err = isl_rs_ctx.last_error();
533        if err != Error::None_ {
534            let err_msg = isl_rs_ctx.last_error_msg();
535            isl_rs_ctx.reset_error();
536            return Err(LibISLError::new(err, err_msg));
537        }
538        Ok(isl_rs_result)
539    }
540
541    /// Wraps `isl_multi_pw_aff_domain_reverse`.
542    pub fn domain_reverse(self) -> Result<MultiPwAff, LibISLError> {
543        let multi = self;
544        let isl_rs_ctx = multi.get_ctx();
545        let mut multi = multi;
546        multi.do_not_free_on_drop();
547        let multi = multi.ptr;
548        let isl_rs_result = unsafe { isl_multi_pw_aff_domain_reverse(multi) };
549        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
550                                         should_free_on_drop: true };
551        let err = isl_rs_ctx.last_error();
552        if err != Error::None_ {
553            let err_msg = isl_rs_ctx.last_error_msg();
554            isl_rs_ctx.reset_error();
555            return Err(LibISLError::new(err, err_msg));
556        }
557        Ok(isl_rs_result)
558    }
559
560    /// Wraps `isl_multi_pw_aff_drop_dims`.
561    pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<MultiPwAff, LibISLError> {
562        let multi = self;
563        let isl_rs_ctx = multi.get_ctx();
564        let mut multi = multi;
565        multi.do_not_free_on_drop();
566        let multi = multi.ptr;
567        let type_ = type_.to_i32();
568        let isl_rs_result = unsafe { isl_multi_pw_aff_drop_dims(multi, type_, first, n) };
569        let isl_rs_result = MultiPwAff { 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_multi_pw_aff_dump`.
581    pub fn dump(&self) -> Result<(), LibISLError> {
582        let mpa = self;
583        let isl_rs_ctx = mpa.get_ctx();
584        let mpa = mpa.ptr;
585        let isl_rs_result = unsafe { isl_multi_pw_aff_dump(mpa) };
586        let err = isl_rs_ctx.last_error();
587        if err != Error::None_ {
588            let err_msg = isl_rs_ctx.last_error_msg();
589            isl_rs_ctx.reset_error();
590            return Err(LibISLError::new(err, err_msg));
591        }
592        Ok(isl_rs_result)
593    }
594
595    /// Wraps `isl_multi_pw_aff_eq_map`.
596    pub fn eq_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
597        let mpa1 = self;
598        let isl_rs_ctx = mpa1.get_ctx();
599        let mut mpa1 = mpa1;
600        mpa1.do_not_free_on_drop();
601        let mpa1 = mpa1.ptr;
602        let mut mpa2 = mpa2;
603        mpa2.do_not_free_on_drop();
604        let mpa2 = mpa2.ptr;
605        let isl_rs_result = unsafe { isl_multi_pw_aff_eq_map(mpa1, mpa2) };
606        let isl_rs_result = Map { ptr: isl_rs_result,
607                                  should_free_on_drop: true };
608        let err = isl_rs_ctx.last_error();
609        if err != Error::None_ {
610            let err_msg = isl_rs_ctx.last_error_msg();
611            isl_rs_ctx.reset_error();
612            return Err(LibISLError::new(err, err_msg));
613        }
614        Ok(isl_rs_result)
615    }
616
617    /// Wraps `isl_multi_pw_aff_factor_range`.
618    pub fn factor_range(self) -> Result<MultiPwAff, LibISLError> {
619        let multi = self;
620        let isl_rs_ctx = multi.get_ctx();
621        let mut multi = multi;
622        multi.do_not_free_on_drop();
623        let multi = multi.ptr;
624        let isl_rs_result = unsafe { isl_multi_pw_aff_factor_range(multi) };
625        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
626                                         should_free_on_drop: true };
627        let err = isl_rs_ctx.last_error();
628        if err != Error::None_ {
629            let err_msg = isl_rs_ctx.last_error_msg();
630            isl_rs_ctx.reset_error();
631            return Err(LibISLError::new(err, err_msg));
632        }
633        Ok(isl_rs_result)
634    }
635
636    /// Wraps `isl_multi_pw_aff_find_dim_by_id`.
637    pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> Result<i32, LibISLError> {
638        let multi = self;
639        let isl_rs_ctx = multi.get_ctx();
640        let multi = multi.ptr;
641        let type_ = type_.to_i32();
642        let id = id.ptr;
643        let isl_rs_result = unsafe { isl_multi_pw_aff_find_dim_by_id(multi, type_, id) };
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_multi_pw_aff_find_dim_by_name`.
654    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
655        let multi = self;
656        let isl_rs_ctx = multi.get_ctx();
657        let multi = multi.ptr;
658        let type_ = type_.to_i32();
659        let name = CString::new(name).unwrap();
660        let name = name.as_ptr();
661        let isl_rs_result = unsafe { isl_multi_pw_aff_find_dim_by_name(multi, type_, name) };
662        let err = isl_rs_ctx.last_error();
663        if err != Error::None_ {
664            let err_msg = isl_rs_ctx.last_error_msg();
665            isl_rs_ctx.reset_error();
666            return Err(LibISLError::new(err, err_msg));
667        }
668        Ok(isl_rs_result)
669    }
670
671    /// Wraps `isl_multi_pw_aff_flat_range_product`.
672    pub fn flat_range_product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
673        let multi1 = self;
674        let isl_rs_ctx = multi1.get_ctx();
675        let mut multi1 = multi1;
676        multi1.do_not_free_on_drop();
677        let multi1 = multi1.ptr;
678        let mut multi2 = multi2;
679        multi2.do_not_free_on_drop();
680        let multi2 = multi2.ptr;
681        let isl_rs_result = unsafe { isl_multi_pw_aff_flat_range_product(multi1, multi2) };
682        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
683                                         should_free_on_drop: true };
684        let err = isl_rs_ctx.last_error();
685        if err != Error::None_ {
686            let err_msg = isl_rs_ctx.last_error_msg();
687            isl_rs_ctx.reset_error();
688            return Err(LibISLError::new(err, err_msg));
689        }
690        Ok(isl_rs_result)
691    }
692
693    /// Wraps `isl_multi_pw_aff_flatten_range`.
694    pub fn flatten_range(self) -> Result<MultiPwAff, LibISLError> {
695        let multi = self;
696        let isl_rs_ctx = multi.get_ctx();
697        let mut multi = multi;
698        multi.do_not_free_on_drop();
699        let multi = multi.ptr;
700        let isl_rs_result = unsafe { isl_multi_pw_aff_flatten_range(multi) };
701        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
702                                         should_free_on_drop: true };
703        let err = isl_rs_ctx.last_error();
704        if err != Error::None_ {
705            let err_msg = isl_rs_ctx.last_error_msg();
706            isl_rs_ctx.reset_error();
707            return Err(LibISLError::new(err, err_msg));
708        }
709        Ok(isl_rs_result)
710    }
711
712    /// Wraps `isl_multi_pw_aff_free`.
713    pub fn free(self) -> Result<MultiPwAff, LibISLError> {
714        let multi = self;
715        let isl_rs_ctx = multi.get_ctx();
716        let mut multi = multi;
717        multi.do_not_free_on_drop();
718        let multi = multi.ptr;
719        let isl_rs_result = unsafe { isl_multi_pw_aff_free(multi) };
720        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
721                                         should_free_on_drop: true };
722        let err = isl_rs_ctx.last_error();
723        if err != Error::None_ {
724            let err_msg = isl_rs_ctx.last_error_msg();
725            isl_rs_ctx.reset_error();
726            return Err(LibISLError::new(err, err_msg));
727        }
728        Ok(isl_rs_result)
729    }
730
731    /// Wraps `isl_multi_pw_aff_from_aff`.
732    pub fn from_aff(aff: Aff) -> Result<MultiPwAff, LibISLError> {
733        let isl_rs_ctx = aff.get_ctx();
734        let mut aff = aff;
735        aff.do_not_free_on_drop();
736        let aff = aff.ptr;
737        let isl_rs_result = unsafe { isl_multi_pw_aff_from_aff(aff) };
738        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
739                                         should_free_on_drop: true };
740        let err = isl_rs_ctx.last_error();
741        if err != Error::None_ {
742            let err_msg = isl_rs_ctx.last_error_msg();
743            isl_rs_ctx.reset_error();
744            return Err(LibISLError::new(err, err_msg));
745        }
746        Ok(isl_rs_result)
747    }
748
749    /// Wraps `isl_multi_pw_aff_from_multi_aff`.
750    pub fn from_multi_aff(ma: MultiAff) -> Result<MultiPwAff, LibISLError> {
751        let isl_rs_ctx = ma.get_ctx();
752        let mut ma = ma;
753        ma.do_not_free_on_drop();
754        let ma = ma.ptr;
755        let isl_rs_result = unsafe { isl_multi_pw_aff_from_multi_aff(ma) };
756        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
757                                         should_free_on_drop: true };
758        let err = isl_rs_ctx.last_error();
759        if err != Error::None_ {
760            let err_msg = isl_rs_ctx.last_error_msg();
761            isl_rs_ctx.reset_error();
762            return Err(LibISLError::new(err, err_msg));
763        }
764        Ok(isl_rs_result)
765    }
766
767    /// Wraps `isl_multi_pw_aff_from_pw_aff`.
768    pub fn from_pw_aff(pa: PwAff) -> Result<MultiPwAff, LibISLError> {
769        let isl_rs_ctx = pa.get_ctx();
770        let mut pa = pa;
771        pa.do_not_free_on_drop();
772        let pa = pa.ptr;
773        let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_aff(pa) };
774        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
775                                         should_free_on_drop: true };
776        let err = isl_rs_ctx.last_error();
777        if err != Error::None_ {
778            let err_msg = isl_rs_ctx.last_error_msg();
779            isl_rs_ctx.reset_error();
780            return Err(LibISLError::new(err, err_msg));
781        }
782        Ok(isl_rs_result)
783    }
784
785    /// Wraps `isl_multi_pw_aff_from_pw_aff_list`.
786    pub fn from_pw_aff_list(space: Space, list: PwAffList) -> Result<MultiPwAff, LibISLError> {
787        let isl_rs_ctx = space.get_ctx();
788        let mut space = space;
789        space.do_not_free_on_drop();
790        let space = space.ptr;
791        let mut list = list;
792        list.do_not_free_on_drop();
793        let list = list.ptr;
794        let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_aff_list(space, list) };
795        let isl_rs_result = MultiPwAff { 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_pw_aff_from_pw_multi_aff`.
807    pub fn from_pw_multi_aff(pma: PwMultiAff) -> Result<MultiPwAff, LibISLError> {
808        let isl_rs_ctx = pma.get_ctx();
809        let mut pma = pma;
810        pma.do_not_free_on_drop();
811        let pma = pma.ptr;
812        let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_multi_aff(pma) };
813        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
814                                         should_free_on_drop: true };
815        let err = isl_rs_ctx.last_error();
816        if err != Error::None_ {
817            let err_msg = isl_rs_ctx.last_error_msg();
818            isl_rs_ctx.reset_error();
819            return Err(LibISLError::new(err, err_msg));
820        }
821        Ok(isl_rs_result)
822    }
823
824    /// Wraps `isl_multi_pw_aff_from_range`.
825    pub fn from_range(self) -> Result<MultiPwAff, LibISLError> {
826        let multi = self;
827        let isl_rs_ctx = multi.get_ctx();
828        let mut multi = multi;
829        multi.do_not_free_on_drop();
830        let multi = multi.ptr;
831        let isl_rs_result = unsafe { isl_multi_pw_aff_from_range(multi) };
832        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
833                                         should_free_on_drop: true };
834        let err = isl_rs_ctx.last_error();
835        if err != Error::None_ {
836            let err_msg = isl_rs_ctx.last_error_msg();
837            isl_rs_ctx.reset_error();
838            return Err(LibISLError::new(err, err_msg));
839        }
840        Ok(isl_rs_result)
841    }
842
843    /// Wraps `isl_multi_pw_aff_get_at`.
844    pub fn get_at(&self, pos: i32) -> Result<PwAff, LibISLError> {
845        let multi = self;
846        let isl_rs_ctx = multi.get_ctx();
847        let multi = multi.ptr;
848        let isl_rs_result = unsafe { isl_multi_pw_aff_get_at(multi, pos) };
849        let isl_rs_result = PwAff { ptr: isl_rs_result,
850                                    should_free_on_drop: true };
851        let err = isl_rs_ctx.last_error();
852        if err != Error::None_ {
853            let err_msg = isl_rs_ctx.last_error_msg();
854            isl_rs_ctx.reset_error();
855            return Err(LibISLError::new(err, err_msg));
856        }
857        Ok(isl_rs_result)
858    }
859
860    /// Wraps `isl_multi_pw_aff_get_ctx`.
861    pub fn get_ctx(&self) -> Context {
862        let multi = self;
863        let multi = multi.ptr;
864        let isl_rs_result = unsafe { isl_multi_pw_aff_get_ctx(multi) };
865        let isl_rs_result = Context { ptr: isl_rs_result,
866                                      should_free_on_drop: false };
867        isl_rs_result
868    }
869
870    /// Wraps `isl_multi_pw_aff_get_dim_id`.
871    pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
872        let multi = self;
873        let isl_rs_ctx = multi.get_ctx();
874        let multi = multi.ptr;
875        let type_ = type_.to_i32();
876        let isl_rs_result = unsafe { isl_multi_pw_aff_get_dim_id(multi, type_, pos) };
877        let isl_rs_result = Id { ptr: isl_rs_result,
878                                 should_free_on_drop: true };
879        let err = isl_rs_ctx.last_error();
880        if err != Error::None_ {
881            let err_msg = isl_rs_ctx.last_error_msg();
882            isl_rs_ctx.reset_error();
883            return Err(LibISLError::new(err, err_msg));
884        }
885        Ok(isl_rs_result)
886    }
887
888    /// Wraps `isl_multi_pw_aff_get_domain_space`.
889    pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
890        let multi = self;
891        let isl_rs_ctx = multi.get_ctx();
892        let multi = multi.ptr;
893        let isl_rs_result = unsafe { isl_multi_pw_aff_get_domain_space(multi) };
894        let isl_rs_result = Space { ptr: isl_rs_result,
895                                    should_free_on_drop: true };
896        let err = isl_rs_ctx.last_error();
897        if err != Error::None_ {
898            let err_msg = isl_rs_ctx.last_error_msg();
899            isl_rs_ctx.reset_error();
900            return Err(LibISLError::new(err, err_msg));
901        }
902        Ok(isl_rs_result)
903    }
904
905    /// Wraps `isl_multi_pw_aff_get_hash`.
906    pub fn get_hash(&self) -> Result<u32, LibISLError> {
907        let mpa = self;
908        let isl_rs_ctx = mpa.get_ctx();
909        let mpa = mpa.ptr;
910        let isl_rs_result = unsafe { isl_multi_pw_aff_get_hash(mpa) };
911        let err = isl_rs_ctx.last_error();
912        if err != Error::None_ {
913            let err_msg = isl_rs_ctx.last_error_msg();
914            isl_rs_ctx.reset_error();
915            return Err(LibISLError::new(err, err_msg));
916        }
917        Ok(isl_rs_result)
918    }
919
920    /// Wraps `isl_multi_pw_aff_get_list`.
921    pub fn get_list(&self) -> Result<PwAffList, LibISLError> {
922        let multi = self;
923        let isl_rs_ctx = multi.get_ctx();
924        let multi = multi.ptr;
925        let isl_rs_result = unsafe { isl_multi_pw_aff_get_list(multi) };
926        let isl_rs_result = PwAffList { 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_multi_pw_aff_get_pw_aff`.
938    pub fn get_pw_aff(&self, pos: i32) -> Result<PwAff, LibISLError> {
939        let multi = self;
940        let isl_rs_ctx = multi.get_ctx();
941        let multi = multi.ptr;
942        let isl_rs_result = unsafe { isl_multi_pw_aff_get_pw_aff(multi, pos) };
943        let isl_rs_result = PwAff { 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_pw_aff_get_range_tuple_id`.
955    pub fn get_range_tuple_id(&self) -> Result<Id, 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_pw_aff_get_range_tuple_id(multi) };
960        let isl_rs_result = Id { ptr: isl_rs_result,
961                                 should_free_on_drop: true };
962        let err = isl_rs_ctx.last_error();
963        if err != Error::None_ {
964            let err_msg = isl_rs_ctx.last_error_msg();
965            isl_rs_ctx.reset_error();
966            return Err(LibISLError::new(err, err_msg));
967        }
968        Ok(isl_rs_result)
969    }
970
971    /// Wraps `isl_multi_pw_aff_get_space`.
972    pub fn get_space(&self) -> Result<Space, LibISLError> {
973        let multi = self;
974        let isl_rs_ctx = multi.get_ctx();
975        let multi = multi.ptr;
976        let isl_rs_result = unsafe { isl_multi_pw_aff_get_space(multi) };
977        let isl_rs_result = Space { ptr: isl_rs_result,
978                                    should_free_on_drop: true };
979        let err = isl_rs_ctx.last_error();
980        if err != Error::None_ {
981            let err_msg = isl_rs_ctx.last_error_msg();
982            isl_rs_ctx.reset_error();
983            return Err(LibISLError::new(err, err_msg));
984        }
985        Ok(isl_rs_result)
986    }
987
988    /// Wraps `isl_multi_pw_aff_get_tuple_id`.
989    pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
990        let multi = self;
991        let isl_rs_ctx = multi.get_ctx();
992        let multi = multi.ptr;
993        let type_ = type_.to_i32();
994        let isl_rs_result = unsafe { isl_multi_pw_aff_get_tuple_id(multi, type_) };
995        let isl_rs_result = Id { ptr: isl_rs_result,
996                                 should_free_on_drop: true };
997        let err = isl_rs_ctx.last_error();
998        if err != Error::None_ {
999            let err_msg = isl_rs_ctx.last_error_msg();
1000            isl_rs_ctx.reset_error();
1001            return Err(LibISLError::new(err, err_msg));
1002        }
1003        Ok(isl_rs_result)
1004    }
1005
1006    /// Wraps `isl_multi_pw_aff_get_tuple_name`.
1007    pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
1008        let multi = self;
1009        let isl_rs_ctx = multi.get_ctx();
1010        let multi = multi.ptr;
1011        let type_ = type_.to_i32();
1012        let isl_rs_result = unsafe { isl_multi_pw_aff_get_tuple_name(multi, type_) };
1013        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1014        let isl_rs_result = isl_rs_result.to_str().unwrap();
1015        let err = isl_rs_ctx.last_error();
1016        if err != Error::None_ {
1017            let err_msg = isl_rs_ctx.last_error_msg();
1018            isl_rs_ctx.reset_error();
1019            return Err(LibISLError::new(err, err_msg));
1020        }
1021        Ok(isl_rs_result)
1022    }
1023
1024    /// Wraps `isl_multi_pw_aff_gist`.
1025    pub fn gist(self, set: Set) -> Result<MultiPwAff, LibISLError> {
1026        let mpa = self;
1027        let isl_rs_ctx = mpa.get_ctx();
1028        let mut mpa = mpa;
1029        mpa.do_not_free_on_drop();
1030        let mpa = mpa.ptr;
1031        let mut set = set;
1032        set.do_not_free_on_drop();
1033        let set = set.ptr;
1034        let isl_rs_result = unsafe { isl_multi_pw_aff_gist(mpa, set) };
1035        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1036                                         should_free_on_drop: true };
1037        let err = isl_rs_ctx.last_error();
1038        if err != Error::None_ {
1039            let err_msg = isl_rs_ctx.last_error_msg();
1040            isl_rs_ctx.reset_error();
1041            return Err(LibISLError::new(err, err_msg));
1042        }
1043        Ok(isl_rs_result)
1044    }
1045
1046    /// Wraps `isl_multi_pw_aff_gist_params`.
1047    pub fn gist_params(self, set: Set) -> Result<MultiPwAff, LibISLError> {
1048        let mpa = self;
1049        let isl_rs_ctx = mpa.get_ctx();
1050        let mut mpa = mpa;
1051        mpa.do_not_free_on_drop();
1052        let mpa = mpa.ptr;
1053        let mut set = set;
1054        set.do_not_free_on_drop();
1055        let set = set.ptr;
1056        let isl_rs_result = unsafe { isl_multi_pw_aff_gist_params(mpa, set) };
1057        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1058                                         should_free_on_drop: true };
1059        let err = isl_rs_ctx.last_error();
1060        if err != Error::None_ {
1061            let err_msg = isl_rs_ctx.last_error_msg();
1062            isl_rs_ctx.reset_error();
1063            return Err(LibISLError::new(err, err_msg));
1064        }
1065        Ok(isl_rs_result)
1066    }
1067
1068    /// Wraps `isl_multi_pw_aff_has_range_tuple_id`.
1069    pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
1070        let multi = self;
1071        let isl_rs_ctx = multi.get_ctx();
1072        let multi = multi.ptr;
1073        let isl_rs_result = unsafe { isl_multi_pw_aff_has_range_tuple_id(multi) };
1074        let isl_rs_result = match isl_rs_result {
1075            0 => false,
1076            1 => true,
1077            _ => {
1078                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1079            }
1080        };
1081        let err = isl_rs_ctx.last_error();
1082        if err != Error::None_ {
1083            let err_msg = isl_rs_ctx.last_error_msg();
1084            isl_rs_ctx.reset_error();
1085            return Err(LibISLError::new(err, err_msg));
1086        }
1087        Ok(isl_rs_result)
1088    }
1089
1090    /// Wraps `isl_multi_pw_aff_has_tuple_id`.
1091    pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
1092        let multi = self;
1093        let isl_rs_ctx = multi.get_ctx();
1094        let multi = multi.ptr;
1095        let type_ = type_.to_i32();
1096        let isl_rs_result = unsafe { isl_multi_pw_aff_has_tuple_id(multi, type_) };
1097        let isl_rs_result = match isl_rs_result {
1098            0 => false,
1099            1 => true,
1100            _ => {
1101                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1102            }
1103        };
1104        let err = isl_rs_ctx.last_error();
1105        if err != Error::None_ {
1106            let err_msg = isl_rs_ctx.last_error_msg();
1107            isl_rs_ctx.reset_error();
1108            return Err(LibISLError::new(err, err_msg));
1109        }
1110        Ok(isl_rs_result)
1111    }
1112
1113    /// Wraps `isl_multi_pw_aff_identity`.
1114    pub fn identity(space: Space) -> Result<MultiPwAff, LibISLError> {
1115        let isl_rs_ctx = space.get_ctx();
1116        let mut space = space;
1117        space.do_not_free_on_drop();
1118        let space = space.ptr;
1119        let isl_rs_result = unsafe { isl_multi_pw_aff_identity(space) };
1120        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1121                                         should_free_on_drop: true };
1122        let err = isl_rs_ctx.last_error();
1123        if err != Error::None_ {
1124            let err_msg = isl_rs_ctx.last_error_msg();
1125            isl_rs_ctx.reset_error();
1126            return Err(LibISLError::new(err, err_msg));
1127        }
1128        Ok(isl_rs_result)
1129    }
1130
1131    /// Wraps `isl_multi_pw_aff_identity_multi_pw_aff`.
1132    pub fn identity_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
1133        let multi = self;
1134        let isl_rs_ctx = multi.get_ctx();
1135        let mut multi = multi;
1136        multi.do_not_free_on_drop();
1137        let multi = multi.ptr;
1138        let isl_rs_result = unsafe { isl_multi_pw_aff_identity_multi_pw_aff(multi) };
1139        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1140                                         should_free_on_drop: true };
1141        let err = isl_rs_ctx.last_error();
1142        if err != Error::None_ {
1143            let err_msg = isl_rs_ctx.last_error_msg();
1144            isl_rs_ctx.reset_error();
1145            return Err(LibISLError::new(err, err_msg));
1146        }
1147        Ok(isl_rs_result)
1148    }
1149
1150    /// Wraps `isl_multi_pw_aff_identity_on_domain_space`.
1151    pub fn identity_on_domain_space(space: Space) -> Result<MultiPwAff, LibISLError> {
1152        let isl_rs_ctx = space.get_ctx();
1153        let mut space = space;
1154        space.do_not_free_on_drop();
1155        let space = space.ptr;
1156        let isl_rs_result = unsafe { isl_multi_pw_aff_identity_on_domain_space(space) };
1157        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1158                                         should_free_on_drop: true };
1159        let err = isl_rs_ctx.last_error();
1160        if err != Error::None_ {
1161            let err_msg = isl_rs_ctx.last_error_msg();
1162            isl_rs_ctx.reset_error();
1163            return Err(LibISLError::new(err, err_msg));
1164        }
1165        Ok(isl_rs_result)
1166    }
1167
1168    /// Wraps `isl_multi_pw_aff_insert_dims`.
1169    pub fn insert_dims(self, type_: DimType, first: u32, n: u32)
1170                       -> Result<MultiPwAff, LibISLError> {
1171        let multi = self;
1172        let isl_rs_ctx = multi.get_ctx();
1173        let mut multi = multi;
1174        multi.do_not_free_on_drop();
1175        let multi = multi.ptr;
1176        let type_ = type_.to_i32();
1177        let isl_rs_result = unsafe { isl_multi_pw_aff_insert_dims(multi, type_, first, n) };
1178        let isl_rs_result = MultiPwAff { 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_multi_pw_aff_insert_domain`.
1190    pub fn insert_domain(self, domain: Space) -> Result<MultiPwAff, LibISLError> {
1191        let multi = self;
1192        let isl_rs_ctx = multi.get_ctx();
1193        let mut multi = multi;
1194        multi.do_not_free_on_drop();
1195        let multi = multi.ptr;
1196        let mut domain = domain;
1197        domain.do_not_free_on_drop();
1198        let domain = domain.ptr;
1199        let isl_rs_result = unsafe { isl_multi_pw_aff_insert_domain(multi, domain) };
1200        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1201                                         should_free_on_drop: true };
1202        let err = isl_rs_ctx.last_error();
1203        if err != Error::None_ {
1204            let err_msg = isl_rs_ctx.last_error_msg();
1205            isl_rs_ctx.reset_error();
1206            return Err(LibISLError::new(err, err_msg));
1207        }
1208        Ok(isl_rs_result)
1209    }
1210
1211    /// Wraps `isl_multi_pw_aff_intersect_domain`.
1212    pub fn intersect_domain(self, domain: Set) -> Result<MultiPwAff, LibISLError> {
1213        let mpa = self;
1214        let isl_rs_ctx = mpa.get_ctx();
1215        let mut mpa = mpa;
1216        mpa.do_not_free_on_drop();
1217        let mpa = mpa.ptr;
1218        let mut domain = domain;
1219        domain.do_not_free_on_drop();
1220        let domain = domain.ptr;
1221        let isl_rs_result = unsafe { isl_multi_pw_aff_intersect_domain(mpa, domain) };
1222        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1223                                         should_free_on_drop: true };
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_pw_aff_intersect_params`.
1234    pub fn intersect_params(self, set: Set) -> Result<MultiPwAff, LibISLError> {
1235        let mpa = self;
1236        let isl_rs_ctx = mpa.get_ctx();
1237        let mut mpa = mpa;
1238        mpa.do_not_free_on_drop();
1239        let mpa = mpa.ptr;
1240        let mut set = set;
1241        set.do_not_free_on_drop();
1242        let set = set.ptr;
1243        let isl_rs_result = unsafe { isl_multi_pw_aff_intersect_params(mpa, set) };
1244        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1245                                         should_free_on_drop: true };
1246        let err = isl_rs_ctx.last_error();
1247        if err != Error::None_ {
1248            let err_msg = isl_rs_ctx.last_error_msg();
1249            isl_rs_ctx.reset_error();
1250            return Err(LibISLError::new(err, err_msg));
1251        }
1252        Ok(isl_rs_result)
1253    }
1254
1255    /// Wraps `isl_multi_pw_aff_involves_dims`.
1256    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1257        let multi = self;
1258        let isl_rs_ctx = multi.get_ctx();
1259        let multi = multi.ptr;
1260        let type_ = type_.to_i32();
1261        let isl_rs_result = unsafe { isl_multi_pw_aff_involves_dims(multi, type_, first, n) };
1262        let isl_rs_result = match isl_rs_result {
1263            0 => false,
1264            1 => true,
1265            _ => {
1266                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1267            }
1268        };
1269        let err = isl_rs_ctx.last_error();
1270        if err != Error::None_ {
1271            let err_msg = isl_rs_ctx.last_error_msg();
1272            isl_rs_ctx.reset_error();
1273            return Err(LibISLError::new(err, err_msg));
1274        }
1275        Ok(isl_rs_result)
1276    }
1277
1278    /// Wraps `isl_multi_pw_aff_involves_nan`.
1279    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1280        let multi = self;
1281        let isl_rs_ctx = multi.get_ctx();
1282        let multi = multi.ptr;
1283        let isl_rs_result = unsafe { isl_multi_pw_aff_involves_nan(multi) };
1284        let isl_rs_result = match isl_rs_result {
1285            0 => false,
1286            1 => true,
1287            _ => {
1288                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1289            }
1290        };
1291        let err = isl_rs_ctx.last_error();
1292        if err != Error::None_ {
1293            let err_msg = isl_rs_ctx.last_error_msg();
1294            isl_rs_ctx.reset_error();
1295            return Err(LibISLError::new(err, err_msg));
1296        }
1297        Ok(isl_rs_result)
1298    }
1299
1300    /// Wraps `isl_multi_pw_aff_involves_param_id`.
1301    pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
1302        let multi = self;
1303        let isl_rs_ctx = multi.get_ctx();
1304        let multi = multi.ptr;
1305        let id = id.ptr;
1306        let isl_rs_result = unsafe { isl_multi_pw_aff_involves_param_id(multi, id) };
1307        let isl_rs_result = match isl_rs_result {
1308            0 => false,
1309            1 => true,
1310            _ => {
1311                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1312            }
1313        };
1314        let err = isl_rs_ctx.last_error();
1315        if err != Error::None_ {
1316            let err_msg = isl_rs_ctx.last_error_msg();
1317            isl_rs_ctx.reset_error();
1318            return Err(LibISLError::new(err, err_msg));
1319        }
1320        Ok(isl_rs_result)
1321    }
1322
1323    /// Wraps `isl_multi_pw_aff_involves_param_id_list`.
1324    pub fn involves_param_id_list(&self, list: &IdList) -> Result<bool, LibISLError> {
1325        let multi = self;
1326        let isl_rs_ctx = multi.get_ctx();
1327        let multi = multi.ptr;
1328        let list = list.ptr;
1329        let isl_rs_result = unsafe { isl_multi_pw_aff_involves_param_id_list(multi, list) };
1330        let isl_rs_result = match isl_rs_result {
1331            0 => false,
1332            1 => true,
1333            _ => {
1334                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1335            }
1336        };
1337        let err = isl_rs_ctx.last_error();
1338        if err != Error::None_ {
1339            let err_msg = isl_rs_ctx.last_error_msg();
1340            isl_rs_ctx.reset_error();
1341            return Err(LibISLError::new(err, err_msg));
1342        }
1343        Ok(isl_rs_result)
1344    }
1345
1346    /// Wraps `isl_multi_pw_aff_is_cst`.
1347    pub fn is_cst(&self) -> Result<bool, LibISLError> {
1348        let mpa = self;
1349        let isl_rs_ctx = mpa.get_ctx();
1350        let mpa = mpa.ptr;
1351        let isl_rs_result = unsafe { isl_multi_pw_aff_is_cst(mpa) };
1352        let isl_rs_result = match isl_rs_result {
1353            0 => false,
1354            1 => true,
1355            _ => {
1356                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1357            }
1358        };
1359        let err = isl_rs_ctx.last_error();
1360        if err != Error::None_ {
1361            let err_msg = isl_rs_ctx.last_error_msg();
1362            isl_rs_ctx.reset_error();
1363            return Err(LibISLError::new(err, err_msg));
1364        }
1365        Ok(isl_rs_result)
1366    }
1367
1368    /// Wraps `isl_multi_pw_aff_is_equal`.
1369    pub fn is_equal(&self, mpa2: &MultiPwAff) -> Result<bool, LibISLError> {
1370        let mpa1 = self;
1371        let isl_rs_ctx = mpa1.get_ctx();
1372        let mpa1 = mpa1.ptr;
1373        let mpa2 = mpa2.ptr;
1374        let isl_rs_result = unsafe { isl_multi_pw_aff_is_equal(mpa1, mpa2) };
1375        let isl_rs_result = match isl_rs_result {
1376            0 => false,
1377            1 => true,
1378            _ => {
1379                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1380            }
1381        };
1382        let err = isl_rs_ctx.last_error();
1383        if err != Error::None_ {
1384            let err_msg = isl_rs_ctx.last_error_msg();
1385            isl_rs_ctx.reset_error();
1386            return Err(LibISLError::new(err, err_msg));
1387        }
1388        Ok(isl_rs_result)
1389    }
1390
1391    /// Wraps `isl_multi_pw_aff_isa_multi_aff`.
1392    pub fn isa_multi_aff(&self) -> Result<bool, LibISLError> {
1393        let mpa = self;
1394        let isl_rs_ctx = mpa.get_ctx();
1395        let mpa = mpa.ptr;
1396        let isl_rs_result = unsafe { isl_multi_pw_aff_isa_multi_aff(mpa) };
1397        let isl_rs_result = match isl_rs_result {
1398            0 => false,
1399            1 => true,
1400            _ => {
1401                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1402            }
1403        };
1404        let err = isl_rs_ctx.last_error();
1405        if err != Error::None_ {
1406            let err_msg = isl_rs_ctx.last_error_msg();
1407            isl_rs_ctx.reset_error();
1408            return Err(LibISLError::new(err, err_msg));
1409        }
1410        Ok(isl_rs_result)
1411    }
1412
1413    /// Wraps `isl_multi_pw_aff_lex_ge_map`.
1414    pub fn lex_ge_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1415        let mpa1 = self;
1416        let isl_rs_ctx = mpa1.get_ctx();
1417        let mut mpa1 = mpa1;
1418        mpa1.do_not_free_on_drop();
1419        let mpa1 = mpa1.ptr;
1420        let mut mpa2 = mpa2;
1421        mpa2.do_not_free_on_drop();
1422        let mpa2 = mpa2.ptr;
1423        let isl_rs_result = unsafe { isl_multi_pw_aff_lex_ge_map(mpa1, mpa2) };
1424        let isl_rs_result = Map { ptr: isl_rs_result,
1425                                  should_free_on_drop: true };
1426        let err = isl_rs_ctx.last_error();
1427        if err != Error::None_ {
1428            let err_msg = isl_rs_ctx.last_error_msg();
1429            isl_rs_ctx.reset_error();
1430            return Err(LibISLError::new(err, err_msg));
1431        }
1432        Ok(isl_rs_result)
1433    }
1434
1435    /// Wraps `isl_multi_pw_aff_lex_gt_map`.
1436    pub fn lex_gt_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1437        let mpa1 = self;
1438        let isl_rs_ctx = mpa1.get_ctx();
1439        let mut mpa1 = mpa1;
1440        mpa1.do_not_free_on_drop();
1441        let mpa1 = mpa1.ptr;
1442        let mut mpa2 = mpa2;
1443        mpa2.do_not_free_on_drop();
1444        let mpa2 = mpa2.ptr;
1445        let isl_rs_result = unsafe { isl_multi_pw_aff_lex_gt_map(mpa1, mpa2) };
1446        let isl_rs_result = Map { ptr: isl_rs_result,
1447                                  should_free_on_drop: true };
1448        let err = isl_rs_ctx.last_error();
1449        if err != Error::None_ {
1450            let err_msg = isl_rs_ctx.last_error_msg();
1451            isl_rs_ctx.reset_error();
1452            return Err(LibISLError::new(err, err_msg));
1453        }
1454        Ok(isl_rs_result)
1455    }
1456
1457    /// Wraps `isl_multi_pw_aff_lex_le_map`.
1458    pub fn lex_le_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1459        let mpa1 = self;
1460        let isl_rs_ctx = mpa1.get_ctx();
1461        let mut mpa1 = mpa1;
1462        mpa1.do_not_free_on_drop();
1463        let mpa1 = mpa1.ptr;
1464        let mut mpa2 = mpa2;
1465        mpa2.do_not_free_on_drop();
1466        let mpa2 = mpa2.ptr;
1467        let isl_rs_result = unsafe { isl_multi_pw_aff_lex_le_map(mpa1, mpa2) };
1468        let isl_rs_result = Map { ptr: isl_rs_result,
1469                                  should_free_on_drop: true };
1470        let err = isl_rs_ctx.last_error();
1471        if err != Error::None_ {
1472            let err_msg = isl_rs_ctx.last_error_msg();
1473            isl_rs_ctx.reset_error();
1474            return Err(LibISLError::new(err, err_msg));
1475        }
1476        Ok(isl_rs_result)
1477    }
1478
1479    /// Wraps `isl_multi_pw_aff_lex_lt_map`.
1480    pub fn lex_lt_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1481        let mpa1 = self;
1482        let isl_rs_ctx = mpa1.get_ctx();
1483        let mut mpa1 = mpa1;
1484        mpa1.do_not_free_on_drop();
1485        let mpa1 = mpa1.ptr;
1486        let mut mpa2 = mpa2;
1487        mpa2.do_not_free_on_drop();
1488        let mpa2 = mpa2.ptr;
1489        let isl_rs_result = unsafe { isl_multi_pw_aff_lex_lt_map(mpa1, mpa2) };
1490        let isl_rs_result = Map { ptr: isl_rs_result,
1491                                  should_free_on_drop: true };
1492        let err = isl_rs_ctx.last_error();
1493        if err != Error::None_ {
1494            let err_msg = isl_rs_ctx.last_error_msg();
1495            isl_rs_ctx.reset_error();
1496            return Err(LibISLError::new(err, err_msg));
1497        }
1498        Ok(isl_rs_result)
1499    }
1500
1501    /// Wraps `isl_multi_pw_aff_max`.
1502    pub fn max(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1503        let multi1 = self;
1504        let isl_rs_ctx = multi1.get_ctx();
1505        let mut multi1 = multi1;
1506        multi1.do_not_free_on_drop();
1507        let multi1 = multi1.ptr;
1508        let mut multi2 = multi2;
1509        multi2.do_not_free_on_drop();
1510        let multi2 = multi2.ptr;
1511        let isl_rs_result = unsafe { isl_multi_pw_aff_max(multi1, multi2) };
1512        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1513                                         should_free_on_drop: true };
1514        let err = isl_rs_ctx.last_error();
1515        if err != Error::None_ {
1516            let err_msg = isl_rs_ctx.last_error_msg();
1517            isl_rs_ctx.reset_error();
1518            return Err(LibISLError::new(err, err_msg));
1519        }
1520        Ok(isl_rs_result)
1521    }
1522
1523    /// Wraps `isl_multi_pw_aff_max_multi_val`.
1524    pub fn max_multi_val(self) -> Result<MultiVal, LibISLError> {
1525        let mpa = self;
1526        let isl_rs_ctx = mpa.get_ctx();
1527        let mut mpa = mpa;
1528        mpa.do_not_free_on_drop();
1529        let mpa = mpa.ptr;
1530        let isl_rs_result = unsafe { isl_multi_pw_aff_max_multi_val(mpa) };
1531        let isl_rs_result = MultiVal { ptr: isl_rs_result,
1532                                       should_free_on_drop: true };
1533        let err = isl_rs_ctx.last_error();
1534        if err != Error::None_ {
1535            let err_msg = isl_rs_ctx.last_error_msg();
1536            isl_rs_ctx.reset_error();
1537            return Err(LibISLError::new(err, err_msg));
1538        }
1539        Ok(isl_rs_result)
1540    }
1541
1542    /// Wraps `isl_multi_pw_aff_min`.
1543    pub fn min(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1544        let multi1 = self;
1545        let isl_rs_ctx = multi1.get_ctx();
1546        let mut multi1 = multi1;
1547        multi1.do_not_free_on_drop();
1548        let multi1 = multi1.ptr;
1549        let mut multi2 = multi2;
1550        multi2.do_not_free_on_drop();
1551        let multi2 = multi2.ptr;
1552        let isl_rs_result = unsafe { isl_multi_pw_aff_min(multi1, multi2) };
1553        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1554                                         should_free_on_drop: true };
1555        let err = isl_rs_ctx.last_error();
1556        if err != Error::None_ {
1557            let err_msg = isl_rs_ctx.last_error_msg();
1558            isl_rs_ctx.reset_error();
1559            return Err(LibISLError::new(err, err_msg));
1560        }
1561        Ok(isl_rs_result)
1562    }
1563
1564    /// Wraps `isl_multi_pw_aff_min_multi_val`.
1565    pub fn min_multi_val(self) -> Result<MultiVal, LibISLError> {
1566        let mpa = self;
1567        let isl_rs_ctx = mpa.get_ctx();
1568        let mut mpa = mpa;
1569        mpa.do_not_free_on_drop();
1570        let mpa = mpa.ptr;
1571        let isl_rs_result = unsafe { isl_multi_pw_aff_min_multi_val(mpa) };
1572        let isl_rs_result = MultiVal { ptr: isl_rs_result,
1573                                       should_free_on_drop: true };
1574        let err = isl_rs_ctx.last_error();
1575        if err != Error::None_ {
1576            let err_msg = isl_rs_ctx.last_error_msg();
1577            isl_rs_ctx.reset_error();
1578            return Err(LibISLError::new(err, err_msg));
1579        }
1580        Ok(isl_rs_result)
1581    }
1582
1583    /// Wraps `isl_multi_pw_aff_mod_multi_val`.
1584    pub fn mod_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
1585        let multi = self;
1586        let isl_rs_ctx = multi.get_ctx();
1587        let mut multi = multi;
1588        multi.do_not_free_on_drop();
1589        let multi = multi.ptr;
1590        let mut mv = mv;
1591        mv.do_not_free_on_drop();
1592        let mv = mv.ptr;
1593        let isl_rs_result = unsafe { isl_multi_pw_aff_mod_multi_val(multi, mv) };
1594        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1595                                         should_free_on_drop: true };
1596        let err = isl_rs_ctx.last_error();
1597        if err != Error::None_ {
1598            let err_msg = isl_rs_ctx.last_error_msg();
1599            isl_rs_ctx.reset_error();
1600            return Err(LibISLError::new(err, err_msg));
1601        }
1602        Ok(isl_rs_result)
1603    }
1604
1605    /// Wraps `isl_multi_pw_aff_move_dims`.
1606    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1607                     n: u32)
1608                     -> Result<MultiPwAff, LibISLError> {
1609        let pma = self;
1610        let isl_rs_ctx = pma.get_ctx();
1611        let mut pma = pma;
1612        pma.do_not_free_on_drop();
1613        let pma = pma.ptr;
1614        let dst_type = dst_type.to_i32();
1615        let src_type = src_type.to_i32();
1616        let isl_rs_result =
1617            unsafe { isl_multi_pw_aff_move_dims(pma, dst_type, dst_pos, src_type, src_pos, n) };
1618        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1619                                         should_free_on_drop: true };
1620        let err = isl_rs_ctx.last_error();
1621        if err != Error::None_ {
1622            let err_msg = isl_rs_ctx.last_error_msg();
1623            isl_rs_ctx.reset_error();
1624            return Err(LibISLError::new(err, err_msg));
1625        }
1626        Ok(isl_rs_result)
1627    }
1628
1629    /// Wraps `isl_multi_pw_aff_neg`.
1630    pub fn neg(self) -> Result<MultiPwAff, LibISLError> {
1631        let multi = self;
1632        let isl_rs_ctx = multi.get_ctx();
1633        let mut multi = multi;
1634        multi.do_not_free_on_drop();
1635        let multi = multi.ptr;
1636        let isl_rs_result = unsafe { isl_multi_pw_aff_neg(multi) };
1637        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1638                                         should_free_on_drop: true };
1639        let err = isl_rs_ctx.last_error();
1640        if err != Error::None_ {
1641            let err_msg = isl_rs_ctx.last_error_msg();
1642            isl_rs_ctx.reset_error();
1643            return Err(LibISLError::new(err, err_msg));
1644        }
1645        Ok(isl_rs_result)
1646    }
1647
1648    /// Wraps `isl_multi_pw_aff_plain_is_equal`.
1649    pub fn plain_is_equal(&self, multi2: &MultiPwAff) -> Result<bool, LibISLError> {
1650        let multi1 = self;
1651        let isl_rs_ctx = multi1.get_ctx();
1652        let multi1 = multi1.ptr;
1653        let multi2 = multi2.ptr;
1654        let isl_rs_result = unsafe { isl_multi_pw_aff_plain_is_equal(multi1, multi2) };
1655        let isl_rs_result = match isl_rs_result {
1656            0 => false,
1657            1 => true,
1658            _ => {
1659                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1660            }
1661        };
1662        let err = isl_rs_ctx.last_error();
1663        if err != Error::None_ {
1664            let err_msg = isl_rs_ctx.last_error_msg();
1665            isl_rs_ctx.reset_error();
1666            return Err(LibISLError::new(err, err_msg));
1667        }
1668        Ok(isl_rs_result)
1669    }
1670
1671    /// Wraps `isl_multi_pw_aff_product`.
1672    pub fn product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1673        let multi1 = self;
1674        let isl_rs_ctx = multi1.get_ctx();
1675        let mut multi1 = multi1;
1676        multi1.do_not_free_on_drop();
1677        let multi1 = multi1.ptr;
1678        let mut multi2 = multi2;
1679        multi2.do_not_free_on_drop();
1680        let multi2 = multi2.ptr;
1681        let isl_rs_result = unsafe { isl_multi_pw_aff_product(multi1, multi2) };
1682        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1683                                         should_free_on_drop: true };
1684        let err = isl_rs_ctx.last_error();
1685        if err != Error::None_ {
1686            let err_msg = isl_rs_ctx.last_error_msg();
1687            isl_rs_ctx.reset_error();
1688            return Err(LibISLError::new(err, err_msg));
1689        }
1690        Ok(isl_rs_result)
1691    }
1692
1693    /// Wraps `isl_multi_pw_aff_project_domain_on_params`.
1694    pub fn project_domain_on_params(self) -> Result<MultiPwAff, LibISLError> {
1695        let multi = self;
1696        let isl_rs_ctx = multi.get_ctx();
1697        let mut multi = multi;
1698        multi.do_not_free_on_drop();
1699        let multi = multi.ptr;
1700        let isl_rs_result = unsafe { isl_multi_pw_aff_project_domain_on_params(multi) };
1701        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1702                                         should_free_on_drop: true };
1703        let err = isl_rs_ctx.last_error();
1704        if err != Error::None_ {
1705            let err_msg = isl_rs_ctx.last_error_msg();
1706            isl_rs_ctx.reset_error();
1707            return Err(LibISLError::new(err, err_msg));
1708        }
1709        Ok(isl_rs_result)
1710    }
1711
1712    /// Wraps `isl_multi_pw_aff_pullback_multi_aff`.
1713    pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<MultiPwAff, LibISLError> {
1714        let mpa = self;
1715        let isl_rs_ctx = mpa.get_ctx();
1716        let mut mpa = mpa;
1717        mpa.do_not_free_on_drop();
1718        let mpa = mpa.ptr;
1719        let mut ma = ma;
1720        ma.do_not_free_on_drop();
1721        let ma = ma.ptr;
1722        let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_multi_aff(mpa, ma) };
1723        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1724                                         should_free_on_drop: true };
1725        let err = isl_rs_ctx.last_error();
1726        if err != Error::None_ {
1727            let err_msg = isl_rs_ctx.last_error_msg();
1728            isl_rs_ctx.reset_error();
1729            return Err(LibISLError::new(err, err_msg));
1730        }
1731        Ok(isl_rs_result)
1732    }
1733
1734    /// Wraps `isl_multi_pw_aff_pullback_multi_pw_aff`.
1735    pub fn pullback_multi_pw_aff(self, mpa2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1736        let mpa1 = self;
1737        let isl_rs_ctx = mpa1.get_ctx();
1738        let mut mpa1 = mpa1;
1739        mpa1.do_not_free_on_drop();
1740        let mpa1 = mpa1.ptr;
1741        let mut mpa2 = mpa2;
1742        mpa2.do_not_free_on_drop();
1743        let mpa2 = mpa2.ptr;
1744        let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_multi_pw_aff(mpa1, mpa2) };
1745        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1746                                         should_free_on_drop: true };
1747        let err = isl_rs_ctx.last_error();
1748        if err != Error::None_ {
1749            let err_msg = isl_rs_ctx.last_error_msg();
1750            isl_rs_ctx.reset_error();
1751            return Err(LibISLError::new(err, err_msg));
1752        }
1753        Ok(isl_rs_result)
1754    }
1755
1756    /// Wraps `isl_multi_pw_aff_pullback_pw_multi_aff`.
1757    pub fn pullback_pw_multi_aff(self, pma: PwMultiAff) -> Result<MultiPwAff, LibISLError> {
1758        let mpa = self;
1759        let isl_rs_ctx = mpa.get_ctx();
1760        let mut mpa = mpa;
1761        mpa.do_not_free_on_drop();
1762        let mpa = mpa.ptr;
1763        let mut pma = pma;
1764        pma.do_not_free_on_drop();
1765        let pma = pma.ptr;
1766        let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_pw_multi_aff(mpa, pma) };
1767        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1768                                         should_free_on_drop: true };
1769        let err = isl_rs_ctx.last_error();
1770        if err != Error::None_ {
1771            let err_msg = isl_rs_ctx.last_error_msg();
1772            isl_rs_ctx.reset_error();
1773            return Err(LibISLError::new(err, err_msg));
1774        }
1775        Ok(isl_rs_result)
1776    }
1777
1778    /// Wraps `isl_multi_pw_aff_range_factor_domain`.
1779    pub fn range_factor_domain(self) -> Result<MultiPwAff, LibISLError> {
1780        let multi = self;
1781        let isl_rs_ctx = multi.get_ctx();
1782        let mut multi = multi;
1783        multi.do_not_free_on_drop();
1784        let multi = multi.ptr;
1785        let isl_rs_result = unsafe { isl_multi_pw_aff_range_factor_domain(multi) };
1786        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1787                                         should_free_on_drop: true };
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_multi_pw_aff_range_factor_range`.
1798    pub fn range_factor_range(self) -> Result<MultiPwAff, LibISLError> {
1799        let multi = self;
1800        let isl_rs_ctx = multi.get_ctx();
1801        let mut multi = multi;
1802        multi.do_not_free_on_drop();
1803        let multi = multi.ptr;
1804        let isl_rs_result = unsafe { isl_multi_pw_aff_range_factor_range(multi) };
1805        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1806                                         should_free_on_drop: true };
1807        let err = isl_rs_ctx.last_error();
1808        if err != Error::None_ {
1809            let err_msg = isl_rs_ctx.last_error_msg();
1810            isl_rs_ctx.reset_error();
1811            return Err(LibISLError::new(err, err_msg));
1812        }
1813        Ok(isl_rs_result)
1814    }
1815
1816    /// Wraps `isl_multi_pw_aff_range_is_wrapping`.
1817    pub fn range_is_wrapping(&self) -> Result<bool, LibISLError> {
1818        let multi = self;
1819        let isl_rs_ctx = multi.get_ctx();
1820        let multi = multi.ptr;
1821        let isl_rs_result = unsafe { isl_multi_pw_aff_range_is_wrapping(multi) };
1822        let isl_rs_result = match isl_rs_result {
1823            0 => false,
1824            1 => true,
1825            _ => {
1826                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1827            }
1828        };
1829        let err = isl_rs_ctx.last_error();
1830        if err != Error::None_ {
1831            let err_msg = isl_rs_ctx.last_error_msg();
1832            isl_rs_ctx.reset_error();
1833            return Err(LibISLError::new(err, err_msg));
1834        }
1835        Ok(isl_rs_result)
1836    }
1837
1838    /// Wraps `isl_multi_pw_aff_range_product`.
1839    pub fn range_product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1840        let multi1 = self;
1841        let isl_rs_ctx = multi1.get_ctx();
1842        let mut multi1 = multi1;
1843        multi1.do_not_free_on_drop();
1844        let multi1 = multi1.ptr;
1845        let mut multi2 = multi2;
1846        multi2.do_not_free_on_drop();
1847        let multi2 = multi2.ptr;
1848        let isl_rs_result = unsafe { isl_multi_pw_aff_range_product(multi1, multi2) };
1849        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1850                                         should_free_on_drop: true };
1851        let err = isl_rs_ctx.last_error();
1852        if err != Error::None_ {
1853            let err_msg = isl_rs_ctx.last_error_msg();
1854            isl_rs_ctx.reset_error();
1855            return Err(LibISLError::new(err, err_msg));
1856        }
1857        Ok(isl_rs_result)
1858    }
1859
1860    /// Wraps `isl_multi_pw_aff_range_splice`.
1861    pub fn range_splice(self, pos: u32, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1862        let multi1 = self;
1863        let isl_rs_ctx = multi1.get_ctx();
1864        let mut multi1 = multi1;
1865        multi1.do_not_free_on_drop();
1866        let multi1 = multi1.ptr;
1867        let mut multi2 = multi2;
1868        multi2.do_not_free_on_drop();
1869        let multi2 = multi2.ptr;
1870        let isl_rs_result = unsafe { isl_multi_pw_aff_range_splice(multi1, pos, multi2) };
1871        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1872                                         should_free_on_drop: true };
1873        let err = isl_rs_ctx.last_error();
1874        if err != Error::None_ {
1875            let err_msg = isl_rs_ctx.last_error_msg();
1876            isl_rs_ctx.reset_error();
1877            return Err(LibISLError::new(err, err_msg));
1878        }
1879        Ok(isl_rs_result)
1880    }
1881
1882    /// Wraps `isl_multi_pw_aff_read_from_str`.
1883    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<MultiPwAff, LibISLError> {
1884        let isl_rs_ctx = Context { ptr: ctx.ptr,
1885                                   should_free_on_drop: false };
1886        let ctx = ctx.ptr;
1887        let str_ = CString::new(str_).unwrap();
1888        let str_ = str_.as_ptr();
1889        let isl_rs_result = unsafe { isl_multi_pw_aff_read_from_str(ctx, str_) };
1890        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1891                                         should_free_on_drop: true };
1892        let err = isl_rs_ctx.last_error();
1893        if err != Error::None_ {
1894            let err_msg = isl_rs_ctx.last_error_msg();
1895            isl_rs_ctx.reset_error();
1896            return Err(LibISLError::new(err, err_msg));
1897        }
1898        Ok(isl_rs_result)
1899    }
1900
1901    /// Wraps `isl_multi_pw_aff_reset_range_tuple_id`.
1902    pub fn reset_range_tuple_id(self) -> Result<MultiPwAff, LibISLError> {
1903        let multi = self;
1904        let isl_rs_ctx = multi.get_ctx();
1905        let mut multi = multi;
1906        multi.do_not_free_on_drop();
1907        let multi = multi.ptr;
1908        let isl_rs_result = unsafe { isl_multi_pw_aff_reset_range_tuple_id(multi) };
1909        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1910                                         should_free_on_drop: true };
1911        let err = isl_rs_ctx.last_error();
1912        if err != Error::None_ {
1913            let err_msg = isl_rs_ctx.last_error_msg();
1914            isl_rs_ctx.reset_error();
1915            return Err(LibISLError::new(err, err_msg));
1916        }
1917        Ok(isl_rs_result)
1918    }
1919
1920    /// Wraps `isl_multi_pw_aff_reset_tuple_id`.
1921    pub fn reset_tuple_id(self, type_: DimType) -> Result<MultiPwAff, LibISLError> {
1922        let multi = self;
1923        let isl_rs_ctx = multi.get_ctx();
1924        let mut multi = multi;
1925        multi.do_not_free_on_drop();
1926        let multi = multi.ptr;
1927        let type_ = type_.to_i32();
1928        let isl_rs_result = unsafe { isl_multi_pw_aff_reset_tuple_id(multi, type_) };
1929        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1930                                         should_free_on_drop: true };
1931        let err = isl_rs_ctx.last_error();
1932        if err != Error::None_ {
1933            let err_msg = isl_rs_ctx.last_error_msg();
1934            isl_rs_ctx.reset_error();
1935            return Err(LibISLError::new(err, err_msg));
1936        }
1937        Ok(isl_rs_result)
1938    }
1939
1940    /// Wraps `isl_multi_pw_aff_reset_user`.
1941    pub fn reset_user(self) -> Result<MultiPwAff, LibISLError> {
1942        let multi = self;
1943        let isl_rs_ctx = multi.get_ctx();
1944        let mut multi = multi;
1945        multi.do_not_free_on_drop();
1946        let multi = multi.ptr;
1947        let isl_rs_result = unsafe { isl_multi_pw_aff_reset_user(multi) };
1948        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1949                                         should_free_on_drop: true };
1950        let err = isl_rs_ctx.last_error();
1951        if err != Error::None_ {
1952            let err_msg = isl_rs_ctx.last_error_msg();
1953            isl_rs_ctx.reset_error();
1954            return Err(LibISLError::new(err, err_msg));
1955        }
1956        Ok(isl_rs_result)
1957    }
1958
1959    /// Wraps `isl_multi_pw_aff_scale_down_multi_val`.
1960    pub fn scale_down_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
1961        let multi = self;
1962        let isl_rs_ctx = multi.get_ctx();
1963        let mut multi = multi;
1964        multi.do_not_free_on_drop();
1965        let multi = multi.ptr;
1966        let mut mv = mv;
1967        mv.do_not_free_on_drop();
1968        let mv = mv.ptr;
1969        let isl_rs_result = unsafe { isl_multi_pw_aff_scale_down_multi_val(multi, mv) };
1970        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1971                                         should_free_on_drop: true };
1972        let err = isl_rs_ctx.last_error();
1973        if err != Error::None_ {
1974            let err_msg = isl_rs_ctx.last_error_msg();
1975            isl_rs_ctx.reset_error();
1976            return Err(LibISLError::new(err, err_msg));
1977        }
1978        Ok(isl_rs_result)
1979    }
1980
1981    /// Wraps `isl_multi_pw_aff_scale_down_val`.
1982    pub fn scale_down_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
1983        let multi = self;
1984        let isl_rs_ctx = multi.get_ctx();
1985        let mut multi = multi;
1986        multi.do_not_free_on_drop();
1987        let multi = multi.ptr;
1988        let mut v = v;
1989        v.do_not_free_on_drop();
1990        let v = v.ptr;
1991        let isl_rs_result = unsafe { isl_multi_pw_aff_scale_down_val(multi, v) };
1992        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1993                                         should_free_on_drop: true };
1994        let err = isl_rs_ctx.last_error();
1995        if err != Error::None_ {
1996            let err_msg = isl_rs_ctx.last_error_msg();
1997            isl_rs_ctx.reset_error();
1998            return Err(LibISLError::new(err, err_msg));
1999        }
2000        Ok(isl_rs_result)
2001    }
2002
2003    /// Wraps `isl_multi_pw_aff_scale_multi_val`.
2004    pub fn scale_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
2005        let multi = self;
2006        let isl_rs_ctx = multi.get_ctx();
2007        let mut multi = multi;
2008        multi.do_not_free_on_drop();
2009        let multi = multi.ptr;
2010        let mut mv = mv;
2011        mv.do_not_free_on_drop();
2012        let mv = mv.ptr;
2013        let isl_rs_result = unsafe { isl_multi_pw_aff_scale_multi_val(multi, mv) };
2014        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2015                                         should_free_on_drop: true };
2016        let err = isl_rs_ctx.last_error();
2017        if err != Error::None_ {
2018            let err_msg = isl_rs_ctx.last_error_msg();
2019            isl_rs_ctx.reset_error();
2020            return Err(LibISLError::new(err, err_msg));
2021        }
2022        Ok(isl_rs_result)
2023    }
2024
2025    /// Wraps `isl_multi_pw_aff_scale_val`.
2026    pub fn scale_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
2027        let multi = self;
2028        let isl_rs_ctx = multi.get_ctx();
2029        let mut multi = multi;
2030        multi.do_not_free_on_drop();
2031        let multi = multi.ptr;
2032        let mut v = v;
2033        v.do_not_free_on_drop();
2034        let v = v.ptr;
2035        let isl_rs_result = unsafe { isl_multi_pw_aff_scale_val(multi, v) };
2036        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2037                                         should_free_on_drop: true };
2038        let err = isl_rs_ctx.last_error();
2039        if err != Error::None_ {
2040            let err_msg = isl_rs_ctx.last_error_msg();
2041            isl_rs_ctx.reset_error();
2042            return Err(LibISLError::new(err, err_msg));
2043        }
2044        Ok(isl_rs_result)
2045    }
2046
2047    /// Wraps `isl_multi_pw_aff_set_at`.
2048    pub fn set_at(self, pos: i32, el: PwAff) -> Result<MultiPwAff, LibISLError> {
2049        let multi = self;
2050        let isl_rs_ctx = multi.get_ctx();
2051        let mut multi = multi;
2052        multi.do_not_free_on_drop();
2053        let multi = multi.ptr;
2054        let mut el = el;
2055        el.do_not_free_on_drop();
2056        let el = el.ptr;
2057        let isl_rs_result = unsafe { isl_multi_pw_aff_set_at(multi, pos, el) };
2058        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2059                                         should_free_on_drop: true };
2060        let err = isl_rs_ctx.last_error();
2061        if err != Error::None_ {
2062            let err_msg = isl_rs_ctx.last_error_msg();
2063            isl_rs_ctx.reset_error();
2064            return Err(LibISLError::new(err, err_msg));
2065        }
2066        Ok(isl_rs_result)
2067    }
2068
2069    /// Wraps `isl_multi_pw_aff_set_dim_id`.
2070    pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<MultiPwAff, LibISLError> {
2071        let multi = self;
2072        let isl_rs_ctx = multi.get_ctx();
2073        let mut multi = multi;
2074        multi.do_not_free_on_drop();
2075        let multi = multi.ptr;
2076        let type_ = type_.to_i32();
2077        let mut id = id;
2078        id.do_not_free_on_drop();
2079        let id = id.ptr;
2080        let isl_rs_result = unsafe { isl_multi_pw_aff_set_dim_id(multi, type_, pos, id) };
2081        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2082                                         should_free_on_drop: true };
2083        let err = isl_rs_ctx.last_error();
2084        if err != Error::None_ {
2085            let err_msg = isl_rs_ctx.last_error_msg();
2086            isl_rs_ctx.reset_error();
2087            return Err(LibISLError::new(err, err_msg));
2088        }
2089        Ok(isl_rs_result)
2090    }
2091
2092    /// Wraps `isl_multi_pw_aff_set_dim_name`.
2093    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
2094                        -> Result<MultiPwAff, LibISLError> {
2095        let multi = self;
2096        let isl_rs_ctx = multi.get_ctx();
2097        let mut multi = multi;
2098        multi.do_not_free_on_drop();
2099        let multi = multi.ptr;
2100        let type_ = type_.to_i32();
2101        let s = CString::new(s).unwrap();
2102        let s = s.as_ptr();
2103        let isl_rs_result = unsafe { isl_multi_pw_aff_set_dim_name(multi, type_, pos, s) };
2104        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2105                                         should_free_on_drop: true };
2106        let err = isl_rs_ctx.last_error();
2107        if err != Error::None_ {
2108            let err_msg = isl_rs_ctx.last_error_msg();
2109            isl_rs_ctx.reset_error();
2110            return Err(LibISLError::new(err, err_msg));
2111        }
2112        Ok(isl_rs_result)
2113    }
2114
2115    /// Wraps `isl_multi_pw_aff_set_pw_aff`.
2116    pub fn set_pw_aff(self, pos: i32, el: PwAff) -> Result<MultiPwAff, LibISLError> {
2117        let multi = self;
2118        let isl_rs_ctx = multi.get_ctx();
2119        let mut multi = multi;
2120        multi.do_not_free_on_drop();
2121        let multi = multi.ptr;
2122        let mut el = el;
2123        el.do_not_free_on_drop();
2124        let el = el.ptr;
2125        let isl_rs_result = unsafe { isl_multi_pw_aff_set_pw_aff(multi, pos, el) };
2126        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2127                                         should_free_on_drop: true };
2128        let err = isl_rs_ctx.last_error();
2129        if err != Error::None_ {
2130            let err_msg = isl_rs_ctx.last_error_msg();
2131            isl_rs_ctx.reset_error();
2132            return Err(LibISLError::new(err, err_msg));
2133        }
2134        Ok(isl_rs_result)
2135    }
2136
2137    /// Wraps `isl_multi_pw_aff_set_range_tuple_id`.
2138    pub fn set_range_tuple_id(self, id: Id) -> Result<MultiPwAff, LibISLError> {
2139        let multi = self;
2140        let isl_rs_ctx = multi.get_ctx();
2141        let mut multi = multi;
2142        multi.do_not_free_on_drop();
2143        let multi = multi.ptr;
2144        let mut id = id;
2145        id.do_not_free_on_drop();
2146        let id = id.ptr;
2147        let isl_rs_result = unsafe { isl_multi_pw_aff_set_range_tuple_id(multi, id) };
2148        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2149                                         should_free_on_drop: true };
2150        let err = isl_rs_ctx.last_error();
2151        if err != Error::None_ {
2152            let err_msg = isl_rs_ctx.last_error_msg();
2153            isl_rs_ctx.reset_error();
2154            return Err(LibISLError::new(err, err_msg));
2155        }
2156        Ok(isl_rs_result)
2157    }
2158
2159    /// Wraps `isl_multi_pw_aff_set_tuple_id`.
2160    pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<MultiPwAff, LibISLError> {
2161        let multi = self;
2162        let isl_rs_ctx = multi.get_ctx();
2163        let mut multi = multi;
2164        multi.do_not_free_on_drop();
2165        let multi = multi.ptr;
2166        let type_ = type_.to_i32();
2167        let mut id = id;
2168        id.do_not_free_on_drop();
2169        let id = id.ptr;
2170        let isl_rs_result = unsafe { isl_multi_pw_aff_set_tuple_id(multi, type_, id) };
2171        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2172                                         should_free_on_drop: true };
2173        let err = isl_rs_ctx.last_error();
2174        if err != Error::None_ {
2175            let err_msg = isl_rs_ctx.last_error_msg();
2176            isl_rs_ctx.reset_error();
2177            return Err(LibISLError::new(err, err_msg));
2178        }
2179        Ok(isl_rs_result)
2180    }
2181
2182    /// Wraps `isl_multi_pw_aff_set_tuple_name`.
2183    pub fn set_tuple_name(self, type_: DimType, s: &str) -> Result<MultiPwAff, LibISLError> {
2184        let multi = self;
2185        let isl_rs_ctx = multi.get_ctx();
2186        let mut multi = multi;
2187        multi.do_not_free_on_drop();
2188        let multi = multi.ptr;
2189        let type_ = type_.to_i32();
2190        let s = CString::new(s).unwrap();
2191        let s = s.as_ptr();
2192        let isl_rs_result = unsafe { isl_multi_pw_aff_set_tuple_name(multi, type_, s) };
2193        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2194                                         should_free_on_drop: true };
2195        let err = isl_rs_ctx.last_error();
2196        if err != Error::None_ {
2197            let err_msg = isl_rs_ctx.last_error_msg();
2198            isl_rs_ctx.reset_error();
2199            return Err(LibISLError::new(err, err_msg));
2200        }
2201        Ok(isl_rs_result)
2202    }
2203
2204    /// Wraps `isl_multi_pw_aff_size`.
2205    pub fn size(&self) -> Result<i32, LibISLError> {
2206        let multi = self;
2207        let isl_rs_ctx = multi.get_ctx();
2208        let multi = multi.ptr;
2209        let isl_rs_result = unsafe { isl_multi_pw_aff_size(multi) };
2210        let err = isl_rs_ctx.last_error();
2211        if err != Error::None_ {
2212            let err_msg = isl_rs_ctx.last_error_msg();
2213            isl_rs_ctx.reset_error();
2214            return Err(LibISLError::new(err, err_msg));
2215        }
2216        Ok(isl_rs_result)
2217    }
2218
2219    /// Wraps `isl_multi_pw_aff_splice`.
2220    pub fn splice(self, in_pos: u32, out_pos: u32, multi2: MultiPwAff)
2221                  -> Result<MultiPwAff, LibISLError> {
2222        let multi1 = self;
2223        let isl_rs_ctx = multi1.get_ctx();
2224        let mut multi1 = multi1;
2225        multi1.do_not_free_on_drop();
2226        let multi1 = multi1.ptr;
2227        let mut multi2 = multi2;
2228        multi2.do_not_free_on_drop();
2229        let multi2 = multi2.ptr;
2230        let isl_rs_result = unsafe { isl_multi_pw_aff_splice(multi1, in_pos, out_pos, multi2) };
2231        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2232                                         should_free_on_drop: true };
2233        let err = isl_rs_ctx.last_error();
2234        if err != Error::None_ {
2235            let err_msg = isl_rs_ctx.last_error_msg();
2236            isl_rs_ctx.reset_error();
2237            return Err(LibISLError::new(err, err_msg));
2238        }
2239        Ok(isl_rs_result)
2240    }
2241
2242    /// Wraps `isl_multi_pw_aff_sub`.
2243    pub fn sub(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
2244        let multi1 = self;
2245        let isl_rs_ctx = multi1.get_ctx();
2246        let mut multi1 = multi1;
2247        multi1.do_not_free_on_drop();
2248        let multi1 = multi1.ptr;
2249        let mut multi2 = multi2;
2250        multi2.do_not_free_on_drop();
2251        let multi2 = multi2.ptr;
2252        let isl_rs_result = unsafe { isl_multi_pw_aff_sub(multi1, multi2) };
2253        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2254                                         should_free_on_drop: true };
2255        let err = isl_rs_ctx.last_error();
2256        if err != Error::None_ {
2257            let err_msg = isl_rs_ctx.last_error_msg();
2258            isl_rs_ctx.reset_error();
2259            return Err(LibISLError::new(err, err_msg));
2260        }
2261        Ok(isl_rs_result)
2262    }
2263
2264    /// Wraps `isl_multi_pw_aff_to_str`.
2265    pub fn to_str(&self) -> Result<&str, LibISLError> {
2266        let mpa = self;
2267        let isl_rs_ctx = mpa.get_ctx();
2268        let mpa = mpa.ptr;
2269        let isl_rs_result = unsafe { isl_multi_pw_aff_to_str(mpa) };
2270        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2271        let isl_rs_result = isl_rs_result.to_str().unwrap();
2272        let err = isl_rs_ctx.last_error();
2273        if err != Error::None_ {
2274            let err_msg = isl_rs_ctx.last_error_msg();
2275            isl_rs_ctx.reset_error();
2276            return Err(LibISLError::new(err, err_msg));
2277        }
2278        Ok(isl_rs_result)
2279    }
2280
2281    /// Wraps `isl_multi_pw_aff_unbind_params_insert_domain`.
2282    pub fn unbind_params_insert_domain(self, domain: MultiId) -> Result<MultiPwAff, LibISLError> {
2283        let multi = self;
2284        let isl_rs_ctx = multi.get_ctx();
2285        let mut multi = multi;
2286        multi.do_not_free_on_drop();
2287        let multi = multi.ptr;
2288        let mut domain = domain;
2289        domain.do_not_free_on_drop();
2290        let domain = domain.ptr;
2291        let isl_rs_result = unsafe { isl_multi_pw_aff_unbind_params_insert_domain(multi, domain) };
2292        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2293                                         should_free_on_drop: true };
2294        let err = isl_rs_ctx.last_error();
2295        if err != Error::None_ {
2296            let err_msg = isl_rs_ctx.last_error_msg();
2297            isl_rs_ctx.reset_error();
2298            return Err(LibISLError::new(err, err_msg));
2299        }
2300        Ok(isl_rs_result)
2301    }
2302
2303    /// Wraps `isl_multi_pw_aff_union_add`.
2304    pub fn union_add(self, mpa2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
2305        let mpa1 = self;
2306        let isl_rs_ctx = mpa1.get_ctx();
2307        let mut mpa1 = mpa1;
2308        mpa1.do_not_free_on_drop();
2309        let mpa1 = mpa1.ptr;
2310        let mut mpa2 = mpa2;
2311        mpa2.do_not_free_on_drop();
2312        let mpa2 = mpa2.ptr;
2313        let isl_rs_result = unsafe { isl_multi_pw_aff_union_add(mpa1, mpa2) };
2314        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2315                                         should_free_on_drop: true };
2316        let err = isl_rs_ctx.last_error();
2317        if err != Error::None_ {
2318            let err_msg = isl_rs_ctx.last_error_msg();
2319            isl_rs_ctx.reset_error();
2320            return Err(LibISLError::new(err, err_msg));
2321        }
2322        Ok(isl_rs_result)
2323    }
2324
2325    /// Wraps `isl_multi_pw_aff_zero`.
2326    pub fn zero(space: Space) -> Result<MultiPwAff, LibISLError> {
2327        let isl_rs_ctx = space.get_ctx();
2328        let mut space = space;
2329        space.do_not_free_on_drop();
2330        let space = space.ptr;
2331        let isl_rs_result = unsafe { isl_multi_pw_aff_zero(space) };
2332        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2333                                         should_free_on_drop: true };
2334        let err = isl_rs_ctx.last_error();
2335        if err != Error::None_ {
2336            let err_msg = isl_rs_ctx.last_error_msg();
2337            isl_rs_ctx.reset_error();
2338            return Err(LibISLError::new(err, err_msg));
2339        }
2340        Ok(isl_rs_result)
2341    }
2342
2343    /// Does not call isl_multi_pw_aff_free() on being dropped. (For internal
2344    /// use only.)
2345    pub fn do_not_free_on_drop(&mut self) {
2346        self.should_free_on_drop = false;
2347    }
2348}
2349
2350impl Drop for MultiPwAff {
2351    fn drop(&mut self) {
2352        if self.should_free_on_drop {
2353            unsafe {
2354                isl_multi_pw_aff_free(self.ptr);
2355            }
2356        }
2357    }
2358}