isl_rs/bindings/
pw_multi_aff.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    Context, DimType, Error, Id, LibISLError, Map, MultiAff, MultiId, MultiPwAff, MultiVal, PwAff,
6    PwMultiAffList, Set, Space, UnionPwMultiAff, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12/// Wraps `isl_pw_multi_aff`.
13pub struct PwMultiAff {
14    pub ptr: uintptr_t,
15    pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20    fn isl_pw_multi_aff_add(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
21
22    fn isl_pw_multi_aff_add_constant_multi_val(pma: uintptr_t, mv: uintptr_t) -> uintptr_t;
23
24    fn isl_pw_multi_aff_add_constant_val(pma: uintptr_t, v: uintptr_t) -> uintptr_t;
25
26    fn isl_pw_multi_aff_align_params(pma: uintptr_t, model: uintptr_t) -> uintptr_t;
27
28    fn isl_pw_multi_aff_alloc(set: uintptr_t, maff: uintptr_t) -> uintptr_t;
29
30    fn isl_pw_multi_aff_as_map(pma: uintptr_t) -> uintptr_t;
31
32    fn isl_pw_multi_aff_as_multi_aff(pma: uintptr_t) -> uintptr_t;
33
34    fn isl_pw_multi_aff_as_set(pma: uintptr_t) -> uintptr_t;
35
36    fn isl_pw_multi_aff_bind_domain(pma: uintptr_t, tuple: uintptr_t) -> uintptr_t;
37
38    fn isl_pw_multi_aff_bind_domain_wrapped_domain(pma: uintptr_t, tuple: uintptr_t) -> uintptr_t;
39
40    fn isl_pw_multi_aff_coalesce(pma: uintptr_t) -> uintptr_t;
41
42    fn isl_pw_multi_aff_copy(pma: uintptr_t) -> uintptr_t;
43
44    fn isl_pw_multi_aff_dim(pma: uintptr_t, type_: i32) -> i32;
45
46    fn isl_pw_multi_aff_domain(pma: uintptr_t) -> uintptr_t;
47
48    fn isl_pw_multi_aff_domain_map(space: uintptr_t) -> uintptr_t;
49
50    fn isl_pw_multi_aff_domain_reverse(pma: uintptr_t) -> uintptr_t;
51
52    fn isl_pw_multi_aff_drop_dims(pma: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
53
54    fn isl_pw_multi_aff_drop_unused_params(pma: uintptr_t) -> uintptr_t;
55
56    fn isl_pw_multi_aff_dump(pma: uintptr_t) -> ();
57
58    fn isl_pw_multi_aff_empty(space: uintptr_t) -> uintptr_t;
59
60    fn isl_pw_multi_aff_find_dim_by_name(pma: uintptr_t, type_: i32, name: *const c_char) -> i32;
61
62    fn isl_pw_multi_aff_fix_si(pma: uintptr_t, type_: i32, pos: u32, value: i32) -> uintptr_t;
63
64    fn isl_pw_multi_aff_flat_range_product(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
65
66    fn isl_pw_multi_aff_free(pma: uintptr_t) -> uintptr_t;
67
68    fn isl_pw_multi_aff_from_domain(set: uintptr_t) -> uintptr_t;
69
70    fn isl_pw_multi_aff_from_map(map: uintptr_t) -> uintptr_t;
71
72    fn isl_pw_multi_aff_from_multi_aff(ma: uintptr_t) -> uintptr_t;
73
74    fn isl_pw_multi_aff_from_multi_pw_aff(mpa: uintptr_t) -> uintptr_t;
75
76    fn isl_pw_multi_aff_from_pw_aff(pa: uintptr_t) -> uintptr_t;
77
78    fn isl_pw_multi_aff_from_set(set: uintptr_t) -> uintptr_t;
79
80    fn isl_pw_multi_aff_get_at(pma: uintptr_t, pos: i32) -> uintptr_t;
81
82    fn isl_pw_multi_aff_get_ctx(pma: uintptr_t) -> uintptr_t;
83
84    fn isl_pw_multi_aff_get_dim_id(pma: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
85
86    fn isl_pw_multi_aff_get_dim_name(pma: uintptr_t, type_: i32, pos: u32) -> *const c_char;
87
88    fn isl_pw_multi_aff_get_domain_space(pma: uintptr_t) -> uintptr_t;
89
90    fn isl_pw_multi_aff_get_pw_aff(pma: uintptr_t, pos: i32) -> uintptr_t;
91
92    fn isl_pw_multi_aff_get_range_tuple_id(pma: uintptr_t) -> uintptr_t;
93
94    fn isl_pw_multi_aff_get_space(pma: uintptr_t) -> uintptr_t;
95
96    fn isl_pw_multi_aff_get_tuple_id(pma: uintptr_t, type_: i32) -> uintptr_t;
97
98    fn isl_pw_multi_aff_get_tuple_name(pma: uintptr_t, type_: i32) -> *const c_char;
99
100    fn isl_pw_multi_aff_gist(pma: uintptr_t, set: uintptr_t) -> uintptr_t;
101
102    fn isl_pw_multi_aff_gist_params(pma: uintptr_t, set: uintptr_t) -> uintptr_t;
103
104    fn isl_pw_multi_aff_has_range_tuple_id(pma: uintptr_t) -> i32;
105
106    fn isl_pw_multi_aff_has_tuple_id(pma: uintptr_t, type_: i32) -> i32;
107
108    fn isl_pw_multi_aff_has_tuple_name(pma: uintptr_t, type_: i32) -> i32;
109
110    fn isl_pw_multi_aff_identity(space: uintptr_t) -> uintptr_t;
111
112    fn isl_pw_multi_aff_identity_on_domain_space(space: uintptr_t) -> uintptr_t;
113
114    fn isl_pw_multi_aff_insert_domain(pma: uintptr_t, domain: uintptr_t) -> uintptr_t;
115
116    fn isl_pw_multi_aff_intersect_domain(pma: uintptr_t, set: uintptr_t) -> uintptr_t;
117
118    fn isl_pw_multi_aff_intersect_domain_wrapped_domain(pma: uintptr_t, set: uintptr_t)
119                                                        -> uintptr_t;
120
121    fn isl_pw_multi_aff_intersect_domain_wrapped_range(pma: uintptr_t, set: uintptr_t)
122                                                       -> uintptr_t;
123
124    fn isl_pw_multi_aff_intersect_params(pma: uintptr_t, set: uintptr_t) -> uintptr_t;
125
126    fn isl_pw_multi_aff_involves_dims(pma: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
127
128    fn isl_pw_multi_aff_involves_locals(pma: uintptr_t) -> i32;
129
130    fn isl_pw_multi_aff_involves_nan(pma: uintptr_t) -> i32;
131
132    fn isl_pw_multi_aff_involves_param_id(pma: uintptr_t, id: uintptr_t) -> i32;
133
134    fn isl_pw_multi_aff_is_equal(pma1: uintptr_t, pma2: uintptr_t) -> i32;
135
136    fn isl_pw_multi_aff_isa_multi_aff(pma: uintptr_t) -> i32;
137
138    fn isl_pw_multi_aff_max_multi_val(pma: uintptr_t) -> uintptr_t;
139
140    fn isl_pw_multi_aff_min_multi_val(pma: uintptr_t) -> uintptr_t;
141
142    fn isl_pw_multi_aff_multi_val_on_domain(domain: uintptr_t, mv: uintptr_t) -> uintptr_t;
143
144    fn isl_pw_multi_aff_n_piece(pma: uintptr_t) -> i32;
145
146    fn isl_pw_multi_aff_neg(pma: uintptr_t) -> uintptr_t;
147
148    fn isl_pw_multi_aff_plain_is_equal(pma1: uintptr_t, pma2: uintptr_t) -> i32;
149
150    fn isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(pma1: uintptr_t,
151                                                                    pma2: uintptr_t)
152                                                                    -> uintptr_t;
153
154    fn isl_pw_multi_aff_product(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
155
156    fn isl_pw_multi_aff_project_domain_on_params(pma: uintptr_t) -> uintptr_t;
157
158    fn isl_pw_multi_aff_project_out_map(space: uintptr_t, type_: i32, first: u32, n: u32)
159                                        -> uintptr_t;
160
161    fn isl_pw_multi_aff_pullback_multi_aff(pma: uintptr_t, ma: uintptr_t) -> uintptr_t;
162
163    fn isl_pw_multi_aff_pullback_pw_multi_aff(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
164
165    fn isl_pw_multi_aff_range_factor_domain(pma: uintptr_t) -> uintptr_t;
166
167    fn isl_pw_multi_aff_range_factor_range(pma: uintptr_t) -> uintptr_t;
168
169    fn isl_pw_multi_aff_range_map(space: uintptr_t) -> uintptr_t;
170
171    fn isl_pw_multi_aff_range_product(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
172
173    fn isl_pw_multi_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
174
175    fn isl_pw_multi_aff_reset_tuple_id(pma: uintptr_t, type_: i32) -> uintptr_t;
176
177    fn isl_pw_multi_aff_reset_user(pma: uintptr_t) -> uintptr_t;
178
179    fn isl_pw_multi_aff_scale_down_multi_val(pma: uintptr_t, mv: uintptr_t) -> uintptr_t;
180
181    fn isl_pw_multi_aff_scale_down_val(pma: uintptr_t, v: uintptr_t) -> uintptr_t;
182
183    fn isl_pw_multi_aff_scale_multi_val(pma: uintptr_t, mv: uintptr_t) -> uintptr_t;
184
185    fn isl_pw_multi_aff_scale_val(pma: uintptr_t, v: uintptr_t) -> uintptr_t;
186
187    fn isl_pw_multi_aff_set_dim_id(pma: uintptr_t, type_: i32, pos: u32, id: uintptr_t)
188                                   -> uintptr_t;
189
190    fn isl_pw_multi_aff_set_pw_aff(pma: uintptr_t, pos: u32, pa: uintptr_t) -> uintptr_t;
191
192    fn isl_pw_multi_aff_set_range_tuple_id(pma: uintptr_t, id: uintptr_t) -> uintptr_t;
193
194    fn isl_pw_multi_aff_set_tuple_id(pma: uintptr_t, type_: i32, id: uintptr_t) -> uintptr_t;
195
196    fn isl_pw_multi_aff_sub(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
197
198    fn isl_pw_multi_aff_subtract_domain(pma: uintptr_t, set: uintptr_t) -> uintptr_t;
199
200    fn isl_pw_multi_aff_to_list(el: uintptr_t) -> uintptr_t;
201
202    fn isl_pw_multi_aff_to_multi_pw_aff(pma: uintptr_t) -> uintptr_t;
203
204    fn isl_pw_multi_aff_to_str(pma: uintptr_t) -> *const c_char;
205
206    fn isl_pw_multi_aff_to_union_pw_multi_aff(pma: uintptr_t) -> uintptr_t;
207
208    fn isl_pw_multi_aff_union_add(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
209
210    fn isl_pw_multi_aff_union_lexmax(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
211
212    fn isl_pw_multi_aff_union_lexmin(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
213
214    fn isl_pw_multi_aff_zero(space: uintptr_t) -> uintptr_t;
215
216}
217
218impl PwMultiAff {
219    /// Wraps `isl_pw_multi_aff_add`.
220    pub fn add(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
221        let pma1 = self;
222        let isl_rs_ctx = pma1.get_ctx();
223        let mut pma1 = pma1;
224        pma1.do_not_free_on_drop();
225        let pma1 = pma1.ptr;
226        let mut pma2 = pma2;
227        pma2.do_not_free_on_drop();
228        let pma2 = pma2.ptr;
229        let isl_rs_result = unsafe { isl_pw_multi_aff_add(pma1, pma2) };
230        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_add_constant_multi_val`.
242    pub fn add_constant_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
243        let pma = self;
244        let isl_rs_ctx = pma.get_ctx();
245        let mut pma = pma;
246        pma.do_not_free_on_drop();
247        let pma = pma.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_pw_multi_aff_add_constant_multi_val(pma, mv) };
252        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_add_constant_val`.
264    pub fn add_constant_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
265        let pma = self;
266        let isl_rs_ctx = pma.get_ctx();
267        let mut pma = pma;
268        pma.do_not_free_on_drop();
269        let pma = pma.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_pw_multi_aff_add_constant_val(pma, v) };
274        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_align_params`.
286    pub fn align_params(self, model: Space) -> Result<PwMultiAff, LibISLError> {
287        let pma = self;
288        let isl_rs_ctx = pma.get_ctx();
289        let mut pma = pma;
290        pma.do_not_free_on_drop();
291        let pma = pma.ptr;
292        let mut model = model;
293        model.do_not_free_on_drop();
294        let model = model.ptr;
295        let isl_rs_result = unsafe { isl_pw_multi_aff_align_params(pma, model) };
296        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
297                                         should_free_on_drop: true };
298        let err = isl_rs_ctx.last_error();
299        if err != Error::None_ {
300            let err_msg = isl_rs_ctx.last_error_msg();
301            isl_rs_ctx.reset_error();
302            return Err(LibISLError::new(err, err_msg));
303        }
304        Ok(isl_rs_result)
305    }
306
307    /// Wraps `isl_pw_multi_aff_alloc`.
308    pub fn alloc(set: Set, maff: MultiAff) -> Result<PwMultiAff, LibISLError> {
309        let isl_rs_ctx = set.get_ctx();
310        let mut set = set;
311        set.do_not_free_on_drop();
312        let set = set.ptr;
313        let mut maff = maff;
314        maff.do_not_free_on_drop();
315        let maff = maff.ptr;
316        let isl_rs_result = unsafe { isl_pw_multi_aff_alloc(set, maff) };
317        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
318                                         should_free_on_drop: true };
319        let err = isl_rs_ctx.last_error();
320        if err != Error::None_ {
321            let err_msg = isl_rs_ctx.last_error_msg();
322            isl_rs_ctx.reset_error();
323            return Err(LibISLError::new(err, err_msg));
324        }
325        Ok(isl_rs_result)
326    }
327
328    /// Wraps `isl_pw_multi_aff_as_map`.
329    pub fn as_map(self) -> Result<Map, LibISLError> {
330        let pma = self;
331        let isl_rs_ctx = pma.get_ctx();
332        let mut pma = pma;
333        pma.do_not_free_on_drop();
334        let pma = pma.ptr;
335        let isl_rs_result = unsafe { isl_pw_multi_aff_as_map(pma) };
336        let isl_rs_result = Map { ptr: isl_rs_result,
337                                  should_free_on_drop: true };
338        let err = isl_rs_ctx.last_error();
339        if err != Error::None_ {
340            let err_msg = isl_rs_ctx.last_error_msg();
341            isl_rs_ctx.reset_error();
342            return Err(LibISLError::new(err, err_msg));
343        }
344        Ok(isl_rs_result)
345    }
346
347    /// Wraps `isl_pw_multi_aff_as_multi_aff`.
348    pub fn as_multi_aff(self) -> Result<MultiAff, LibISLError> {
349        let pma = self;
350        let isl_rs_ctx = pma.get_ctx();
351        let mut pma = pma;
352        pma.do_not_free_on_drop();
353        let pma = pma.ptr;
354        let isl_rs_result = unsafe { isl_pw_multi_aff_as_multi_aff(pma) };
355        let isl_rs_result = MultiAff { ptr: isl_rs_result,
356                                       should_free_on_drop: true };
357        let err = isl_rs_ctx.last_error();
358        if err != Error::None_ {
359            let err_msg = isl_rs_ctx.last_error_msg();
360            isl_rs_ctx.reset_error();
361            return Err(LibISLError::new(err, err_msg));
362        }
363        Ok(isl_rs_result)
364    }
365
366    /// Wraps `isl_pw_multi_aff_as_set`.
367    pub fn as_set(self) -> Result<Set, LibISLError> {
368        let pma = self;
369        let isl_rs_ctx = pma.get_ctx();
370        let mut pma = pma;
371        pma.do_not_free_on_drop();
372        let pma = pma.ptr;
373        let isl_rs_result = unsafe { isl_pw_multi_aff_as_set(pma) };
374        let isl_rs_result = Set { ptr: isl_rs_result,
375                                  should_free_on_drop: true };
376        let err = isl_rs_ctx.last_error();
377        if err != Error::None_ {
378            let err_msg = isl_rs_ctx.last_error_msg();
379            isl_rs_ctx.reset_error();
380            return Err(LibISLError::new(err, err_msg));
381        }
382        Ok(isl_rs_result)
383    }
384
385    /// Wraps `isl_pw_multi_aff_bind_domain`.
386    pub fn bind_domain(self, tuple: MultiId) -> Result<PwMultiAff, LibISLError> {
387        let pma = self;
388        let isl_rs_ctx = pma.get_ctx();
389        let mut pma = pma;
390        pma.do_not_free_on_drop();
391        let pma = pma.ptr;
392        let mut tuple = tuple;
393        tuple.do_not_free_on_drop();
394        let tuple = tuple.ptr;
395        let isl_rs_result = unsafe { isl_pw_multi_aff_bind_domain(pma, tuple) };
396        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
397                                         should_free_on_drop: true };
398        let err = isl_rs_ctx.last_error();
399        if err != Error::None_ {
400            let err_msg = isl_rs_ctx.last_error_msg();
401            isl_rs_ctx.reset_error();
402            return Err(LibISLError::new(err, err_msg));
403        }
404        Ok(isl_rs_result)
405    }
406
407    /// Wraps `isl_pw_multi_aff_bind_domain_wrapped_domain`.
408    pub fn bind_domain_wrapped_domain(self, tuple: MultiId) -> Result<PwMultiAff, LibISLError> {
409        let pma = self;
410        let isl_rs_ctx = pma.get_ctx();
411        let mut pma = pma;
412        pma.do_not_free_on_drop();
413        let pma = pma.ptr;
414        let mut tuple = tuple;
415        tuple.do_not_free_on_drop();
416        let tuple = tuple.ptr;
417        let isl_rs_result = unsafe { isl_pw_multi_aff_bind_domain_wrapped_domain(pma, tuple) };
418        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
419                                         should_free_on_drop: true };
420        let err = isl_rs_ctx.last_error();
421        if err != Error::None_ {
422            let err_msg = isl_rs_ctx.last_error_msg();
423            isl_rs_ctx.reset_error();
424            return Err(LibISLError::new(err, err_msg));
425        }
426        Ok(isl_rs_result)
427    }
428
429    /// Wraps `isl_pw_multi_aff_coalesce`.
430    pub fn coalesce(self) -> Result<PwMultiAff, LibISLError> {
431        let pma = self;
432        let isl_rs_ctx = pma.get_ctx();
433        let mut pma = pma;
434        pma.do_not_free_on_drop();
435        let pma = pma.ptr;
436        let isl_rs_result = unsafe { isl_pw_multi_aff_coalesce(pma) };
437        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_copy`.
449    pub fn copy(&self) -> Result<PwMultiAff, LibISLError> {
450        let pma = self;
451        let isl_rs_ctx = pma.get_ctx();
452        let pma = pma.ptr;
453        let isl_rs_result = unsafe { isl_pw_multi_aff_copy(pma) };
454        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
455                                         should_free_on_drop: true };
456        let err = isl_rs_ctx.last_error();
457        if err != Error::None_ {
458            let err_msg = isl_rs_ctx.last_error_msg();
459            isl_rs_ctx.reset_error();
460            return Err(LibISLError::new(err, err_msg));
461        }
462        Ok(isl_rs_result)
463    }
464
465    /// Wraps `isl_pw_multi_aff_dim`.
466    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
467        let pma = self;
468        let isl_rs_ctx = pma.get_ctx();
469        let pma = pma.ptr;
470        let type_ = type_.to_i32();
471        let isl_rs_result = unsafe { isl_pw_multi_aff_dim(pma, type_) };
472        let err = isl_rs_ctx.last_error();
473        if err != Error::None_ {
474            let err_msg = isl_rs_ctx.last_error_msg();
475            isl_rs_ctx.reset_error();
476            return Err(LibISLError::new(err, err_msg));
477        }
478        Ok(isl_rs_result)
479    }
480
481    /// Wraps `isl_pw_multi_aff_domain`.
482    pub fn domain(self) -> Result<Set, LibISLError> {
483        let pma = self;
484        let isl_rs_ctx = pma.get_ctx();
485        let mut pma = pma;
486        pma.do_not_free_on_drop();
487        let pma = pma.ptr;
488        let isl_rs_result = unsafe { isl_pw_multi_aff_domain(pma) };
489        let isl_rs_result = Set { ptr: isl_rs_result,
490                                  should_free_on_drop: true };
491        let err = isl_rs_ctx.last_error();
492        if err != Error::None_ {
493            let err_msg = isl_rs_ctx.last_error_msg();
494            isl_rs_ctx.reset_error();
495            return Err(LibISLError::new(err, err_msg));
496        }
497        Ok(isl_rs_result)
498    }
499
500    /// Wraps `isl_pw_multi_aff_domain_map`.
501    pub fn domain_map(space: Space) -> Result<PwMultiAff, LibISLError> {
502        let isl_rs_ctx = space.get_ctx();
503        let mut space = space;
504        space.do_not_free_on_drop();
505        let space = space.ptr;
506        let isl_rs_result = unsafe { isl_pw_multi_aff_domain_map(space) };
507        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
508                                         should_free_on_drop: true };
509        let err = isl_rs_ctx.last_error();
510        if err != Error::None_ {
511            let err_msg = isl_rs_ctx.last_error_msg();
512            isl_rs_ctx.reset_error();
513            return Err(LibISLError::new(err, err_msg));
514        }
515        Ok(isl_rs_result)
516    }
517
518    /// Wraps `isl_pw_multi_aff_domain_reverse`.
519    pub fn domain_reverse(self) -> Result<PwMultiAff, LibISLError> {
520        let pma = self;
521        let isl_rs_ctx = pma.get_ctx();
522        let mut pma = pma;
523        pma.do_not_free_on_drop();
524        let pma = pma.ptr;
525        let isl_rs_result = unsafe { isl_pw_multi_aff_domain_reverse(pma) };
526        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
527                                         should_free_on_drop: true };
528        let err = isl_rs_ctx.last_error();
529        if err != Error::None_ {
530            let err_msg = isl_rs_ctx.last_error_msg();
531            isl_rs_ctx.reset_error();
532            return Err(LibISLError::new(err, err_msg));
533        }
534        Ok(isl_rs_result)
535    }
536
537    /// Wraps `isl_pw_multi_aff_drop_dims`.
538    pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<PwMultiAff, LibISLError> {
539        let pma = self;
540        let isl_rs_ctx = pma.get_ctx();
541        let mut pma = pma;
542        pma.do_not_free_on_drop();
543        let pma = pma.ptr;
544        let type_ = type_.to_i32();
545        let isl_rs_result = unsafe { isl_pw_multi_aff_drop_dims(pma, type_, first, n) };
546        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
547                                         should_free_on_drop: true };
548        let err = isl_rs_ctx.last_error();
549        if err != Error::None_ {
550            let err_msg = isl_rs_ctx.last_error_msg();
551            isl_rs_ctx.reset_error();
552            return Err(LibISLError::new(err, err_msg));
553        }
554        Ok(isl_rs_result)
555    }
556
557    /// Wraps `isl_pw_multi_aff_drop_unused_params`.
558    pub fn drop_unused_params(self) -> Result<PwMultiAff, LibISLError> {
559        let pma = self;
560        let isl_rs_ctx = pma.get_ctx();
561        let mut pma = pma;
562        pma.do_not_free_on_drop();
563        let pma = pma.ptr;
564        let isl_rs_result = unsafe { isl_pw_multi_aff_drop_unused_params(pma) };
565        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
566                                         should_free_on_drop: true };
567        let err = isl_rs_ctx.last_error();
568        if err != Error::None_ {
569            let err_msg = isl_rs_ctx.last_error_msg();
570            isl_rs_ctx.reset_error();
571            return Err(LibISLError::new(err, err_msg));
572        }
573        Ok(isl_rs_result)
574    }
575
576    /// Wraps `isl_pw_multi_aff_dump`.
577    pub fn dump(&self) -> Result<(), LibISLError> {
578        let pma = self;
579        let isl_rs_ctx = pma.get_ctx();
580        let pma = pma.ptr;
581        let isl_rs_result = unsafe { isl_pw_multi_aff_dump(pma) };
582        let err = isl_rs_ctx.last_error();
583        if err != Error::None_ {
584            let err_msg = isl_rs_ctx.last_error_msg();
585            isl_rs_ctx.reset_error();
586            return Err(LibISLError::new(err, err_msg));
587        }
588        Ok(isl_rs_result)
589    }
590
591    /// Wraps `isl_pw_multi_aff_empty`.
592    pub fn empty(space: Space) -> Result<PwMultiAff, LibISLError> {
593        let isl_rs_ctx = space.get_ctx();
594        let mut space = space;
595        space.do_not_free_on_drop();
596        let space = space.ptr;
597        let isl_rs_result = unsafe { isl_pw_multi_aff_empty(space) };
598        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
599                                         should_free_on_drop: true };
600        let err = isl_rs_ctx.last_error();
601        if err != Error::None_ {
602            let err_msg = isl_rs_ctx.last_error_msg();
603            isl_rs_ctx.reset_error();
604            return Err(LibISLError::new(err, err_msg));
605        }
606        Ok(isl_rs_result)
607    }
608
609    /// Wraps `isl_pw_multi_aff_find_dim_by_name`.
610    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
611        let pma = self;
612        let isl_rs_ctx = pma.get_ctx();
613        let pma = pma.ptr;
614        let type_ = type_.to_i32();
615        let name = CString::new(name).unwrap();
616        let name = name.as_ptr();
617        let isl_rs_result = unsafe { isl_pw_multi_aff_find_dim_by_name(pma, type_, name) };
618        let err = isl_rs_ctx.last_error();
619        if err != Error::None_ {
620            let err_msg = isl_rs_ctx.last_error_msg();
621            isl_rs_ctx.reset_error();
622            return Err(LibISLError::new(err, err_msg));
623        }
624        Ok(isl_rs_result)
625    }
626
627    /// Wraps `isl_pw_multi_aff_fix_si`.
628    pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> Result<PwMultiAff, LibISLError> {
629        let pma = self;
630        let isl_rs_ctx = pma.get_ctx();
631        let mut pma = pma;
632        pma.do_not_free_on_drop();
633        let pma = pma.ptr;
634        let type_ = type_.to_i32();
635        let isl_rs_result = unsafe { isl_pw_multi_aff_fix_si(pma, type_, pos, value) };
636        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
637                                         should_free_on_drop: true };
638        let err = isl_rs_ctx.last_error();
639        if err != Error::None_ {
640            let err_msg = isl_rs_ctx.last_error_msg();
641            isl_rs_ctx.reset_error();
642            return Err(LibISLError::new(err, err_msg));
643        }
644        Ok(isl_rs_result)
645    }
646
647    /// Wraps `isl_pw_multi_aff_flat_range_product`.
648    pub fn flat_range_product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
649        let pma1 = self;
650        let isl_rs_ctx = pma1.get_ctx();
651        let mut pma1 = pma1;
652        pma1.do_not_free_on_drop();
653        let pma1 = pma1.ptr;
654        let mut pma2 = pma2;
655        pma2.do_not_free_on_drop();
656        let pma2 = pma2.ptr;
657        let isl_rs_result = unsafe { isl_pw_multi_aff_flat_range_product(pma1, pma2) };
658        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_free`.
670    pub fn free(self) -> Result<PwMultiAff, LibISLError> {
671        let pma = self;
672        let isl_rs_ctx = pma.get_ctx();
673        let mut pma = pma;
674        pma.do_not_free_on_drop();
675        let pma = pma.ptr;
676        let isl_rs_result = unsafe { isl_pw_multi_aff_free(pma) };
677        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_from_domain`.
689    pub fn from_domain(set: Set) -> Result<PwMultiAff, LibISLError> {
690        let isl_rs_ctx = set.get_ctx();
691        let mut set = set;
692        set.do_not_free_on_drop();
693        let set = set.ptr;
694        let isl_rs_result = unsafe { isl_pw_multi_aff_from_domain(set) };
695        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_from_map`.
707    pub fn from_map(map: Map) -> Result<PwMultiAff, LibISLError> {
708        let isl_rs_ctx = map.get_ctx();
709        let mut map = map;
710        map.do_not_free_on_drop();
711        let map = map.ptr;
712        let isl_rs_result = unsafe { isl_pw_multi_aff_from_map(map) };
713        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
714                                         should_free_on_drop: true };
715        let err = isl_rs_ctx.last_error();
716        if err != Error::None_ {
717            let err_msg = isl_rs_ctx.last_error_msg();
718            isl_rs_ctx.reset_error();
719            return Err(LibISLError::new(err, err_msg));
720        }
721        Ok(isl_rs_result)
722    }
723
724    /// Wraps `isl_pw_multi_aff_from_multi_aff`.
725    pub fn from_multi_aff(ma: MultiAff) -> Result<PwMultiAff, LibISLError> {
726        let isl_rs_ctx = ma.get_ctx();
727        let mut ma = ma;
728        ma.do_not_free_on_drop();
729        let ma = ma.ptr;
730        let isl_rs_result = unsafe { isl_pw_multi_aff_from_multi_aff(ma) };
731        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
732                                         should_free_on_drop: true };
733        let err = isl_rs_ctx.last_error();
734        if err != Error::None_ {
735            let err_msg = isl_rs_ctx.last_error_msg();
736            isl_rs_ctx.reset_error();
737            return Err(LibISLError::new(err, err_msg));
738        }
739        Ok(isl_rs_result)
740    }
741
742    /// Wraps `isl_pw_multi_aff_from_multi_pw_aff`.
743    pub fn from_multi_pw_aff(mpa: MultiPwAff) -> Result<PwMultiAff, LibISLError> {
744        let isl_rs_ctx = mpa.get_ctx();
745        let mut mpa = mpa;
746        mpa.do_not_free_on_drop();
747        let mpa = mpa.ptr;
748        let isl_rs_result = unsafe { isl_pw_multi_aff_from_multi_pw_aff(mpa) };
749        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
750                                         should_free_on_drop: true };
751        let err = isl_rs_ctx.last_error();
752        if err != Error::None_ {
753            let err_msg = isl_rs_ctx.last_error_msg();
754            isl_rs_ctx.reset_error();
755            return Err(LibISLError::new(err, err_msg));
756        }
757        Ok(isl_rs_result)
758    }
759
760    /// Wraps `isl_pw_multi_aff_from_pw_aff`.
761    pub fn from_pw_aff(pa: PwAff) -> Result<PwMultiAff, LibISLError> {
762        let isl_rs_ctx = pa.get_ctx();
763        let mut pa = pa;
764        pa.do_not_free_on_drop();
765        let pa = pa.ptr;
766        let isl_rs_result = unsafe { isl_pw_multi_aff_from_pw_aff(pa) };
767        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
768                                         should_free_on_drop: true };
769        let err = isl_rs_ctx.last_error();
770        if err != Error::None_ {
771            let err_msg = isl_rs_ctx.last_error_msg();
772            isl_rs_ctx.reset_error();
773            return Err(LibISLError::new(err, err_msg));
774        }
775        Ok(isl_rs_result)
776    }
777
778    /// Wraps `isl_pw_multi_aff_from_set`.
779    pub fn from_set(set: Set) -> Result<PwMultiAff, LibISLError> {
780        let isl_rs_ctx = set.get_ctx();
781        let mut set = set;
782        set.do_not_free_on_drop();
783        let set = set.ptr;
784        let isl_rs_result = unsafe { isl_pw_multi_aff_from_set(set) };
785        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
786                                         should_free_on_drop: true };
787        let err = isl_rs_ctx.last_error();
788        if err != Error::None_ {
789            let err_msg = isl_rs_ctx.last_error_msg();
790            isl_rs_ctx.reset_error();
791            return Err(LibISLError::new(err, err_msg));
792        }
793        Ok(isl_rs_result)
794    }
795
796    /// Wraps `isl_pw_multi_aff_get_at`.
797    pub fn get_at(&self, pos: i32) -> Result<PwAff, LibISLError> {
798        let pma = self;
799        let isl_rs_ctx = pma.get_ctx();
800        let pma = pma.ptr;
801        let isl_rs_result = unsafe { isl_pw_multi_aff_get_at(pma, pos) };
802        let isl_rs_result = PwAff { ptr: isl_rs_result,
803                                    should_free_on_drop: true };
804        let err = isl_rs_ctx.last_error();
805        if err != Error::None_ {
806            let err_msg = isl_rs_ctx.last_error_msg();
807            isl_rs_ctx.reset_error();
808            return Err(LibISLError::new(err, err_msg));
809        }
810        Ok(isl_rs_result)
811    }
812
813    /// Wraps `isl_pw_multi_aff_get_ctx`.
814    pub fn get_ctx(&self) -> Context {
815        let pma = self;
816        let pma = pma.ptr;
817        let isl_rs_result = unsafe { isl_pw_multi_aff_get_ctx(pma) };
818        let isl_rs_result = Context { ptr: isl_rs_result,
819                                      should_free_on_drop: false };
820        isl_rs_result
821    }
822
823    /// Wraps `isl_pw_multi_aff_get_dim_id`.
824    pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
825        let pma = self;
826        let isl_rs_ctx = pma.get_ctx();
827        let pma = pma.ptr;
828        let type_ = type_.to_i32();
829        let isl_rs_result = unsafe { isl_pw_multi_aff_get_dim_id(pma, type_, pos) };
830        let isl_rs_result = Id { ptr: isl_rs_result,
831                                 should_free_on_drop: true };
832        let err = isl_rs_ctx.last_error();
833        if err != Error::None_ {
834            let err_msg = isl_rs_ctx.last_error_msg();
835            isl_rs_ctx.reset_error();
836            return Err(LibISLError::new(err, err_msg));
837        }
838        Ok(isl_rs_result)
839    }
840
841    /// Wraps `isl_pw_multi_aff_get_dim_name`.
842    pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
843        let pma = self;
844        let isl_rs_ctx = pma.get_ctx();
845        let pma = pma.ptr;
846        let type_ = type_.to_i32();
847        let isl_rs_result = unsafe { isl_pw_multi_aff_get_dim_name(pma, type_, pos) };
848        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
849        let isl_rs_result = isl_rs_result.to_str().unwrap();
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_pw_multi_aff_get_domain_space`.
860    pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
861        let pma = self;
862        let isl_rs_ctx = pma.get_ctx();
863        let pma = pma.ptr;
864        let isl_rs_result = unsafe { isl_pw_multi_aff_get_domain_space(pma) };
865        let isl_rs_result = Space { 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_pw_multi_aff_get_pw_aff`.
877    pub fn get_pw_aff(&self, pos: i32) -> Result<PwAff, LibISLError> {
878        let pma = self;
879        let isl_rs_ctx = pma.get_ctx();
880        let pma = pma.ptr;
881        let isl_rs_result = unsafe { isl_pw_multi_aff_get_pw_aff(pma, pos) };
882        let isl_rs_result = PwAff { 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_pw_multi_aff_get_range_tuple_id`.
894    pub fn get_range_tuple_id(&self) -> Result<Id, LibISLError> {
895        let pma = self;
896        let isl_rs_ctx = pma.get_ctx();
897        let pma = pma.ptr;
898        let isl_rs_result = unsafe { isl_pw_multi_aff_get_range_tuple_id(pma) };
899        let isl_rs_result = Id { ptr: isl_rs_result,
900                                 should_free_on_drop: true };
901        let err = isl_rs_ctx.last_error();
902        if err != Error::None_ {
903            let err_msg = isl_rs_ctx.last_error_msg();
904            isl_rs_ctx.reset_error();
905            return Err(LibISLError::new(err, err_msg));
906        }
907        Ok(isl_rs_result)
908    }
909
910    /// Wraps `isl_pw_multi_aff_get_space`.
911    pub fn get_space(&self) -> Result<Space, LibISLError> {
912        let pma = self;
913        let isl_rs_ctx = pma.get_ctx();
914        let pma = pma.ptr;
915        let isl_rs_result = unsafe { isl_pw_multi_aff_get_space(pma) };
916        let isl_rs_result = Space { ptr: isl_rs_result,
917                                    should_free_on_drop: true };
918        let err = isl_rs_ctx.last_error();
919        if err != Error::None_ {
920            let err_msg = isl_rs_ctx.last_error_msg();
921            isl_rs_ctx.reset_error();
922            return Err(LibISLError::new(err, err_msg));
923        }
924        Ok(isl_rs_result)
925    }
926
927    /// Wraps `isl_pw_multi_aff_get_tuple_id`.
928    pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
929        let pma = self;
930        let isl_rs_ctx = pma.get_ctx();
931        let pma = pma.ptr;
932        let type_ = type_.to_i32();
933        let isl_rs_result = unsafe { isl_pw_multi_aff_get_tuple_id(pma, type_) };
934        let isl_rs_result = Id { ptr: isl_rs_result,
935                                 should_free_on_drop: true };
936        let err = isl_rs_ctx.last_error();
937        if err != Error::None_ {
938            let err_msg = isl_rs_ctx.last_error_msg();
939            isl_rs_ctx.reset_error();
940            return Err(LibISLError::new(err, err_msg));
941        }
942        Ok(isl_rs_result)
943    }
944
945    /// Wraps `isl_pw_multi_aff_get_tuple_name`.
946    pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
947        let pma = self;
948        let isl_rs_ctx = pma.get_ctx();
949        let pma = pma.ptr;
950        let type_ = type_.to_i32();
951        let isl_rs_result = unsafe { isl_pw_multi_aff_get_tuple_name(pma, type_) };
952        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
953        let isl_rs_result = isl_rs_result.to_str().unwrap();
954        let err = isl_rs_ctx.last_error();
955        if err != Error::None_ {
956            let err_msg = isl_rs_ctx.last_error_msg();
957            isl_rs_ctx.reset_error();
958            return Err(LibISLError::new(err, err_msg));
959        }
960        Ok(isl_rs_result)
961    }
962
963    /// Wraps `isl_pw_multi_aff_gist`.
964    pub fn gist(self, set: Set) -> Result<PwMultiAff, LibISLError> {
965        let pma = self;
966        let isl_rs_ctx = pma.get_ctx();
967        let mut pma = pma;
968        pma.do_not_free_on_drop();
969        let pma = pma.ptr;
970        let mut set = set;
971        set.do_not_free_on_drop();
972        let set = set.ptr;
973        let isl_rs_result = unsafe { isl_pw_multi_aff_gist(pma, set) };
974        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
975                                         should_free_on_drop: true };
976        let err = isl_rs_ctx.last_error();
977        if err != Error::None_ {
978            let err_msg = isl_rs_ctx.last_error_msg();
979            isl_rs_ctx.reset_error();
980            return Err(LibISLError::new(err, err_msg));
981        }
982        Ok(isl_rs_result)
983    }
984
985    /// Wraps `isl_pw_multi_aff_gist_params`.
986    pub fn gist_params(self, set: Set) -> Result<PwMultiAff, LibISLError> {
987        let pma = self;
988        let isl_rs_ctx = pma.get_ctx();
989        let mut pma = pma;
990        pma.do_not_free_on_drop();
991        let pma = pma.ptr;
992        let mut set = set;
993        set.do_not_free_on_drop();
994        let set = set.ptr;
995        let isl_rs_result = unsafe { isl_pw_multi_aff_gist_params(pma, set) };
996        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
997                                         should_free_on_drop: true };
998        let err = isl_rs_ctx.last_error();
999        if err != Error::None_ {
1000            let err_msg = isl_rs_ctx.last_error_msg();
1001            isl_rs_ctx.reset_error();
1002            return Err(LibISLError::new(err, err_msg));
1003        }
1004        Ok(isl_rs_result)
1005    }
1006
1007    /// Wraps `isl_pw_multi_aff_has_range_tuple_id`.
1008    pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
1009        let pma = self;
1010        let isl_rs_ctx = pma.get_ctx();
1011        let pma = pma.ptr;
1012        let isl_rs_result = unsafe { isl_pw_multi_aff_has_range_tuple_id(pma) };
1013        let isl_rs_result = match isl_rs_result {
1014            0 => false,
1015            1 => true,
1016            _ => {
1017                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1018            }
1019        };
1020        let err = isl_rs_ctx.last_error();
1021        if err != Error::None_ {
1022            let err_msg = isl_rs_ctx.last_error_msg();
1023            isl_rs_ctx.reset_error();
1024            return Err(LibISLError::new(err, err_msg));
1025        }
1026        Ok(isl_rs_result)
1027    }
1028
1029    /// Wraps `isl_pw_multi_aff_has_tuple_id`.
1030    pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
1031        let pma = self;
1032        let isl_rs_ctx = pma.get_ctx();
1033        let pma = pma.ptr;
1034        let type_ = type_.to_i32();
1035        let isl_rs_result = unsafe { isl_pw_multi_aff_has_tuple_id(pma, type_) };
1036        let isl_rs_result = match isl_rs_result {
1037            0 => false,
1038            1 => true,
1039            _ => {
1040                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1041            }
1042        };
1043        let err = isl_rs_ctx.last_error();
1044        if err != Error::None_ {
1045            let err_msg = isl_rs_ctx.last_error_msg();
1046            isl_rs_ctx.reset_error();
1047            return Err(LibISLError::new(err, err_msg));
1048        }
1049        Ok(isl_rs_result)
1050    }
1051
1052    /// Wraps `isl_pw_multi_aff_has_tuple_name`.
1053    pub fn has_tuple_name(&self, type_: DimType) -> Result<bool, LibISLError> {
1054        let pma = self;
1055        let isl_rs_ctx = pma.get_ctx();
1056        let pma = pma.ptr;
1057        let type_ = type_.to_i32();
1058        let isl_rs_result = unsafe { isl_pw_multi_aff_has_tuple_name(pma, type_) };
1059        let isl_rs_result = match isl_rs_result {
1060            0 => false,
1061            1 => true,
1062            _ => {
1063                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1064            }
1065        };
1066        let err = isl_rs_ctx.last_error();
1067        if err != Error::None_ {
1068            let err_msg = isl_rs_ctx.last_error_msg();
1069            isl_rs_ctx.reset_error();
1070            return Err(LibISLError::new(err, err_msg));
1071        }
1072        Ok(isl_rs_result)
1073    }
1074
1075    /// Wraps `isl_pw_multi_aff_identity`.
1076    pub fn identity(space: Space) -> Result<PwMultiAff, LibISLError> {
1077        let isl_rs_ctx = space.get_ctx();
1078        let mut space = space;
1079        space.do_not_free_on_drop();
1080        let space = space.ptr;
1081        let isl_rs_result = unsafe { isl_pw_multi_aff_identity(space) };
1082        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_identity_on_domain_space`.
1094    pub fn identity_on_domain_space(space: Space) -> Result<PwMultiAff, LibISLError> {
1095        let isl_rs_ctx = space.get_ctx();
1096        let mut space = space;
1097        space.do_not_free_on_drop();
1098        let space = space.ptr;
1099        let isl_rs_result = unsafe { isl_pw_multi_aff_identity_on_domain_space(space) };
1100        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1101                                         should_free_on_drop: true };
1102        let err = isl_rs_ctx.last_error();
1103        if err != Error::None_ {
1104            let err_msg = isl_rs_ctx.last_error_msg();
1105            isl_rs_ctx.reset_error();
1106            return Err(LibISLError::new(err, err_msg));
1107        }
1108        Ok(isl_rs_result)
1109    }
1110
1111    /// Wraps `isl_pw_multi_aff_insert_domain`.
1112    pub fn insert_domain(self, domain: Space) -> Result<PwMultiAff, LibISLError> {
1113        let pma = self;
1114        let isl_rs_ctx = pma.get_ctx();
1115        let mut pma = pma;
1116        pma.do_not_free_on_drop();
1117        let pma = pma.ptr;
1118        let mut domain = domain;
1119        domain.do_not_free_on_drop();
1120        let domain = domain.ptr;
1121        let isl_rs_result = unsafe { isl_pw_multi_aff_insert_domain(pma, domain) };
1122        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1123                                         should_free_on_drop: true };
1124        let err = isl_rs_ctx.last_error();
1125        if err != Error::None_ {
1126            let err_msg = isl_rs_ctx.last_error_msg();
1127            isl_rs_ctx.reset_error();
1128            return Err(LibISLError::new(err, err_msg));
1129        }
1130        Ok(isl_rs_result)
1131    }
1132
1133    /// Wraps `isl_pw_multi_aff_intersect_domain`.
1134    pub fn intersect_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1135        let pma = self;
1136        let isl_rs_ctx = pma.get_ctx();
1137        let mut pma = pma;
1138        pma.do_not_free_on_drop();
1139        let pma = pma.ptr;
1140        let mut set = set;
1141        set.do_not_free_on_drop();
1142        let set = set.ptr;
1143        let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain(pma, set) };
1144        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1145                                         should_free_on_drop: true };
1146        let err = isl_rs_ctx.last_error();
1147        if err != Error::None_ {
1148            let err_msg = isl_rs_ctx.last_error_msg();
1149            isl_rs_ctx.reset_error();
1150            return Err(LibISLError::new(err, err_msg));
1151        }
1152        Ok(isl_rs_result)
1153    }
1154
1155    /// Wraps `isl_pw_multi_aff_intersect_domain_wrapped_domain`.
1156    pub fn intersect_domain_wrapped_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1157        let pma = self;
1158        let isl_rs_ctx = pma.get_ctx();
1159        let mut pma = pma;
1160        pma.do_not_free_on_drop();
1161        let pma = pma.ptr;
1162        let mut set = set;
1163        set.do_not_free_on_drop();
1164        let set = set.ptr;
1165        let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain_wrapped_domain(pma, set) };
1166        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1167                                         should_free_on_drop: true };
1168        let err = isl_rs_ctx.last_error();
1169        if err != Error::None_ {
1170            let err_msg = isl_rs_ctx.last_error_msg();
1171            isl_rs_ctx.reset_error();
1172            return Err(LibISLError::new(err, err_msg));
1173        }
1174        Ok(isl_rs_result)
1175    }
1176
1177    /// Wraps `isl_pw_multi_aff_intersect_domain_wrapped_range`.
1178    pub fn intersect_domain_wrapped_range(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1179        let pma = self;
1180        let isl_rs_ctx = pma.get_ctx();
1181        let mut pma = pma;
1182        pma.do_not_free_on_drop();
1183        let pma = pma.ptr;
1184        let mut set = set;
1185        set.do_not_free_on_drop();
1186        let set = set.ptr;
1187        let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain_wrapped_range(pma, set) };
1188        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1189                                         should_free_on_drop: true };
1190        let err = isl_rs_ctx.last_error();
1191        if err != Error::None_ {
1192            let err_msg = isl_rs_ctx.last_error_msg();
1193            isl_rs_ctx.reset_error();
1194            return Err(LibISLError::new(err, err_msg));
1195        }
1196        Ok(isl_rs_result)
1197    }
1198
1199    /// Wraps `isl_pw_multi_aff_intersect_params`.
1200    pub fn intersect_params(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1201        let pma = self;
1202        let isl_rs_ctx = pma.get_ctx();
1203        let mut pma = pma;
1204        pma.do_not_free_on_drop();
1205        let pma = pma.ptr;
1206        let mut set = set;
1207        set.do_not_free_on_drop();
1208        let set = set.ptr;
1209        let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_params(pma, set) };
1210        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1211                                         should_free_on_drop: true };
1212        let err = isl_rs_ctx.last_error();
1213        if err != Error::None_ {
1214            let err_msg = isl_rs_ctx.last_error_msg();
1215            isl_rs_ctx.reset_error();
1216            return Err(LibISLError::new(err, err_msg));
1217        }
1218        Ok(isl_rs_result)
1219    }
1220
1221    /// Wraps `isl_pw_multi_aff_involves_dims`.
1222    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1223        let pma = self;
1224        let isl_rs_ctx = pma.get_ctx();
1225        let pma = pma.ptr;
1226        let type_ = type_.to_i32();
1227        let isl_rs_result = unsafe { isl_pw_multi_aff_involves_dims(pma, type_, first, n) };
1228        let isl_rs_result = match isl_rs_result {
1229            0 => false,
1230            1 => true,
1231            _ => {
1232                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1233            }
1234        };
1235        let err = isl_rs_ctx.last_error();
1236        if err != Error::None_ {
1237            let err_msg = isl_rs_ctx.last_error_msg();
1238            isl_rs_ctx.reset_error();
1239            return Err(LibISLError::new(err, err_msg));
1240        }
1241        Ok(isl_rs_result)
1242    }
1243
1244    /// Wraps `isl_pw_multi_aff_involves_locals`.
1245    pub fn involves_locals(&self) -> Result<bool, LibISLError> {
1246        let pma = self;
1247        let isl_rs_ctx = pma.get_ctx();
1248        let pma = pma.ptr;
1249        let isl_rs_result = unsafe { isl_pw_multi_aff_involves_locals(pma) };
1250        let isl_rs_result = match isl_rs_result {
1251            0 => false,
1252            1 => true,
1253            _ => {
1254                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1255            }
1256        };
1257        let err = isl_rs_ctx.last_error();
1258        if err != Error::None_ {
1259            let err_msg = isl_rs_ctx.last_error_msg();
1260            isl_rs_ctx.reset_error();
1261            return Err(LibISLError::new(err, err_msg));
1262        }
1263        Ok(isl_rs_result)
1264    }
1265
1266    /// Wraps `isl_pw_multi_aff_involves_nan`.
1267    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1268        let pma = self;
1269        let isl_rs_ctx = pma.get_ctx();
1270        let pma = pma.ptr;
1271        let isl_rs_result = unsafe { isl_pw_multi_aff_involves_nan(pma) };
1272        let isl_rs_result = match isl_rs_result {
1273            0 => false,
1274            1 => true,
1275            _ => {
1276                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1277            }
1278        };
1279        let err = isl_rs_ctx.last_error();
1280        if err != Error::None_ {
1281            let err_msg = isl_rs_ctx.last_error_msg();
1282            isl_rs_ctx.reset_error();
1283            return Err(LibISLError::new(err, err_msg));
1284        }
1285        Ok(isl_rs_result)
1286    }
1287
1288    /// Wraps `isl_pw_multi_aff_involves_param_id`.
1289    pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
1290        let pma = self;
1291        let isl_rs_ctx = pma.get_ctx();
1292        let pma = pma.ptr;
1293        let id = id.ptr;
1294        let isl_rs_result = unsafe { isl_pw_multi_aff_involves_param_id(pma, id) };
1295        let isl_rs_result = match isl_rs_result {
1296            0 => false,
1297            1 => true,
1298            _ => {
1299                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1300            }
1301        };
1302        let err = isl_rs_ctx.last_error();
1303        if err != Error::None_ {
1304            let err_msg = isl_rs_ctx.last_error_msg();
1305            isl_rs_ctx.reset_error();
1306            return Err(LibISLError::new(err, err_msg));
1307        }
1308        Ok(isl_rs_result)
1309    }
1310
1311    /// Wraps `isl_pw_multi_aff_is_equal`.
1312    pub fn is_equal(&self, pma2: &PwMultiAff) -> Result<bool, LibISLError> {
1313        let pma1 = self;
1314        let isl_rs_ctx = pma1.get_ctx();
1315        let pma1 = pma1.ptr;
1316        let pma2 = pma2.ptr;
1317        let isl_rs_result = unsafe { isl_pw_multi_aff_is_equal(pma1, pma2) };
1318        let isl_rs_result = match isl_rs_result {
1319            0 => false,
1320            1 => true,
1321            _ => {
1322                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1323            }
1324        };
1325        let err = isl_rs_ctx.last_error();
1326        if err != Error::None_ {
1327            let err_msg = isl_rs_ctx.last_error_msg();
1328            isl_rs_ctx.reset_error();
1329            return Err(LibISLError::new(err, err_msg));
1330        }
1331        Ok(isl_rs_result)
1332    }
1333
1334    /// Wraps `isl_pw_multi_aff_isa_multi_aff`.
1335    pub fn isa_multi_aff(&self) -> Result<bool, LibISLError> {
1336        let pma = self;
1337        let isl_rs_ctx = pma.get_ctx();
1338        let pma = pma.ptr;
1339        let isl_rs_result = unsafe { isl_pw_multi_aff_isa_multi_aff(pma) };
1340        let isl_rs_result = match isl_rs_result {
1341            0 => false,
1342            1 => true,
1343            _ => {
1344                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1345            }
1346        };
1347        let err = isl_rs_ctx.last_error();
1348        if err != Error::None_ {
1349            let err_msg = isl_rs_ctx.last_error_msg();
1350            isl_rs_ctx.reset_error();
1351            return Err(LibISLError::new(err, err_msg));
1352        }
1353        Ok(isl_rs_result)
1354    }
1355
1356    /// Wraps `isl_pw_multi_aff_max_multi_val`.
1357    pub fn max_multi_val(self) -> Result<MultiVal, LibISLError> {
1358        let pma = self;
1359        let isl_rs_ctx = pma.get_ctx();
1360        let mut pma = pma;
1361        pma.do_not_free_on_drop();
1362        let pma = pma.ptr;
1363        let isl_rs_result = unsafe { isl_pw_multi_aff_max_multi_val(pma) };
1364        let isl_rs_result = MultiVal { ptr: isl_rs_result,
1365                                       should_free_on_drop: true };
1366        let err = isl_rs_ctx.last_error();
1367        if err != Error::None_ {
1368            let err_msg = isl_rs_ctx.last_error_msg();
1369            isl_rs_ctx.reset_error();
1370            return Err(LibISLError::new(err, err_msg));
1371        }
1372        Ok(isl_rs_result)
1373    }
1374
1375    /// Wraps `isl_pw_multi_aff_min_multi_val`.
1376    pub fn min_multi_val(self) -> Result<MultiVal, LibISLError> {
1377        let pma = self;
1378        let isl_rs_ctx = pma.get_ctx();
1379        let mut pma = pma;
1380        pma.do_not_free_on_drop();
1381        let pma = pma.ptr;
1382        let isl_rs_result = unsafe { isl_pw_multi_aff_min_multi_val(pma) };
1383        let isl_rs_result = MultiVal { ptr: isl_rs_result,
1384                                       should_free_on_drop: true };
1385        let err = isl_rs_ctx.last_error();
1386        if err != Error::None_ {
1387            let err_msg = isl_rs_ctx.last_error_msg();
1388            isl_rs_ctx.reset_error();
1389            return Err(LibISLError::new(err, err_msg));
1390        }
1391        Ok(isl_rs_result)
1392    }
1393
1394    /// Wraps `isl_pw_multi_aff_multi_val_on_domain`.
1395    pub fn multi_val_on_domain(domain: Set, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1396        let isl_rs_ctx = domain.get_ctx();
1397        let mut domain = domain;
1398        domain.do_not_free_on_drop();
1399        let domain = domain.ptr;
1400        let mut mv = mv;
1401        mv.do_not_free_on_drop();
1402        let mv = mv.ptr;
1403        let isl_rs_result = unsafe { isl_pw_multi_aff_multi_val_on_domain(domain, mv) };
1404        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1405                                         should_free_on_drop: true };
1406        let err = isl_rs_ctx.last_error();
1407        if err != Error::None_ {
1408            let err_msg = isl_rs_ctx.last_error_msg();
1409            isl_rs_ctx.reset_error();
1410            return Err(LibISLError::new(err, err_msg));
1411        }
1412        Ok(isl_rs_result)
1413    }
1414
1415    /// Wraps `isl_pw_multi_aff_n_piece`.
1416    pub fn n_piece(&self) -> Result<i32, LibISLError> {
1417        let pma = self;
1418        let isl_rs_ctx = pma.get_ctx();
1419        let pma = pma.ptr;
1420        let isl_rs_result = unsafe { isl_pw_multi_aff_n_piece(pma) };
1421        let err = isl_rs_ctx.last_error();
1422        if err != Error::None_ {
1423            let err_msg = isl_rs_ctx.last_error_msg();
1424            isl_rs_ctx.reset_error();
1425            return Err(LibISLError::new(err, err_msg));
1426        }
1427        Ok(isl_rs_result)
1428    }
1429
1430    /// Wraps `isl_pw_multi_aff_neg`.
1431    pub fn neg(self) -> Result<PwMultiAff, LibISLError> {
1432        let pma = self;
1433        let isl_rs_ctx = pma.get_ctx();
1434        let mut pma = pma;
1435        pma.do_not_free_on_drop();
1436        let pma = pma.ptr;
1437        let isl_rs_result = unsafe { isl_pw_multi_aff_neg(pma) };
1438        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1439                                         should_free_on_drop: true };
1440        let err = isl_rs_ctx.last_error();
1441        if err != Error::None_ {
1442            let err_msg = isl_rs_ctx.last_error_msg();
1443            isl_rs_ctx.reset_error();
1444            return Err(LibISLError::new(err, err_msg));
1445        }
1446        Ok(isl_rs_result)
1447    }
1448
1449    /// Wraps `isl_pw_multi_aff_plain_is_equal`.
1450    pub fn plain_is_equal(&self, pma2: &PwMultiAff) -> Result<bool, LibISLError> {
1451        let pma1 = self;
1452        let isl_rs_ctx = pma1.get_ctx();
1453        let pma1 = pma1.ptr;
1454        let pma2 = pma2.ptr;
1455        let isl_rs_result = unsafe { isl_pw_multi_aff_plain_is_equal(pma1, pma2) };
1456        let isl_rs_result = match isl_rs_result {
1457            0 => false,
1458            1 => true,
1459            _ => {
1460                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1461            }
1462        };
1463        let err = isl_rs_ctx.last_error();
1464        if err != Error::None_ {
1465            let err_msg = isl_rs_ctx.last_error_msg();
1466            isl_rs_ctx.reset_error();
1467            return Err(LibISLError::new(err, err_msg));
1468        }
1469        Ok(isl_rs_result)
1470    }
1471
1472    /// Wraps `isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff`.
1473    pub fn preimage_domain_wrapped_domain_pw_multi_aff(self, pma2: PwMultiAff)
1474                                                       -> Result<PwMultiAff, LibISLError> {
1475        let pma1 = self;
1476        let isl_rs_ctx = pma1.get_ctx();
1477        let mut pma1 = pma1;
1478        pma1.do_not_free_on_drop();
1479        let pma1 = pma1.ptr;
1480        let mut pma2 = pma2;
1481        pma2.do_not_free_on_drop();
1482        let pma2 = pma2.ptr;
1483        let isl_rs_result =
1484            unsafe { isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(pma1, pma2) };
1485        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1486                                         should_free_on_drop: true };
1487        let err = isl_rs_ctx.last_error();
1488        if err != Error::None_ {
1489            let err_msg = isl_rs_ctx.last_error_msg();
1490            isl_rs_ctx.reset_error();
1491            return Err(LibISLError::new(err, err_msg));
1492        }
1493        Ok(isl_rs_result)
1494    }
1495
1496    /// Wraps `isl_pw_multi_aff_product`.
1497    pub fn product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1498        let pma1 = self;
1499        let isl_rs_ctx = pma1.get_ctx();
1500        let mut pma1 = pma1;
1501        pma1.do_not_free_on_drop();
1502        let pma1 = pma1.ptr;
1503        let mut pma2 = pma2;
1504        pma2.do_not_free_on_drop();
1505        let pma2 = pma2.ptr;
1506        let isl_rs_result = unsafe { isl_pw_multi_aff_product(pma1, pma2) };
1507        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_project_domain_on_params`.
1519    pub fn project_domain_on_params(self) -> Result<PwMultiAff, LibISLError> {
1520        let pma = self;
1521        let isl_rs_ctx = pma.get_ctx();
1522        let mut pma = pma;
1523        pma.do_not_free_on_drop();
1524        let pma = pma.ptr;
1525        let isl_rs_result = unsafe { isl_pw_multi_aff_project_domain_on_params(pma) };
1526        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_project_out_map`.
1538    pub fn project_out_map(space: Space, type_: DimType, first: u32, n: u32)
1539                           -> Result<PwMultiAff, LibISLError> {
1540        let isl_rs_ctx = space.get_ctx();
1541        let mut space = space;
1542        space.do_not_free_on_drop();
1543        let space = space.ptr;
1544        let type_ = type_.to_i32();
1545        let isl_rs_result = unsafe { isl_pw_multi_aff_project_out_map(space, type_, first, n) };
1546        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1547                                         should_free_on_drop: true };
1548        let err = isl_rs_ctx.last_error();
1549        if err != Error::None_ {
1550            let err_msg = isl_rs_ctx.last_error_msg();
1551            isl_rs_ctx.reset_error();
1552            return Err(LibISLError::new(err, err_msg));
1553        }
1554        Ok(isl_rs_result)
1555    }
1556
1557    /// Wraps `isl_pw_multi_aff_pullback_multi_aff`.
1558    pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<PwMultiAff, LibISLError> {
1559        let pma = self;
1560        let isl_rs_ctx = pma.get_ctx();
1561        let mut pma = pma;
1562        pma.do_not_free_on_drop();
1563        let pma = pma.ptr;
1564        let mut ma = ma;
1565        ma.do_not_free_on_drop();
1566        let ma = ma.ptr;
1567        let isl_rs_result = unsafe { isl_pw_multi_aff_pullback_multi_aff(pma, ma) };
1568        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1569                                         should_free_on_drop: true };
1570        let err = isl_rs_ctx.last_error();
1571        if err != Error::None_ {
1572            let err_msg = isl_rs_ctx.last_error_msg();
1573            isl_rs_ctx.reset_error();
1574            return Err(LibISLError::new(err, err_msg));
1575        }
1576        Ok(isl_rs_result)
1577    }
1578
1579    /// Wraps `isl_pw_multi_aff_pullback_pw_multi_aff`.
1580    pub fn pullback_pw_multi_aff(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1581        let pma1 = self;
1582        let isl_rs_ctx = pma1.get_ctx();
1583        let mut pma1 = pma1;
1584        pma1.do_not_free_on_drop();
1585        let pma1 = pma1.ptr;
1586        let mut pma2 = pma2;
1587        pma2.do_not_free_on_drop();
1588        let pma2 = pma2.ptr;
1589        let isl_rs_result = unsafe { isl_pw_multi_aff_pullback_pw_multi_aff(pma1, pma2) };
1590        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1591                                         should_free_on_drop: true };
1592        let err = isl_rs_ctx.last_error();
1593        if err != Error::None_ {
1594            let err_msg = isl_rs_ctx.last_error_msg();
1595            isl_rs_ctx.reset_error();
1596            return Err(LibISLError::new(err, err_msg));
1597        }
1598        Ok(isl_rs_result)
1599    }
1600
1601    /// Wraps `isl_pw_multi_aff_range_factor_domain`.
1602    pub fn range_factor_domain(self) -> Result<PwMultiAff, LibISLError> {
1603        let pma = self;
1604        let isl_rs_ctx = pma.get_ctx();
1605        let mut pma = pma;
1606        pma.do_not_free_on_drop();
1607        let pma = pma.ptr;
1608        let isl_rs_result = unsafe { isl_pw_multi_aff_range_factor_domain(pma) };
1609        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1610                                         should_free_on_drop: true };
1611        let err = isl_rs_ctx.last_error();
1612        if err != Error::None_ {
1613            let err_msg = isl_rs_ctx.last_error_msg();
1614            isl_rs_ctx.reset_error();
1615            return Err(LibISLError::new(err, err_msg));
1616        }
1617        Ok(isl_rs_result)
1618    }
1619
1620    /// Wraps `isl_pw_multi_aff_range_factor_range`.
1621    pub fn range_factor_range(self) -> Result<PwMultiAff, LibISLError> {
1622        let pma = self;
1623        let isl_rs_ctx = pma.get_ctx();
1624        let mut pma = pma;
1625        pma.do_not_free_on_drop();
1626        let pma = pma.ptr;
1627        let isl_rs_result = unsafe { isl_pw_multi_aff_range_factor_range(pma) };
1628        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1629                                         should_free_on_drop: true };
1630        let err = isl_rs_ctx.last_error();
1631        if err != Error::None_ {
1632            let err_msg = isl_rs_ctx.last_error_msg();
1633            isl_rs_ctx.reset_error();
1634            return Err(LibISLError::new(err, err_msg));
1635        }
1636        Ok(isl_rs_result)
1637    }
1638
1639    /// Wraps `isl_pw_multi_aff_range_map`.
1640    pub fn range_map(space: Space) -> Result<PwMultiAff, LibISLError> {
1641        let isl_rs_ctx = space.get_ctx();
1642        let mut space = space;
1643        space.do_not_free_on_drop();
1644        let space = space.ptr;
1645        let isl_rs_result = unsafe { isl_pw_multi_aff_range_map(space) };
1646        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1647                                         should_free_on_drop: true };
1648        let err = isl_rs_ctx.last_error();
1649        if err != Error::None_ {
1650            let err_msg = isl_rs_ctx.last_error_msg();
1651            isl_rs_ctx.reset_error();
1652            return Err(LibISLError::new(err, err_msg));
1653        }
1654        Ok(isl_rs_result)
1655    }
1656
1657    /// Wraps `isl_pw_multi_aff_range_product`.
1658    pub fn range_product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1659        let pma1 = self;
1660        let isl_rs_ctx = pma1.get_ctx();
1661        let mut pma1 = pma1;
1662        pma1.do_not_free_on_drop();
1663        let pma1 = pma1.ptr;
1664        let mut pma2 = pma2;
1665        pma2.do_not_free_on_drop();
1666        let pma2 = pma2.ptr;
1667        let isl_rs_result = unsafe { isl_pw_multi_aff_range_product(pma1, pma2) };
1668        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_read_from_str`.
1680    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<PwMultiAff, LibISLError> {
1681        let isl_rs_ctx = Context { ptr: ctx.ptr,
1682                                   should_free_on_drop: false };
1683        let ctx = ctx.ptr;
1684        let str_ = CString::new(str_).unwrap();
1685        let str_ = str_.as_ptr();
1686        let isl_rs_result = unsafe { isl_pw_multi_aff_read_from_str(ctx, str_) };
1687        let isl_rs_result = PwMultiAff { 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_pw_multi_aff_reset_tuple_id`.
1699    pub fn reset_tuple_id(self, type_: DimType) -> Result<PwMultiAff, LibISLError> {
1700        let pma = self;
1701        let isl_rs_ctx = pma.get_ctx();
1702        let mut pma = pma;
1703        pma.do_not_free_on_drop();
1704        let pma = pma.ptr;
1705        let type_ = type_.to_i32();
1706        let isl_rs_result = unsafe { isl_pw_multi_aff_reset_tuple_id(pma, type_) };
1707        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1708                                         should_free_on_drop: true };
1709        let err = isl_rs_ctx.last_error();
1710        if err != Error::None_ {
1711            let err_msg = isl_rs_ctx.last_error_msg();
1712            isl_rs_ctx.reset_error();
1713            return Err(LibISLError::new(err, err_msg));
1714        }
1715        Ok(isl_rs_result)
1716    }
1717
1718    /// Wraps `isl_pw_multi_aff_reset_user`.
1719    pub fn reset_user(self) -> Result<PwMultiAff, LibISLError> {
1720        let pma = self;
1721        let isl_rs_ctx = pma.get_ctx();
1722        let mut pma = pma;
1723        pma.do_not_free_on_drop();
1724        let pma = pma.ptr;
1725        let isl_rs_result = unsafe { isl_pw_multi_aff_reset_user(pma) };
1726        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1727                                         should_free_on_drop: true };
1728        let err = isl_rs_ctx.last_error();
1729        if err != Error::None_ {
1730            let err_msg = isl_rs_ctx.last_error_msg();
1731            isl_rs_ctx.reset_error();
1732            return Err(LibISLError::new(err, err_msg));
1733        }
1734        Ok(isl_rs_result)
1735    }
1736
1737    /// Wraps `isl_pw_multi_aff_scale_down_multi_val`.
1738    pub fn scale_down_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1739        let pma = self;
1740        let isl_rs_ctx = pma.get_ctx();
1741        let mut pma = pma;
1742        pma.do_not_free_on_drop();
1743        let pma = pma.ptr;
1744        let mut mv = mv;
1745        mv.do_not_free_on_drop();
1746        let mv = mv.ptr;
1747        let isl_rs_result = unsafe { isl_pw_multi_aff_scale_down_multi_val(pma, mv) };
1748        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1749                                         should_free_on_drop: true };
1750        let err = isl_rs_ctx.last_error();
1751        if err != Error::None_ {
1752            let err_msg = isl_rs_ctx.last_error_msg();
1753            isl_rs_ctx.reset_error();
1754            return Err(LibISLError::new(err, err_msg));
1755        }
1756        Ok(isl_rs_result)
1757    }
1758
1759    /// Wraps `isl_pw_multi_aff_scale_down_val`.
1760    pub fn scale_down_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
1761        let pma = self;
1762        let isl_rs_ctx = pma.get_ctx();
1763        let mut pma = pma;
1764        pma.do_not_free_on_drop();
1765        let pma = pma.ptr;
1766        let mut v = v;
1767        v.do_not_free_on_drop();
1768        let v = v.ptr;
1769        let isl_rs_result = unsafe { isl_pw_multi_aff_scale_down_val(pma, v) };
1770        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1771                                         should_free_on_drop: true };
1772        let err = isl_rs_ctx.last_error();
1773        if err != Error::None_ {
1774            let err_msg = isl_rs_ctx.last_error_msg();
1775            isl_rs_ctx.reset_error();
1776            return Err(LibISLError::new(err, err_msg));
1777        }
1778        Ok(isl_rs_result)
1779    }
1780
1781    /// Wraps `isl_pw_multi_aff_scale_multi_val`.
1782    pub fn scale_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1783        let pma = self;
1784        let isl_rs_ctx = pma.get_ctx();
1785        let mut pma = pma;
1786        pma.do_not_free_on_drop();
1787        let pma = pma.ptr;
1788        let mut mv = mv;
1789        mv.do_not_free_on_drop();
1790        let mv = mv.ptr;
1791        let isl_rs_result = unsafe { isl_pw_multi_aff_scale_multi_val(pma, mv) };
1792        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1793                                         should_free_on_drop: true };
1794        let err = isl_rs_ctx.last_error();
1795        if err != Error::None_ {
1796            let err_msg = isl_rs_ctx.last_error_msg();
1797            isl_rs_ctx.reset_error();
1798            return Err(LibISLError::new(err, err_msg));
1799        }
1800        Ok(isl_rs_result)
1801    }
1802
1803    /// Wraps `isl_pw_multi_aff_scale_val`.
1804    pub fn scale_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
1805        let pma = self;
1806        let isl_rs_ctx = pma.get_ctx();
1807        let mut pma = pma;
1808        pma.do_not_free_on_drop();
1809        let pma = pma.ptr;
1810        let mut v = v;
1811        v.do_not_free_on_drop();
1812        let v = v.ptr;
1813        let isl_rs_result = unsafe { isl_pw_multi_aff_scale_val(pma, v) };
1814        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1815                                         should_free_on_drop: true };
1816        let err = isl_rs_ctx.last_error();
1817        if err != Error::None_ {
1818            let err_msg = isl_rs_ctx.last_error_msg();
1819            isl_rs_ctx.reset_error();
1820            return Err(LibISLError::new(err, err_msg));
1821        }
1822        Ok(isl_rs_result)
1823    }
1824
1825    /// Wraps `isl_pw_multi_aff_set_dim_id`.
1826    pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<PwMultiAff, LibISLError> {
1827        let pma = self;
1828        let isl_rs_ctx = pma.get_ctx();
1829        let mut pma = pma;
1830        pma.do_not_free_on_drop();
1831        let pma = pma.ptr;
1832        let type_ = type_.to_i32();
1833        let mut id = id;
1834        id.do_not_free_on_drop();
1835        let id = id.ptr;
1836        let isl_rs_result = unsafe { isl_pw_multi_aff_set_dim_id(pma, type_, pos, id) };
1837        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1838                                         should_free_on_drop: true };
1839        let err = isl_rs_ctx.last_error();
1840        if err != Error::None_ {
1841            let err_msg = isl_rs_ctx.last_error_msg();
1842            isl_rs_ctx.reset_error();
1843            return Err(LibISLError::new(err, err_msg));
1844        }
1845        Ok(isl_rs_result)
1846    }
1847
1848    /// Wraps `isl_pw_multi_aff_set_pw_aff`.
1849    pub fn set_pw_aff(self, pos: u32, pa: PwAff) -> Result<PwMultiAff, LibISLError> {
1850        let pma = self;
1851        let isl_rs_ctx = pma.get_ctx();
1852        let mut pma = pma;
1853        pma.do_not_free_on_drop();
1854        let pma = pma.ptr;
1855        let mut pa = pa;
1856        pa.do_not_free_on_drop();
1857        let pa = pa.ptr;
1858        let isl_rs_result = unsafe { isl_pw_multi_aff_set_pw_aff(pma, pos, pa) };
1859        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1860                                         should_free_on_drop: true };
1861        let err = isl_rs_ctx.last_error();
1862        if err != Error::None_ {
1863            let err_msg = isl_rs_ctx.last_error_msg();
1864            isl_rs_ctx.reset_error();
1865            return Err(LibISLError::new(err, err_msg));
1866        }
1867        Ok(isl_rs_result)
1868    }
1869
1870    /// Wraps `isl_pw_multi_aff_set_range_tuple_id`.
1871    pub fn set_range_tuple_id(self, id: Id) -> Result<PwMultiAff, LibISLError> {
1872        let pma = self;
1873        let isl_rs_ctx = pma.get_ctx();
1874        let mut pma = pma;
1875        pma.do_not_free_on_drop();
1876        let pma = pma.ptr;
1877        let mut id = id;
1878        id.do_not_free_on_drop();
1879        let id = id.ptr;
1880        let isl_rs_result = unsafe { isl_pw_multi_aff_set_range_tuple_id(pma, id) };
1881        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1882                                         should_free_on_drop: true };
1883        let err = isl_rs_ctx.last_error();
1884        if err != Error::None_ {
1885            let err_msg = isl_rs_ctx.last_error_msg();
1886            isl_rs_ctx.reset_error();
1887            return Err(LibISLError::new(err, err_msg));
1888        }
1889        Ok(isl_rs_result)
1890    }
1891
1892    /// Wraps `isl_pw_multi_aff_set_tuple_id`.
1893    pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<PwMultiAff, LibISLError> {
1894        let pma = self;
1895        let isl_rs_ctx = pma.get_ctx();
1896        let mut pma = pma;
1897        pma.do_not_free_on_drop();
1898        let pma = pma.ptr;
1899        let type_ = type_.to_i32();
1900        let mut id = id;
1901        id.do_not_free_on_drop();
1902        let id = id.ptr;
1903        let isl_rs_result = unsafe { isl_pw_multi_aff_set_tuple_id(pma, type_, id) };
1904        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1905                                         should_free_on_drop: true };
1906        let err = isl_rs_ctx.last_error();
1907        if err != Error::None_ {
1908            let err_msg = isl_rs_ctx.last_error_msg();
1909            isl_rs_ctx.reset_error();
1910            return Err(LibISLError::new(err, err_msg));
1911        }
1912        Ok(isl_rs_result)
1913    }
1914
1915    /// Wraps `isl_pw_multi_aff_sub`.
1916    pub fn sub(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1917        let pma1 = self;
1918        let isl_rs_ctx = pma1.get_ctx();
1919        let mut pma1 = pma1;
1920        pma1.do_not_free_on_drop();
1921        let pma1 = pma1.ptr;
1922        let mut pma2 = pma2;
1923        pma2.do_not_free_on_drop();
1924        let pma2 = pma2.ptr;
1925        let isl_rs_result = unsafe { isl_pw_multi_aff_sub(pma1, pma2) };
1926        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1927                                         should_free_on_drop: true };
1928        let err = isl_rs_ctx.last_error();
1929        if err != Error::None_ {
1930            let err_msg = isl_rs_ctx.last_error_msg();
1931            isl_rs_ctx.reset_error();
1932            return Err(LibISLError::new(err, err_msg));
1933        }
1934        Ok(isl_rs_result)
1935    }
1936
1937    /// Wraps `isl_pw_multi_aff_subtract_domain`.
1938    pub fn subtract_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1939        let pma = self;
1940        let isl_rs_ctx = pma.get_ctx();
1941        let mut pma = pma;
1942        pma.do_not_free_on_drop();
1943        let pma = pma.ptr;
1944        let mut set = set;
1945        set.do_not_free_on_drop();
1946        let set = set.ptr;
1947        let isl_rs_result = unsafe { isl_pw_multi_aff_subtract_domain(pma, set) };
1948        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1949                                         should_free_on_drop: true };
1950        let err = isl_rs_ctx.last_error();
1951        if err != Error::None_ {
1952            let err_msg = isl_rs_ctx.last_error_msg();
1953            isl_rs_ctx.reset_error();
1954            return Err(LibISLError::new(err, err_msg));
1955        }
1956        Ok(isl_rs_result)
1957    }
1958
1959    /// Wraps `isl_pw_multi_aff_to_list`.
1960    pub fn to_list(self) -> Result<PwMultiAffList, LibISLError> {
1961        let el = self;
1962        let isl_rs_ctx = el.get_ctx();
1963        let mut el = el;
1964        el.do_not_free_on_drop();
1965        let el = el.ptr;
1966        let isl_rs_result = unsafe { isl_pw_multi_aff_to_list(el) };
1967        let isl_rs_result = PwMultiAffList { ptr: isl_rs_result,
1968                                             should_free_on_drop: true };
1969        let err = isl_rs_ctx.last_error();
1970        if err != Error::None_ {
1971            let err_msg = isl_rs_ctx.last_error_msg();
1972            isl_rs_ctx.reset_error();
1973            return Err(LibISLError::new(err, err_msg));
1974        }
1975        Ok(isl_rs_result)
1976    }
1977
1978    /// Wraps `isl_pw_multi_aff_to_multi_pw_aff`.
1979    pub fn to_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
1980        let pma = self;
1981        let isl_rs_ctx = pma.get_ctx();
1982        let mut pma = pma;
1983        pma.do_not_free_on_drop();
1984        let pma = pma.ptr;
1985        let isl_rs_result = unsafe { isl_pw_multi_aff_to_multi_pw_aff(pma) };
1986        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1987                                         should_free_on_drop: true };
1988        let err = isl_rs_ctx.last_error();
1989        if err != Error::None_ {
1990            let err_msg = isl_rs_ctx.last_error_msg();
1991            isl_rs_ctx.reset_error();
1992            return Err(LibISLError::new(err, err_msg));
1993        }
1994        Ok(isl_rs_result)
1995    }
1996
1997    /// Wraps `isl_pw_multi_aff_to_str`.
1998    pub fn to_str(&self) -> Result<&str, LibISLError> {
1999        let pma = self;
2000        let isl_rs_ctx = pma.get_ctx();
2001        let pma = pma.ptr;
2002        let isl_rs_result = unsafe { isl_pw_multi_aff_to_str(pma) };
2003        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2004        let isl_rs_result = isl_rs_result.to_str().unwrap();
2005        let err = isl_rs_ctx.last_error();
2006        if err != Error::None_ {
2007            let err_msg = isl_rs_ctx.last_error_msg();
2008            isl_rs_ctx.reset_error();
2009            return Err(LibISLError::new(err, err_msg));
2010        }
2011        Ok(isl_rs_result)
2012    }
2013
2014    /// Wraps `isl_pw_multi_aff_to_union_pw_multi_aff`.
2015    pub fn to_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
2016        let pma = self;
2017        let isl_rs_ctx = pma.get_ctx();
2018        let mut pma = pma;
2019        pma.do_not_free_on_drop();
2020        let pma = pma.ptr;
2021        let isl_rs_result = unsafe { isl_pw_multi_aff_to_union_pw_multi_aff(pma) };
2022        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
2023                                              should_free_on_drop: true };
2024        let err = isl_rs_ctx.last_error();
2025        if err != Error::None_ {
2026            let err_msg = isl_rs_ctx.last_error_msg();
2027            isl_rs_ctx.reset_error();
2028            return Err(LibISLError::new(err, err_msg));
2029        }
2030        Ok(isl_rs_result)
2031    }
2032
2033    /// Wraps `isl_pw_multi_aff_union_add`.
2034    pub fn union_add(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
2035        let pma1 = self;
2036        let isl_rs_ctx = pma1.get_ctx();
2037        let mut pma1 = pma1;
2038        pma1.do_not_free_on_drop();
2039        let pma1 = pma1.ptr;
2040        let mut pma2 = pma2;
2041        pma2.do_not_free_on_drop();
2042        let pma2 = pma2.ptr;
2043        let isl_rs_result = unsafe { isl_pw_multi_aff_union_add(pma1, pma2) };
2044        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2045                                         should_free_on_drop: true };
2046        let err = isl_rs_ctx.last_error();
2047        if err != Error::None_ {
2048            let err_msg = isl_rs_ctx.last_error_msg();
2049            isl_rs_ctx.reset_error();
2050            return Err(LibISLError::new(err, err_msg));
2051        }
2052        Ok(isl_rs_result)
2053    }
2054
2055    /// Wraps `isl_pw_multi_aff_union_lexmax`.
2056    pub fn union_lexmax(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
2057        let pma1 = self;
2058        let isl_rs_ctx = pma1.get_ctx();
2059        let mut pma1 = pma1;
2060        pma1.do_not_free_on_drop();
2061        let pma1 = pma1.ptr;
2062        let mut pma2 = pma2;
2063        pma2.do_not_free_on_drop();
2064        let pma2 = pma2.ptr;
2065        let isl_rs_result = unsafe { isl_pw_multi_aff_union_lexmax(pma1, pma2) };
2066        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2067                                         should_free_on_drop: true };
2068        let err = isl_rs_ctx.last_error();
2069        if err != Error::None_ {
2070            let err_msg = isl_rs_ctx.last_error_msg();
2071            isl_rs_ctx.reset_error();
2072            return Err(LibISLError::new(err, err_msg));
2073        }
2074        Ok(isl_rs_result)
2075    }
2076
2077    /// Wraps `isl_pw_multi_aff_union_lexmin`.
2078    pub fn union_lexmin(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
2079        let pma1 = self;
2080        let isl_rs_ctx = pma1.get_ctx();
2081        let mut pma1 = pma1;
2082        pma1.do_not_free_on_drop();
2083        let pma1 = pma1.ptr;
2084        let mut pma2 = pma2;
2085        pma2.do_not_free_on_drop();
2086        let pma2 = pma2.ptr;
2087        let isl_rs_result = unsafe { isl_pw_multi_aff_union_lexmin(pma1, pma2) };
2088        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2089                                         should_free_on_drop: true };
2090        let err = isl_rs_ctx.last_error();
2091        if err != Error::None_ {
2092            let err_msg = isl_rs_ctx.last_error_msg();
2093            isl_rs_ctx.reset_error();
2094            return Err(LibISLError::new(err, err_msg));
2095        }
2096        Ok(isl_rs_result)
2097    }
2098
2099    /// Wraps `isl_pw_multi_aff_zero`.
2100    pub fn zero(space: Space) -> Result<PwMultiAff, 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_pw_multi_aff_zero(space) };
2106        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2107                                         should_free_on_drop: true };
2108        let err = isl_rs_ctx.last_error();
2109        if err != Error::None_ {
2110            let err_msg = isl_rs_ctx.last_error_msg();
2111            isl_rs_ctx.reset_error();
2112            return Err(LibISLError::new(err, err_msg));
2113        }
2114        Ok(isl_rs_result)
2115    }
2116
2117    /// Does not call isl_pw_multi_aff_free() on being dropped. (For internal
2118    /// use only.)
2119    pub fn do_not_free_on_drop(&mut self) {
2120        self.should_free_on_drop = false;
2121    }
2122}
2123
2124impl Drop for PwMultiAff {
2125    fn drop(&mut self) {
2126        if self.should_free_on_drop {
2127            unsafe {
2128                isl_pw_multi_aff_free(self.ptr);
2129            }
2130        }
2131    }
2132}