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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
255        }
256        Ok(isl_rs_result)
257    }
258
259    /// Wraps `isl_multi_pw_aff_add_constant_multi_val`.
260    pub fn add_constant_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
261        let mpa = self;
262        let isl_rs_ctx = mpa.get_ctx();
263        let mut mpa = mpa;
264        mpa.do_not_free_on_drop();
265        let mpa = mpa.ptr;
266        let mut mv = mv;
267        mv.do_not_free_on_drop();
268        let mv = mv.ptr;
269        let isl_rs_result = unsafe { isl_multi_pw_aff_add_constant_multi_val(mpa, mv) };
270        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
271                                         should_free_on_drop: true };
272        let err = isl_rs_ctx.last_error();
273        if err != Error::None_ {
274            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
275        }
276        Ok(isl_rs_result)
277    }
278
279    /// Wraps `isl_multi_pw_aff_add_constant_val`.
280    pub fn add_constant_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
281        let mpa = self;
282        let isl_rs_ctx = mpa.get_ctx();
283        let mut mpa = mpa;
284        mpa.do_not_free_on_drop();
285        let mpa = mpa.ptr;
286        let mut v = v;
287        v.do_not_free_on_drop();
288        let v = v.ptr;
289        let isl_rs_result = unsafe { isl_multi_pw_aff_add_constant_val(mpa, v) };
290        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
291                                         should_free_on_drop: true };
292        let err = isl_rs_ctx.last_error();
293        if err != Error::None_ {
294            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
295        }
296        Ok(isl_rs_result)
297    }
298
299    /// Wraps `isl_multi_pw_aff_add_dims`.
300    pub fn add_dims(self, type_: DimType, n: u32) -> Result<MultiPwAff, LibISLError> {
301        let multi = self;
302        let isl_rs_ctx = multi.get_ctx();
303        let mut multi = multi;
304        multi.do_not_free_on_drop();
305        let multi = multi.ptr;
306        let type_ = type_.to_i32();
307        let isl_rs_result = unsafe { isl_multi_pw_aff_add_dims(multi, type_, n) };
308        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
309                                         should_free_on_drop: true };
310        let err = isl_rs_ctx.last_error();
311        if err != Error::None_ {
312            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
313        }
314        Ok(isl_rs_result)
315    }
316
317    /// Wraps `isl_multi_pw_aff_align_params`.
318    pub fn align_params(self, model: Space) -> Result<MultiPwAff, LibISLError> {
319        let multi = self;
320        let isl_rs_ctx = multi.get_ctx();
321        let mut multi = multi;
322        multi.do_not_free_on_drop();
323        let multi = multi.ptr;
324        let mut model = model;
325        model.do_not_free_on_drop();
326        let model = model.ptr;
327        let isl_rs_result = unsafe { isl_multi_pw_aff_align_params(multi, model) };
328        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
329                                         should_free_on_drop: true };
330        let err = isl_rs_ctx.last_error();
331        if err != Error::None_ {
332            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
333        }
334        Ok(isl_rs_result)
335    }
336
337    /// Wraps `isl_multi_pw_aff_as_map`.
338    pub fn as_map(self) -> Result<Map, LibISLError> {
339        let mpa = self;
340        let isl_rs_ctx = mpa.get_ctx();
341        let mut mpa = mpa;
342        mpa.do_not_free_on_drop();
343        let mpa = mpa.ptr;
344        let isl_rs_result = unsafe { isl_multi_pw_aff_as_map(mpa) };
345        let isl_rs_result = Map { ptr: isl_rs_result,
346                                  should_free_on_drop: true };
347        let err = isl_rs_ctx.last_error();
348        if err != Error::None_ {
349            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
350        }
351        Ok(isl_rs_result)
352    }
353
354    /// Wraps `isl_multi_pw_aff_as_multi_aff`.
355    pub fn as_multi_aff(self) -> Result<MultiAff, LibISLError> {
356        let mpa = self;
357        let isl_rs_ctx = mpa.get_ctx();
358        let mut mpa = mpa;
359        mpa.do_not_free_on_drop();
360        let mpa = mpa.ptr;
361        let isl_rs_result = unsafe { isl_multi_pw_aff_as_multi_aff(mpa) };
362        let isl_rs_result = MultiAff { ptr: isl_rs_result,
363                                       should_free_on_drop: true };
364        let err = isl_rs_ctx.last_error();
365        if err != Error::None_ {
366            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
367        }
368        Ok(isl_rs_result)
369    }
370
371    /// Wraps `isl_multi_pw_aff_as_set`.
372    pub fn as_set(self) -> Result<Set, LibISLError> {
373        let mpa = self;
374        let isl_rs_ctx = mpa.get_ctx();
375        let mut mpa = mpa;
376        mpa.do_not_free_on_drop();
377        let mpa = mpa.ptr;
378        let isl_rs_result = unsafe { isl_multi_pw_aff_as_set(mpa) };
379        let isl_rs_result = Set { ptr: isl_rs_result,
380                                  should_free_on_drop: true };
381        let err = isl_rs_ctx.last_error();
382        if err != Error::None_ {
383            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
384        }
385        Ok(isl_rs_result)
386    }
387
388    /// Wraps `isl_multi_pw_aff_bind`.
389    pub fn bind(self, tuple: MultiId) -> Result<Set, LibISLError> {
390        let mpa = self;
391        let isl_rs_ctx = mpa.get_ctx();
392        let mut mpa = mpa;
393        mpa.do_not_free_on_drop();
394        let mpa = mpa.ptr;
395        let mut tuple = tuple;
396        tuple.do_not_free_on_drop();
397        let tuple = tuple.ptr;
398        let isl_rs_result = unsafe { isl_multi_pw_aff_bind(mpa, tuple) };
399        let isl_rs_result = Set { ptr: isl_rs_result,
400                                  should_free_on_drop: true };
401        let err = isl_rs_ctx.last_error();
402        if err != Error::None_ {
403            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
404        }
405        Ok(isl_rs_result)
406    }
407
408    /// Wraps `isl_multi_pw_aff_bind_domain`.
409    pub fn bind_domain(self, tuple: MultiId) -> Result<MultiPwAff, LibISLError> {
410        let multi = self;
411        let isl_rs_ctx = multi.get_ctx();
412        let mut multi = multi;
413        multi.do_not_free_on_drop();
414        let multi = multi.ptr;
415        let mut tuple = tuple;
416        tuple.do_not_free_on_drop();
417        let tuple = tuple.ptr;
418        let isl_rs_result = unsafe { isl_multi_pw_aff_bind_domain(multi, tuple) };
419        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
420                                         should_free_on_drop: true };
421        let err = isl_rs_ctx.last_error();
422        if err != Error::None_ {
423            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
424        }
425        Ok(isl_rs_result)
426    }
427
428    /// Wraps `isl_multi_pw_aff_bind_domain_wrapped_domain`.
429    pub fn bind_domain_wrapped_domain(self, tuple: MultiId) -> Result<MultiPwAff, LibISLError> {
430        let multi = self;
431        let isl_rs_ctx = multi.get_ctx();
432        let mut multi = multi;
433        multi.do_not_free_on_drop();
434        let multi = multi.ptr;
435        let mut tuple = tuple;
436        tuple.do_not_free_on_drop();
437        let tuple = tuple.ptr;
438        let isl_rs_result = unsafe { isl_multi_pw_aff_bind_domain_wrapped_domain(multi, tuple) };
439        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
440                                         should_free_on_drop: true };
441        let err = isl_rs_ctx.last_error();
442        if err != Error::None_ {
443            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
444        }
445        Ok(isl_rs_result)
446    }
447
448    /// Wraps `isl_multi_pw_aff_coalesce`.
449    pub fn coalesce(self) -> Result<MultiPwAff, LibISLError> {
450        let mpa = self;
451        let isl_rs_ctx = mpa.get_ctx();
452        let mut mpa = mpa;
453        mpa.do_not_free_on_drop();
454        let mpa = mpa.ptr;
455        let isl_rs_result = unsafe { isl_multi_pw_aff_coalesce(mpa) };
456        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
457                                         should_free_on_drop: true };
458        let err = isl_rs_ctx.last_error();
459        if err != Error::None_ {
460            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
461        }
462        Ok(isl_rs_result)
463    }
464
465    /// Wraps `isl_multi_pw_aff_copy`.
466    pub fn copy(&self) -> Result<MultiPwAff, LibISLError> {
467        let multi = self;
468        let isl_rs_ctx = multi.get_ctx();
469        let multi = multi.ptr;
470        let isl_rs_result = unsafe { isl_multi_pw_aff_copy(multi) };
471        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
472                                         should_free_on_drop: true };
473        let err = isl_rs_ctx.last_error();
474        if err != Error::None_ {
475            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
476        }
477        Ok(isl_rs_result)
478    }
479
480    /// Wraps `isl_multi_pw_aff_dim`.
481    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
482        let multi = self;
483        let isl_rs_ctx = multi.get_ctx();
484        let multi = multi.ptr;
485        let type_ = type_.to_i32();
486        let isl_rs_result = unsafe { isl_multi_pw_aff_dim(multi, type_) };
487        let err = isl_rs_ctx.last_error();
488        if err != Error::None_ {
489            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
490        }
491        Ok(isl_rs_result)
492    }
493
494    /// Wraps `isl_multi_pw_aff_domain`.
495    pub fn domain(self) -> Result<Set, LibISLError> {
496        let mpa = self;
497        let isl_rs_ctx = mpa.get_ctx();
498        let mut mpa = mpa;
499        mpa.do_not_free_on_drop();
500        let mpa = mpa.ptr;
501        let isl_rs_result = unsafe { isl_multi_pw_aff_domain(mpa) };
502        let isl_rs_result = Set { ptr: isl_rs_result,
503                                  should_free_on_drop: true };
504        let err = isl_rs_ctx.last_error();
505        if err != Error::None_ {
506            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
507        }
508        Ok(isl_rs_result)
509    }
510
511    /// Wraps `isl_multi_pw_aff_domain_reverse`.
512    pub fn domain_reverse(self) -> Result<MultiPwAff, LibISLError> {
513        let multi = self;
514        let isl_rs_ctx = multi.get_ctx();
515        let mut multi = multi;
516        multi.do_not_free_on_drop();
517        let multi = multi.ptr;
518        let isl_rs_result = unsafe { isl_multi_pw_aff_domain_reverse(multi) };
519        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
520                                         should_free_on_drop: true };
521        let err = isl_rs_ctx.last_error();
522        if err != Error::None_ {
523            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
524        }
525        Ok(isl_rs_result)
526    }
527
528    /// Wraps `isl_multi_pw_aff_drop_dims`.
529    pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<MultiPwAff, LibISLError> {
530        let multi = self;
531        let isl_rs_ctx = multi.get_ctx();
532        let mut multi = multi;
533        multi.do_not_free_on_drop();
534        let multi = multi.ptr;
535        let type_ = type_.to_i32();
536        let isl_rs_result = unsafe { isl_multi_pw_aff_drop_dims(multi, type_, first, n) };
537        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
538                                         should_free_on_drop: true };
539        let err = isl_rs_ctx.last_error();
540        if err != Error::None_ {
541            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
542        }
543        Ok(isl_rs_result)
544    }
545
546    /// Wraps `isl_multi_pw_aff_dump`.
547    pub fn dump(&self) -> Result<(), LibISLError> {
548        let mpa = self;
549        let isl_rs_ctx = mpa.get_ctx();
550        let mpa = mpa.ptr;
551        let isl_rs_result = unsafe { isl_multi_pw_aff_dump(mpa) };
552        let err = isl_rs_ctx.last_error();
553        if err != Error::None_ {
554            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
555        }
556        Ok(isl_rs_result)
557    }
558
559    /// Wraps `isl_multi_pw_aff_eq_map`.
560    pub fn eq_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
561        let mpa1 = self;
562        let isl_rs_ctx = mpa1.get_ctx();
563        let mut mpa1 = mpa1;
564        mpa1.do_not_free_on_drop();
565        let mpa1 = mpa1.ptr;
566        let mut mpa2 = mpa2;
567        mpa2.do_not_free_on_drop();
568        let mpa2 = mpa2.ptr;
569        let isl_rs_result = unsafe { isl_multi_pw_aff_eq_map(mpa1, mpa2) };
570        let isl_rs_result = Map { ptr: isl_rs_result,
571                                  should_free_on_drop: true };
572        let err = isl_rs_ctx.last_error();
573        if err != Error::None_ {
574            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
575        }
576        Ok(isl_rs_result)
577    }
578
579    /// Wraps `isl_multi_pw_aff_factor_range`.
580    pub fn factor_range(self) -> Result<MultiPwAff, LibISLError> {
581        let multi = self;
582        let isl_rs_ctx = multi.get_ctx();
583        let mut multi = multi;
584        multi.do_not_free_on_drop();
585        let multi = multi.ptr;
586        let isl_rs_result = unsafe { isl_multi_pw_aff_factor_range(multi) };
587        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
588                                         should_free_on_drop: true };
589        let err = isl_rs_ctx.last_error();
590        if err != Error::None_ {
591            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
592        }
593        Ok(isl_rs_result)
594    }
595
596    /// Wraps `isl_multi_pw_aff_find_dim_by_id`.
597    pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> Result<i32, LibISLError> {
598        let multi = self;
599        let isl_rs_ctx = multi.get_ctx();
600        let multi = multi.ptr;
601        let type_ = type_.to_i32();
602        let id = id.ptr;
603        let isl_rs_result = unsafe { isl_multi_pw_aff_find_dim_by_id(multi, type_, id) };
604        let err = isl_rs_ctx.last_error();
605        if err != Error::None_ {
606            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
607        }
608        Ok(isl_rs_result)
609    }
610
611    /// Wraps `isl_multi_pw_aff_find_dim_by_name`.
612    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
613        let multi = self;
614        let isl_rs_ctx = multi.get_ctx();
615        let multi = multi.ptr;
616        let type_ = type_.to_i32();
617        let name = CString::new(name).unwrap();
618        let name = name.as_ptr();
619        let isl_rs_result = unsafe { isl_multi_pw_aff_find_dim_by_name(multi, type_, name) };
620        let err = isl_rs_ctx.last_error();
621        if err != Error::None_ {
622            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
623        }
624        Ok(isl_rs_result)
625    }
626
627    /// Wraps `isl_multi_pw_aff_flat_range_product`.
628    pub fn flat_range_product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
629        let multi1 = self;
630        let isl_rs_ctx = multi1.get_ctx();
631        let mut multi1 = multi1;
632        multi1.do_not_free_on_drop();
633        let multi1 = multi1.ptr;
634        let mut multi2 = multi2;
635        multi2.do_not_free_on_drop();
636        let multi2 = multi2.ptr;
637        let isl_rs_result = unsafe { isl_multi_pw_aff_flat_range_product(multi1, multi2) };
638        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
639                                         should_free_on_drop: true };
640        let err = isl_rs_ctx.last_error();
641        if err != Error::None_ {
642            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
643        }
644        Ok(isl_rs_result)
645    }
646
647    /// Wraps `isl_multi_pw_aff_flatten_range`.
648    pub fn flatten_range(self) -> Result<MultiPwAff, LibISLError> {
649        let multi = self;
650        let isl_rs_ctx = multi.get_ctx();
651        let mut multi = multi;
652        multi.do_not_free_on_drop();
653        let multi = multi.ptr;
654        let isl_rs_result = unsafe { isl_multi_pw_aff_flatten_range(multi) };
655        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
656                                         should_free_on_drop: true };
657        let err = isl_rs_ctx.last_error();
658        if err != Error::None_ {
659            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
660        }
661        Ok(isl_rs_result)
662    }
663
664    /// Wraps `isl_multi_pw_aff_free`.
665    pub fn free(self) -> Result<MultiPwAff, LibISLError> {
666        let multi = self;
667        let isl_rs_ctx = multi.get_ctx();
668        let mut multi = multi;
669        multi.do_not_free_on_drop();
670        let multi = multi.ptr;
671        let isl_rs_result = unsafe { isl_multi_pw_aff_free(multi) };
672        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
673                                         should_free_on_drop: true };
674        let err = isl_rs_ctx.last_error();
675        if err != Error::None_ {
676            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
677        }
678        Ok(isl_rs_result)
679    }
680
681    /// Wraps `isl_multi_pw_aff_from_aff`.
682    pub fn from_aff(aff: Aff) -> Result<MultiPwAff, LibISLError> {
683        let isl_rs_ctx = aff.get_ctx();
684        let mut aff = aff;
685        aff.do_not_free_on_drop();
686        let aff = aff.ptr;
687        let isl_rs_result = unsafe { isl_multi_pw_aff_from_aff(aff) };
688        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
689                                         should_free_on_drop: true };
690        let err = isl_rs_ctx.last_error();
691        if err != Error::None_ {
692            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
693        }
694        Ok(isl_rs_result)
695    }
696
697    /// Wraps `isl_multi_pw_aff_from_multi_aff`.
698    pub fn from_multi_aff(ma: MultiAff) -> Result<MultiPwAff, LibISLError> {
699        let isl_rs_ctx = ma.get_ctx();
700        let mut ma = ma;
701        ma.do_not_free_on_drop();
702        let ma = ma.ptr;
703        let isl_rs_result = unsafe { isl_multi_pw_aff_from_multi_aff(ma) };
704        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
705                                         should_free_on_drop: true };
706        let err = isl_rs_ctx.last_error();
707        if err != Error::None_ {
708            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
709        }
710        Ok(isl_rs_result)
711    }
712
713    /// Wraps `isl_multi_pw_aff_from_pw_aff`.
714    pub fn from_pw_aff(pa: PwAff) -> Result<MultiPwAff, LibISLError> {
715        let isl_rs_ctx = pa.get_ctx();
716        let mut pa = pa;
717        pa.do_not_free_on_drop();
718        let pa = pa.ptr;
719        let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_aff(pa) };
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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
725        }
726        Ok(isl_rs_result)
727    }
728
729    /// Wraps `isl_multi_pw_aff_from_pw_aff_list`.
730    pub fn from_pw_aff_list(space: Space, list: PwAffList) -> Result<MultiPwAff, LibISLError> {
731        let isl_rs_ctx = space.get_ctx();
732        let mut space = space;
733        space.do_not_free_on_drop();
734        let space = space.ptr;
735        let mut list = list;
736        list.do_not_free_on_drop();
737        let list = list.ptr;
738        let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_aff_list(space, list) };
739        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
740                                         should_free_on_drop: true };
741        let err = isl_rs_ctx.last_error();
742        if err != Error::None_ {
743            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
744        }
745        Ok(isl_rs_result)
746    }
747
748    /// Wraps `isl_multi_pw_aff_from_pw_multi_aff`.
749    pub fn from_pw_multi_aff(pma: PwMultiAff) -> Result<MultiPwAff, LibISLError> {
750        let isl_rs_ctx = pma.get_ctx();
751        let mut pma = pma;
752        pma.do_not_free_on_drop();
753        let pma = pma.ptr;
754        let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_multi_aff(pma) };
755        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
756                                         should_free_on_drop: true };
757        let err = isl_rs_ctx.last_error();
758        if err != Error::None_ {
759            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
760        }
761        Ok(isl_rs_result)
762    }
763
764    /// Wraps `isl_multi_pw_aff_from_range`.
765    pub fn from_range(self) -> Result<MultiPwAff, LibISLError> {
766        let multi = self;
767        let isl_rs_ctx = multi.get_ctx();
768        let mut multi = multi;
769        multi.do_not_free_on_drop();
770        let multi = multi.ptr;
771        let isl_rs_result = unsafe { isl_multi_pw_aff_from_range(multi) };
772        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
773                                         should_free_on_drop: true };
774        let err = isl_rs_ctx.last_error();
775        if err != Error::None_ {
776            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
777        }
778        Ok(isl_rs_result)
779    }
780
781    /// Wraps `isl_multi_pw_aff_get_at`.
782    pub fn get_at(&self, pos: i32) -> Result<PwAff, LibISLError> {
783        let multi = self;
784        let isl_rs_ctx = multi.get_ctx();
785        let multi = multi.ptr;
786        let isl_rs_result = unsafe { isl_multi_pw_aff_get_at(multi, pos) };
787        let isl_rs_result = PwAff { ptr: isl_rs_result,
788                                    should_free_on_drop: true };
789        let err = isl_rs_ctx.last_error();
790        if err != Error::None_ {
791            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
792        }
793        Ok(isl_rs_result)
794    }
795
796    /// Wraps `isl_multi_pw_aff_get_ctx`.
797    pub fn get_ctx(&self) -> Context {
798        let multi = self;
799        let multi = multi.ptr;
800        let isl_rs_result = unsafe { isl_multi_pw_aff_get_ctx(multi) };
801        let isl_rs_result = Context { ptr: isl_rs_result,
802                                      should_free_on_drop: false };
803        isl_rs_result
804    }
805
806    /// Wraps `isl_multi_pw_aff_get_dim_id`.
807    pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
808        let multi = self;
809        let isl_rs_ctx = multi.get_ctx();
810        let multi = multi.ptr;
811        let type_ = type_.to_i32();
812        let isl_rs_result = unsafe { isl_multi_pw_aff_get_dim_id(multi, type_, pos) };
813        let isl_rs_result = Id { ptr: isl_rs_result,
814                                 should_free_on_drop: true };
815        let err = isl_rs_ctx.last_error();
816        if err != Error::None_ {
817            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
818        }
819        Ok(isl_rs_result)
820    }
821
822    /// Wraps `isl_multi_pw_aff_get_domain_space`.
823    pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
824        let multi = self;
825        let isl_rs_ctx = multi.get_ctx();
826        let multi = multi.ptr;
827        let isl_rs_result = unsafe { isl_multi_pw_aff_get_domain_space(multi) };
828        let isl_rs_result = Space { ptr: isl_rs_result,
829                                    should_free_on_drop: true };
830        let err = isl_rs_ctx.last_error();
831        if err != Error::None_ {
832            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
833        }
834        Ok(isl_rs_result)
835    }
836
837    /// Wraps `isl_multi_pw_aff_get_hash`.
838    pub fn get_hash(&self) -> Result<u32, LibISLError> {
839        let mpa = self;
840        let isl_rs_ctx = mpa.get_ctx();
841        let mpa = mpa.ptr;
842        let isl_rs_result = unsafe { isl_multi_pw_aff_get_hash(mpa) };
843        let err = isl_rs_ctx.last_error();
844        if err != Error::None_ {
845            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
846        }
847        Ok(isl_rs_result)
848    }
849
850    /// Wraps `isl_multi_pw_aff_get_list`.
851    pub fn get_list(&self) -> Result<PwAffList, LibISLError> {
852        let multi = self;
853        let isl_rs_ctx = multi.get_ctx();
854        let multi = multi.ptr;
855        let isl_rs_result = unsafe { isl_multi_pw_aff_get_list(multi) };
856        let isl_rs_result = PwAffList { ptr: isl_rs_result,
857                                        should_free_on_drop: true };
858        let err = isl_rs_ctx.last_error();
859        if err != Error::None_ {
860            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
861        }
862        Ok(isl_rs_result)
863    }
864
865    /// Wraps `isl_multi_pw_aff_get_pw_aff`.
866    pub fn get_pw_aff(&self, pos: i32) -> Result<PwAff, LibISLError> {
867        let multi = self;
868        let isl_rs_ctx = multi.get_ctx();
869        let multi = multi.ptr;
870        let isl_rs_result = unsafe { isl_multi_pw_aff_get_pw_aff(multi, pos) };
871        let isl_rs_result = PwAff { ptr: isl_rs_result,
872                                    should_free_on_drop: true };
873        let err = isl_rs_ctx.last_error();
874        if err != Error::None_ {
875            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
876        }
877        Ok(isl_rs_result)
878    }
879
880    /// Wraps `isl_multi_pw_aff_get_range_tuple_id`.
881    pub fn get_range_tuple_id(&self) -> Result<Id, LibISLError> {
882        let multi = self;
883        let isl_rs_ctx = multi.get_ctx();
884        let multi = multi.ptr;
885        let isl_rs_result = unsafe { isl_multi_pw_aff_get_range_tuple_id(multi) };
886        let isl_rs_result = Id { ptr: isl_rs_result,
887                                 should_free_on_drop: true };
888        let err = isl_rs_ctx.last_error();
889        if err != Error::None_ {
890            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
891        }
892        Ok(isl_rs_result)
893    }
894
895    /// Wraps `isl_multi_pw_aff_get_space`.
896    pub fn get_space(&self) -> Result<Space, LibISLError> {
897        let multi = self;
898        let isl_rs_ctx = multi.get_ctx();
899        let multi = multi.ptr;
900        let isl_rs_result = unsafe { isl_multi_pw_aff_get_space(multi) };
901        let isl_rs_result = Space { ptr: isl_rs_result,
902                                    should_free_on_drop: true };
903        let err = isl_rs_ctx.last_error();
904        if err != Error::None_ {
905            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
906        }
907        Ok(isl_rs_result)
908    }
909
910    /// Wraps `isl_multi_pw_aff_get_tuple_id`.
911    pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
912        let multi = self;
913        let isl_rs_ctx = multi.get_ctx();
914        let multi = multi.ptr;
915        let type_ = type_.to_i32();
916        let isl_rs_result = unsafe { isl_multi_pw_aff_get_tuple_id(multi, type_) };
917        let isl_rs_result = Id { ptr: isl_rs_result,
918                                 should_free_on_drop: true };
919        let err = isl_rs_ctx.last_error();
920        if err != Error::None_ {
921            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
922        }
923        Ok(isl_rs_result)
924    }
925
926    /// Wraps `isl_multi_pw_aff_get_tuple_name`.
927    pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
928        let multi = self;
929        let isl_rs_ctx = multi.get_ctx();
930        let multi = multi.ptr;
931        let type_ = type_.to_i32();
932        let isl_rs_result = unsafe { isl_multi_pw_aff_get_tuple_name(multi, type_) };
933        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
934        let isl_rs_result = isl_rs_result.to_str().unwrap();
935        let err = isl_rs_ctx.last_error();
936        if err != Error::None_ {
937            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
938        }
939        Ok(isl_rs_result)
940    }
941
942    /// Wraps `isl_multi_pw_aff_gist`.
943    pub fn gist(self, set: Set) -> Result<MultiPwAff, LibISLError> {
944        let mpa = self;
945        let isl_rs_ctx = mpa.get_ctx();
946        let mut mpa = mpa;
947        mpa.do_not_free_on_drop();
948        let mpa = mpa.ptr;
949        let mut set = set;
950        set.do_not_free_on_drop();
951        let set = set.ptr;
952        let isl_rs_result = unsafe { isl_multi_pw_aff_gist(mpa, set) };
953        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
954                                         should_free_on_drop: true };
955        let err = isl_rs_ctx.last_error();
956        if err != Error::None_ {
957            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
958        }
959        Ok(isl_rs_result)
960    }
961
962    /// Wraps `isl_multi_pw_aff_gist_params`.
963    pub fn gist_params(self, set: Set) -> Result<MultiPwAff, LibISLError> {
964        let mpa = self;
965        let isl_rs_ctx = mpa.get_ctx();
966        let mut mpa = mpa;
967        mpa.do_not_free_on_drop();
968        let mpa = mpa.ptr;
969        let mut set = set;
970        set.do_not_free_on_drop();
971        let set = set.ptr;
972        let isl_rs_result = unsafe { isl_multi_pw_aff_gist_params(mpa, set) };
973        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
974                                         should_free_on_drop: true };
975        let err = isl_rs_ctx.last_error();
976        if err != Error::None_ {
977            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
978        }
979        Ok(isl_rs_result)
980    }
981
982    /// Wraps `isl_multi_pw_aff_has_range_tuple_id`.
983    pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
984        let multi = self;
985        let isl_rs_ctx = multi.get_ctx();
986        let multi = multi.ptr;
987        let isl_rs_result = unsafe { isl_multi_pw_aff_has_range_tuple_id(multi) };
988        let isl_rs_result = match isl_rs_result {
989            0 => false,
990            1 => true,
991            _ => panic!("Got isl_bool = -1"),
992        };
993        let err = isl_rs_ctx.last_error();
994        if err != Error::None_ {
995            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
996        }
997        Ok(isl_rs_result)
998    }
999
1000    /// Wraps `isl_multi_pw_aff_has_tuple_id`.
1001    pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
1002        let multi = self;
1003        let isl_rs_ctx = multi.get_ctx();
1004        let multi = multi.ptr;
1005        let type_ = type_.to_i32();
1006        let isl_rs_result = unsafe { isl_multi_pw_aff_has_tuple_id(multi, type_) };
1007        let isl_rs_result = match isl_rs_result {
1008            0 => false,
1009            1 => true,
1010            _ => panic!("Got isl_bool = -1"),
1011        };
1012        let err = isl_rs_ctx.last_error();
1013        if err != Error::None_ {
1014            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1015        }
1016        Ok(isl_rs_result)
1017    }
1018
1019    /// Wraps `isl_multi_pw_aff_identity`.
1020    pub fn identity(space: Space) -> Result<MultiPwAff, LibISLError> {
1021        let isl_rs_ctx = space.get_ctx();
1022        let mut space = space;
1023        space.do_not_free_on_drop();
1024        let space = space.ptr;
1025        let isl_rs_result = unsafe { isl_multi_pw_aff_identity(space) };
1026        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1027                                         should_free_on_drop: true };
1028        let err = isl_rs_ctx.last_error();
1029        if err != Error::None_ {
1030            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1031        }
1032        Ok(isl_rs_result)
1033    }
1034
1035    /// Wraps `isl_multi_pw_aff_identity_multi_pw_aff`.
1036    pub fn identity_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
1037        let multi = self;
1038        let isl_rs_ctx = multi.get_ctx();
1039        let mut multi = multi;
1040        multi.do_not_free_on_drop();
1041        let multi = multi.ptr;
1042        let isl_rs_result = unsafe { isl_multi_pw_aff_identity_multi_pw_aff(multi) };
1043        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1044                                         should_free_on_drop: true };
1045        let err = isl_rs_ctx.last_error();
1046        if err != Error::None_ {
1047            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1048        }
1049        Ok(isl_rs_result)
1050    }
1051
1052    /// Wraps `isl_multi_pw_aff_identity_on_domain_space`.
1053    pub fn identity_on_domain_space(space: Space) -> Result<MultiPwAff, LibISLError> {
1054        let isl_rs_ctx = space.get_ctx();
1055        let mut space = space;
1056        space.do_not_free_on_drop();
1057        let space = space.ptr;
1058        let isl_rs_result = unsafe { isl_multi_pw_aff_identity_on_domain_space(space) };
1059        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1060                                         should_free_on_drop: true };
1061        let err = isl_rs_ctx.last_error();
1062        if err != Error::None_ {
1063            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1064        }
1065        Ok(isl_rs_result)
1066    }
1067
1068    /// Wraps `isl_multi_pw_aff_insert_dims`.
1069    pub fn insert_dims(self, type_: DimType, first: u32, n: u32)
1070                       -> Result<MultiPwAff, LibISLError> {
1071        let multi = self;
1072        let isl_rs_ctx = multi.get_ctx();
1073        let mut multi = multi;
1074        multi.do_not_free_on_drop();
1075        let multi = multi.ptr;
1076        let type_ = type_.to_i32();
1077        let isl_rs_result = unsafe { isl_multi_pw_aff_insert_dims(multi, type_, first, n) };
1078        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1079                                         should_free_on_drop: true };
1080        let err = isl_rs_ctx.last_error();
1081        if err != Error::None_ {
1082            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1083        }
1084        Ok(isl_rs_result)
1085    }
1086
1087    /// Wraps `isl_multi_pw_aff_insert_domain`.
1088    pub fn insert_domain(self, domain: Space) -> Result<MultiPwAff, LibISLError> {
1089        let multi = self;
1090        let isl_rs_ctx = multi.get_ctx();
1091        let mut multi = multi;
1092        multi.do_not_free_on_drop();
1093        let multi = multi.ptr;
1094        let mut domain = domain;
1095        domain.do_not_free_on_drop();
1096        let domain = domain.ptr;
1097        let isl_rs_result = unsafe { isl_multi_pw_aff_insert_domain(multi, domain) };
1098        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1099                                         should_free_on_drop: true };
1100        let err = isl_rs_ctx.last_error();
1101        if err != Error::None_ {
1102            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1103        }
1104        Ok(isl_rs_result)
1105    }
1106
1107    /// Wraps `isl_multi_pw_aff_intersect_domain`.
1108    pub fn intersect_domain(self, domain: Set) -> Result<MultiPwAff, LibISLError> {
1109        let mpa = self;
1110        let isl_rs_ctx = mpa.get_ctx();
1111        let mut mpa = mpa;
1112        mpa.do_not_free_on_drop();
1113        let mpa = mpa.ptr;
1114        let mut domain = domain;
1115        domain.do_not_free_on_drop();
1116        let domain = domain.ptr;
1117        let isl_rs_result = unsafe { isl_multi_pw_aff_intersect_domain(mpa, domain) };
1118        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1119                                         should_free_on_drop: true };
1120        let err = isl_rs_ctx.last_error();
1121        if err != Error::None_ {
1122            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1123        }
1124        Ok(isl_rs_result)
1125    }
1126
1127    /// Wraps `isl_multi_pw_aff_intersect_params`.
1128    pub fn intersect_params(self, set: Set) -> Result<MultiPwAff, LibISLError> {
1129        let mpa = self;
1130        let isl_rs_ctx = mpa.get_ctx();
1131        let mut mpa = mpa;
1132        mpa.do_not_free_on_drop();
1133        let mpa = mpa.ptr;
1134        let mut set = set;
1135        set.do_not_free_on_drop();
1136        let set = set.ptr;
1137        let isl_rs_result = unsafe { isl_multi_pw_aff_intersect_params(mpa, set) };
1138        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1139                                         should_free_on_drop: true };
1140        let err = isl_rs_ctx.last_error();
1141        if err != Error::None_ {
1142            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1143        }
1144        Ok(isl_rs_result)
1145    }
1146
1147    /// Wraps `isl_multi_pw_aff_involves_dims`.
1148    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1149        let multi = self;
1150        let isl_rs_ctx = multi.get_ctx();
1151        let multi = multi.ptr;
1152        let type_ = type_.to_i32();
1153        let isl_rs_result = unsafe { isl_multi_pw_aff_involves_dims(multi, type_, first, n) };
1154        let isl_rs_result = match isl_rs_result {
1155            0 => false,
1156            1 => true,
1157            _ => panic!("Got isl_bool = -1"),
1158        };
1159        let err = isl_rs_ctx.last_error();
1160        if err != Error::None_ {
1161            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1162        }
1163        Ok(isl_rs_result)
1164    }
1165
1166    /// Wraps `isl_multi_pw_aff_involves_nan`.
1167    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1168        let multi = self;
1169        let isl_rs_ctx = multi.get_ctx();
1170        let multi = multi.ptr;
1171        let isl_rs_result = unsafe { isl_multi_pw_aff_involves_nan(multi) };
1172        let isl_rs_result = match isl_rs_result {
1173            0 => false,
1174            1 => true,
1175            _ => panic!("Got isl_bool = -1"),
1176        };
1177        let err = isl_rs_ctx.last_error();
1178        if err != Error::None_ {
1179            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1180        }
1181        Ok(isl_rs_result)
1182    }
1183
1184    /// Wraps `isl_multi_pw_aff_involves_param_id`.
1185    pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
1186        let multi = self;
1187        let isl_rs_ctx = multi.get_ctx();
1188        let multi = multi.ptr;
1189        let id = id.ptr;
1190        let isl_rs_result = unsafe { isl_multi_pw_aff_involves_param_id(multi, id) };
1191        let isl_rs_result = match isl_rs_result {
1192            0 => false,
1193            1 => true,
1194            _ => panic!("Got isl_bool = -1"),
1195        };
1196        let err = isl_rs_ctx.last_error();
1197        if err != Error::None_ {
1198            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1199        }
1200        Ok(isl_rs_result)
1201    }
1202
1203    /// Wraps `isl_multi_pw_aff_involves_param_id_list`.
1204    pub fn involves_param_id_list(&self, list: &IdList) -> Result<bool, LibISLError> {
1205        let multi = self;
1206        let isl_rs_ctx = multi.get_ctx();
1207        let multi = multi.ptr;
1208        let list = list.ptr;
1209        let isl_rs_result = unsafe { isl_multi_pw_aff_involves_param_id_list(multi, list) };
1210        let isl_rs_result = match isl_rs_result {
1211            0 => false,
1212            1 => true,
1213            _ => panic!("Got isl_bool = -1"),
1214        };
1215        let err = isl_rs_ctx.last_error();
1216        if err != Error::None_ {
1217            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1218        }
1219        Ok(isl_rs_result)
1220    }
1221
1222    /// Wraps `isl_multi_pw_aff_is_cst`.
1223    pub fn is_cst(&self) -> Result<bool, LibISLError> {
1224        let mpa = self;
1225        let isl_rs_ctx = mpa.get_ctx();
1226        let mpa = mpa.ptr;
1227        let isl_rs_result = unsafe { isl_multi_pw_aff_is_cst(mpa) };
1228        let isl_rs_result = match isl_rs_result {
1229            0 => false,
1230            1 => true,
1231            _ => panic!("Got isl_bool = -1"),
1232        };
1233        let err = isl_rs_ctx.last_error();
1234        if err != Error::None_ {
1235            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1236        }
1237        Ok(isl_rs_result)
1238    }
1239
1240    /// Wraps `isl_multi_pw_aff_is_equal`.
1241    pub fn is_equal(&self, mpa2: &MultiPwAff) -> Result<bool, LibISLError> {
1242        let mpa1 = self;
1243        let isl_rs_ctx = mpa1.get_ctx();
1244        let mpa1 = mpa1.ptr;
1245        let mpa2 = mpa2.ptr;
1246        let isl_rs_result = unsafe { isl_multi_pw_aff_is_equal(mpa1, mpa2) };
1247        let isl_rs_result = match isl_rs_result {
1248            0 => false,
1249            1 => true,
1250            _ => panic!("Got isl_bool = -1"),
1251        };
1252        let err = isl_rs_ctx.last_error();
1253        if err != Error::None_ {
1254            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1255        }
1256        Ok(isl_rs_result)
1257    }
1258
1259    /// Wraps `isl_multi_pw_aff_isa_multi_aff`.
1260    pub fn isa_multi_aff(&self) -> Result<bool, LibISLError> {
1261        let mpa = self;
1262        let isl_rs_ctx = mpa.get_ctx();
1263        let mpa = mpa.ptr;
1264        let isl_rs_result = unsafe { isl_multi_pw_aff_isa_multi_aff(mpa) };
1265        let isl_rs_result = match isl_rs_result {
1266            0 => false,
1267            1 => true,
1268            _ => panic!("Got isl_bool = -1"),
1269        };
1270        let err = isl_rs_ctx.last_error();
1271        if err != Error::None_ {
1272            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1273        }
1274        Ok(isl_rs_result)
1275    }
1276
1277    /// Wraps `isl_multi_pw_aff_lex_ge_map`.
1278    pub fn lex_ge_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1279        let mpa1 = self;
1280        let isl_rs_ctx = mpa1.get_ctx();
1281        let mut mpa1 = mpa1;
1282        mpa1.do_not_free_on_drop();
1283        let mpa1 = mpa1.ptr;
1284        let mut mpa2 = mpa2;
1285        mpa2.do_not_free_on_drop();
1286        let mpa2 = mpa2.ptr;
1287        let isl_rs_result = unsafe { isl_multi_pw_aff_lex_ge_map(mpa1, mpa2) };
1288        let isl_rs_result = Map { ptr: isl_rs_result,
1289                                  should_free_on_drop: true };
1290        let err = isl_rs_ctx.last_error();
1291        if err != Error::None_ {
1292            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1293        }
1294        Ok(isl_rs_result)
1295    }
1296
1297    /// Wraps `isl_multi_pw_aff_lex_gt_map`.
1298    pub fn lex_gt_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1299        let mpa1 = self;
1300        let isl_rs_ctx = mpa1.get_ctx();
1301        let mut mpa1 = mpa1;
1302        mpa1.do_not_free_on_drop();
1303        let mpa1 = mpa1.ptr;
1304        let mut mpa2 = mpa2;
1305        mpa2.do_not_free_on_drop();
1306        let mpa2 = mpa2.ptr;
1307        let isl_rs_result = unsafe { isl_multi_pw_aff_lex_gt_map(mpa1, mpa2) };
1308        let isl_rs_result = Map { ptr: isl_rs_result,
1309                                  should_free_on_drop: true };
1310        let err = isl_rs_ctx.last_error();
1311        if err != Error::None_ {
1312            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1313        }
1314        Ok(isl_rs_result)
1315    }
1316
1317    /// Wraps `isl_multi_pw_aff_lex_le_map`.
1318    pub fn lex_le_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1319        let mpa1 = self;
1320        let isl_rs_ctx = mpa1.get_ctx();
1321        let mut mpa1 = mpa1;
1322        mpa1.do_not_free_on_drop();
1323        let mpa1 = mpa1.ptr;
1324        let mut mpa2 = mpa2;
1325        mpa2.do_not_free_on_drop();
1326        let mpa2 = mpa2.ptr;
1327        let isl_rs_result = unsafe { isl_multi_pw_aff_lex_le_map(mpa1, mpa2) };
1328        let isl_rs_result = Map { ptr: isl_rs_result,
1329                                  should_free_on_drop: true };
1330        let err = isl_rs_ctx.last_error();
1331        if err != Error::None_ {
1332            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1333        }
1334        Ok(isl_rs_result)
1335    }
1336
1337    /// Wraps `isl_multi_pw_aff_lex_lt_map`.
1338    pub fn lex_lt_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1339        let mpa1 = self;
1340        let isl_rs_ctx = mpa1.get_ctx();
1341        let mut mpa1 = mpa1;
1342        mpa1.do_not_free_on_drop();
1343        let mpa1 = mpa1.ptr;
1344        let mut mpa2 = mpa2;
1345        mpa2.do_not_free_on_drop();
1346        let mpa2 = mpa2.ptr;
1347        let isl_rs_result = unsafe { isl_multi_pw_aff_lex_lt_map(mpa1, mpa2) };
1348        let isl_rs_result = Map { ptr: isl_rs_result,
1349                                  should_free_on_drop: true };
1350        let err = isl_rs_ctx.last_error();
1351        if err != Error::None_ {
1352            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1353        }
1354        Ok(isl_rs_result)
1355    }
1356
1357    /// Wraps `isl_multi_pw_aff_max`.
1358    pub fn max(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1359        let multi1 = self;
1360        let isl_rs_ctx = multi1.get_ctx();
1361        let mut multi1 = multi1;
1362        multi1.do_not_free_on_drop();
1363        let multi1 = multi1.ptr;
1364        let mut multi2 = multi2;
1365        multi2.do_not_free_on_drop();
1366        let multi2 = multi2.ptr;
1367        let isl_rs_result = unsafe { isl_multi_pw_aff_max(multi1, multi2) };
1368        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1369                                         should_free_on_drop: true };
1370        let err = isl_rs_ctx.last_error();
1371        if err != Error::None_ {
1372            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1373        }
1374        Ok(isl_rs_result)
1375    }
1376
1377    /// Wraps `isl_multi_pw_aff_max_multi_val`.
1378    pub fn max_multi_val(self) -> Result<MultiVal, LibISLError> {
1379        let mpa = self;
1380        let isl_rs_ctx = mpa.get_ctx();
1381        let mut mpa = mpa;
1382        mpa.do_not_free_on_drop();
1383        let mpa = mpa.ptr;
1384        let isl_rs_result = unsafe { isl_multi_pw_aff_max_multi_val(mpa) };
1385        let isl_rs_result = MultiVal { ptr: isl_rs_result,
1386                                       should_free_on_drop: true };
1387        let err = isl_rs_ctx.last_error();
1388        if err != Error::None_ {
1389            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1390        }
1391        Ok(isl_rs_result)
1392    }
1393
1394    /// Wraps `isl_multi_pw_aff_min`.
1395    pub fn min(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1396        let multi1 = self;
1397        let isl_rs_ctx = multi1.get_ctx();
1398        let mut multi1 = multi1;
1399        multi1.do_not_free_on_drop();
1400        let multi1 = multi1.ptr;
1401        let mut multi2 = multi2;
1402        multi2.do_not_free_on_drop();
1403        let multi2 = multi2.ptr;
1404        let isl_rs_result = unsafe { isl_multi_pw_aff_min(multi1, multi2) };
1405        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1406                                         should_free_on_drop: true };
1407        let err = isl_rs_ctx.last_error();
1408        if err != Error::None_ {
1409            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1410        }
1411        Ok(isl_rs_result)
1412    }
1413
1414    /// Wraps `isl_multi_pw_aff_min_multi_val`.
1415    pub fn min_multi_val(self) -> Result<MultiVal, LibISLError> {
1416        let mpa = self;
1417        let isl_rs_ctx = mpa.get_ctx();
1418        let mut mpa = mpa;
1419        mpa.do_not_free_on_drop();
1420        let mpa = mpa.ptr;
1421        let isl_rs_result = unsafe { isl_multi_pw_aff_min_multi_val(mpa) };
1422        let isl_rs_result = MultiVal { ptr: isl_rs_result,
1423                                       should_free_on_drop: true };
1424        let err = isl_rs_ctx.last_error();
1425        if err != Error::None_ {
1426            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1427        }
1428        Ok(isl_rs_result)
1429    }
1430
1431    /// Wraps `isl_multi_pw_aff_mod_multi_val`.
1432    pub fn mod_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
1433        let multi = self;
1434        let isl_rs_ctx = multi.get_ctx();
1435        let mut multi = multi;
1436        multi.do_not_free_on_drop();
1437        let multi = multi.ptr;
1438        let mut mv = mv;
1439        mv.do_not_free_on_drop();
1440        let mv = mv.ptr;
1441        let isl_rs_result = unsafe { isl_multi_pw_aff_mod_multi_val(multi, mv) };
1442        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1443                                         should_free_on_drop: true };
1444        let err = isl_rs_ctx.last_error();
1445        if err != Error::None_ {
1446            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1447        }
1448        Ok(isl_rs_result)
1449    }
1450
1451    /// Wraps `isl_multi_pw_aff_move_dims`.
1452    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1453                     n: u32)
1454                     -> Result<MultiPwAff, LibISLError> {
1455        let pma = self;
1456        let isl_rs_ctx = pma.get_ctx();
1457        let mut pma = pma;
1458        pma.do_not_free_on_drop();
1459        let pma = pma.ptr;
1460        let dst_type = dst_type.to_i32();
1461        let src_type = src_type.to_i32();
1462        let isl_rs_result =
1463            unsafe { isl_multi_pw_aff_move_dims(pma, dst_type, dst_pos, src_type, src_pos, n) };
1464        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1465                                         should_free_on_drop: true };
1466        let err = isl_rs_ctx.last_error();
1467        if err != Error::None_ {
1468            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1469        }
1470        Ok(isl_rs_result)
1471    }
1472
1473    /// Wraps `isl_multi_pw_aff_neg`.
1474    pub fn neg(self) -> Result<MultiPwAff, LibISLError> {
1475        let multi = self;
1476        let isl_rs_ctx = multi.get_ctx();
1477        let mut multi = multi;
1478        multi.do_not_free_on_drop();
1479        let multi = multi.ptr;
1480        let isl_rs_result = unsafe { isl_multi_pw_aff_neg(multi) };
1481        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1482                                         should_free_on_drop: true };
1483        let err = isl_rs_ctx.last_error();
1484        if err != Error::None_ {
1485            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1486        }
1487        Ok(isl_rs_result)
1488    }
1489
1490    /// Wraps `isl_multi_pw_aff_plain_is_equal`.
1491    pub fn plain_is_equal(&self, multi2: &MultiPwAff) -> Result<bool, LibISLError> {
1492        let multi1 = self;
1493        let isl_rs_ctx = multi1.get_ctx();
1494        let multi1 = multi1.ptr;
1495        let multi2 = multi2.ptr;
1496        let isl_rs_result = unsafe { isl_multi_pw_aff_plain_is_equal(multi1, multi2) };
1497        let isl_rs_result = match isl_rs_result {
1498            0 => false,
1499            1 => true,
1500            _ => panic!("Got isl_bool = -1"),
1501        };
1502        let err = isl_rs_ctx.last_error();
1503        if err != Error::None_ {
1504            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1505        }
1506        Ok(isl_rs_result)
1507    }
1508
1509    /// Wraps `isl_multi_pw_aff_product`.
1510    pub fn product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1511        let multi1 = self;
1512        let isl_rs_ctx = multi1.get_ctx();
1513        let mut multi1 = multi1;
1514        multi1.do_not_free_on_drop();
1515        let multi1 = multi1.ptr;
1516        let mut multi2 = multi2;
1517        multi2.do_not_free_on_drop();
1518        let multi2 = multi2.ptr;
1519        let isl_rs_result = unsafe { isl_multi_pw_aff_product(multi1, multi2) };
1520        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1521                                         should_free_on_drop: true };
1522        let err = isl_rs_ctx.last_error();
1523        if err != Error::None_ {
1524            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1525        }
1526        Ok(isl_rs_result)
1527    }
1528
1529    /// Wraps `isl_multi_pw_aff_project_domain_on_params`.
1530    pub fn project_domain_on_params(self) -> Result<MultiPwAff, LibISLError> {
1531        let multi = self;
1532        let isl_rs_ctx = multi.get_ctx();
1533        let mut multi = multi;
1534        multi.do_not_free_on_drop();
1535        let multi = multi.ptr;
1536        let isl_rs_result = unsafe { isl_multi_pw_aff_project_domain_on_params(multi) };
1537        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1538                                         should_free_on_drop: true };
1539        let err = isl_rs_ctx.last_error();
1540        if err != Error::None_ {
1541            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1542        }
1543        Ok(isl_rs_result)
1544    }
1545
1546    /// Wraps `isl_multi_pw_aff_pullback_multi_aff`.
1547    pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<MultiPwAff, LibISLError> {
1548        let mpa = self;
1549        let isl_rs_ctx = mpa.get_ctx();
1550        let mut mpa = mpa;
1551        mpa.do_not_free_on_drop();
1552        let mpa = mpa.ptr;
1553        let mut ma = ma;
1554        ma.do_not_free_on_drop();
1555        let ma = ma.ptr;
1556        let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_multi_aff(mpa, ma) };
1557        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1558                                         should_free_on_drop: true };
1559        let err = isl_rs_ctx.last_error();
1560        if err != Error::None_ {
1561            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1562        }
1563        Ok(isl_rs_result)
1564    }
1565
1566    /// Wraps `isl_multi_pw_aff_pullback_multi_pw_aff`.
1567    pub fn pullback_multi_pw_aff(self, mpa2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1568        let mpa1 = self;
1569        let isl_rs_ctx = mpa1.get_ctx();
1570        let mut mpa1 = mpa1;
1571        mpa1.do_not_free_on_drop();
1572        let mpa1 = mpa1.ptr;
1573        let mut mpa2 = mpa2;
1574        mpa2.do_not_free_on_drop();
1575        let mpa2 = mpa2.ptr;
1576        let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_multi_pw_aff(mpa1, mpa2) };
1577        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1578                                         should_free_on_drop: true };
1579        let err = isl_rs_ctx.last_error();
1580        if err != Error::None_ {
1581            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1582        }
1583        Ok(isl_rs_result)
1584    }
1585
1586    /// Wraps `isl_multi_pw_aff_pullback_pw_multi_aff`.
1587    pub fn pullback_pw_multi_aff(self, pma: PwMultiAff) -> Result<MultiPwAff, LibISLError> {
1588        let mpa = self;
1589        let isl_rs_ctx = mpa.get_ctx();
1590        let mut mpa = mpa;
1591        mpa.do_not_free_on_drop();
1592        let mpa = mpa.ptr;
1593        let mut pma = pma;
1594        pma.do_not_free_on_drop();
1595        let pma = pma.ptr;
1596        let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_pw_multi_aff(mpa, pma) };
1597        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1598                                         should_free_on_drop: true };
1599        let err = isl_rs_ctx.last_error();
1600        if err != Error::None_ {
1601            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1602        }
1603        Ok(isl_rs_result)
1604    }
1605
1606    /// Wraps `isl_multi_pw_aff_range_factor_domain`.
1607    pub fn range_factor_domain(self) -> Result<MultiPwAff, LibISLError> {
1608        let multi = self;
1609        let isl_rs_ctx = multi.get_ctx();
1610        let mut multi = multi;
1611        multi.do_not_free_on_drop();
1612        let multi = multi.ptr;
1613        let isl_rs_result = unsafe { isl_multi_pw_aff_range_factor_domain(multi) };
1614        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1615                                         should_free_on_drop: true };
1616        let err = isl_rs_ctx.last_error();
1617        if err != Error::None_ {
1618            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1619        }
1620        Ok(isl_rs_result)
1621    }
1622
1623    /// Wraps `isl_multi_pw_aff_range_factor_range`.
1624    pub fn range_factor_range(self) -> Result<MultiPwAff, LibISLError> {
1625        let multi = self;
1626        let isl_rs_ctx = multi.get_ctx();
1627        let mut multi = multi;
1628        multi.do_not_free_on_drop();
1629        let multi = multi.ptr;
1630        let isl_rs_result = unsafe { isl_multi_pw_aff_range_factor_range(multi) };
1631        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1632                                         should_free_on_drop: true };
1633        let err = isl_rs_ctx.last_error();
1634        if err != Error::None_ {
1635            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1636        }
1637        Ok(isl_rs_result)
1638    }
1639
1640    /// Wraps `isl_multi_pw_aff_range_is_wrapping`.
1641    pub fn range_is_wrapping(&self) -> Result<bool, LibISLError> {
1642        let multi = self;
1643        let isl_rs_ctx = multi.get_ctx();
1644        let multi = multi.ptr;
1645        let isl_rs_result = unsafe { isl_multi_pw_aff_range_is_wrapping(multi) };
1646        let isl_rs_result = match isl_rs_result {
1647            0 => false,
1648            1 => true,
1649            _ => panic!("Got isl_bool = -1"),
1650        };
1651        let err = isl_rs_ctx.last_error();
1652        if err != Error::None_ {
1653            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1654        }
1655        Ok(isl_rs_result)
1656    }
1657
1658    /// Wraps `isl_multi_pw_aff_range_product`.
1659    pub fn range_product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1660        let multi1 = self;
1661        let isl_rs_ctx = multi1.get_ctx();
1662        let mut multi1 = multi1;
1663        multi1.do_not_free_on_drop();
1664        let multi1 = multi1.ptr;
1665        let mut multi2 = multi2;
1666        multi2.do_not_free_on_drop();
1667        let multi2 = multi2.ptr;
1668        let isl_rs_result = unsafe { isl_multi_pw_aff_range_product(multi1, multi2) };
1669        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1670                                         should_free_on_drop: true };
1671        let err = isl_rs_ctx.last_error();
1672        if err != Error::None_ {
1673            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1674        }
1675        Ok(isl_rs_result)
1676    }
1677
1678    /// Wraps `isl_multi_pw_aff_range_splice`.
1679    pub fn range_splice(self, pos: u32, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1680        let multi1 = self;
1681        let isl_rs_ctx = multi1.get_ctx();
1682        let mut multi1 = multi1;
1683        multi1.do_not_free_on_drop();
1684        let multi1 = multi1.ptr;
1685        let mut multi2 = multi2;
1686        multi2.do_not_free_on_drop();
1687        let multi2 = multi2.ptr;
1688        let isl_rs_result = unsafe { isl_multi_pw_aff_range_splice(multi1, pos, multi2) };
1689        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1690                                         should_free_on_drop: true };
1691        let err = isl_rs_ctx.last_error();
1692        if err != Error::None_ {
1693            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1694        }
1695        Ok(isl_rs_result)
1696    }
1697
1698    /// Wraps `isl_multi_pw_aff_read_from_str`.
1699    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<MultiPwAff, LibISLError> {
1700        let isl_rs_ctx = Context { ptr: ctx.ptr,
1701                                   should_free_on_drop: false };
1702        let ctx = ctx.ptr;
1703        let str_ = CString::new(str_).unwrap();
1704        let str_ = str_.as_ptr();
1705        let isl_rs_result = unsafe { isl_multi_pw_aff_read_from_str(ctx, str_) };
1706        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1707                                         should_free_on_drop: true };
1708        let err = isl_rs_ctx.last_error();
1709        if err != Error::None_ {
1710            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1711        }
1712        Ok(isl_rs_result)
1713    }
1714
1715    /// Wraps `isl_multi_pw_aff_reset_range_tuple_id`.
1716    pub fn reset_range_tuple_id(self) -> Result<MultiPwAff, LibISLError> {
1717        let multi = self;
1718        let isl_rs_ctx = multi.get_ctx();
1719        let mut multi = multi;
1720        multi.do_not_free_on_drop();
1721        let multi = multi.ptr;
1722        let isl_rs_result = unsafe { isl_multi_pw_aff_reset_range_tuple_id(multi) };
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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1728        }
1729        Ok(isl_rs_result)
1730    }
1731
1732    /// Wraps `isl_multi_pw_aff_reset_tuple_id`.
1733    pub fn reset_tuple_id(self, type_: DimType) -> Result<MultiPwAff, LibISLError> {
1734        let multi = self;
1735        let isl_rs_ctx = multi.get_ctx();
1736        let mut multi = multi;
1737        multi.do_not_free_on_drop();
1738        let multi = multi.ptr;
1739        let type_ = type_.to_i32();
1740        let isl_rs_result = unsafe { isl_multi_pw_aff_reset_tuple_id(multi, type_) };
1741        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1742                                         should_free_on_drop: true };
1743        let err = isl_rs_ctx.last_error();
1744        if err != Error::None_ {
1745            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1746        }
1747        Ok(isl_rs_result)
1748    }
1749
1750    /// Wraps `isl_multi_pw_aff_reset_user`.
1751    pub fn reset_user(self) -> Result<MultiPwAff, LibISLError> {
1752        let multi = self;
1753        let isl_rs_ctx = multi.get_ctx();
1754        let mut multi = multi;
1755        multi.do_not_free_on_drop();
1756        let multi = multi.ptr;
1757        let isl_rs_result = unsafe { isl_multi_pw_aff_reset_user(multi) };
1758        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1759                                         should_free_on_drop: true };
1760        let err = isl_rs_ctx.last_error();
1761        if err != Error::None_ {
1762            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1763        }
1764        Ok(isl_rs_result)
1765    }
1766
1767    /// Wraps `isl_multi_pw_aff_scale_down_multi_val`.
1768    pub fn scale_down_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
1769        let multi = self;
1770        let isl_rs_ctx = multi.get_ctx();
1771        let mut multi = multi;
1772        multi.do_not_free_on_drop();
1773        let multi = multi.ptr;
1774        let mut mv = mv;
1775        mv.do_not_free_on_drop();
1776        let mv = mv.ptr;
1777        let isl_rs_result = unsafe { isl_multi_pw_aff_scale_down_multi_val(multi, mv) };
1778        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1779                                         should_free_on_drop: true };
1780        let err = isl_rs_ctx.last_error();
1781        if err != Error::None_ {
1782            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1783        }
1784        Ok(isl_rs_result)
1785    }
1786
1787    /// Wraps `isl_multi_pw_aff_scale_down_val`.
1788    pub fn scale_down_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
1789        let multi = self;
1790        let isl_rs_ctx = multi.get_ctx();
1791        let mut multi = multi;
1792        multi.do_not_free_on_drop();
1793        let multi = multi.ptr;
1794        let mut v = v;
1795        v.do_not_free_on_drop();
1796        let v = v.ptr;
1797        let isl_rs_result = unsafe { isl_multi_pw_aff_scale_down_val(multi, v) };
1798        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1799                                         should_free_on_drop: true };
1800        let err = isl_rs_ctx.last_error();
1801        if err != Error::None_ {
1802            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1803        }
1804        Ok(isl_rs_result)
1805    }
1806
1807    /// Wraps `isl_multi_pw_aff_scale_multi_val`.
1808    pub fn scale_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
1809        let multi = self;
1810        let isl_rs_ctx = multi.get_ctx();
1811        let mut multi = multi;
1812        multi.do_not_free_on_drop();
1813        let multi = multi.ptr;
1814        let mut mv = mv;
1815        mv.do_not_free_on_drop();
1816        let mv = mv.ptr;
1817        let isl_rs_result = unsafe { isl_multi_pw_aff_scale_multi_val(multi, mv) };
1818        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1819                                         should_free_on_drop: true };
1820        let err = isl_rs_ctx.last_error();
1821        if err != Error::None_ {
1822            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1823        }
1824        Ok(isl_rs_result)
1825    }
1826
1827    /// Wraps `isl_multi_pw_aff_scale_val`.
1828    pub fn scale_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
1829        let multi = self;
1830        let isl_rs_ctx = multi.get_ctx();
1831        let mut multi = multi;
1832        multi.do_not_free_on_drop();
1833        let multi = multi.ptr;
1834        let mut v = v;
1835        v.do_not_free_on_drop();
1836        let v = v.ptr;
1837        let isl_rs_result = unsafe { isl_multi_pw_aff_scale_val(multi, v) };
1838        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1839                                         should_free_on_drop: true };
1840        let err = isl_rs_ctx.last_error();
1841        if err != Error::None_ {
1842            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1843        }
1844        Ok(isl_rs_result)
1845    }
1846
1847    /// Wraps `isl_multi_pw_aff_set_at`.
1848    pub fn set_at(self, pos: i32, el: PwAff) -> Result<MultiPwAff, LibISLError> {
1849        let multi = self;
1850        let isl_rs_ctx = multi.get_ctx();
1851        let mut multi = multi;
1852        multi.do_not_free_on_drop();
1853        let multi = multi.ptr;
1854        let mut el = el;
1855        el.do_not_free_on_drop();
1856        let el = el.ptr;
1857        let isl_rs_result = unsafe { isl_multi_pw_aff_set_at(multi, pos, el) };
1858        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1859                                         should_free_on_drop: true };
1860        let err = isl_rs_ctx.last_error();
1861        if err != Error::None_ {
1862            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1863        }
1864        Ok(isl_rs_result)
1865    }
1866
1867    /// Wraps `isl_multi_pw_aff_set_dim_id`.
1868    pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<MultiPwAff, LibISLError> {
1869        let multi = self;
1870        let isl_rs_ctx = multi.get_ctx();
1871        let mut multi = multi;
1872        multi.do_not_free_on_drop();
1873        let multi = multi.ptr;
1874        let type_ = type_.to_i32();
1875        let mut id = id;
1876        id.do_not_free_on_drop();
1877        let id = id.ptr;
1878        let isl_rs_result = unsafe { isl_multi_pw_aff_set_dim_id(multi, type_, pos, id) };
1879        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1880                                         should_free_on_drop: true };
1881        let err = isl_rs_ctx.last_error();
1882        if err != Error::None_ {
1883            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1884        }
1885        Ok(isl_rs_result)
1886    }
1887
1888    /// Wraps `isl_multi_pw_aff_set_dim_name`.
1889    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
1890                        -> Result<MultiPwAff, LibISLError> {
1891        let multi = self;
1892        let isl_rs_ctx = multi.get_ctx();
1893        let mut multi = multi;
1894        multi.do_not_free_on_drop();
1895        let multi = multi.ptr;
1896        let type_ = type_.to_i32();
1897        let s = CString::new(s).unwrap();
1898        let s = s.as_ptr();
1899        let isl_rs_result = unsafe { isl_multi_pw_aff_set_dim_name(multi, type_, pos, s) };
1900        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1901                                         should_free_on_drop: true };
1902        let err = isl_rs_ctx.last_error();
1903        if err != Error::None_ {
1904            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1905        }
1906        Ok(isl_rs_result)
1907    }
1908
1909    /// Wraps `isl_multi_pw_aff_set_pw_aff`.
1910    pub fn set_pw_aff(self, pos: i32, el: PwAff) -> Result<MultiPwAff, LibISLError> {
1911        let multi = self;
1912        let isl_rs_ctx = multi.get_ctx();
1913        let mut multi = multi;
1914        multi.do_not_free_on_drop();
1915        let multi = multi.ptr;
1916        let mut el = el;
1917        el.do_not_free_on_drop();
1918        let el = el.ptr;
1919        let isl_rs_result = unsafe { isl_multi_pw_aff_set_pw_aff(multi, pos, el) };
1920        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1921                                         should_free_on_drop: true };
1922        let err = isl_rs_ctx.last_error();
1923        if err != Error::None_ {
1924            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1925        }
1926        Ok(isl_rs_result)
1927    }
1928
1929    /// Wraps `isl_multi_pw_aff_set_range_tuple_id`.
1930    pub fn set_range_tuple_id(self, id: Id) -> Result<MultiPwAff, LibISLError> {
1931        let multi = self;
1932        let isl_rs_ctx = multi.get_ctx();
1933        let mut multi = multi;
1934        multi.do_not_free_on_drop();
1935        let multi = multi.ptr;
1936        let mut id = id;
1937        id.do_not_free_on_drop();
1938        let id = id.ptr;
1939        let isl_rs_result = unsafe { isl_multi_pw_aff_set_range_tuple_id(multi, id) };
1940        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1941                                         should_free_on_drop: true };
1942        let err = isl_rs_ctx.last_error();
1943        if err != Error::None_ {
1944            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1945        }
1946        Ok(isl_rs_result)
1947    }
1948
1949    /// Wraps `isl_multi_pw_aff_set_tuple_id`.
1950    pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<MultiPwAff, LibISLError> {
1951        let multi = self;
1952        let isl_rs_ctx = multi.get_ctx();
1953        let mut multi = multi;
1954        multi.do_not_free_on_drop();
1955        let multi = multi.ptr;
1956        let type_ = type_.to_i32();
1957        let mut id = id;
1958        id.do_not_free_on_drop();
1959        let id = id.ptr;
1960        let isl_rs_result = unsafe { isl_multi_pw_aff_set_tuple_id(multi, type_, id) };
1961        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1962                                         should_free_on_drop: true };
1963        let err = isl_rs_ctx.last_error();
1964        if err != Error::None_ {
1965            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1966        }
1967        Ok(isl_rs_result)
1968    }
1969
1970    /// Wraps `isl_multi_pw_aff_set_tuple_name`.
1971    pub fn set_tuple_name(self, type_: DimType, s: &str) -> Result<MultiPwAff, LibISLError> {
1972        let multi = self;
1973        let isl_rs_ctx = multi.get_ctx();
1974        let mut multi = multi;
1975        multi.do_not_free_on_drop();
1976        let multi = multi.ptr;
1977        let type_ = type_.to_i32();
1978        let s = CString::new(s).unwrap();
1979        let s = s.as_ptr();
1980        let isl_rs_result = unsafe { isl_multi_pw_aff_set_tuple_name(multi, type_, s) };
1981        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1982                                         should_free_on_drop: true };
1983        let err = isl_rs_ctx.last_error();
1984        if err != Error::None_ {
1985            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1986        }
1987        Ok(isl_rs_result)
1988    }
1989
1990    /// Wraps `isl_multi_pw_aff_size`.
1991    pub fn size(&self) -> Result<i32, LibISLError> {
1992        let multi = self;
1993        let isl_rs_ctx = multi.get_ctx();
1994        let multi = multi.ptr;
1995        let isl_rs_result = unsafe { isl_multi_pw_aff_size(multi) };
1996        let err = isl_rs_ctx.last_error();
1997        if err != Error::None_ {
1998            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1999        }
2000        Ok(isl_rs_result)
2001    }
2002
2003    /// Wraps `isl_multi_pw_aff_splice`.
2004    pub fn splice(self, in_pos: u32, out_pos: u32, multi2: MultiPwAff)
2005                  -> Result<MultiPwAff, LibISLError> {
2006        let multi1 = self;
2007        let isl_rs_ctx = multi1.get_ctx();
2008        let mut multi1 = multi1;
2009        multi1.do_not_free_on_drop();
2010        let multi1 = multi1.ptr;
2011        let mut multi2 = multi2;
2012        multi2.do_not_free_on_drop();
2013        let multi2 = multi2.ptr;
2014        let isl_rs_result = unsafe { isl_multi_pw_aff_splice(multi1, in_pos, out_pos, multi2) };
2015        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2016                                         should_free_on_drop: true };
2017        let err = isl_rs_ctx.last_error();
2018        if err != Error::None_ {
2019            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2020        }
2021        Ok(isl_rs_result)
2022    }
2023
2024    /// Wraps `isl_multi_pw_aff_sub`.
2025    pub fn sub(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
2026        let multi1 = self;
2027        let isl_rs_ctx = multi1.get_ctx();
2028        let mut multi1 = multi1;
2029        multi1.do_not_free_on_drop();
2030        let multi1 = multi1.ptr;
2031        let mut multi2 = multi2;
2032        multi2.do_not_free_on_drop();
2033        let multi2 = multi2.ptr;
2034        let isl_rs_result = unsafe { isl_multi_pw_aff_sub(multi1, multi2) };
2035        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2036                                         should_free_on_drop: true };
2037        let err = isl_rs_ctx.last_error();
2038        if err != Error::None_ {
2039            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2040        }
2041        Ok(isl_rs_result)
2042    }
2043
2044    /// Wraps `isl_multi_pw_aff_to_str`.
2045    pub fn to_str(&self) -> Result<&str, LibISLError> {
2046        let mpa = self;
2047        let isl_rs_ctx = mpa.get_ctx();
2048        let mpa = mpa.ptr;
2049        let isl_rs_result = unsafe { isl_multi_pw_aff_to_str(mpa) };
2050        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2051        let isl_rs_result = isl_rs_result.to_str().unwrap();
2052        let err = isl_rs_ctx.last_error();
2053        if err != Error::None_ {
2054            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2055        }
2056        Ok(isl_rs_result)
2057    }
2058
2059    /// Wraps `isl_multi_pw_aff_unbind_params_insert_domain`.
2060    pub fn unbind_params_insert_domain(self, domain: MultiId) -> Result<MultiPwAff, LibISLError> {
2061        let multi = self;
2062        let isl_rs_ctx = multi.get_ctx();
2063        let mut multi = multi;
2064        multi.do_not_free_on_drop();
2065        let multi = multi.ptr;
2066        let mut domain = domain;
2067        domain.do_not_free_on_drop();
2068        let domain = domain.ptr;
2069        let isl_rs_result = unsafe { isl_multi_pw_aff_unbind_params_insert_domain(multi, domain) };
2070        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2071                                         should_free_on_drop: true };
2072        let err = isl_rs_ctx.last_error();
2073        if err != Error::None_ {
2074            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2075        }
2076        Ok(isl_rs_result)
2077    }
2078
2079    /// Wraps `isl_multi_pw_aff_union_add`.
2080    pub fn union_add(self, mpa2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
2081        let mpa1 = self;
2082        let isl_rs_ctx = mpa1.get_ctx();
2083        let mut mpa1 = mpa1;
2084        mpa1.do_not_free_on_drop();
2085        let mpa1 = mpa1.ptr;
2086        let mut mpa2 = mpa2;
2087        mpa2.do_not_free_on_drop();
2088        let mpa2 = mpa2.ptr;
2089        let isl_rs_result = unsafe { isl_multi_pw_aff_union_add(mpa1, mpa2) };
2090        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2091                                         should_free_on_drop: true };
2092        let err = isl_rs_ctx.last_error();
2093        if err != Error::None_ {
2094            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2095        }
2096        Ok(isl_rs_result)
2097    }
2098
2099    /// Wraps `isl_multi_pw_aff_zero`.
2100    pub fn zero(space: Space) -> Result<MultiPwAff, LibISLError> {
2101        let isl_rs_ctx = space.get_ctx();
2102        let mut space = space;
2103        space.do_not_free_on_drop();
2104        let space = space.ptr;
2105        let isl_rs_result = unsafe { isl_multi_pw_aff_zero(space) };
2106        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2107                                         should_free_on_drop: true };
2108        let err = isl_rs_ctx.last_error();
2109        if err != Error::None_ {
2110            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2111        }
2112        Ok(isl_rs_result)
2113    }
2114
2115    /// Does not call isl_multi_pw_aff_free() on being dropped. (For internal
2116    /// use only.)
2117    pub fn do_not_free_on_drop(&mut self) {
2118        self.should_free_on_drop = false;
2119    }
2120}
2121
2122impl Drop for MultiPwAff {
2123    fn drop(&mut self) {
2124        if self.should_free_on_drop {
2125            unsafe {
2126                isl_multi_pw_aff_free(self.ptr);
2127            }
2128        }
2129    }
2130}