isl_rs/bindings/
multi_aff.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    Aff, AffList, BasicSet, Context, DimType, Error, Id, LibISLError, Map, MultiId, MultiPwAff,
6    MultiUnionPwAff, MultiVal, 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_aff`.
13pub struct MultiAff {
14    pub ptr: uintptr_t,
15    pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20    fn isl_multi_aff_add(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
21
22    fn isl_multi_aff_add_constant_multi_val(mpa: uintptr_t, mv: uintptr_t) -> uintptr_t;
23
24    fn isl_multi_aff_add_constant_val(mpa: uintptr_t, v: uintptr_t) -> uintptr_t;
25
26    fn isl_multi_aff_add_dims(multi: uintptr_t, type_: i32, n: u32) -> uintptr_t;
27
28    fn isl_multi_aff_align_params(multi: uintptr_t, model: uintptr_t) -> uintptr_t;
29
30    fn isl_multi_aff_as_map(ma: uintptr_t) -> uintptr_t;
31
32    fn isl_multi_aff_as_set(ma: uintptr_t) -> uintptr_t;
33
34    fn isl_multi_aff_bind(ma: uintptr_t, tuple: uintptr_t) -> uintptr_t;
35
36    fn isl_multi_aff_bind_domain(multi: uintptr_t, tuple: uintptr_t) -> uintptr_t;
37
38    fn isl_multi_aff_bind_domain_wrapped_domain(multi: uintptr_t, tuple: uintptr_t) -> uintptr_t;
39
40    fn isl_multi_aff_copy(multi: uintptr_t) -> uintptr_t;
41
42    fn isl_multi_aff_dim(multi: uintptr_t, type_: i32) -> i32;
43
44    fn isl_multi_aff_domain_map(space: uintptr_t) -> uintptr_t;
45
46    fn isl_multi_aff_domain_reverse(multi: uintptr_t) -> uintptr_t;
47
48    fn isl_multi_aff_drop_dims(multi: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
49
50    fn isl_multi_aff_dump(maff: uintptr_t) -> ();
51
52    fn isl_multi_aff_factor_range(multi: uintptr_t) -> uintptr_t;
53
54    fn isl_multi_aff_find_dim_by_id(multi: uintptr_t, type_: i32, id: uintptr_t) -> i32;
55
56    fn isl_multi_aff_find_dim_by_name(multi: uintptr_t, type_: i32, name: *const c_char) -> i32;
57
58    fn isl_multi_aff_flat_range_product(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
59
60    fn isl_multi_aff_flatten_domain(ma: uintptr_t) -> uintptr_t;
61
62    fn isl_multi_aff_flatten_range(multi: uintptr_t) -> uintptr_t;
63
64    fn isl_multi_aff_floor(ma: uintptr_t) -> uintptr_t;
65
66    fn isl_multi_aff_free(multi: uintptr_t) -> uintptr_t;
67
68    fn isl_multi_aff_from_aff(aff: uintptr_t) -> uintptr_t;
69
70    fn isl_multi_aff_from_aff_list(space: uintptr_t, list: uintptr_t) -> uintptr_t;
71
72    fn isl_multi_aff_from_range(multi: uintptr_t) -> uintptr_t;
73
74    fn isl_multi_aff_get_aff(multi: uintptr_t, pos: i32) -> uintptr_t;
75
76    fn isl_multi_aff_get_at(multi: uintptr_t, pos: i32) -> uintptr_t;
77
78    fn isl_multi_aff_get_constant_multi_val(ma: uintptr_t) -> uintptr_t;
79
80    fn isl_multi_aff_get_ctx(multi: uintptr_t) -> uintptr_t;
81
82    fn isl_multi_aff_get_dim_id(multi: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
83
84    fn isl_multi_aff_get_domain_space(multi: uintptr_t) -> uintptr_t;
85
86    fn isl_multi_aff_get_list(multi: uintptr_t) -> uintptr_t;
87
88    fn isl_multi_aff_get_range_tuple_id(multi: uintptr_t) -> uintptr_t;
89
90    fn isl_multi_aff_get_space(multi: uintptr_t) -> uintptr_t;
91
92    fn isl_multi_aff_get_tuple_id(multi: uintptr_t, type_: i32) -> uintptr_t;
93
94    fn isl_multi_aff_get_tuple_name(multi: uintptr_t, type_: i32) -> *const c_char;
95
96    fn isl_multi_aff_gist(maff: uintptr_t, context: uintptr_t) -> uintptr_t;
97
98    fn isl_multi_aff_gist_params(maff: uintptr_t, context: uintptr_t) -> uintptr_t;
99
100    fn isl_multi_aff_has_range_tuple_id(multi: uintptr_t) -> i32;
101
102    fn isl_multi_aff_has_tuple_id(multi: uintptr_t, type_: i32) -> i32;
103
104    fn isl_multi_aff_identity(space: uintptr_t) -> uintptr_t;
105
106    fn isl_multi_aff_identity_multi_aff(multi: uintptr_t) -> uintptr_t;
107
108    fn isl_multi_aff_identity_on_domain_space(space: uintptr_t) -> uintptr_t;
109
110    fn isl_multi_aff_insert_dims(multi: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
111
112    fn isl_multi_aff_insert_domain(multi: uintptr_t, domain: uintptr_t) -> uintptr_t;
113
114    fn isl_multi_aff_involves_dims(multi: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
115
116    fn isl_multi_aff_involves_locals(multi: uintptr_t) -> i32;
117
118    fn isl_multi_aff_involves_nan(multi: uintptr_t) -> i32;
119
120    fn isl_multi_aff_lex_ge_set(ma1: uintptr_t, ma2: uintptr_t) -> uintptr_t;
121
122    fn isl_multi_aff_lex_gt_set(ma1: uintptr_t, ma2: uintptr_t) -> uintptr_t;
123
124    fn isl_multi_aff_lex_le_set(ma1: uintptr_t, ma2: uintptr_t) -> uintptr_t;
125
126    fn isl_multi_aff_lex_lt_set(ma1: uintptr_t, ma2: uintptr_t) -> uintptr_t;
127
128    fn isl_multi_aff_mod_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
129
130    fn isl_multi_aff_move_dims(ma: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32,
131                               src_pos: u32, n: u32)
132                               -> uintptr_t;
133
134    fn isl_multi_aff_multi_val_on_domain_space(space: uintptr_t, mv: uintptr_t) -> uintptr_t;
135
136    fn isl_multi_aff_multi_val_on_space(space: uintptr_t, mv: uintptr_t) -> uintptr_t;
137
138    fn isl_multi_aff_neg(multi: uintptr_t) -> uintptr_t;
139
140    fn isl_multi_aff_plain_cmp(multi1: uintptr_t, multi2: uintptr_t) -> i32;
141
142    fn isl_multi_aff_plain_is_equal(multi1: uintptr_t, multi2: uintptr_t) -> i32;
143
144    fn isl_multi_aff_product(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
145
146    fn isl_multi_aff_project_domain_on_params(multi: uintptr_t) -> uintptr_t;
147
148    fn isl_multi_aff_project_out_map(space: uintptr_t, type_: i32, first: u32, n: u32)
149                                     -> uintptr_t;
150
151    fn isl_multi_aff_pullback_multi_aff(ma1: uintptr_t, ma2: uintptr_t) -> uintptr_t;
152
153    fn isl_multi_aff_range_factor_domain(multi: uintptr_t) -> uintptr_t;
154
155    fn isl_multi_aff_range_factor_range(multi: uintptr_t) -> uintptr_t;
156
157    fn isl_multi_aff_range_is_wrapping(multi: uintptr_t) -> i32;
158
159    fn isl_multi_aff_range_map(space: uintptr_t) -> uintptr_t;
160
161    fn isl_multi_aff_range_product(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
162
163    fn isl_multi_aff_range_splice(multi1: uintptr_t, pos: u32, multi2: uintptr_t) -> uintptr_t;
164
165    fn isl_multi_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
166
167    fn isl_multi_aff_reset_range_tuple_id(multi: uintptr_t) -> uintptr_t;
168
169    fn isl_multi_aff_reset_tuple_id(multi: uintptr_t, type_: i32) -> uintptr_t;
170
171    fn isl_multi_aff_reset_user(multi: uintptr_t) -> uintptr_t;
172
173    fn isl_multi_aff_scale_down_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
174
175    fn isl_multi_aff_scale_down_val(multi: uintptr_t, v: uintptr_t) -> uintptr_t;
176
177    fn isl_multi_aff_scale_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
178
179    fn isl_multi_aff_scale_val(multi: uintptr_t, v: uintptr_t) -> uintptr_t;
180
181    fn isl_multi_aff_set_aff(multi: uintptr_t, pos: i32, el: uintptr_t) -> uintptr_t;
182
183    fn isl_multi_aff_set_at(multi: uintptr_t, pos: i32, el: uintptr_t) -> uintptr_t;
184
185    fn isl_multi_aff_set_dim_id(multi: uintptr_t, type_: i32, pos: u32, id: uintptr_t)
186                                -> uintptr_t;
187
188    fn isl_multi_aff_set_dim_name(multi: uintptr_t, type_: i32, pos: u32, s: *const c_char)
189                                  -> uintptr_t;
190
191    fn isl_multi_aff_set_range_tuple_id(multi: uintptr_t, id: uintptr_t) -> uintptr_t;
192
193    fn isl_multi_aff_set_tuple_id(multi: uintptr_t, type_: i32, id: uintptr_t) -> uintptr_t;
194
195    fn isl_multi_aff_set_tuple_name(multi: uintptr_t, type_: i32, s: *const c_char) -> uintptr_t;
196
197    fn isl_multi_aff_size(multi: uintptr_t) -> i32;
198
199    fn isl_multi_aff_splice(multi1: uintptr_t, in_pos: u32, out_pos: u32, multi2: uintptr_t)
200                            -> uintptr_t;
201
202    fn isl_multi_aff_sub(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
203
204    fn isl_multi_aff_to_multi_pw_aff(ma: uintptr_t) -> uintptr_t;
205
206    fn isl_multi_aff_to_multi_union_pw_aff(ma: uintptr_t) -> uintptr_t;
207
208    fn isl_multi_aff_to_pw_multi_aff(ma: uintptr_t) -> uintptr_t;
209
210    fn isl_multi_aff_to_str(ma: uintptr_t) -> *const c_char;
211
212    fn isl_multi_aff_unbind_params_insert_domain(multi: uintptr_t, domain: uintptr_t) -> uintptr_t;
213
214    fn isl_multi_aff_zero(space: uintptr_t) -> uintptr_t;
215
216}
217
218impl MultiAff {
219    /// Wraps `isl_multi_aff_add`.
220    pub fn add(self, multi2: MultiAff) -> Result<MultiAff, LibISLError> {
221        let multi1 = self;
222        let isl_rs_ctx = multi1.get_ctx();
223        let mut multi1 = multi1;
224        multi1.do_not_free_on_drop();
225        let multi1 = multi1.ptr;
226        let mut multi2 = multi2;
227        multi2.do_not_free_on_drop();
228        let multi2 = multi2.ptr;
229        let isl_rs_result = unsafe { isl_multi_aff_add(multi1, multi2) };
230        let isl_rs_result = MultiAff { ptr: isl_rs_result,
231                                       should_free_on_drop: true };
232        let err = isl_rs_ctx.last_error();
233        if err != Error::None_ {
234            let err_msg = isl_rs_ctx.last_error_msg();
235            isl_rs_ctx.reset_error();
236            return Err(LibISLError::new(err, err_msg));
237        }
238        Ok(isl_rs_result)
239    }
240
241    /// Wraps `isl_multi_aff_add_constant_multi_val`.
242    pub fn add_constant_multi_val(self, mv: MultiVal) -> Result<MultiAff, LibISLError> {
243        let mpa = self;
244        let isl_rs_ctx = mpa.get_ctx();
245        let mut mpa = mpa;
246        mpa.do_not_free_on_drop();
247        let mpa = mpa.ptr;
248        let mut mv = mv;
249        mv.do_not_free_on_drop();
250        let mv = mv.ptr;
251        let isl_rs_result = unsafe { isl_multi_aff_add_constant_multi_val(mpa, mv) };
252        let isl_rs_result = MultiAff { ptr: isl_rs_result,
253                                       should_free_on_drop: true };
254        let err = isl_rs_ctx.last_error();
255        if err != Error::None_ {
256            let err_msg = isl_rs_ctx.last_error_msg();
257            isl_rs_ctx.reset_error();
258            return Err(LibISLError::new(err, err_msg));
259        }
260        Ok(isl_rs_result)
261    }
262
263    /// Wraps `isl_multi_aff_add_constant_val`.
264    pub fn add_constant_val(self, v: Val) -> Result<MultiAff, LibISLError> {
265        let mpa = self;
266        let isl_rs_ctx = mpa.get_ctx();
267        let mut mpa = mpa;
268        mpa.do_not_free_on_drop();
269        let mpa = mpa.ptr;
270        let mut v = v;
271        v.do_not_free_on_drop();
272        let v = v.ptr;
273        let isl_rs_result = unsafe { isl_multi_aff_add_constant_val(mpa, v) };
274        let isl_rs_result = MultiAff { ptr: isl_rs_result,
275                                       should_free_on_drop: true };
276        let err = isl_rs_ctx.last_error();
277        if err != Error::None_ {
278            let err_msg = isl_rs_ctx.last_error_msg();
279            isl_rs_ctx.reset_error();
280            return Err(LibISLError::new(err, err_msg));
281        }
282        Ok(isl_rs_result)
283    }
284
285    /// Wraps `isl_multi_aff_add_dims`.
286    pub fn add_dims(self, type_: DimType, n: u32) -> Result<MultiAff, LibISLError> {
287        let multi = self;
288        let isl_rs_ctx = multi.get_ctx();
289        let mut multi = multi;
290        multi.do_not_free_on_drop();
291        let multi = multi.ptr;
292        let type_ = type_.to_i32();
293        let isl_rs_result = unsafe { isl_multi_aff_add_dims(multi, type_, n) };
294        let isl_rs_result = MultiAff { 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_aff_align_params`.
306    pub fn align_params(self, model: Space) -> Result<MultiAff, 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 mut model = model;
313        model.do_not_free_on_drop();
314        let model = model.ptr;
315        let isl_rs_result = unsafe { isl_multi_aff_align_params(multi, model) };
316        let isl_rs_result = MultiAff { ptr: isl_rs_result,
317                                       should_free_on_drop: true };
318        let err = isl_rs_ctx.last_error();
319        if err != Error::None_ {
320            let err_msg = isl_rs_ctx.last_error_msg();
321            isl_rs_ctx.reset_error();
322            return Err(LibISLError::new(err, err_msg));
323        }
324        Ok(isl_rs_result)
325    }
326
327    /// Wraps `isl_multi_aff_as_map`.
328    pub fn as_map(self) -> Result<Map, LibISLError> {
329        let ma = self;
330        let isl_rs_ctx = ma.get_ctx();
331        let mut ma = ma;
332        ma.do_not_free_on_drop();
333        let ma = ma.ptr;
334        let isl_rs_result = unsafe { isl_multi_aff_as_map(ma) };
335        let isl_rs_result = Map { ptr: isl_rs_result,
336                                  should_free_on_drop: true };
337        let err = isl_rs_ctx.last_error();
338        if err != Error::None_ {
339            let err_msg = isl_rs_ctx.last_error_msg();
340            isl_rs_ctx.reset_error();
341            return Err(LibISLError::new(err, err_msg));
342        }
343        Ok(isl_rs_result)
344    }
345
346    /// Wraps `isl_multi_aff_as_set`.
347    pub fn as_set(self) -> Result<Set, LibISLError> {
348        let ma = self;
349        let isl_rs_ctx = ma.get_ctx();
350        let mut ma = ma;
351        ma.do_not_free_on_drop();
352        let ma = ma.ptr;
353        let isl_rs_result = unsafe { isl_multi_aff_as_set(ma) };
354        let isl_rs_result = Set { ptr: isl_rs_result,
355                                  should_free_on_drop: true };
356        let err = isl_rs_ctx.last_error();
357        if err != Error::None_ {
358            let err_msg = isl_rs_ctx.last_error_msg();
359            isl_rs_ctx.reset_error();
360            return Err(LibISLError::new(err, err_msg));
361        }
362        Ok(isl_rs_result)
363    }
364
365    /// Wraps `isl_multi_aff_bind`.
366    pub fn bind(self, tuple: MultiId) -> Result<BasicSet, LibISLError> {
367        let ma = self;
368        let isl_rs_ctx = ma.get_ctx();
369        let mut ma = ma;
370        ma.do_not_free_on_drop();
371        let ma = ma.ptr;
372        let mut tuple = tuple;
373        tuple.do_not_free_on_drop();
374        let tuple = tuple.ptr;
375        let isl_rs_result = unsafe { isl_multi_aff_bind(ma, tuple) };
376        let isl_rs_result = BasicSet { ptr: isl_rs_result,
377                                       should_free_on_drop: true };
378        let err = isl_rs_ctx.last_error();
379        if err != Error::None_ {
380            let err_msg = isl_rs_ctx.last_error_msg();
381            isl_rs_ctx.reset_error();
382            return Err(LibISLError::new(err, err_msg));
383        }
384        Ok(isl_rs_result)
385    }
386
387    /// Wraps `isl_multi_aff_bind_domain`.
388    pub fn bind_domain(self, tuple: MultiId) -> Result<MultiAff, LibISLError> {
389        let multi = self;
390        let isl_rs_ctx = multi.get_ctx();
391        let mut multi = multi;
392        multi.do_not_free_on_drop();
393        let multi = multi.ptr;
394        let mut tuple = tuple;
395        tuple.do_not_free_on_drop();
396        let tuple = tuple.ptr;
397        let isl_rs_result = unsafe { isl_multi_aff_bind_domain(multi, tuple) };
398        let isl_rs_result = MultiAff { ptr: isl_rs_result,
399                                       should_free_on_drop: true };
400        let err = isl_rs_ctx.last_error();
401        if err != Error::None_ {
402            let err_msg = isl_rs_ctx.last_error_msg();
403            isl_rs_ctx.reset_error();
404            return Err(LibISLError::new(err, err_msg));
405        }
406        Ok(isl_rs_result)
407    }
408
409    /// Wraps `isl_multi_aff_bind_domain_wrapped_domain`.
410    pub fn bind_domain_wrapped_domain(self, tuple: MultiId) -> Result<MultiAff, LibISLError> {
411        let multi = self;
412        let isl_rs_ctx = multi.get_ctx();
413        let mut multi = multi;
414        multi.do_not_free_on_drop();
415        let multi = multi.ptr;
416        let mut tuple = tuple;
417        tuple.do_not_free_on_drop();
418        let tuple = tuple.ptr;
419        let isl_rs_result = unsafe { isl_multi_aff_bind_domain_wrapped_domain(multi, tuple) };
420        let isl_rs_result = MultiAff { ptr: isl_rs_result,
421                                       should_free_on_drop: true };
422        let err = isl_rs_ctx.last_error();
423        if err != Error::None_ {
424            let err_msg = isl_rs_ctx.last_error_msg();
425            isl_rs_ctx.reset_error();
426            return Err(LibISLError::new(err, err_msg));
427        }
428        Ok(isl_rs_result)
429    }
430
431    /// Wraps `isl_multi_aff_copy`.
432    pub fn copy(&self) -> Result<MultiAff, LibISLError> {
433        let multi = self;
434        let isl_rs_ctx = multi.get_ctx();
435        let multi = multi.ptr;
436        let isl_rs_result = unsafe { isl_multi_aff_copy(multi) };
437        let isl_rs_result = MultiAff { 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_aff_dim`.
449    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
450        let multi = self;
451        let isl_rs_ctx = multi.get_ctx();
452        let multi = multi.ptr;
453        let type_ = type_.to_i32();
454        let isl_rs_result = unsafe { isl_multi_aff_dim(multi, type_) };
455        let err = isl_rs_ctx.last_error();
456        if err != Error::None_ {
457            let err_msg = isl_rs_ctx.last_error_msg();
458            isl_rs_ctx.reset_error();
459            return Err(LibISLError::new(err, err_msg));
460        }
461        Ok(isl_rs_result)
462    }
463
464    /// Wraps `isl_multi_aff_domain_map`.
465    pub fn domain_map(space: Space) -> Result<MultiAff, LibISLError> {
466        let isl_rs_ctx = space.get_ctx();
467        let mut space = space;
468        space.do_not_free_on_drop();
469        let space = space.ptr;
470        let isl_rs_result = unsafe { isl_multi_aff_domain_map(space) };
471        let isl_rs_result = MultiAff { ptr: isl_rs_result,
472                                       should_free_on_drop: true };
473        let err = isl_rs_ctx.last_error();
474        if err != Error::None_ {
475            let err_msg = isl_rs_ctx.last_error_msg();
476            isl_rs_ctx.reset_error();
477            return Err(LibISLError::new(err, err_msg));
478        }
479        Ok(isl_rs_result)
480    }
481
482    /// Wraps `isl_multi_aff_domain_reverse`.
483    pub fn domain_reverse(self) -> Result<MultiAff, LibISLError> {
484        let multi = self;
485        let isl_rs_ctx = multi.get_ctx();
486        let mut multi = multi;
487        multi.do_not_free_on_drop();
488        let multi = multi.ptr;
489        let isl_rs_result = unsafe { isl_multi_aff_domain_reverse(multi) };
490        let isl_rs_result = MultiAff { ptr: isl_rs_result,
491                                       should_free_on_drop: true };
492        let err = isl_rs_ctx.last_error();
493        if err != Error::None_ {
494            let err_msg = isl_rs_ctx.last_error_msg();
495            isl_rs_ctx.reset_error();
496            return Err(LibISLError::new(err, err_msg));
497        }
498        Ok(isl_rs_result)
499    }
500
501    /// Wraps `isl_multi_aff_drop_dims`.
502    pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<MultiAff, LibISLError> {
503        let multi = self;
504        let isl_rs_ctx = multi.get_ctx();
505        let mut multi = multi;
506        multi.do_not_free_on_drop();
507        let multi = multi.ptr;
508        let type_ = type_.to_i32();
509        let isl_rs_result = unsafe { isl_multi_aff_drop_dims(multi, type_, first, n) };
510        let isl_rs_result = MultiAff { ptr: isl_rs_result,
511                                       should_free_on_drop: true };
512        let err = isl_rs_ctx.last_error();
513        if err != Error::None_ {
514            let err_msg = isl_rs_ctx.last_error_msg();
515            isl_rs_ctx.reset_error();
516            return Err(LibISLError::new(err, err_msg));
517        }
518        Ok(isl_rs_result)
519    }
520
521    /// Wraps `isl_multi_aff_dump`.
522    pub fn dump(&self) -> Result<(), LibISLError> {
523        let maff = self;
524        let isl_rs_ctx = maff.get_ctx();
525        let maff = maff.ptr;
526        let isl_rs_result = unsafe { isl_multi_aff_dump(maff) };
527        let err = isl_rs_ctx.last_error();
528        if err != Error::None_ {
529            let err_msg = isl_rs_ctx.last_error_msg();
530            isl_rs_ctx.reset_error();
531            return Err(LibISLError::new(err, err_msg));
532        }
533        Ok(isl_rs_result)
534    }
535
536    /// Wraps `isl_multi_aff_factor_range`.
537    pub fn factor_range(self) -> Result<MultiAff, LibISLError> {
538        let multi = self;
539        let isl_rs_ctx = multi.get_ctx();
540        let mut multi = multi;
541        multi.do_not_free_on_drop();
542        let multi = multi.ptr;
543        let isl_rs_result = unsafe { isl_multi_aff_factor_range(multi) };
544        let isl_rs_result = MultiAff { ptr: isl_rs_result,
545                                       should_free_on_drop: true };
546        let err = isl_rs_ctx.last_error();
547        if err != Error::None_ {
548            let err_msg = isl_rs_ctx.last_error_msg();
549            isl_rs_ctx.reset_error();
550            return Err(LibISLError::new(err, err_msg));
551        }
552        Ok(isl_rs_result)
553    }
554
555    /// Wraps `isl_multi_aff_find_dim_by_id`.
556    pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> Result<i32, LibISLError> {
557        let multi = self;
558        let isl_rs_ctx = multi.get_ctx();
559        let multi = multi.ptr;
560        let type_ = type_.to_i32();
561        let id = id.ptr;
562        let isl_rs_result = unsafe { isl_multi_aff_find_dim_by_id(multi, type_, id) };
563        let err = isl_rs_ctx.last_error();
564        if err != Error::None_ {
565            let err_msg = isl_rs_ctx.last_error_msg();
566            isl_rs_ctx.reset_error();
567            return Err(LibISLError::new(err, err_msg));
568        }
569        Ok(isl_rs_result)
570    }
571
572    /// Wraps `isl_multi_aff_find_dim_by_name`.
573    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
574        let multi = self;
575        let isl_rs_ctx = multi.get_ctx();
576        let multi = multi.ptr;
577        let type_ = type_.to_i32();
578        let name = CString::new(name).unwrap();
579        let name = name.as_ptr();
580        let isl_rs_result = unsafe { isl_multi_aff_find_dim_by_name(multi, type_, name) };
581        let err = isl_rs_ctx.last_error();
582        if err != Error::None_ {
583            let err_msg = isl_rs_ctx.last_error_msg();
584            isl_rs_ctx.reset_error();
585            return Err(LibISLError::new(err, err_msg));
586        }
587        Ok(isl_rs_result)
588    }
589
590    /// Wraps `isl_multi_aff_flat_range_product`.
591    pub fn flat_range_product(self, multi2: MultiAff) -> Result<MultiAff, LibISLError> {
592        let multi1 = self;
593        let isl_rs_ctx = multi1.get_ctx();
594        let mut multi1 = multi1;
595        multi1.do_not_free_on_drop();
596        let multi1 = multi1.ptr;
597        let mut multi2 = multi2;
598        multi2.do_not_free_on_drop();
599        let multi2 = multi2.ptr;
600        let isl_rs_result = unsafe { isl_multi_aff_flat_range_product(multi1, multi2) };
601        let isl_rs_result = MultiAff { ptr: isl_rs_result,
602                                       should_free_on_drop: true };
603        let err = isl_rs_ctx.last_error();
604        if err != Error::None_ {
605            let err_msg = isl_rs_ctx.last_error_msg();
606            isl_rs_ctx.reset_error();
607            return Err(LibISLError::new(err, err_msg));
608        }
609        Ok(isl_rs_result)
610    }
611
612    /// Wraps `isl_multi_aff_flatten_domain`.
613    pub fn flatten_domain(self) -> Result<MultiAff, LibISLError> {
614        let ma = self;
615        let isl_rs_ctx = ma.get_ctx();
616        let mut ma = ma;
617        ma.do_not_free_on_drop();
618        let ma = ma.ptr;
619        let isl_rs_result = unsafe { isl_multi_aff_flatten_domain(ma) };
620        let isl_rs_result = MultiAff { ptr: isl_rs_result,
621                                       should_free_on_drop: true };
622        let err = isl_rs_ctx.last_error();
623        if err != Error::None_ {
624            let err_msg = isl_rs_ctx.last_error_msg();
625            isl_rs_ctx.reset_error();
626            return Err(LibISLError::new(err, err_msg));
627        }
628        Ok(isl_rs_result)
629    }
630
631    /// Wraps `isl_multi_aff_flatten_range`.
632    pub fn flatten_range(self) -> Result<MultiAff, LibISLError> {
633        let multi = self;
634        let isl_rs_ctx = multi.get_ctx();
635        let mut multi = multi;
636        multi.do_not_free_on_drop();
637        let multi = multi.ptr;
638        let isl_rs_result = unsafe { isl_multi_aff_flatten_range(multi) };
639        let isl_rs_result = MultiAff { ptr: isl_rs_result,
640                                       should_free_on_drop: true };
641        let err = isl_rs_ctx.last_error();
642        if err != Error::None_ {
643            let err_msg = isl_rs_ctx.last_error_msg();
644            isl_rs_ctx.reset_error();
645            return Err(LibISLError::new(err, err_msg));
646        }
647        Ok(isl_rs_result)
648    }
649
650    /// Wraps `isl_multi_aff_floor`.
651    pub fn floor(self) -> Result<MultiAff, LibISLError> {
652        let ma = self;
653        let isl_rs_ctx = ma.get_ctx();
654        let mut ma = ma;
655        ma.do_not_free_on_drop();
656        let ma = ma.ptr;
657        let isl_rs_result = unsafe { isl_multi_aff_floor(ma) };
658        let isl_rs_result = MultiAff { ptr: isl_rs_result,
659                                       should_free_on_drop: true };
660        let err = isl_rs_ctx.last_error();
661        if err != Error::None_ {
662            let err_msg = isl_rs_ctx.last_error_msg();
663            isl_rs_ctx.reset_error();
664            return Err(LibISLError::new(err, err_msg));
665        }
666        Ok(isl_rs_result)
667    }
668
669    /// Wraps `isl_multi_aff_free`.
670    pub fn free(self) -> Result<MultiAff, LibISLError> {
671        let multi = self;
672        let isl_rs_ctx = multi.get_ctx();
673        let mut multi = multi;
674        multi.do_not_free_on_drop();
675        let multi = multi.ptr;
676        let isl_rs_result = unsafe { isl_multi_aff_free(multi) };
677        let isl_rs_result = MultiAff { ptr: isl_rs_result,
678                                       should_free_on_drop: true };
679        let err = isl_rs_ctx.last_error();
680        if err != Error::None_ {
681            let err_msg = isl_rs_ctx.last_error_msg();
682            isl_rs_ctx.reset_error();
683            return Err(LibISLError::new(err, err_msg));
684        }
685        Ok(isl_rs_result)
686    }
687
688    /// Wraps `isl_multi_aff_from_aff`.
689    pub fn from_aff(aff: Aff) -> Result<MultiAff, LibISLError> {
690        let isl_rs_ctx = aff.get_ctx();
691        let mut aff = aff;
692        aff.do_not_free_on_drop();
693        let aff = aff.ptr;
694        let isl_rs_result = unsafe { isl_multi_aff_from_aff(aff) };
695        let isl_rs_result = MultiAff { ptr: isl_rs_result,
696                                       should_free_on_drop: true };
697        let err = isl_rs_ctx.last_error();
698        if err != Error::None_ {
699            let err_msg = isl_rs_ctx.last_error_msg();
700            isl_rs_ctx.reset_error();
701            return Err(LibISLError::new(err, err_msg));
702        }
703        Ok(isl_rs_result)
704    }
705
706    /// Wraps `isl_multi_aff_from_aff_list`.
707    pub fn from_aff_list(space: Space, list: AffList) -> Result<MultiAff, LibISLError> {
708        let isl_rs_ctx = space.get_ctx();
709        let mut space = space;
710        space.do_not_free_on_drop();
711        let space = space.ptr;
712        let mut list = list;
713        list.do_not_free_on_drop();
714        let list = list.ptr;
715        let isl_rs_result = unsafe { isl_multi_aff_from_aff_list(space, list) };
716        let isl_rs_result = MultiAff { ptr: isl_rs_result,
717                                       should_free_on_drop: true };
718        let err = isl_rs_ctx.last_error();
719        if err != Error::None_ {
720            let err_msg = isl_rs_ctx.last_error_msg();
721            isl_rs_ctx.reset_error();
722            return Err(LibISLError::new(err, err_msg));
723        }
724        Ok(isl_rs_result)
725    }
726
727    /// Wraps `isl_multi_aff_from_range`.
728    pub fn from_range(self) -> Result<MultiAff, LibISLError> {
729        let multi = self;
730        let isl_rs_ctx = multi.get_ctx();
731        let mut multi = multi;
732        multi.do_not_free_on_drop();
733        let multi = multi.ptr;
734        let isl_rs_result = unsafe { isl_multi_aff_from_range(multi) };
735        let isl_rs_result = MultiAff { ptr: isl_rs_result,
736                                       should_free_on_drop: true };
737        let err = isl_rs_ctx.last_error();
738        if err != Error::None_ {
739            let err_msg = isl_rs_ctx.last_error_msg();
740            isl_rs_ctx.reset_error();
741            return Err(LibISLError::new(err, err_msg));
742        }
743        Ok(isl_rs_result)
744    }
745
746    /// Wraps `isl_multi_aff_get_aff`.
747    pub fn get_aff(&self, pos: i32) -> Result<Aff, LibISLError> {
748        let multi = self;
749        let isl_rs_ctx = multi.get_ctx();
750        let multi = multi.ptr;
751        let isl_rs_result = unsafe { isl_multi_aff_get_aff(multi, pos) };
752        let isl_rs_result = Aff { ptr: isl_rs_result,
753                                  should_free_on_drop: true };
754        let err = isl_rs_ctx.last_error();
755        if err != Error::None_ {
756            let err_msg = isl_rs_ctx.last_error_msg();
757            isl_rs_ctx.reset_error();
758            return Err(LibISLError::new(err, err_msg));
759        }
760        Ok(isl_rs_result)
761    }
762
763    /// Wraps `isl_multi_aff_get_at`.
764    pub fn get_at(&self, pos: i32) -> Result<Aff, LibISLError> {
765        let multi = self;
766        let isl_rs_ctx = multi.get_ctx();
767        let multi = multi.ptr;
768        let isl_rs_result = unsafe { isl_multi_aff_get_at(multi, pos) };
769        let isl_rs_result = Aff { ptr: isl_rs_result,
770                                  should_free_on_drop: true };
771        let err = isl_rs_ctx.last_error();
772        if err != Error::None_ {
773            let err_msg = isl_rs_ctx.last_error_msg();
774            isl_rs_ctx.reset_error();
775            return Err(LibISLError::new(err, err_msg));
776        }
777        Ok(isl_rs_result)
778    }
779
780    /// Wraps `isl_multi_aff_get_constant_multi_val`.
781    pub fn get_constant_multi_val(&self) -> Result<MultiVal, LibISLError> {
782        let ma = self;
783        let isl_rs_ctx = ma.get_ctx();
784        let ma = ma.ptr;
785        let isl_rs_result = unsafe { isl_multi_aff_get_constant_multi_val(ma) };
786        let isl_rs_result = MultiVal { ptr: isl_rs_result,
787                                       should_free_on_drop: true };
788        let err = isl_rs_ctx.last_error();
789        if err != Error::None_ {
790            let err_msg = isl_rs_ctx.last_error_msg();
791            isl_rs_ctx.reset_error();
792            return Err(LibISLError::new(err, err_msg));
793        }
794        Ok(isl_rs_result)
795    }
796
797    /// Wraps `isl_multi_aff_get_ctx`.
798    pub fn get_ctx(&self) -> Context {
799        let multi = self;
800        let multi = multi.ptr;
801        let isl_rs_result = unsafe { isl_multi_aff_get_ctx(multi) };
802        let isl_rs_result = Context { ptr: isl_rs_result,
803                                      should_free_on_drop: false };
804        isl_rs_result
805    }
806
807    /// Wraps `isl_multi_aff_get_dim_id`.
808    pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
809        let multi = self;
810        let isl_rs_ctx = multi.get_ctx();
811        let multi = multi.ptr;
812        let type_ = type_.to_i32();
813        let isl_rs_result = unsafe { isl_multi_aff_get_dim_id(multi, type_, pos) };
814        let isl_rs_result = Id { ptr: isl_rs_result,
815                                 should_free_on_drop: true };
816        let err = isl_rs_ctx.last_error();
817        if err != Error::None_ {
818            let err_msg = isl_rs_ctx.last_error_msg();
819            isl_rs_ctx.reset_error();
820            return Err(LibISLError::new(err, err_msg));
821        }
822        Ok(isl_rs_result)
823    }
824
825    /// Wraps `isl_multi_aff_get_domain_space`.
826    pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
827        let multi = self;
828        let isl_rs_ctx = multi.get_ctx();
829        let multi = multi.ptr;
830        let isl_rs_result = unsafe { isl_multi_aff_get_domain_space(multi) };
831        let isl_rs_result = Space { ptr: isl_rs_result,
832                                    should_free_on_drop: true };
833        let err = isl_rs_ctx.last_error();
834        if err != Error::None_ {
835            let err_msg = isl_rs_ctx.last_error_msg();
836            isl_rs_ctx.reset_error();
837            return Err(LibISLError::new(err, err_msg));
838        }
839        Ok(isl_rs_result)
840    }
841
842    /// Wraps `isl_multi_aff_get_list`.
843    pub fn get_list(&self) -> Result<AffList, LibISLError> {
844        let multi = self;
845        let isl_rs_ctx = multi.get_ctx();
846        let multi = multi.ptr;
847        let isl_rs_result = unsafe { isl_multi_aff_get_list(multi) };
848        let isl_rs_result = AffList { ptr: isl_rs_result,
849                                      should_free_on_drop: true };
850        let err = isl_rs_ctx.last_error();
851        if err != Error::None_ {
852            let err_msg = isl_rs_ctx.last_error_msg();
853            isl_rs_ctx.reset_error();
854            return Err(LibISLError::new(err, err_msg));
855        }
856        Ok(isl_rs_result)
857    }
858
859    /// Wraps `isl_multi_aff_get_range_tuple_id`.
860    pub fn get_range_tuple_id(&self) -> Result<Id, LibISLError> {
861        let multi = self;
862        let isl_rs_ctx = multi.get_ctx();
863        let multi = multi.ptr;
864        let isl_rs_result = unsafe { isl_multi_aff_get_range_tuple_id(multi) };
865        let isl_rs_result = Id { ptr: isl_rs_result,
866                                 should_free_on_drop: true };
867        let err = isl_rs_ctx.last_error();
868        if err != Error::None_ {
869            let err_msg = isl_rs_ctx.last_error_msg();
870            isl_rs_ctx.reset_error();
871            return Err(LibISLError::new(err, err_msg));
872        }
873        Ok(isl_rs_result)
874    }
875
876    /// Wraps `isl_multi_aff_get_space`.
877    pub fn get_space(&self) -> Result<Space, LibISLError> {
878        let multi = self;
879        let isl_rs_ctx = multi.get_ctx();
880        let multi = multi.ptr;
881        let isl_rs_result = unsafe { isl_multi_aff_get_space(multi) };
882        let isl_rs_result = Space { ptr: isl_rs_result,
883                                    should_free_on_drop: true };
884        let err = isl_rs_ctx.last_error();
885        if err != Error::None_ {
886            let err_msg = isl_rs_ctx.last_error_msg();
887            isl_rs_ctx.reset_error();
888            return Err(LibISLError::new(err, err_msg));
889        }
890        Ok(isl_rs_result)
891    }
892
893    /// Wraps `isl_multi_aff_get_tuple_id`.
894    pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
895        let multi = self;
896        let isl_rs_ctx = multi.get_ctx();
897        let multi = multi.ptr;
898        let type_ = type_.to_i32();
899        let isl_rs_result = unsafe { isl_multi_aff_get_tuple_id(multi, type_) };
900        let isl_rs_result = Id { ptr: isl_rs_result,
901                                 should_free_on_drop: true };
902        let err = isl_rs_ctx.last_error();
903        if err != Error::None_ {
904            let err_msg = isl_rs_ctx.last_error_msg();
905            isl_rs_ctx.reset_error();
906            return Err(LibISLError::new(err, err_msg));
907        }
908        Ok(isl_rs_result)
909    }
910
911    /// Wraps `isl_multi_aff_get_tuple_name`.
912    pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
913        let multi = self;
914        let isl_rs_ctx = multi.get_ctx();
915        let multi = multi.ptr;
916        let type_ = type_.to_i32();
917        let isl_rs_result = unsafe { isl_multi_aff_get_tuple_name(multi, type_) };
918        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
919        let isl_rs_result = isl_rs_result.to_str().unwrap();
920        let err = isl_rs_ctx.last_error();
921        if err != Error::None_ {
922            let err_msg = isl_rs_ctx.last_error_msg();
923            isl_rs_ctx.reset_error();
924            return Err(LibISLError::new(err, err_msg));
925        }
926        Ok(isl_rs_result)
927    }
928
929    /// Wraps `isl_multi_aff_gist`.
930    pub fn gist(self, context: Set) -> Result<MultiAff, LibISLError> {
931        let maff = self;
932        let isl_rs_ctx = maff.get_ctx();
933        let mut maff = maff;
934        maff.do_not_free_on_drop();
935        let maff = maff.ptr;
936        let mut context = context;
937        context.do_not_free_on_drop();
938        let context = context.ptr;
939        let isl_rs_result = unsafe { isl_multi_aff_gist(maff, context) };
940        let isl_rs_result = MultiAff { ptr: isl_rs_result,
941                                       should_free_on_drop: true };
942        let err = isl_rs_ctx.last_error();
943        if err != Error::None_ {
944            let err_msg = isl_rs_ctx.last_error_msg();
945            isl_rs_ctx.reset_error();
946            return Err(LibISLError::new(err, err_msg));
947        }
948        Ok(isl_rs_result)
949    }
950
951    /// Wraps `isl_multi_aff_gist_params`.
952    pub fn gist_params(self, context: Set) -> Result<MultiAff, LibISLError> {
953        let maff = self;
954        let isl_rs_ctx = maff.get_ctx();
955        let mut maff = maff;
956        maff.do_not_free_on_drop();
957        let maff = maff.ptr;
958        let mut context = context;
959        context.do_not_free_on_drop();
960        let context = context.ptr;
961        let isl_rs_result = unsafe { isl_multi_aff_gist_params(maff, context) };
962        let isl_rs_result = MultiAff { ptr: isl_rs_result,
963                                       should_free_on_drop: true };
964        let err = isl_rs_ctx.last_error();
965        if err != Error::None_ {
966            let err_msg = isl_rs_ctx.last_error_msg();
967            isl_rs_ctx.reset_error();
968            return Err(LibISLError::new(err, err_msg));
969        }
970        Ok(isl_rs_result)
971    }
972
973    /// Wraps `isl_multi_aff_has_range_tuple_id`.
974    pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
975        let multi = self;
976        let isl_rs_ctx = multi.get_ctx();
977        let multi = multi.ptr;
978        let isl_rs_result = unsafe { isl_multi_aff_has_range_tuple_id(multi) };
979        let isl_rs_result = match isl_rs_result {
980            0 => false,
981            1 => true,
982            _ => {
983                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
984            }
985        };
986        let err = isl_rs_ctx.last_error();
987        if err != Error::None_ {
988            let err_msg = isl_rs_ctx.last_error_msg();
989            isl_rs_ctx.reset_error();
990            return Err(LibISLError::new(err, err_msg));
991        }
992        Ok(isl_rs_result)
993    }
994
995    /// Wraps `isl_multi_aff_has_tuple_id`.
996    pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
997        let multi = self;
998        let isl_rs_ctx = multi.get_ctx();
999        let multi = multi.ptr;
1000        let type_ = type_.to_i32();
1001        let isl_rs_result = unsafe { isl_multi_aff_has_tuple_id(multi, type_) };
1002        let isl_rs_result = match isl_rs_result {
1003            0 => false,
1004            1 => true,
1005            _ => {
1006                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1007            }
1008        };
1009        let err = isl_rs_ctx.last_error();
1010        if err != Error::None_ {
1011            let err_msg = isl_rs_ctx.last_error_msg();
1012            isl_rs_ctx.reset_error();
1013            return Err(LibISLError::new(err, err_msg));
1014        }
1015        Ok(isl_rs_result)
1016    }
1017
1018    /// Wraps `isl_multi_aff_identity`.
1019    pub fn identity(space: Space) -> Result<MultiAff, LibISLError> {
1020        let isl_rs_ctx = space.get_ctx();
1021        let mut space = space;
1022        space.do_not_free_on_drop();
1023        let space = space.ptr;
1024        let isl_rs_result = unsafe { isl_multi_aff_identity(space) };
1025        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1026                                       should_free_on_drop: true };
1027        let err = isl_rs_ctx.last_error();
1028        if err != Error::None_ {
1029            let err_msg = isl_rs_ctx.last_error_msg();
1030            isl_rs_ctx.reset_error();
1031            return Err(LibISLError::new(err, err_msg));
1032        }
1033        Ok(isl_rs_result)
1034    }
1035
1036    /// Wraps `isl_multi_aff_identity_multi_aff`.
1037    pub fn identity_multi_aff(self) -> Result<MultiAff, LibISLError> {
1038        let multi = self;
1039        let isl_rs_ctx = multi.get_ctx();
1040        let mut multi = multi;
1041        multi.do_not_free_on_drop();
1042        let multi = multi.ptr;
1043        let isl_rs_result = unsafe { isl_multi_aff_identity_multi_aff(multi) };
1044        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1045                                       should_free_on_drop: true };
1046        let err = isl_rs_ctx.last_error();
1047        if err != Error::None_ {
1048            let err_msg = isl_rs_ctx.last_error_msg();
1049            isl_rs_ctx.reset_error();
1050            return Err(LibISLError::new(err, err_msg));
1051        }
1052        Ok(isl_rs_result)
1053    }
1054
1055    /// Wraps `isl_multi_aff_identity_on_domain_space`.
1056    pub fn identity_on_domain_space(space: Space) -> Result<MultiAff, LibISLError> {
1057        let isl_rs_ctx = space.get_ctx();
1058        let mut space = space;
1059        space.do_not_free_on_drop();
1060        let space = space.ptr;
1061        let isl_rs_result = unsafe { isl_multi_aff_identity_on_domain_space(space) };
1062        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1063                                       should_free_on_drop: true };
1064        let err = isl_rs_ctx.last_error();
1065        if err != Error::None_ {
1066            let err_msg = isl_rs_ctx.last_error_msg();
1067            isl_rs_ctx.reset_error();
1068            return Err(LibISLError::new(err, err_msg));
1069        }
1070        Ok(isl_rs_result)
1071    }
1072
1073    /// Wraps `isl_multi_aff_insert_dims`.
1074    pub fn insert_dims(self, type_: DimType, first: u32, n: u32) -> Result<MultiAff, LibISLError> {
1075        let multi = self;
1076        let isl_rs_ctx = multi.get_ctx();
1077        let mut multi = multi;
1078        multi.do_not_free_on_drop();
1079        let multi = multi.ptr;
1080        let type_ = type_.to_i32();
1081        let isl_rs_result = unsafe { isl_multi_aff_insert_dims(multi, type_, first, n) };
1082        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1083                                       should_free_on_drop: true };
1084        let err = isl_rs_ctx.last_error();
1085        if err != Error::None_ {
1086            let err_msg = isl_rs_ctx.last_error_msg();
1087            isl_rs_ctx.reset_error();
1088            return Err(LibISLError::new(err, err_msg));
1089        }
1090        Ok(isl_rs_result)
1091    }
1092
1093    /// Wraps `isl_multi_aff_insert_domain`.
1094    pub fn insert_domain(self, domain: Space) -> Result<MultiAff, LibISLError> {
1095        let multi = self;
1096        let isl_rs_ctx = multi.get_ctx();
1097        let mut multi = multi;
1098        multi.do_not_free_on_drop();
1099        let multi = multi.ptr;
1100        let mut domain = domain;
1101        domain.do_not_free_on_drop();
1102        let domain = domain.ptr;
1103        let isl_rs_result = unsafe { isl_multi_aff_insert_domain(multi, domain) };
1104        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1105                                       should_free_on_drop: true };
1106        let err = isl_rs_ctx.last_error();
1107        if err != Error::None_ {
1108            let err_msg = isl_rs_ctx.last_error_msg();
1109            isl_rs_ctx.reset_error();
1110            return Err(LibISLError::new(err, err_msg));
1111        }
1112        Ok(isl_rs_result)
1113    }
1114
1115    /// Wraps `isl_multi_aff_involves_dims`.
1116    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1117        let multi = self;
1118        let isl_rs_ctx = multi.get_ctx();
1119        let multi = multi.ptr;
1120        let type_ = type_.to_i32();
1121        let isl_rs_result = unsafe { isl_multi_aff_involves_dims(multi, type_, first, n) };
1122        let isl_rs_result = match isl_rs_result {
1123            0 => false,
1124            1 => true,
1125            _ => {
1126                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1127            }
1128        };
1129        let err = isl_rs_ctx.last_error();
1130        if err != Error::None_ {
1131            let err_msg = isl_rs_ctx.last_error_msg();
1132            isl_rs_ctx.reset_error();
1133            return Err(LibISLError::new(err, err_msg));
1134        }
1135        Ok(isl_rs_result)
1136    }
1137
1138    /// Wraps `isl_multi_aff_involves_locals`.
1139    pub fn involves_locals(&self) -> Result<bool, LibISLError> {
1140        let multi = self;
1141        let isl_rs_ctx = multi.get_ctx();
1142        let multi = multi.ptr;
1143        let isl_rs_result = unsafe { isl_multi_aff_involves_locals(multi) };
1144        let isl_rs_result = match isl_rs_result {
1145            0 => false,
1146            1 => true,
1147            _ => {
1148                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1149            }
1150        };
1151        let err = isl_rs_ctx.last_error();
1152        if err != Error::None_ {
1153            let err_msg = isl_rs_ctx.last_error_msg();
1154            isl_rs_ctx.reset_error();
1155            return Err(LibISLError::new(err, err_msg));
1156        }
1157        Ok(isl_rs_result)
1158    }
1159
1160    /// Wraps `isl_multi_aff_involves_nan`.
1161    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1162        let multi = self;
1163        let isl_rs_ctx = multi.get_ctx();
1164        let multi = multi.ptr;
1165        let isl_rs_result = unsafe { isl_multi_aff_involves_nan(multi) };
1166        let isl_rs_result = match isl_rs_result {
1167            0 => false,
1168            1 => true,
1169            _ => {
1170                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1171            }
1172        };
1173        let err = isl_rs_ctx.last_error();
1174        if err != Error::None_ {
1175            let err_msg = isl_rs_ctx.last_error_msg();
1176            isl_rs_ctx.reset_error();
1177            return Err(LibISLError::new(err, err_msg));
1178        }
1179        Ok(isl_rs_result)
1180    }
1181
1182    /// Wraps `isl_multi_aff_lex_ge_set`.
1183    pub fn lex_ge_set(self, ma2: MultiAff) -> Result<Set, LibISLError> {
1184        let ma1 = self;
1185        let isl_rs_ctx = ma1.get_ctx();
1186        let mut ma1 = ma1;
1187        ma1.do_not_free_on_drop();
1188        let ma1 = ma1.ptr;
1189        let mut ma2 = ma2;
1190        ma2.do_not_free_on_drop();
1191        let ma2 = ma2.ptr;
1192        let isl_rs_result = unsafe { isl_multi_aff_lex_ge_set(ma1, ma2) };
1193        let isl_rs_result = Set { ptr: isl_rs_result,
1194                                  should_free_on_drop: true };
1195        let err = isl_rs_ctx.last_error();
1196        if err != Error::None_ {
1197            let err_msg = isl_rs_ctx.last_error_msg();
1198            isl_rs_ctx.reset_error();
1199            return Err(LibISLError::new(err, err_msg));
1200        }
1201        Ok(isl_rs_result)
1202    }
1203
1204    /// Wraps `isl_multi_aff_lex_gt_set`.
1205    pub fn lex_gt_set(self, ma2: MultiAff) -> Result<Set, LibISLError> {
1206        let ma1 = self;
1207        let isl_rs_ctx = ma1.get_ctx();
1208        let mut ma1 = ma1;
1209        ma1.do_not_free_on_drop();
1210        let ma1 = ma1.ptr;
1211        let mut ma2 = ma2;
1212        ma2.do_not_free_on_drop();
1213        let ma2 = ma2.ptr;
1214        let isl_rs_result = unsafe { isl_multi_aff_lex_gt_set(ma1, ma2) };
1215        let isl_rs_result = Set { ptr: isl_rs_result,
1216                                  should_free_on_drop: true };
1217        let err = isl_rs_ctx.last_error();
1218        if err != Error::None_ {
1219            let err_msg = isl_rs_ctx.last_error_msg();
1220            isl_rs_ctx.reset_error();
1221            return Err(LibISLError::new(err, err_msg));
1222        }
1223        Ok(isl_rs_result)
1224    }
1225
1226    /// Wraps `isl_multi_aff_lex_le_set`.
1227    pub fn lex_le_set(self, ma2: MultiAff) -> Result<Set, LibISLError> {
1228        let ma1 = self;
1229        let isl_rs_ctx = ma1.get_ctx();
1230        let mut ma1 = ma1;
1231        ma1.do_not_free_on_drop();
1232        let ma1 = ma1.ptr;
1233        let mut ma2 = ma2;
1234        ma2.do_not_free_on_drop();
1235        let ma2 = ma2.ptr;
1236        let isl_rs_result = unsafe { isl_multi_aff_lex_le_set(ma1, ma2) };
1237        let isl_rs_result = Set { ptr: isl_rs_result,
1238                                  should_free_on_drop: true };
1239        let err = isl_rs_ctx.last_error();
1240        if err != Error::None_ {
1241            let err_msg = isl_rs_ctx.last_error_msg();
1242            isl_rs_ctx.reset_error();
1243            return Err(LibISLError::new(err, err_msg));
1244        }
1245        Ok(isl_rs_result)
1246    }
1247
1248    /// Wraps `isl_multi_aff_lex_lt_set`.
1249    pub fn lex_lt_set(self, ma2: MultiAff) -> Result<Set, LibISLError> {
1250        let ma1 = self;
1251        let isl_rs_ctx = ma1.get_ctx();
1252        let mut ma1 = ma1;
1253        ma1.do_not_free_on_drop();
1254        let ma1 = ma1.ptr;
1255        let mut ma2 = ma2;
1256        ma2.do_not_free_on_drop();
1257        let ma2 = ma2.ptr;
1258        let isl_rs_result = unsafe { isl_multi_aff_lex_lt_set(ma1, ma2) };
1259        let isl_rs_result = Set { ptr: isl_rs_result,
1260                                  should_free_on_drop: true };
1261        let err = isl_rs_ctx.last_error();
1262        if err != Error::None_ {
1263            let err_msg = isl_rs_ctx.last_error_msg();
1264            isl_rs_ctx.reset_error();
1265            return Err(LibISLError::new(err, err_msg));
1266        }
1267        Ok(isl_rs_result)
1268    }
1269
1270    /// Wraps `isl_multi_aff_mod_multi_val`.
1271    pub fn mod_multi_val(self, mv: MultiVal) -> Result<MultiAff, LibISLError> {
1272        let multi = self;
1273        let isl_rs_ctx = multi.get_ctx();
1274        let mut multi = multi;
1275        multi.do_not_free_on_drop();
1276        let multi = multi.ptr;
1277        let mut mv = mv;
1278        mv.do_not_free_on_drop();
1279        let mv = mv.ptr;
1280        let isl_rs_result = unsafe { isl_multi_aff_mod_multi_val(multi, mv) };
1281        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1282                                       should_free_on_drop: true };
1283        let err = isl_rs_ctx.last_error();
1284        if err != Error::None_ {
1285            let err_msg = isl_rs_ctx.last_error_msg();
1286            isl_rs_ctx.reset_error();
1287            return Err(LibISLError::new(err, err_msg));
1288        }
1289        Ok(isl_rs_result)
1290    }
1291
1292    /// Wraps `isl_multi_aff_move_dims`.
1293    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1294                     n: u32)
1295                     -> Result<MultiAff, LibISLError> {
1296        let ma = self;
1297        let isl_rs_ctx = ma.get_ctx();
1298        let mut ma = ma;
1299        ma.do_not_free_on_drop();
1300        let ma = ma.ptr;
1301        let dst_type = dst_type.to_i32();
1302        let src_type = src_type.to_i32();
1303        let isl_rs_result =
1304            unsafe { isl_multi_aff_move_dims(ma, dst_type, dst_pos, src_type, src_pos, n) };
1305        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1306                                       should_free_on_drop: true };
1307        let err = isl_rs_ctx.last_error();
1308        if err != Error::None_ {
1309            let err_msg = isl_rs_ctx.last_error_msg();
1310            isl_rs_ctx.reset_error();
1311            return Err(LibISLError::new(err, err_msg));
1312        }
1313        Ok(isl_rs_result)
1314    }
1315
1316    /// Wraps `isl_multi_aff_multi_val_on_domain_space`.
1317    pub fn multi_val_on_domain_space(space: Space, mv: MultiVal) -> Result<MultiAff, LibISLError> {
1318        let isl_rs_ctx = space.get_ctx();
1319        let mut space = space;
1320        space.do_not_free_on_drop();
1321        let space = space.ptr;
1322        let mut mv = mv;
1323        mv.do_not_free_on_drop();
1324        let mv = mv.ptr;
1325        let isl_rs_result = unsafe { isl_multi_aff_multi_val_on_domain_space(space, mv) };
1326        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1327                                       should_free_on_drop: true };
1328        let err = isl_rs_ctx.last_error();
1329        if err != Error::None_ {
1330            let err_msg = isl_rs_ctx.last_error_msg();
1331            isl_rs_ctx.reset_error();
1332            return Err(LibISLError::new(err, err_msg));
1333        }
1334        Ok(isl_rs_result)
1335    }
1336
1337    /// Wraps `isl_multi_aff_multi_val_on_space`.
1338    pub fn multi_val_on_space(space: Space, mv: MultiVal) -> Result<MultiAff, LibISLError> {
1339        let isl_rs_ctx = space.get_ctx();
1340        let mut space = space;
1341        space.do_not_free_on_drop();
1342        let space = space.ptr;
1343        let mut mv = mv;
1344        mv.do_not_free_on_drop();
1345        let mv = mv.ptr;
1346        let isl_rs_result = unsafe { isl_multi_aff_multi_val_on_space(space, mv) };
1347        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1348                                       should_free_on_drop: true };
1349        let err = isl_rs_ctx.last_error();
1350        if err != Error::None_ {
1351            let err_msg = isl_rs_ctx.last_error_msg();
1352            isl_rs_ctx.reset_error();
1353            return Err(LibISLError::new(err, err_msg));
1354        }
1355        Ok(isl_rs_result)
1356    }
1357
1358    /// Wraps `isl_multi_aff_neg`.
1359    pub fn neg(self) -> Result<MultiAff, LibISLError> {
1360        let multi = self;
1361        let isl_rs_ctx = multi.get_ctx();
1362        let mut multi = multi;
1363        multi.do_not_free_on_drop();
1364        let multi = multi.ptr;
1365        let isl_rs_result = unsafe { isl_multi_aff_neg(multi) };
1366        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1367                                       should_free_on_drop: true };
1368        let err = isl_rs_ctx.last_error();
1369        if err != Error::None_ {
1370            let err_msg = isl_rs_ctx.last_error_msg();
1371            isl_rs_ctx.reset_error();
1372            return Err(LibISLError::new(err, err_msg));
1373        }
1374        Ok(isl_rs_result)
1375    }
1376
1377    /// Wraps `isl_multi_aff_plain_cmp`.
1378    pub fn plain_cmp(&self, multi2: &MultiAff) -> Result<i32, LibISLError> {
1379        let multi1 = self;
1380        let isl_rs_ctx = multi1.get_ctx();
1381        let multi1 = multi1.ptr;
1382        let multi2 = multi2.ptr;
1383        let isl_rs_result = unsafe { isl_multi_aff_plain_cmp(multi1, multi2) };
1384        let err = isl_rs_ctx.last_error();
1385        if err != Error::None_ {
1386            let err_msg = isl_rs_ctx.last_error_msg();
1387            isl_rs_ctx.reset_error();
1388            return Err(LibISLError::new(err, err_msg));
1389        }
1390        Ok(isl_rs_result)
1391    }
1392
1393    /// Wraps `isl_multi_aff_plain_is_equal`.
1394    pub fn plain_is_equal(&self, multi2: &MultiAff) -> Result<bool, LibISLError> {
1395        let multi1 = self;
1396        let isl_rs_ctx = multi1.get_ctx();
1397        let multi1 = multi1.ptr;
1398        let multi2 = multi2.ptr;
1399        let isl_rs_result = unsafe { isl_multi_aff_plain_is_equal(multi1, multi2) };
1400        let isl_rs_result = match isl_rs_result {
1401            0 => false,
1402            1 => true,
1403            _ => {
1404                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1405            }
1406        };
1407        let err = isl_rs_ctx.last_error();
1408        if err != Error::None_ {
1409            let err_msg = isl_rs_ctx.last_error_msg();
1410            isl_rs_ctx.reset_error();
1411            return Err(LibISLError::new(err, err_msg));
1412        }
1413        Ok(isl_rs_result)
1414    }
1415
1416    /// Wraps `isl_multi_aff_product`.
1417    pub fn product(self, multi2: MultiAff) -> Result<MultiAff, LibISLError> {
1418        let multi1 = self;
1419        let isl_rs_ctx = multi1.get_ctx();
1420        let mut multi1 = multi1;
1421        multi1.do_not_free_on_drop();
1422        let multi1 = multi1.ptr;
1423        let mut multi2 = multi2;
1424        multi2.do_not_free_on_drop();
1425        let multi2 = multi2.ptr;
1426        let isl_rs_result = unsafe { isl_multi_aff_product(multi1, multi2) };
1427        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1428                                       should_free_on_drop: true };
1429        let err = isl_rs_ctx.last_error();
1430        if err != Error::None_ {
1431            let err_msg = isl_rs_ctx.last_error_msg();
1432            isl_rs_ctx.reset_error();
1433            return Err(LibISLError::new(err, err_msg));
1434        }
1435        Ok(isl_rs_result)
1436    }
1437
1438    /// Wraps `isl_multi_aff_project_domain_on_params`.
1439    pub fn project_domain_on_params(self) -> Result<MultiAff, LibISLError> {
1440        let multi = self;
1441        let isl_rs_ctx = multi.get_ctx();
1442        let mut multi = multi;
1443        multi.do_not_free_on_drop();
1444        let multi = multi.ptr;
1445        let isl_rs_result = unsafe { isl_multi_aff_project_domain_on_params(multi) };
1446        let isl_rs_result = MultiAff { 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_aff_project_out_map`.
1458    pub fn project_out_map(space: Space, type_: DimType, first: u32, n: u32)
1459                           -> Result<MultiAff, LibISLError> {
1460        let isl_rs_ctx = space.get_ctx();
1461        let mut space = space;
1462        space.do_not_free_on_drop();
1463        let space = space.ptr;
1464        let type_ = type_.to_i32();
1465        let isl_rs_result = unsafe { isl_multi_aff_project_out_map(space, type_, first, n) };
1466        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1467                                       should_free_on_drop: true };
1468        let err = isl_rs_ctx.last_error();
1469        if err != Error::None_ {
1470            let err_msg = isl_rs_ctx.last_error_msg();
1471            isl_rs_ctx.reset_error();
1472            return Err(LibISLError::new(err, err_msg));
1473        }
1474        Ok(isl_rs_result)
1475    }
1476
1477    /// Wraps `isl_multi_aff_pullback_multi_aff`.
1478    pub fn pullback_multi_aff(self, ma2: MultiAff) -> Result<MultiAff, LibISLError> {
1479        let ma1 = self;
1480        let isl_rs_ctx = ma1.get_ctx();
1481        let mut ma1 = ma1;
1482        ma1.do_not_free_on_drop();
1483        let ma1 = ma1.ptr;
1484        let mut ma2 = ma2;
1485        ma2.do_not_free_on_drop();
1486        let ma2 = ma2.ptr;
1487        let isl_rs_result = unsafe { isl_multi_aff_pullback_multi_aff(ma1, ma2) };
1488        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1489                                       should_free_on_drop: true };
1490        let err = isl_rs_ctx.last_error();
1491        if err != Error::None_ {
1492            let err_msg = isl_rs_ctx.last_error_msg();
1493            isl_rs_ctx.reset_error();
1494            return Err(LibISLError::new(err, err_msg));
1495        }
1496        Ok(isl_rs_result)
1497    }
1498
1499    /// Wraps `isl_multi_aff_range_factor_domain`.
1500    pub fn range_factor_domain(self) -> Result<MultiAff, LibISLError> {
1501        let multi = self;
1502        let isl_rs_ctx = multi.get_ctx();
1503        let mut multi = multi;
1504        multi.do_not_free_on_drop();
1505        let multi = multi.ptr;
1506        let isl_rs_result = unsafe { isl_multi_aff_range_factor_domain(multi) };
1507        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1508                                       should_free_on_drop: true };
1509        let err = isl_rs_ctx.last_error();
1510        if err != Error::None_ {
1511            let err_msg = isl_rs_ctx.last_error_msg();
1512            isl_rs_ctx.reset_error();
1513            return Err(LibISLError::new(err, err_msg));
1514        }
1515        Ok(isl_rs_result)
1516    }
1517
1518    /// Wraps `isl_multi_aff_range_factor_range`.
1519    pub fn range_factor_range(self) -> Result<MultiAff, LibISLError> {
1520        let multi = self;
1521        let isl_rs_ctx = multi.get_ctx();
1522        let mut multi = multi;
1523        multi.do_not_free_on_drop();
1524        let multi = multi.ptr;
1525        let isl_rs_result = unsafe { isl_multi_aff_range_factor_range(multi) };
1526        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1527                                       should_free_on_drop: true };
1528        let err = isl_rs_ctx.last_error();
1529        if err != Error::None_ {
1530            let err_msg = isl_rs_ctx.last_error_msg();
1531            isl_rs_ctx.reset_error();
1532            return Err(LibISLError::new(err, err_msg));
1533        }
1534        Ok(isl_rs_result)
1535    }
1536
1537    /// Wraps `isl_multi_aff_range_is_wrapping`.
1538    pub fn range_is_wrapping(&self) -> Result<bool, LibISLError> {
1539        let multi = self;
1540        let isl_rs_ctx = multi.get_ctx();
1541        let multi = multi.ptr;
1542        let isl_rs_result = unsafe { isl_multi_aff_range_is_wrapping(multi) };
1543        let isl_rs_result = match isl_rs_result {
1544            0 => false,
1545            1 => true,
1546            _ => {
1547                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1548            }
1549        };
1550        let err = isl_rs_ctx.last_error();
1551        if err != Error::None_ {
1552            let err_msg = isl_rs_ctx.last_error_msg();
1553            isl_rs_ctx.reset_error();
1554            return Err(LibISLError::new(err, err_msg));
1555        }
1556        Ok(isl_rs_result)
1557    }
1558
1559    /// Wraps `isl_multi_aff_range_map`.
1560    pub fn range_map(space: Space) -> Result<MultiAff, LibISLError> {
1561        let isl_rs_ctx = space.get_ctx();
1562        let mut space = space;
1563        space.do_not_free_on_drop();
1564        let space = space.ptr;
1565        let isl_rs_result = unsafe { isl_multi_aff_range_map(space) };
1566        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1567                                       should_free_on_drop: true };
1568        let err = isl_rs_ctx.last_error();
1569        if err != Error::None_ {
1570            let err_msg = isl_rs_ctx.last_error_msg();
1571            isl_rs_ctx.reset_error();
1572            return Err(LibISLError::new(err, err_msg));
1573        }
1574        Ok(isl_rs_result)
1575    }
1576
1577    /// Wraps `isl_multi_aff_range_product`.
1578    pub fn range_product(self, multi2: MultiAff) -> Result<MultiAff, LibISLError> {
1579        let multi1 = self;
1580        let isl_rs_ctx = multi1.get_ctx();
1581        let mut multi1 = multi1;
1582        multi1.do_not_free_on_drop();
1583        let multi1 = multi1.ptr;
1584        let mut multi2 = multi2;
1585        multi2.do_not_free_on_drop();
1586        let multi2 = multi2.ptr;
1587        let isl_rs_result = unsafe { isl_multi_aff_range_product(multi1, multi2) };
1588        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1589                                       should_free_on_drop: true };
1590        let err = isl_rs_ctx.last_error();
1591        if err != Error::None_ {
1592            let err_msg = isl_rs_ctx.last_error_msg();
1593            isl_rs_ctx.reset_error();
1594            return Err(LibISLError::new(err, err_msg));
1595        }
1596        Ok(isl_rs_result)
1597    }
1598
1599    /// Wraps `isl_multi_aff_range_splice`.
1600    pub fn range_splice(self, pos: u32, multi2: MultiAff) -> Result<MultiAff, LibISLError> {
1601        let multi1 = self;
1602        let isl_rs_ctx = multi1.get_ctx();
1603        let mut multi1 = multi1;
1604        multi1.do_not_free_on_drop();
1605        let multi1 = multi1.ptr;
1606        let mut multi2 = multi2;
1607        multi2.do_not_free_on_drop();
1608        let multi2 = multi2.ptr;
1609        let isl_rs_result = unsafe { isl_multi_aff_range_splice(multi1, pos, multi2) };
1610        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1611                                       should_free_on_drop: true };
1612        let err = isl_rs_ctx.last_error();
1613        if err != Error::None_ {
1614            let err_msg = isl_rs_ctx.last_error_msg();
1615            isl_rs_ctx.reset_error();
1616            return Err(LibISLError::new(err, err_msg));
1617        }
1618        Ok(isl_rs_result)
1619    }
1620
1621    /// Wraps `isl_multi_aff_read_from_str`.
1622    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<MultiAff, LibISLError> {
1623        let isl_rs_ctx = Context { ptr: ctx.ptr,
1624                                   should_free_on_drop: false };
1625        let ctx = ctx.ptr;
1626        let str_ = CString::new(str_).unwrap();
1627        let str_ = str_.as_ptr();
1628        let isl_rs_result = unsafe { isl_multi_aff_read_from_str(ctx, str_) };
1629        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1630                                       should_free_on_drop: true };
1631        let err = isl_rs_ctx.last_error();
1632        if err != Error::None_ {
1633            let err_msg = isl_rs_ctx.last_error_msg();
1634            isl_rs_ctx.reset_error();
1635            return Err(LibISLError::new(err, err_msg));
1636        }
1637        Ok(isl_rs_result)
1638    }
1639
1640    /// Wraps `isl_multi_aff_reset_range_tuple_id`.
1641    pub fn reset_range_tuple_id(self) -> Result<MultiAff, LibISLError> {
1642        let multi = self;
1643        let isl_rs_ctx = multi.get_ctx();
1644        let mut multi = multi;
1645        multi.do_not_free_on_drop();
1646        let multi = multi.ptr;
1647        let isl_rs_result = unsafe { isl_multi_aff_reset_range_tuple_id(multi) };
1648        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1649                                       should_free_on_drop: true };
1650        let err = isl_rs_ctx.last_error();
1651        if err != Error::None_ {
1652            let err_msg = isl_rs_ctx.last_error_msg();
1653            isl_rs_ctx.reset_error();
1654            return Err(LibISLError::new(err, err_msg));
1655        }
1656        Ok(isl_rs_result)
1657    }
1658
1659    /// Wraps `isl_multi_aff_reset_tuple_id`.
1660    pub fn reset_tuple_id(self, type_: DimType) -> Result<MultiAff, LibISLError> {
1661        let multi = self;
1662        let isl_rs_ctx = multi.get_ctx();
1663        let mut multi = multi;
1664        multi.do_not_free_on_drop();
1665        let multi = multi.ptr;
1666        let type_ = type_.to_i32();
1667        let isl_rs_result = unsafe { isl_multi_aff_reset_tuple_id(multi, type_) };
1668        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1669                                       should_free_on_drop: true };
1670        let err = isl_rs_ctx.last_error();
1671        if err != Error::None_ {
1672            let err_msg = isl_rs_ctx.last_error_msg();
1673            isl_rs_ctx.reset_error();
1674            return Err(LibISLError::new(err, err_msg));
1675        }
1676        Ok(isl_rs_result)
1677    }
1678
1679    /// Wraps `isl_multi_aff_reset_user`.
1680    pub fn reset_user(self) -> Result<MultiAff, LibISLError> {
1681        let multi = self;
1682        let isl_rs_ctx = multi.get_ctx();
1683        let mut multi = multi;
1684        multi.do_not_free_on_drop();
1685        let multi = multi.ptr;
1686        let isl_rs_result = unsafe { isl_multi_aff_reset_user(multi) };
1687        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1688                                       should_free_on_drop: true };
1689        let err = isl_rs_ctx.last_error();
1690        if err != Error::None_ {
1691            let err_msg = isl_rs_ctx.last_error_msg();
1692            isl_rs_ctx.reset_error();
1693            return Err(LibISLError::new(err, err_msg));
1694        }
1695        Ok(isl_rs_result)
1696    }
1697
1698    /// Wraps `isl_multi_aff_scale_down_multi_val`.
1699    pub fn scale_down_multi_val(self, mv: MultiVal) -> Result<MultiAff, LibISLError> {
1700        let multi = self;
1701        let isl_rs_ctx = multi.get_ctx();
1702        let mut multi = multi;
1703        multi.do_not_free_on_drop();
1704        let multi = multi.ptr;
1705        let mut mv = mv;
1706        mv.do_not_free_on_drop();
1707        let mv = mv.ptr;
1708        let isl_rs_result = unsafe { isl_multi_aff_scale_down_multi_val(multi, mv) };
1709        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1710                                       should_free_on_drop: true };
1711        let err = isl_rs_ctx.last_error();
1712        if err != Error::None_ {
1713            let err_msg = isl_rs_ctx.last_error_msg();
1714            isl_rs_ctx.reset_error();
1715            return Err(LibISLError::new(err, err_msg));
1716        }
1717        Ok(isl_rs_result)
1718    }
1719
1720    /// Wraps `isl_multi_aff_scale_down_val`.
1721    pub fn scale_down_val(self, v: Val) -> Result<MultiAff, LibISLError> {
1722        let multi = self;
1723        let isl_rs_ctx = multi.get_ctx();
1724        let mut multi = multi;
1725        multi.do_not_free_on_drop();
1726        let multi = multi.ptr;
1727        let mut v = v;
1728        v.do_not_free_on_drop();
1729        let v = v.ptr;
1730        let isl_rs_result = unsafe { isl_multi_aff_scale_down_val(multi, v) };
1731        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1732                                       should_free_on_drop: true };
1733        let err = isl_rs_ctx.last_error();
1734        if err != Error::None_ {
1735            let err_msg = isl_rs_ctx.last_error_msg();
1736            isl_rs_ctx.reset_error();
1737            return Err(LibISLError::new(err, err_msg));
1738        }
1739        Ok(isl_rs_result)
1740    }
1741
1742    /// Wraps `isl_multi_aff_scale_multi_val`.
1743    pub fn scale_multi_val(self, mv: MultiVal) -> Result<MultiAff, LibISLError> {
1744        let multi = self;
1745        let isl_rs_ctx = multi.get_ctx();
1746        let mut multi = multi;
1747        multi.do_not_free_on_drop();
1748        let multi = multi.ptr;
1749        let mut mv = mv;
1750        mv.do_not_free_on_drop();
1751        let mv = mv.ptr;
1752        let isl_rs_result = unsafe { isl_multi_aff_scale_multi_val(multi, mv) };
1753        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1754                                       should_free_on_drop: true };
1755        let err = isl_rs_ctx.last_error();
1756        if err != Error::None_ {
1757            let err_msg = isl_rs_ctx.last_error_msg();
1758            isl_rs_ctx.reset_error();
1759            return Err(LibISLError::new(err, err_msg));
1760        }
1761        Ok(isl_rs_result)
1762    }
1763
1764    /// Wraps `isl_multi_aff_scale_val`.
1765    pub fn scale_val(self, v: Val) -> Result<MultiAff, LibISLError> {
1766        let multi = self;
1767        let isl_rs_ctx = multi.get_ctx();
1768        let mut multi = multi;
1769        multi.do_not_free_on_drop();
1770        let multi = multi.ptr;
1771        let mut v = v;
1772        v.do_not_free_on_drop();
1773        let v = v.ptr;
1774        let isl_rs_result = unsafe { isl_multi_aff_scale_val(multi, v) };
1775        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1776                                       should_free_on_drop: true };
1777        let err = isl_rs_ctx.last_error();
1778        if err != Error::None_ {
1779            let err_msg = isl_rs_ctx.last_error_msg();
1780            isl_rs_ctx.reset_error();
1781            return Err(LibISLError::new(err, err_msg));
1782        }
1783        Ok(isl_rs_result)
1784    }
1785
1786    /// Wraps `isl_multi_aff_set_aff`.
1787    pub fn set_aff(self, pos: i32, el: Aff) -> Result<MultiAff, LibISLError> {
1788        let multi = self;
1789        let isl_rs_ctx = multi.get_ctx();
1790        let mut multi = multi;
1791        multi.do_not_free_on_drop();
1792        let multi = multi.ptr;
1793        let mut el = el;
1794        el.do_not_free_on_drop();
1795        let el = el.ptr;
1796        let isl_rs_result = unsafe { isl_multi_aff_set_aff(multi, pos, el) };
1797        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1798                                       should_free_on_drop: true };
1799        let err = isl_rs_ctx.last_error();
1800        if err != Error::None_ {
1801            let err_msg = isl_rs_ctx.last_error_msg();
1802            isl_rs_ctx.reset_error();
1803            return Err(LibISLError::new(err, err_msg));
1804        }
1805        Ok(isl_rs_result)
1806    }
1807
1808    /// Wraps `isl_multi_aff_set_at`.
1809    pub fn set_at(self, pos: i32, el: Aff) -> Result<MultiAff, LibISLError> {
1810        let multi = self;
1811        let isl_rs_ctx = multi.get_ctx();
1812        let mut multi = multi;
1813        multi.do_not_free_on_drop();
1814        let multi = multi.ptr;
1815        let mut el = el;
1816        el.do_not_free_on_drop();
1817        let el = el.ptr;
1818        let isl_rs_result = unsafe { isl_multi_aff_set_at(multi, pos, el) };
1819        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1820                                       should_free_on_drop: true };
1821        let err = isl_rs_ctx.last_error();
1822        if err != Error::None_ {
1823            let err_msg = isl_rs_ctx.last_error_msg();
1824            isl_rs_ctx.reset_error();
1825            return Err(LibISLError::new(err, err_msg));
1826        }
1827        Ok(isl_rs_result)
1828    }
1829
1830    /// Wraps `isl_multi_aff_set_dim_id`.
1831    pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<MultiAff, LibISLError> {
1832        let multi = self;
1833        let isl_rs_ctx = multi.get_ctx();
1834        let mut multi = multi;
1835        multi.do_not_free_on_drop();
1836        let multi = multi.ptr;
1837        let type_ = type_.to_i32();
1838        let mut id = id;
1839        id.do_not_free_on_drop();
1840        let id = id.ptr;
1841        let isl_rs_result = unsafe { isl_multi_aff_set_dim_id(multi, type_, pos, id) };
1842        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1843                                       should_free_on_drop: true };
1844        let err = isl_rs_ctx.last_error();
1845        if err != Error::None_ {
1846            let err_msg = isl_rs_ctx.last_error_msg();
1847            isl_rs_ctx.reset_error();
1848            return Err(LibISLError::new(err, err_msg));
1849        }
1850        Ok(isl_rs_result)
1851    }
1852
1853    /// Wraps `isl_multi_aff_set_dim_name`.
1854    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Result<MultiAff, LibISLError> {
1855        let multi = self;
1856        let isl_rs_ctx = multi.get_ctx();
1857        let mut multi = multi;
1858        multi.do_not_free_on_drop();
1859        let multi = multi.ptr;
1860        let type_ = type_.to_i32();
1861        let s = CString::new(s).unwrap();
1862        let s = s.as_ptr();
1863        let isl_rs_result = unsafe { isl_multi_aff_set_dim_name(multi, type_, pos, s) };
1864        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1865                                       should_free_on_drop: true };
1866        let err = isl_rs_ctx.last_error();
1867        if err != Error::None_ {
1868            let err_msg = isl_rs_ctx.last_error_msg();
1869            isl_rs_ctx.reset_error();
1870            return Err(LibISLError::new(err, err_msg));
1871        }
1872        Ok(isl_rs_result)
1873    }
1874
1875    /// Wraps `isl_multi_aff_set_range_tuple_id`.
1876    pub fn set_range_tuple_id(self, id: Id) -> Result<MultiAff, LibISLError> {
1877        let multi = self;
1878        let isl_rs_ctx = multi.get_ctx();
1879        let mut multi = multi;
1880        multi.do_not_free_on_drop();
1881        let multi = multi.ptr;
1882        let mut id = id;
1883        id.do_not_free_on_drop();
1884        let id = id.ptr;
1885        let isl_rs_result = unsafe { isl_multi_aff_set_range_tuple_id(multi, id) };
1886        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1887                                       should_free_on_drop: true };
1888        let err = isl_rs_ctx.last_error();
1889        if err != Error::None_ {
1890            let err_msg = isl_rs_ctx.last_error_msg();
1891            isl_rs_ctx.reset_error();
1892            return Err(LibISLError::new(err, err_msg));
1893        }
1894        Ok(isl_rs_result)
1895    }
1896
1897    /// Wraps `isl_multi_aff_set_tuple_id`.
1898    pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<MultiAff, LibISLError> {
1899        let multi = self;
1900        let isl_rs_ctx = multi.get_ctx();
1901        let mut multi = multi;
1902        multi.do_not_free_on_drop();
1903        let multi = multi.ptr;
1904        let type_ = type_.to_i32();
1905        let mut id = id;
1906        id.do_not_free_on_drop();
1907        let id = id.ptr;
1908        let isl_rs_result = unsafe { isl_multi_aff_set_tuple_id(multi, type_, id) };
1909        let isl_rs_result = MultiAff { 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_aff_set_tuple_name`.
1921    pub fn set_tuple_name(self, type_: DimType, s: &str) -> Result<MultiAff, 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 s = CString::new(s).unwrap();
1929        let s = s.as_ptr();
1930        let isl_rs_result = unsafe { isl_multi_aff_set_tuple_name(multi, type_, s) };
1931        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1932                                       should_free_on_drop: true };
1933        let err = isl_rs_ctx.last_error();
1934        if err != Error::None_ {
1935            let err_msg = isl_rs_ctx.last_error_msg();
1936            isl_rs_ctx.reset_error();
1937            return Err(LibISLError::new(err, err_msg));
1938        }
1939        Ok(isl_rs_result)
1940    }
1941
1942    /// Wraps `isl_multi_aff_size`.
1943    pub fn size(&self) -> Result<i32, LibISLError> {
1944        let multi = self;
1945        let isl_rs_ctx = multi.get_ctx();
1946        let multi = multi.ptr;
1947        let isl_rs_result = unsafe { isl_multi_aff_size(multi) };
1948        let err = isl_rs_ctx.last_error();
1949        if err != Error::None_ {
1950            let err_msg = isl_rs_ctx.last_error_msg();
1951            isl_rs_ctx.reset_error();
1952            return Err(LibISLError::new(err, err_msg));
1953        }
1954        Ok(isl_rs_result)
1955    }
1956
1957    /// Wraps `isl_multi_aff_splice`.
1958    pub fn splice(self, in_pos: u32, out_pos: u32, multi2: MultiAff)
1959                  -> Result<MultiAff, LibISLError> {
1960        let multi1 = self;
1961        let isl_rs_ctx = multi1.get_ctx();
1962        let mut multi1 = multi1;
1963        multi1.do_not_free_on_drop();
1964        let multi1 = multi1.ptr;
1965        let mut multi2 = multi2;
1966        multi2.do_not_free_on_drop();
1967        let multi2 = multi2.ptr;
1968        let isl_rs_result = unsafe { isl_multi_aff_splice(multi1, in_pos, out_pos, multi2) };
1969        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1970                                       should_free_on_drop: true };
1971        let err = isl_rs_ctx.last_error();
1972        if err != Error::None_ {
1973            let err_msg = isl_rs_ctx.last_error_msg();
1974            isl_rs_ctx.reset_error();
1975            return Err(LibISLError::new(err, err_msg));
1976        }
1977        Ok(isl_rs_result)
1978    }
1979
1980    /// Wraps `isl_multi_aff_sub`.
1981    pub fn sub(self, multi2: MultiAff) -> Result<MultiAff, LibISLError> {
1982        let multi1 = self;
1983        let isl_rs_ctx = multi1.get_ctx();
1984        let mut multi1 = multi1;
1985        multi1.do_not_free_on_drop();
1986        let multi1 = multi1.ptr;
1987        let mut multi2 = multi2;
1988        multi2.do_not_free_on_drop();
1989        let multi2 = multi2.ptr;
1990        let isl_rs_result = unsafe { isl_multi_aff_sub(multi1, multi2) };
1991        let isl_rs_result = MultiAff { ptr: isl_rs_result,
1992                                       should_free_on_drop: true };
1993        let err = isl_rs_ctx.last_error();
1994        if err != Error::None_ {
1995            let err_msg = isl_rs_ctx.last_error_msg();
1996            isl_rs_ctx.reset_error();
1997            return Err(LibISLError::new(err, err_msg));
1998        }
1999        Ok(isl_rs_result)
2000    }
2001
2002    /// Wraps `isl_multi_aff_to_multi_pw_aff`.
2003    pub fn to_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
2004        let ma = self;
2005        let isl_rs_ctx = ma.get_ctx();
2006        let mut ma = ma;
2007        ma.do_not_free_on_drop();
2008        let ma = ma.ptr;
2009        let isl_rs_result = unsafe { isl_multi_aff_to_multi_pw_aff(ma) };
2010        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2011                                         should_free_on_drop: true };
2012        let err = isl_rs_ctx.last_error();
2013        if err != Error::None_ {
2014            let err_msg = isl_rs_ctx.last_error_msg();
2015            isl_rs_ctx.reset_error();
2016            return Err(LibISLError::new(err, err_msg));
2017        }
2018        Ok(isl_rs_result)
2019    }
2020
2021    /// Wraps `isl_multi_aff_to_multi_union_pw_aff`.
2022    pub fn to_multi_union_pw_aff(self) -> Result<MultiUnionPwAff, LibISLError> {
2023        let ma = self;
2024        let isl_rs_ctx = ma.get_ctx();
2025        let mut ma = ma;
2026        ma.do_not_free_on_drop();
2027        let ma = ma.ptr;
2028        let isl_rs_result = unsafe { isl_multi_aff_to_multi_union_pw_aff(ma) };
2029        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
2030                                              should_free_on_drop: true };
2031        let err = isl_rs_ctx.last_error();
2032        if err != Error::None_ {
2033            let err_msg = isl_rs_ctx.last_error_msg();
2034            isl_rs_ctx.reset_error();
2035            return Err(LibISLError::new(err, err_msg));
2036        }
2037        Ok(isl_rs_result)
2038    }
2039
2040    /// Wraps `isl_multi_aff_to_pw_multi_aff`.
2041    pub fn to_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
2042        let ma = self;
2043        let isl_rs_ctx = ma.get_ctx();
2044        let mut ma = ma;
2045        ma.do_not_free_on_drop();
2046        let ma = ma.ptr;
2047        let isl_rs_result = unsafe { isl_multi_aff_to_pw_multi_aff(ma) };
2048        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2049                                         should_free_on_drop: true };
2050        let err = isl_rs_ctx.last_error();
2051        if err != Error::None_ {
2052            let err_msg = isl_rs_ctx.last_error_msg();
2053            isl_rs_ctx.reset_error();
2054            return Err(LibISLError::new(err, err_msg));
2055        }
2056        Ok(isl_rs_result)
2057    }
2058
2059    /// Wraps `isl_multi_aff_to_str`.
2060    pub fn to_str(&self) -> Result<&str, LibISLError> {
2061        let ma = self;
2062        let isl_rs_ctx = ma.get_ctx();
2063        let ma = ma.ptr;
2064        let isl_rs_result = unsafe { isl_multi_aff_to_str(ma) };
2065        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2066        let isl_rs_result = isl_rs_result.to_str().unwrap();
2067        let err = isl_rs_ctx.last_error();
2068        if err != Error::None_ {
2069            let err_msg = isl_rs_ctx.last_error_msg();
2070            isl_rs_ctx.reset_error();
2071            return Err(LibISLError::new(err, err_msg));
2072        }
2073        Ok(isl_rs_result)
2074    }
2075
2076    /// Wraps `isl_multi_aff_unbind_params_insert_domain`.
2077    pub fn unbind_params_insert_domain(self, domain: MultiId) -> Result<MultiAff, LibISLError> {
2078        let multi = self;
2079        let isl_rs_ctx = multi.get_ctx();
2080        let mut multi = multi;
2081        multi.do_not_free_on_drop();
2082        let multi = multi.ptr;
2083        let mut domain = domain;
2084        domain.do_not_free_on_drop();
2085        let domain = domain.ptr;
2086        let isl_rs_result = unsafe { isl_multi_aff_unbind_params_insert_domain(multi, domain) };
2087        let isl_rs_result = MultiAff { ptr: isl_rs_result,
2088                                       should_free_on_drop: true };
2089        let err = isl_rs_ctx.last_error();
2090        if err != Error::None_ {
2091            let err_msg = isl_rs_ctx.last_error_msg();
2092            isl_rs_ctx.reset_error();
2093            return Err(LibISLError::new(err, err_msg));
2094        }
2095        Ok(isl_rs_result)
2096    }
2097
2098    /// Wraps `isl_multi_aff_zero`.
2099    pub fn zero(space: Space) -> Result<MultiAff, LibISLError> {
2100        let isl_rs_ctx = space.get_ctx();
2101        let mut space = space;
2102        space.do_not_free_on_drop();
2103        let space = space.ptr;
2104        let isl_rs_result = unsafe { isl_multi_aff_zero(space) };
2105        let isl_rs_result = MultiAff { ptr: isl_rs_result,
2106                                       should_free_on_drop: true };
2107        let err = isl_rs_ctx.last_error();
2108        if err != Error::None_ {
2109            let err_msg = isl_rs_ctx.last_error_msg();
2110            isl_rs_ctx.reset_error();
2111            return Err(LibISLError::new(err, err_msg));
2112        }
2113        Ok(isl_rs_result)
2114    }
2115
2116    /// Does not call isl_multi_aff_free() on being dropped. (For internal use
2117    /// only.)
2118    pub fn do_not_free_on_drop(&mut self) {
2119        self.should_free_on_drop = false;
2120    }
2121}
2122
2123impl Drop for MultiAff {
2124    fn drop(&mut self) {
2125        if self.should_free_on_drop {
2126            unsafe {
2127                isl_multi_aff_free(self.ptr);
2128            }
2129        }
2130    }
2131}