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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
235        }
236        Ok(isl_rs_result)
237    }
238
239    /// Wraps `isl_pw_multi_aff_add_constant_multi_val`.
240    pub fn add_constant_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
241        let pma = self;
242        let isl_rs_ctx = pma.get_ctx();
243        let mut pma = pma;
244        pma.do_not_free_on_drop();
245        let pma = pma.ptr;
246        let mut mv = mv;
247        mv.do_not_free_on_drop();
248        let mv = mv.ptr;
249        let isl_rs_result = unsafe { isl_pw_multi_aff_add_constant_multi_val(pma, mv) };
250        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
251                                         should_free_on_drop: true };
252        let err = isl_rs_ctx.last_error();
253        if err != Error::None_ {
254            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
255        }
256        Ok(isl_rs_result)
257    }
258
259    /// Wraps `isl_pw_multi_aff_add_constant_val`.
260    pub fn add_constant_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
261        let pma = self;
262        let isl_rs_ctx = pma.get_ctx();
263        let mut pma = pma;
264        pma.do_not_free_on_drop();
265        let pma = pma.ptr;
266        let mut v = v;
267        v.do_not_free_on_drop();
268        let v = v.ptr;
269        let isl_rs_result = unsafe { isl_pw_multi_aff_add_constant_val(pma, v) };
270        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
271                                         should_free_on_drop: true };
272        let err = isl_rs_ctx.last_error();
273        if err != Error::None_ {
274            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
275        }
276        Ok(isl_rs_result)
277    }
278
279    /// Wraps `isl_pw_multi_aff_align_params`.
280    pub fn align_params(self, model: Space) -> Result<PwMultiAff, LibISLError> {
281        let pma = self;
282        let isl_rs_ctx = pma.get_ctx();
283        let mut pma = pma;
284        pma.do_not_free_on_drop();
285        let pma = pma.ptr;
286        let mut model = model;
287        model.do_not_free_on_drop();
288        let model = model.ptr;
289        let isl_rs_result = unsafe { isl_pw_multi_aff_align_params(pma, model) };
290        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
291                                         should_free_on_drop: true };
292        let err = isl_rs_ctx.last_error();
293        if err != Error::None_ {
294            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
295        }
296        Ok(isl_rs_result)
297    }
298
299    /// Wraps `isl_pw_multi_aff_alloc`.
300    pub fn alloc(set: Set, maff: MultiAff) -> Result<PwMultiAff, LibISLError> {
301        let isl_rs_ctx = set.get_ctx();
302        let mut set = set;
303        set.do_not_free_on_drop();
304        let set = set.ptr;
305        let mut maff = maff;
306        maff.do_not_free_on_drop();
307        let maff = maff.ptr;
308        let isl_rs_result = unsafe { isl_pw_multi_aff_alloc(set, maff) };
309        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
310                                         should_free_on_drop: true };
311        let err = isl_rs_ctx.last_error();
312        if err != Error::None_ {
313            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
314        }
315        Ok(isl_rs_result)
316    }
317
318    /// Wraps `isl_pw_multi_aff_as_map`.
319    pub fn as_map(self) -> Result<Map, LibISLError> {
320        let pma = self;
321        let isl_rs_ctx = pma.get_ctx();
322        let mut pma = pma;
323        pma.do_not_free_on_drop();
324        let pma = pma.ptr;
325        let isl_rs_result = unsafe { isl_pw_multi_aff_as_map(pma) };
326        let isl_rs_result = Map { ptr: isl_rs_result,
327                                  should_free_on_drop: true };
328        let err = isl_rs_ctx.last_error();
329        if err != Error::None_ {
330            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
331        }
332        Ok(isl_rs_result)
333    }
334
335    /// Wraps `isl_pw_multi_aff_as_multi_aff`.
336    pub fn as_multi_aff(self) -> Result<MultiAff, LibISLError> {
337        let pma = self;
338        let isl_rs_ctx = pma.get_ctx();
339        let mut pma = pma;
340        pma.do_not_free_on_drop();
341        let pma = pma.ptr;
342        let isl_rs_result = unsafe { isl_pw_multi_aff_as_multi_aff(pma) };
343        let isl_rs_result = MultiAff { ptr: isl_rs_result,
344                                       should_free_on_drop: true };
345        let err = isl_rs_ctx.last_error();
346        if err != Error::None_ {
347            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
348        }
349        Ok(isl_rs_result)
350    }
351
352    /// Wraps `isl_pw_multi_aff_as_set`.
353    pub fn as_set(self) -> Result<Set, LibISLError> {
354        let pma = self;
355        let isl_rs_ctx = pma.get_ctx();
356        let mut pma = pma;
357        pma.do_not_free_on_drop();
358        let pma = pma.ptr;
359        let isl_rs_result = unsafe { isl_pw_multi_aff_as_set(pma) };
360        let isl_rs_result = Set { ptr: isl_rs_result,
361                                  should_free_on_drop: true };
362        let err = isl_rs_ctx.last_error();
363        if err != Error::None_ {
364            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
365        }
366        Ok(isl_rs_result)
367    }
368
369    /// Wraps `isl_pw_multi_aff_bind_domain`.
370    pub fn bind_domain(self, tuple: MultiId) -> Result<PwMultiAff, LibISLError> {
371        let pma = self;
372        let isl_rs_ctx = pma.get_ctx();
373        let mut pma = pma;
374        pma.do_not_free_on_drop();
375        let pma = pma.ptr;
376        let mut tuple = tuple;
377        tuple.do_not_free_on_drop();
378        let tuple = tuple.ptr;
379        let isl_rs_result = unsafe { isl_pw_multi_aff_bind_domain(pma, tuple) };
380        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
381                                         should_free_on_drop: true };
382        let err = isl_rs_ctx.last_error();
383        if err != Error::None_ {
384            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
385        }
386        Ok(isl_rs_result)
387    }
388
389    /// Wraps `isl_pw_multi_aff_bind_domain_wrapped_domain`.
390    pub fn bind_domain_wrapped_domain(self, tuple: MultiId) -> Result<PwMultiAff, LibISLError> {
391        let pma = self;
392        let isl_rs_ctx = pma.get_ctx();
393        let mut pma = pma;
394        pma.do_not_free_on_drop();
395        let pma = pma.ptr;
396        let mut tuple = tuple;
397        tuple.do_not_free_on_drop();
398        let tuple = tuple.ptr;
399        let isl_rs_result = unsafe { isl_pw_multi_aff_bind_domain_wrapped_domain(pma, tuple) };
400        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
401                                         should_free_on_drop: true };
402        let err = isl_rs_ctx.last_error();
403        if err != Error::None_ {
404            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
405        }
406        Ok(isl_rs_result)
407    }
408
409    /// Wraps `isl_pw_multi_aff_coalesce`.
410    pub fn coalesce(self) -> Result<PwMultiAff, LibISLError> {
411        let pma = self;
412        let isl_rs_ctx = pma.get_ctx();
413        let mut pma = pma;
414        pma.do_not_free_on_drop();
415        let pma = pma.ptr;
416        let isl_rs_result = unsafe { isl_pw_multi_aff_coalesce(pma) };
417        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
418                                         should_free_on_drop: true };
419        let err = isl_rs_ctx.last_error();
420        if err != Error::None_ {
421            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
422        }
423        Ok(isl_rs_result)
424    }
425
426    /// Wraps `isl_pw_multi_aff_copy`.
427    pub fn copy(&self) -> Result<PwMultiAff, LibISLError> {
428        let pma = self;
429        let isl_rs_ctx = pma.get_ctx();
430        let pma = pma.ptr;
431        let isl_rs_result = unsafe { isl_pw_multi_aff_copy(pma) };
432        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
433                                         should_free_on_drop: true };
434        let err = isl_rs_ctx.last_error();
435        if err != Error::None_ {
436            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
437        }
438        Ok(isl_rs_result)
439    }
440
441    /// Wraps `isl_pw_multi_aff_dim`.
442    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
443        let pma = self;
444        let isl_rs_ctx = pma.get_ctx();
445        let pma = pma.ptr;
446        let type_ = type_.to_i32();
447        let isl_rs_result = unsafe { isl_pw_multi_aff_dim(pma, type_) };
448        let err = isl_rs_ctx.last_error();
449        if err != Error::None_ {
450            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
451        }
452        Ok(isl_rs_result)
453    }
454
455    /// Wraps `isl_pw_multi_aff_domain`.
456    pub fn domain(self) -> Result<Set, LibISLError> {
457        let pma = self;
458        let isl_rs_ctx = pma.get_ctx();
459        let mut pma = pma;
460        pma.do_not_free_on_drop();
461        let pma = pma.ptr;
462        let isl_rs_result = unsafe { isl_pw_multi_aff_domain(pma) };
463        let isl_rs_result = Set { ptr: isl_rs_result,
464                                  should_free_on_drop: true };
465        let err = isl_rs_ctx.last_error();
466        if err != Error::None_ {
467            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
468        }
469        Ok(isl_rs_result)
470    }
471
472    /// Wraps `isl_pw_multi_aff_domain_map`.
473    pub fn domain_map(space: Space) -> Result<PwMultiAff, LibISLError> {
474        let isl_rs_ctx = space.get_ctx();
475        let mut space = space;
476        space.do_not_free_on_drop();
477        let space = space.ptr;
478        let isl_rs_result = unsafe { isl_pw_multi_aff_domain_map(space) };
479        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
480                                         should_free_on_drop: true };
481        let err = isl_rs_ctx.last_error();
482        if err != Error::None_ {
483            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
484        }
485        Ok(isl_rs_result)
486    }
487
488    /// Wraps `isl_pw_multi_aff_domain_reverse`.
489    pub fn domain_reverse(self) -> Result<PwMultiAff, LibISLError> {
490        let pma = self;
491        let isl_rs_ctx = pma.get_ctx();
492        let mut pma = pma;
493        pma.do_not_free_on_drop();
494        let pma = pma.ptr;
495        let isl_rs_result = unsafe { isl_pw_multi_aff_domain_reverse(pma) };
496        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
497                                         should_free_on_drop: true };
498        let err = isl_rs_ctx.last_error();
499        if err != Error::None_ {
500            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
501        }
502        Ok(isl_rs_result)
503    }
504
505    /// Wraps `isl_pw_multi_aff_drop_dims`.
506    pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<PwMultiAff, LibISLError> {
507        let pma = self;
508        let isl_rs_ctx = pma.get_ctx();
509        let mut pma = pma;
510        pma.do_not_free_on_drop();
511        let pma = pma.ptr;
512        let type_ = type_.to_i32();
513        let isl_rs_result = unsafe { isl_pw_multi_aff_drop_dims(pma, type_, first, n) };
514        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
515                                         should_free_on_drop: true };
516        let err = isl_rs_ctx.last_error();
517        if err != Error::None_ {
518            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
519        }
520        Ok(isl_rs_result)
521    }
522
523    /// Wraps `isl_pw_multi_aff_drop_unused_params`.
524    pub fn drop_unused_params(self) -> Result<PwMultiAff, LibISLError> {
525        let pma = self;
526        let isl_rs_ctx = pma.get_ctx();
527        let mut pma = pma;
528        pma.do_not_free_on_drop();
529        let pma = pma.ptr;
530        let isl_rs_result = unsafe { isl_pw_multi_aff_drop_unused_params(pma) };
531        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
532                                         should_free_on_drop: true };
533        let err = isl_rs_ctx.last_error();
534        if err != Error::None_ {
535            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
536        }
537        Ok(isl_rs_result)
538    }
539
540    /// Wraps `isl_pw_multi_aff_dump`.
541    pub fn dump(&self) -> Result<(), LibISLError> {
542        let pma = self;
543        let isl_rs_ctx = pma.get_ctx();
544        let pma = pma.ptr;
545        let isl_rs_result = unsafe { isl_pw_multi_aff_dump(pma) };
546        let err = isl_rs_ctx.last_error();
547        if err != Error::None_ {
548            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
549        }
550        Ok(isl_rs_result)
551    }
552
553    /// Wraps `isl_pw_multi_aff_empty`.
554    pub fn empty(space: Space) -> Result<PwMultiAff, LibISLError> {
555        let isl_rs_ctx = space.get_ctx();
556        let mut space = space;
557        space.do_not_free_on_drop();
558        let space = space.ptr;
559        let isl_rs_result = unsafe { isl_pw_multi_aff_empty(space) };
560        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
561                                         should_free_on_drop: true };
562        let err = isl_rs_ctx.last_error();
563        if err != Error::None_ {
564            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
565        }
566        Ok(isl_rs_result)
567    }
568
569    /// Wraps `isl_pw_multi_aff_find_dim_by_name`.
570    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
571        let pma = self;
572        let isl_rs_ctx = pma.get_ctx();
573        let pma = pma.ptr;
574        let type_ = type_.to_i32();
575        let name = CString::new(name).unwrap();
576        let name = name.as_ptr();
577        let isl_rs_result = unsafe { isl_pw_multi_aff_find_dim_by_name(pma, type_, name) };
578        let err = isl_rs_ctx.last_error();
579        if err != Error::None_ {
580            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
581        }
582        Ok(isl_rs_result)
583    }
584
585    /// Wraps `isl_pw_multi_aff_fix_si`.
586    pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> Result<PwMultiAff, LibISLError> {
587        let pma = self;
588        let isl_rs_ctx = pma.get_ctx();
589        let mut pma = pma;
590        pma.do_not_free_on_drop();
591        let pma = pma.ptr;
592        let type_ = type_.to_i32();
593        let isl_rs_result = unsafe { isl_pw_multi_aff_fix_si(pma, type_, pos, value) };
594        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
595                                         should_free_on_drop: true };
596        let err = isl_rs_ctx.last_error();
597        if err != Error::None_ {
598            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
599        }
600        Ok(isl_rs_result)
601    }
602
603    /// Wraps `isl_pw_multi_aff_flat_range_product`.
604    pub fn flat_range_product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
605        let pma1 = self;
606        let isl_rs_ctx = pma1.get_ctx();
607        let mut pma1 = pma1;
608        pma1.do_not_free_on_drop();
609        let pma1 = pma1.ptr;
610        let mut pma2 = pma2;
611        pma2.do_not_free_on_drop();
612        let pma2 = pma2.ptr;
613        let isl_rs_result = unsafe { isl_pw_multi_aff_flat_range_product(pma1, pma2) };
614        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
615                                         should_free_on_drop: true };
616        let err = isl_rs_ctx.last_error();
617        if err != Error::None_ {
618            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
619        }
620        Ok(isl_rs_result)
621    }
622
623    /// Wraps `isl_pw_multi_aff_free`.
624    pub fn free(self) -> Result<PwMultiAff, LibISLError> {
625        let pma = self;
626        let isl_rs_ctx = pma.get_ctx();
627        let mut pma = pma;
628        pma.do_not_free_on_drop();
629        let pma = pma.ptr;
630        let isl_rs_result = unsafe { isl_pw_multi_aff_free(pma) };
631        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
632                                         should_free_on_drop: true };
633        let err = isl_rs_ctx.last_error();
634        if err != Error::None_ {
635            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
636        }
637        Ok(isl_rs_result)
638    }
639
640    /// Wraps `isl_pw_multi_aff_from_domain`.
641    pub fn from_domain(set: Set) -> Result<PwMultiAff, LibISLError> {
642        let isl_rs_ctx = set.get_ctx();
643        let mut set = set;
644        set.do_not_free_on_drop();
645        let set = set.ptr;
646        let isl_rs_result = unsafe { isl_pw_multi_aff_from_domain(set) };
647        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
648                                         should_free_on_drop: true };
649        let err = isl_rs_ctx.last_error();
650        if err != Error::None_ {
651            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
652        }
653        Ok(isl_rs_result)
654    }
655
656    /// Wraps `isl_pw_multi_aff_from_map`.
657    pub fn from_map(map: Map) -> Result<PwMultiAff, LibISLError> {
658        let isl_rs_ctx = map.get_ctx();
659        let mut map = map;
660        map.do_not_free_on_drop();
661        let map = map.ptr;
662        let isl_rs_result = unsafe { isl_pw_multi_aff_from_map(map) };
663        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
664                                         should_free_on_drop: true };
665        let err = isl_rs_ctx.last_error();
666        if err != Error::None_ {
667            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
668        }
669        Ok(isl_rs_result)
670    }
671
672    /// Wraps `isl_pw_multi_aff_from_multi_aff`.
673    pub fn from_multi_aff(ma: MultiAff) -> Result<PwMultiAff, LibISLError> {
674        let isl_rs_ctx = ma.get_ctx();
675        let mut ma = ma;
676        ma.do_not_free_on_drop();
677        let ma = ma.ptr;
678        let isl_rs_result = unsafe { isl_pw_multi_aff_from_multi_aff(ma) };
679        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
680                                         should_free_on_drop: true };
681        let err = isl_rs_ctx.last_error();
682        if err != Error::None_ {
683            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
684        }
685        Ok(isl_rs_result)
686    }
687
688    /// Wraps `isl_pw_multi_aff_from_multi_pw_aff`.
689    pub fn from_multi_pw_aff(mpa: MultiPwAff) -> Result<PwMultiAff, LibISLError> {
690        let isl_rs_ctx = mpa.get_ctx();
691        let mut mpa = mpa;
692        mpa.do_not_free_on_drop();
693        let mpa = mpa.ptr;
694        let isl_rs_result = unsafe { isl_pw_multi_aff_from_multi_pw_aff(mpa) };
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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
700        }
701        Ok(isl_rs_result)
702    }
703
704    /// Wraps `isl_pw_multi_aff_from_pw_aff`.
705    pub fn from_pw_aff(pa: PwAff) -> Result<PwMultiAff, LibISLError> {
706        let isl_rs_ctx = pa.get_ctx();
707        let mut pa = pa;
708        pa.do_not_free_on_drop();
709        let pa = pa.ptr;
710        let isl_rs_result = unsafe { isl_pw_multi_aff_from_pw_aff(pa) };
711        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
712                                         should_free_on_drop: true };
713        let err = isl_rs_ctx.last_error();
714        if err != Error::None_ {
715            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
716        }
717        Ok(isl_rs_result)
718    }
719
720    /// Wraps `isl_pw_multi_aff_from_set`.
721    pub fn from_set(set: Set) -> Result<PwMultiAff, LibISLError> {
722        let isl_rs_ctx = set.get_ctx();
723        let mut set = set;
724        set.do_not_free_on_drop();
725        let set = set.ptr;
726        let isl_rs_result = unsafe { isl_pw_multi_aff_from_set(set) };
727        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
728                                         should_free_on_drop: true };
729        let err = isl_rs_ctx.last_error();
730        if err != Error::None_ {
731            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
732        }
733        Ok(isl_rs_result)
734    }
735
736    /// Wraps `isl_pw_multi_aff_get_at`.
737    pub fn get_at(&self, pos: i32) -> Result<PwAff, LibISLError> {
738        let pma = self;
739        let isl_rs_ctx = pma.get_ctx();
740        let pma = pma.ptr;
741        let isl_rs_result = unsafe { isl_pw_multi_aff_get_at(pma, pos) };
742        let isl_rs_result = PwAff { ptr: isl_rs_result,
743                                    should_free_on_drop: true };
744        let err = isl_rs_ctx.last_error();
745        if err != Error::None_ {
746            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
747        }
748        Ok(isl_rs_result)
749    }
750
751    /// Wraps `isl_pw_multi_aff_get_ctx`.
752    pub fn get_ctx(&self) -> Context {
753        let pma = self;
754        let pma = pma.ptr;
755        let isl_rs_result = unsafe { isl_pw_multi_aff_get_ctx(pma) };
756        let isl_rs_result = Context { ptr: isl_rs_result,
757                                      should_free_on_drop: false };
758        isl_rs_result
759    }
760
761    /// Wraps `isl_pw_multi_aff_get_dim_id`.
762    pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
763        let pma = self;
764        let isl_rs_ctx = pma.get_ctx();
765        let pma = pma.ptr;
766        let type_ = type_.to_i32();
767        let isl_rs_result = unsafe { isl_pw_multi_aff_get_dim_id(pma, type_, pos) };
768        let isl_rs_result = Id { ptr: isl_rs_result,
769                                 should_free_on_drop: true };
770        let err = isl_rs_ctx.last_error();
771        if err != Error::None_ {
772            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
773        }
774        Ok(isl_rs_result)
775    }
776
777    /// Wraps `isl_pw_multi_aff_get_dim_name`.
778    pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
779        let pma = self;
780        let isl_rs_ctx = pma.get_ctx();
781        let pma = pma.ptr;
782        let type_ = type_.to_i32();
783        let isl_rs_result = unsafe { isl_pw_multi_aff_get_dim_name(pma, type_, pos) };
784        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
785        let isl_rs_result = isl_rs_result.to_str().unwrap();
786        let err = isl_rs_ctx.last_error();
787        if err != Error::None_ {
788            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
789        }
790        Ok(isl_rs_result)
791    }
792
793    /// Wraps `isl_pw_multi_aff_get_domain_space`.
794    pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
795        let pma = self;
796        let isl_rs_ctx = pma.get_ctx();
797        let pma = pma.ptr;
798        let isl_rs_result = unsafe { isl_pw_multi_aff_get_domain_space(pma) };
799        let isl_rs_result = Space { ptr: isl_rs_result,
800                                    should_free_on_drop: true };
801        let err = isl_rs_ctx.last_error();
802        if err != Error::None_ {
803            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
804        }
805        Ok(isl_rs_result)
806    }
807
808    /// Wraps `isl_pw_multi_aff_get_pw_aff`.
809    pub fn get_pw_aff(&self, pos: i32) -> Result<PwAff, LibISLError> {
810        let pma = self;
811        let isl_rs_ctx = pma.get_ctx();
812        let pma = pma.ptr;
813        let isl_rs_result = unsafe { isl_pw_multi_aff_get_pw_aff(pma, pos) };
814        let isl_rs_result = PwAff { ptr: isl_rs_result,
815                                    should_free_on_drop: true };
816        let err = isl_rs_ctx.last_error();
817        if err != Error::None_ {
818            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
819        }
820        Ok(isl_rs_result)
821    }
822
823    /// Wraps `isl_pw_multi_aff_get_range_tuple_id`.
824    pub fn get_range_tuple_id(&self) -> Result<Id, LibISLError> {
825        let pma = self;
826        let isl_rs_ctx = pma.get_ctx();
827        let pma = pma.ptr;
828        let isl_rs_result = unsafe { isl_pw_multi_aff_get_range_tuple_id(pma) };
829        let isl_rs_result = Id { ptr: isl_rs_result,
830                                 should_free_on_drop: true };
831        let err = isl_rs_ctx.last_error();
832        if err != Error::None_ {
833            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
834        }
835        Ok(isl_rs_result)
836    }
837
838    /// Wraps `isl_pw_multi_aff_get_space`.
839    pub fn get_space(&self) -> Result<Space, LibISLError> {
840        let pma = self;
841        let isl_rs_ctx = pma.get_ctx();
842        let pma = pma.ptr;
843        let isl_rs_result = unsafe { isl_pw_multi_aff_get_space(pma) };
844        let isl_rs_result = Space { ptr: isl_rs_result,
845                                    should_free_on_drop: true };
846        let err = isl_rs_ctx.last_error();
847        if err != Error::None_ {
848            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
849        }
850        Ok(isl_rs_result)
851    }
852
853    /// Wraps `isl_pw_multi_aff_get_tuple_id`.
854    pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
855        let pma = self;
856        let isl_rs_ctx = pma.get_ctx();
857        let pma = pma.ptr;
858        let type_ = type_.to_i32();
859        let isl_rs_result = unsafe { isl_pw_multi_aff_get_tuple_id(pma, type_) };
860        let isl_rs_result = Id { ptr: isl_rs_result,
861                                 should_free_on_drop: true };
862        let err = isl_rs_ctx.last_error();
863        if err != Error::None_ {
864            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
865        }
866        Ok(isl_rs_result)
867    }
868
869    /// Wraps `isl_pw_multi_aff_get_tuple_name`.
870    pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
871        let pma = self;
872        let isl_rs_ctx = pma.get_ctx();
873        let pma = pma.ptr;
874        let type_ = type_.to_i32();
875        let isl_rs_result = unsafe { isl_pw_multi_aff_get_tuple_name(pma, type_) };
876        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
877        let isl_rs_result = isl_rs_result.to_str().unwrap();
878        let err = isl_rs_ctx.last_error();
879        if err != Error::None_ {
880            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
881        }
882        Ok(isl_rs_result)
883    }
884
885    /// Wraps `isl_pw_multi_aff_gist`.
886    pub fn gist(self, set: Set) -> Result<PwMultiAff, LibISLError> {
887        let pma = self;
888        let isl_rs_ctx = pma.get_ctx();
889        let mut pma = pma;
890        pma.do_not_free_on_drop();
891        let pma = pma.ptr;
892        let mut set = set;
893        set.do_not_free_on_drop();
894        let set = set.ptr;
895        let isl_rs_result = unsafe { isl_pw_multi_aff_gist(pma, set) };
896        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
897                                         should_free_on_drop: true };
898        let err = isl_rs_ctx.last_error();
899        if err != Error::None_ {
900            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
901        }
902        Ok(isl_rs_result)
903    }
904
905    /// Wraps `isl_pw_multi_aff_gist_params`.
906    pub fn gist_params(self, set: Set) -> Result<PwMultiAff, LibISLError> {
907        let pma = self;
908        let isl_rs_ctx = pma.get_ctx();
909        let mut pma = pma;
910        pma.do_not_free_on_drop();
911        let pma = pma.ptr;
912        let mut set = set;
913        set.do_not_free_on_drop();
914        let set = set.ptr;
915        let isl_rs_result = unsafe { isl_pw_multi_aff_gist_params(pma, set) };
916        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
917                                         should_free_on_drop: true };
918        let err = isl_rs_ctx.last_error();
919        if err != Error::None_ {
920            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
921        }
922        Ok(isl_rs_result)
923    }
924
925    /// Wraps `isl_pw_multi_aff_has_range_tuple_id`.
926    pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
927        let pma = self;
928        let isl_rs_ctx = pma.get_ctx();
929        let pma = pma.ptr;
930        let isl_rs_result = unsafe { isl_pw_multi_aff_has_range_tuple_id(pma) };
931        let isl_rs_result = match isl_rs_result {
932            0 => false,
933            1 => true,
934            _ => panic!("Got isl_bool = -1"),
935        };
936        let err = isl_rs_ctx.last_error();
937        if err != Error::None_ {
938            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
939        }
940        Ok(isl_rs_result)
941    }
942
943    /// Wraps `isl_pw_multi_aff_has_tuple_id`.
944    pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
945        let pma = self;
946        let isl_rs_ctx = pma.get_ctx();
947        let pma = pma.ptr;
948        let type_ = type_.to_i32();
949        let isl_rs_result = unsafe { isl_pw_multi_aff_has_tuple_id(pma, type_) };
950        let isl_rs_result = match isl_rs_result {
951            0 => false,
952            1 => true,
953            _ => panic!("Got isl_bool = -1"),
954        };
955        let err = isl_rs_ctx.last_error();
956        if err != Error::None_ {
957            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
958        }
959        Ok(isl_rs_result)
960    }
961
962    /// Wraps `isl_pw_multi_aff_has_tuple_name`.
963    pub fn has_tuple_name(&self, type_: DimType) -> Result<bool, LibISLError> {
964        let pma = self;
965        let isl_rs_ctx = pma.get_ctx();
966        let pma = pma.ptr;
967        let type_ = type_.to_i32();
968        let isl_rs_result = unsafe { isl_pw_multi_aff_has_tuple_name(pma, type_) };
969        let isl_rs_result = match isl_rs_result {
970            0 => false,
971            1 => true,
972            _ => panic!("Got isl_bool = -1"),
973        };
974        let err = isl_rs_ctx.last_error();
975        if err != Error::None_ {
976            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
977        }
978        Ok(isl_rs_result)
979    }
980
981    /// Wraps `isl_pw_multi_aff_identity`.
982    pub fn identity(space: Space) -> Result<PwMultiAff, LibISLError> {
983        let isl_rs_ctx = space.get_ctx();
984        let mut space = space;
985        space.do_not_free_on_drop();
986        let space = space.ptr;
987        let isl_rs_result = unsafe { isl_pw_multi_aff_identity(space) };
988        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
989                                         should_free_on_drop: true };
990        let err = isl_rs_ctx.last_error();
991        if err != Error::None_ {
992            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
993        }
994        Ok(isl_rs_result)
995    }
996
997    /// Wraps `isl_pw_multi_aff_identity_on_domain_space`.
998    pub fn identity_on_domain_space(space: Space) -> Result<PwMultiAff, LibISLError> {
999        let isl_rs_ctx = space.get_ctx();
1000        let mut space = space;
1001        space.do_not_free_on_drop();
1002        let space = space.ptr;
1003        let isl_rs_result = unsafe { isl_pw_multi_aff_identity_on_domain_space(space) };
1004        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1005                                         should_free_on_drop: true };
1006        let err = isl_rs_ctx.last_error();
1007        if err != Error::None_ {
1008            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1009        }
1010        Ok(isl_rs_result)
1011    }
1012
1013    /// Wraps `isl_pw_multi_aff_insert_domain`.
1014    pub fn insert_domain(self, domain: Space) -> Result<PwMultiAff, LibISLError> {
1015        let pma = self;
1016        let isl_rs_ctx = pma.get_ctx();
1017        let mut pma = pma;
1018        pma.do_not_free_on_drop();
1019        let pma = pma.ptr;
1020        let mut domain = domain;
1021        domain.do_not_free_on_drop();
1022        let domain = domain.ptr;
1023        let isl_rs_result = unsafe { isl_pw_multi_aff_insert_domain(pma, domain) };
1024        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1025                                         should_free_on_drop: true };
1026        let err = isl_rs_ctx.last_error();
1027        if err != Error::None_ {
1028            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1029        }
1030        Ok(isl_rs_result)
1031    }
1032
1033    /// Wraps `isl_pw_multi_aff_intersect_domain`.
1034    pub fn intersect_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1035        let pma = self;
1036        let isl_rs_ctx = pma.get_ctx();
1037        let mut pma = pma;
1038        pma.do_not_free_on_drop();
1039        let pma = pma.ptr;
1040        let mut set = set;
1041        set.do_not_free_on_drop();
1042        let set = set.ptr;
1043        let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain(pma, set) };
1044        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1045                                         should_free_on_drop: true };
1046        let err = isl_rs_ctx.last_error();
1047        if err != Error::None_ {
1048            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1049        }
1050        Ok(isl_rs_result)
1051    }
1052
1053    /// Wraps `isl_pw_multi_aff_intersect_domain_wrapped_domain`.
1054    pub fn intersect_domain_wrapped_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1055        let pma = self;
1056        let isl_rs_ctx = pma.get_ctx();
1057        let mut pma = pma;
1058        pma.do_not_free_on_drop();
1059        let pma = pma.ptr;
1060        let mut set = set;
1061        set.do_not_free_on_drop();
1062        let set = set.ptr;
1063        let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain_wrapped_domain(pma, set) };
1064        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1065                                         should_free_on_drop: true };
1066        let err = isl_rs_ctx.last_error();
1067        if err != Error::None_ {
1068            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1069        }
1070        Ok(isl_rs_result)
1071    }
1072
1073    /// Wraps `isl_pw_multi_aff_intersect_domain_wrapped_range`.
1074    pub fn intersect_domain_wrapped_range(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1075        let pma = self;
1076        let isl_rs_ctx = pma.get_ctx();
1077        let mut pma = pma;
1078        pma.do_not_free_on_drop();
1079        let pma = pma.ptr;
1080        let mut set = set;
1081        set.do_not_free_on_drop();
1082        let set = set.ptr;
1083        let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain_wrapped_range(pma, set) };
1084        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1085                                         should_free_on_drop: true };
1086        let err = isl_rs_ctx.last_error();
1087        if err != Error::None_ {
1088            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1089        }
1090        Ok(isl_rs_result)
1091    }
1092
1093    /// Wraps `isl_pw_multi_aff_intersect_params`.
1094    pub fn intersect_params(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1095        let pma = self;
1096        let isl_rs_ctx = pma.get_ctx();
1097        let mut pma = pma;
1098        pma.do_not_free_on_drop();
1099        let pma = pma.ptr;
1100        let mut set = set;
1101        set.do_not_free_on_drop();
1102        let set = set.ptr;
1103        let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_params(pma, set) };
1104        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1105                                         should_free_on_drop: true };
1106        let err = isl_rs_ctx.last_error();
1107        if err != Error::None_ {
1108            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1109        }
1110        Ok(isl_rs_result)
1111    }
1112
1113    /// Wraps `isl_pw_multi_aff_involves_dims`.
1114    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1115        let pma = self;
1116        let isl_rs_ctx = pma.get_ctx();
1117        let pma = pma.ptr;
1118        let type_ = type_.to_i32();
1119        let isl_rs_result = unsafe { isl_pw_multi_aff_involves_dims(pma, type_, first, n) };
1120        let isl_rs_result = match isl_rs_result {
1121            0 => false,
1122            1 => true,
1123            _ => panic!("Got isl_bool = -1"),
1124        };
1125        let err = isl_rs_ctx.last_error();
1126        if err != Error::None_ {
1127            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1128        }
1129        Ok(isl_rs_result)
1130    }
1131
1132    /// Wraps `isl_pw_multi_aff_involves_locals`.
1133    pub fn involves_locals(&self) -> Result<bool, LibISLError> {
1134        let pma = self;
1135        let isl_rs_ctx = pma.get_ctx();
1136        let pma = pma.ptr;
1137        let isl_rs_result = unsafe { isl_pw_multi_aff_involves_locals(pma) };
1138        let isl_rs_result = match isl_rs_result {
1139            0 => false,
1140            1 => true,
1141            _ => panic!("Got isl_bool = -1"),
1142        };
1143        let err = isl_rs_ctx.last_error();
1144        if err != Error::None_ {
1145            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1146        }
1147        Ok(isl_rs_result)
1148    }
1149
1150    /// Wraps `isl_pw_multi_aff_involves_nan`.
1151    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1152        let pma = self;
1153        let isl_rs_ctx = pma.get_ctx();
1154        let pma = pma.ptr;
1155        let isl_rs_result = unsafe { isl_pw_multi_aff_involves_nan(pma) };
1156        let isl_rs_result = match isl_rs_result {
1157            0 => false,
1158            1 => true,
1159            _ => panic!("Got isl_bool = -1"),
1160        };
1161        let err = isl_rs_ctx.last_error();
1162        if err != Error::None_ {
1163            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1164        }
1165        Ok(isl_rs_result)
1166    }
1167
1168    /// Wraps `isl_pw_multi_aff_involves_param_id`.
1169    pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
1170        let pma = self;
1171        let isl_rs_ctx = pma.get_ctx();
1172        let pma = pma.ptr;
1173        let id = id.ptr;
1174        let isl_rs_result = unsafe { isl_pw_multi_aff_involves_param_id(pma, id) };
1175        let isl_rs_result = match isl_rs_result {
1176            0 => false,
1177            1 => true,
1178            _ => panic!("Got isl_bool = -1"),
1179        };
1180        let err = isl_rs_ctx.last_error();
1181        if err != Error::None_ {
1182            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1183        }
1184        Ok(isl_rs_result)
1185    }
1186
1187    /// Wraps `isl_pw_multi_aff_is_equal`.
1188    pub fn is_equal(&self, pma2: &PwMultiAff) -> Result<bool, LibISLError> {
1189        let pma1 = self;
1190        let isl_rs_ctx = pma1.get_ctx();
1191        let pma1 = pma1.ptr;
1192        let pma2 = pma2.ptr;
1193        let isl_rs_result = unsafe { isl_pw_multi_aff_is_equal(pma1, pma2) };
1194        let isl_rs_result = match isl_rs_result {
1195            0 => false,
1196            1 => true,
1197            _ => panic!("Got isl_bool = -1"),
1198        };
1199        let err = isl_rs_ctx.last_error();
1200        if err != Error::None_ {
1201            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1202        }
1203        Ok(isl_rs_result)
1204    }
1205
1206    /// Wraps `isl_pw_multi_aff_isa_multi_aff`.
1207    pub fn isa_multi_aff(&self) -> Result<bool, LibISLError> {
1208        let pma = self;
1209        let isl_rs_ctx = pma.get_ctx();
1210        let pma = pma.ptr;
1211        let isl_rs_result = unsafe { isl_pw_multi_aff_isa_multi_aff(pma) };
1212        let isl_rs_result = match isl_rs_result {
1213            0 => false,
1214            1 => true,
1215            _ => panic!("Got isl_bool = -1"),
1216        };
1217        let err = isl_rs_ctx.last_error();
1218        if err != Error::None_ {
1219            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1220        }
1221        Ok(isl_rs_result)
1222    }
1223
1224    /// Wraps `isl_pw_multi_aff_max_multi_val`.
1225    pub fn max_multi_val(self) -> Result<MultiVal, LibISLError> {
1226        let pma = self;
1227        let isl_rs_ctx = pma.get_ctx();
1228        let mut pma = pma;
1229        pma.do_not_free_on_drop();
1230        let pma = pma.ptr;
1231        let isl_rs_result = unsafe { isl_pw_multi_aff_max_multi_val(pma) };
1232        let isl_rs_result = MultiVal { ptr: isl_rs_result,
1233                                       should_free_on_drop: true };
1234        let err = isl_rs_ctx.last_error();
1235        if err != Error::None_ {
1236            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1237        }
1238        Ok(isl_rs_result)
1239    }
1240
1241    /// Wraps `isl_pw_multi_aff_min_multi_val`.
1242    pub fn min_multi_val(self) -> Result<MultiVal, LibISLError> {
1243        let pma = self;
1244        let isl_rs_ctx = pma.get_ctx();
1245        let mut pma = pma;
1246        pma.do_not_free_on_drop();
1247        let pma = pma.ptr;
1248        let isl_rs_result = unsafe { isl_pw_multi_aff_min_multi_val(pma) };
1249        let isl_rs_result = MultiVal { ptr: isl_rs_result,
1250                                       should_free_on_drop: true };
1251        let err = isl_rs_ctx.last_error();
1252        if err != Error::None_ {
1253            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1254        }
1255        Ok(isl_rs_result)
1256    }
1257
1258    /// Wraps `isl_pw_multi_aff_multi_val_on_domain`.
1259    pub fn multi_val_on_domain(domain: Set, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1260        let isl_rs_ctx = domain.get_ctx();
1261        let mut domain = domain;
1262        domain.do_not_free_on_drop();
1263        let domain = domain.ptr;
1264        let mut mv = mv;
1265        mv.do_not_free_on_drop();
1266        let mv = mv.ptr;
1267        let isl_rs_result = unsafe { isl_pw_multi_aff_multi_val_on_domain(domain, mv) };
1268        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1269                                         should_free_on_drop: true };
1270        let err = isl_rs_ctx.last_error();
1271        if err != Error::None_ {
1272            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1273        }
1274        Ok(isl_rs_result)
1275    }
1276
1277    /// Wraps `isl_pw_multi_aff_n_piece`.
1278    pub fn n_piece(&self) -> Result<i32, LibISLError> {
1279        let pma = self;
1280        let isl_rs_ctx = pma.get_ctx();
1281        let pma = pma.ptr;
1282        let isl_rs_result = unsafe { isl_pw_multi_aff_n_piece(pma) };
1283        let err = isl_rs_ctx.last_error();
1284        if err != Error::None_ {
1285            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1286        }
1287        Ok(isl_rs_result)
1288    }
1289
1290    /// Wraps `isl_pw_multi_aff_neg`.
1291    pub fn neg(self) -> Result<PwMultiAff, LibISLError> {
1292        let pma = self;
1293        let isl_rs_ctx = pma.get_ctx();
1294        let mut pma = pma;
1295        pma.do_not_free_on_drop();
1296        let pma = pma.ptr;
1297        let isl_rs_result = unsafe { isl_pw_multi_aff_neg(pma) };
1298        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1299                                         should_free_on_drop: true };
1300        let err = isl_rs_ctx.last_error();
1301        if err != Error::None_ {
1302            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1303        }
1304        Ok(isl_rs_result)
1305    }
1306
1307    /// Wraps `isl_pw_multi_aff_plain_is_equal`.
1308    pub fn plain_is_equal(&self, pma2: &PwMultiAff) -> Result<bool, LibISLError> {
1309        let pma1 = self;
1310        let isl_rs_ctx = pma1.get_ctx();
1311        let pma1 = pma1.ptr;
1312        let pma2 = pma2.ptr;
1313        let isl_rs_result = unsafe { isl_pw_multi_aff_plain_is_equal(pma1, pma2) };
1314        let isl_rs_result = match isl_rs_result {
1315            0 => false,
1316            1 => true,
1317            _ => panic!("Got isl_bool = -1"),
1318        };
1319        let err = isl_rs_ctx.last_error();
1320        if err != Error::None_ {
1321            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1322        }
1323        Ok(isl_rs_result)
1324    }
1325
1326    /// Wraps `isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff`.
1327    pub fn preimage_domain_wrapped_domain_pw_multi_aff(self, pma2: PwMultiAff)
1328                                                       -> Result<PwMultiAff, LibISLError> {
1329        let pma1 = self;
1330        let isl_rs_ctx = pma1.get_ctx();
1331        let mut pma1 = pma1;
1332        pma1.do_not_free_on_drop();
1333        let pma1 = pma1.ptr;
1334        let mut pma2 = pma2;
1335        pma2.do_not_free_on_drop();
1336        let pma2 = pma2.ptr;
1337        let isl_rs_result =
1338            unsafe { isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(pma1, pma2) };
1339        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1340                                         should_free_on_drop: true };
1341        let err = isl_rs_ctx.last_error();
1342        if err != Error::None_ {
1343            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1344        }
1345        Ok(isl_rs_result)
1346    }
1347
1348    /// Wraps `isl_pw_multi_aff_product`.
1349    pub fn product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1350        let pma1 = self;
1351        let isl_rs_ctx = pma1.get_ctx();
1352        let mut pma1 = pma1;
1353        pma1.do_not_free_on_drop();
1354        let pma1 = pma1.ptr;
1355        let mut pma2 = pma2;
1356        pma2.do_not_free_on_drop();
1357        let pma2 = pma2.ptr;
1358        let isl_rs_result = unsafe { isl_pw_multi_aff_product(pma1, pma2) };
1359        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1360                                         should_free_on_drop: true };
1361        let err = isl_rs_ctx.last_error();
1362        if err != Error::None_ {
1363            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1364        }
1365        Ok(isl_rs_result)
1366    }
1367
1368    /// Wraps `isl_pw_multi_aff_project_domain_on_params`.
1369    pub fn project_domain_on_params(self) -> Result<PwMultiAff, LibISLError> {
1370        let pma = self;
1371        let isl_rs_ctx = pma.get_ctx();
1372        let mut pma = pma;
1373        pma.do_not_free_on_drop();
1374        let pma = pma.ptr;
1375        let isl_rs_result = unsafe { isl_pw_multi_aff_project_domain_on_params(pma) };
1376        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1377                                         should_free_on_drop: true };
1378        let err = isl_rs_ctx.last_error();
1379        if err != Error::None_ {
1380            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1381        }
1382        Ok(isl_rs_result)
1383    }
1384
1385    /// Wraps `isl_pw_multi_aff_project_out_map`.
1386    pub fn project_out_map(space: Space, type_: DimType, first: u32, n: u32)
1387                           -> Result<PwMultiAff, LibISLError> {
1388        let isl_rs_ctx = space.get_ctx();
1389        let mut space = space;
1390        space.do_not_free_on_drop();
1391        let space = space.ptr;
1392        let type_ = type_.to_i32();
1393        let isl_rs_result = unsafe { isl_pw_multi_aff_project_out_map(space, type_, first, n) };
1394        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1395                                         should_free_on_drop: true };
1396        let err = isl_rs_ctx.last_error();
1397        if err != Error::None_ {
1398            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1399        }
1400        Ok(isl_rs_result)
1401    }
1402
1403    /// Wraps `isl_pw_multi_aff_pullback_multi_aff`.
1404    pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<PwMultiAff, LibISLError> {
1405        let pma = self;
1406        let isl_rs_ctx = pma.get_ctx();
1407        let mut pma = pma;
1408        pma.do_not_free_on_drop();
1409        let pma = pma.ptr;
1410        let mut ma = ma;
1411        ma.do_not_free_on_drop();
1412        let ma = ma.ptr;
1413        let isl_rs_result = unsafe { isl_pw_multi_aff_pullback_multi_aff(pma, ma) };
1414        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1415                                         should_free_on_drop: true };
1416        let err = isl_rs_ctx.last_error();
1417        if err != Error::None_ {
1418            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1419        }
1420        Ok(isl_rs_result)
1421    }
1422
1423    /// Wraps `isl_pw_multi_aff_pullback_pw_multi_aff`.
1424    pub fn pullback_pw_multi_aff(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1425        let pma1 = self;
1426        let isl_rs_ctx = pma1.get_ctx();
1427        let mut pma1 = pma1;
1428        pma1.do_not_free_on_drop();
1429        let pma1 = pma1.ptr;
1430        let mut pma2 = pma2;
1431        pma2.do_not_free_on_drop();
1432        let pma2 = pma2.ptr;
1433        let isl_rs_result = unsafe { isl_pw_multi_aff_pullback_pw_multi_aff(pma1, pma2) };
1434        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1435                                         should_free_on_drop: true };
1436        let err = isl_rs_ctx.last_error();
1437        if err != Error::None_ {
1438            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1439        }
1440        Ok(isl_rs_result)
1441    }
1442
1443    /// Wraps `isl_pw_multi_aff_range_factor_domain`.
1444    pub fn range_factor_domain(self) -> Result<PwMultiAff, LibISLError> {
1445        let pma = self;
1446        let isl_rs_ctx = pma.get_ctx();
1447        let mut pma = pma;
1448        pma.do_not_free_on_drop();
1449        let pma = pma.ptr;
1450        let isl_rs_result = unsafe { isl_pw_multi_aff_range_factor_domain(pma) };
1451        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1452                                         should_free_on_drop: true };
1453        let err = isl_rs_ctx.last_error();
1454        if err != Error::None_ {
1455            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1456        }
1457        Ok(isl_rs_result)
1458    }
1459
1460    /// Wraps `isl_pw_multi_aff_range_factor_range`.
1461    pub fn range_factor_range(self) -> Result<PwMultiAff, LibISLError> {
1462        let pma = self;
1463        let isl_rs_ctx = pma.get_ctx();
1464        let mut pma = pma;
1465        pma.do_not_free_on_drop();
1466        let pma = pma.ptr;
1467        let isl_rs_result = unsafe { isl_pw_multi_aff_range_factor_range(pma) };
1468        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1469                                         should_free_on_drop: true };
1470        let err = isl_rs_ctx.last_error();
1471        if err != Error::None_ {
1472            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1473        }
1474        Ok(isl_rs_result)
1475    }
1476
1477    /// Wraps `isl_pw_multi_aff_range_map`.
1478    pub fn range_map(space: Space) -> Result<PwMultiAff, LibISLError> {
1479        let isl_rs_ctx = space.get_ctx();
1480        let mut space = space;
1481        space.do_not_free_on_drop();
1482        let space = space.ptr;
1483        let isl_rs_result = unsafe { isl_pw_multi_aff_range_map(space) };
1484        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1485                                         should_free_on_drop: true };
1486        let err = isl_rs_ctx.last_error();
1487        if err != Error::None_ {
1488            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1489        }
1490        Ok(isl_rs_result)
1491    }
1492
1493    /// Wraps `isl_pw_multi_aff_range_product`.
1494    pub fn range_product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1495        let pma1 = self;
1496        let isl_rs_ctx = pma1.get_ctx();
1497        let mut pma1 = pma1;
1498        pma1.do_not_free_on_drop();
1499        let pma1 = pma1.ptr;
1500        let mut pma2 = pma2;
1501        pma2.do_not_free_on_drop();
1502        let pma2 = pma2.ptr;
1503        let isl_rs_result = unsafe { isl_pw_multi_aff_range_product(pma1, pma2) };
1504        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1505                                         should_free_on_drop: true };
1506        let err = isl_rs_ctx.last_error();
1507        if err != Error::None_ {
1508            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1509        }
1510        Ok(isl_rs_result)
1511    }
1512
1513    /// Wraps `isl_pw_multi_aff_read_from_str`.
1514    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<PwMultiAff, LibISLError> {
1515        let isl_rs_ctx = Context { ptr: ctx.ptr,
1516                                   should_free_on_drop: false };
1517        let ctx = ctx.ptr;
1518        let str_ = CString::new(str_).unwrap();
1519        let str_ = str_.as_ptr();
1520        let isl_rs_result = unsafe { isl_pw_multi_aff_read_from_str(ctx, str_) };
1521        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1522                                         should_free_on_drop: true };
1523        let err = isl_rs_ctx.last_error();
1524        if err != Error::None_ {
1525            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1526        }
1527        Ok(isl_rs_result)
1528    }
1529
1530    /// Wraps `isl_pw_multi_aff_reset_tuple_id`.
1531    pub fn reset_tuple_id(self, type_: DimType) -> Result<PwMultiAff, LibISLError> {
1532        let pma = self;
1533        let isl_rs_ctx = pma.get_ctx();
1534        let mut pma = pma;
1535        pma.do_not_free_on_drop();
1536        let pma = pma.ptr;
1537        let type_ = type_.to_i32();
1538        let isl_rs_result = unsafe { isl_pw_multi_aff_reset_tuple_id(pma, type_) };
1539        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1540                                         should_free_on_drop: true };
1541        let err = isl_rs_ctx.last_error();
1542        if err != Error::None_ {
1543            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1544        }
1545        Ok(isl_rs_result)
1546    }
1547
1548    /// Wraps `isl_pw_multi_aff_reset_user`.
1549    pub fn reset_user(self) -> Result<PwMultiAff, LibISLError> {
1550        let pma = self;
1551        let isl_rs_ctx = pma.get_ctx();
1552        let mut pma = pma;
1553        pma.do_not_free_on_drop();
1554        let pma = pma.ptr;
1555        let isl_rs_result = unsafe { isl_pw_multi_aff_reset_user(pma) };
1556        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1557                                         should_free_on_drop: true };
1558        let err = isl_rs_ctx.last_error();
1559        if err != Error::None_ {
1560            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1561        }
1562        Ok(isl_rs_result)
1563    }
1564
1565    /// Wraps `isl_pw_multi_aff_scale_down_multi_val`.
1566    pub fn scale_down_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1567        let pma = self;
1568        let isl_rs_ctx = pma.get_ctx();
1569        let mut pma = pma;
1570        pma.do_not_free_on_drop();
1571        let pma = pma.ptr;
1572        let mut mv = mv;
1573        mv.do_not_free_on_drop();
1574        let mv = mv.ptr;
1575        let isl_rs_result = unsafe { isl_pw_multi_aff_scale_down_multi_val(pma, mv) };
1576        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1577                                         should_free_on_drop: true };
1578        let err = isl_rs_ctx.last_error();
1579        if err != Error::None_ {
1580            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1581        }
1582        Ok(isl_rs_result)
1583    }
1584
1585    /// Wraps `isl_pw_multi_aff_scale_down_val`.
1586    pub fn scale_down_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
1587        let pma = self;
1588        let isl_rs_ctx = pma.get_ctx();
1589        let mut pma = pma;
1590        pma.do_not_free_on_drop();
1591        let pma = pma.ptr;
1592        let mut v = v;
1593        v.do_not_free_on_drop();
1594        let v = v.ptr;
1595        let isl_rs_result = unsafe { isl_pw_multi_aff_scale_down_val(pma, v) };
1596        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1597                                         should_free_on_drop: true };
1598        let err = isl_rs_ctx.last_error();
1599        if err != Error::None_ {
1600            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1601        }
1602        Ok(isl_rs_result)
1603    }
1604
1605    /// Wraps `isl_pw_multi_aff_scale_multi_val`.
1606    pub fn scale_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1607        let pma = self;
1608        let isl_rs_ctx = pma.get_ctx();
1609        let mut pma = pma;
1610        pma.do_not_free_on_drop();
1611        let pma = pma.ptr;
1612        let mut mv = mv;
1613        mv.do_not_free_on_drop();
1614        let mv = mv.ptr;
1615        let isl_rs_result = unsafe { isl_pw_multi_aff_scale_multi_val(pma, mv) };
1616        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1617                                         should_free_on_drop: true };
1618        let err = isl_rs_ctx.last_error();
1619        if err != Error::None_ {
1620            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1621        }
1622        Ok(isl_rs_result)
1623    }
1624
1625    /// Wraps `isl_pw_multi_aff_scale_val`.
1626    pub fn scale_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
1627        let pma = self;
1628        let isl_rs_ctx = pma.get_ctx();
1629        let mut pma = pma;
1630        pma.do_not_free_on_drop();
1631        let pma = pma.ptr;
1632        let mut v = v;
1633        v.do_not_free_on_drop();
1634        let v = v.ptr;
1635        let isl_rs_result = unsafe { isl_pw_multi_aff_scale_val(pma, v) };
1636        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1637                                         should_free_on_drop: true };
1638        let err = isl_rs_ctx.last_error();
1639        if err != Error::None_ {
1640            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1641        }
1642        Ok(isl_rs_result)
1643    }
1644
1645    /// Wraps `isl_pw_multi_aff_set_dim_id`.
1646    pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<PwMultiAff, LibISLError> {
1647        let pma = self;
1648        let isl_rs_ctx = pma.get_ctx();
1649        let mut pma = pma;
1650        pma.do_not_free_on_drop();
1651        let pma = pma.ptr;
1652        let type_ = type_.to_i32();
1653        let mut id = id;
1654        id.do_not_free_on_drop();
1655        let id = id.ptr;
1656        let isl_rs_result = unsafe { isl_pw_multi_aff_set_dim_id(pma, type_, pos, id) };
1657        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1658                                         should_free_on_drop: true };
1659        let err = isl_rs_ctx.last_error();
1660        if err != Error::None_ {
1661            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1662        }
1663        Ok(isl_rs_result)
1664    }
1665
1666    /// Wraps `isl_pw_multi_aff_set_pw_aff`.
1667    pub fn set_pw_aff(self, pos: u32, pa: PwAff) -> Result<PwMultiAff, LibISLError> {
1668        let pma = self;
1669        let isl_rs_ctx = pma.get_ctx();
1670        let mut pma = pma;
1671        pma.do_not_free_on_drop();
1672        let pma = pma.ptr;
1673        let mut pa = pa;
1674        pa.do_not_free_on_drop();
1675        let pa = pa.ptr;
1676        let isl_rs_result = unsafe { isl_pw_multi_aff_set_pw_aff(pma, pos, pa) };
1677        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1678                                         should_free_on_drop: true };
1679        let err = isl_rs_ctx.last_error();
1680        if err != Error::None_ {
1681            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1682        }
1683        Ok(isl_rs_result)
1684    }
1685
1686    /// Wraps `isl_pw_multi_aff_set_range_tuple_id`.
1687    pub fn set_range_tuple_id(self, id: Id) -> Result<PwMultiAff, LibISLError> {
1688        let pma = self;
1689        let isl_rs_ctx = pma.get_ctx();
1690        let mut pma = pma;
1691        pma.do_not_free_on_drop();
1692        let pma = pma.ptr;
1693        let mut id = id;
1694        id.do_not_free_on_drop();
1695        let id = id.ptr;
1696        let isl_rs_result = unsafe { isl_pw_multi_aff_set_range_tuple_id(pma, id) };
1697        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1698                                         should_free_on_drop: true };
1699        let err = isl_rs_ctx.last_error();
1700        if err != Error::None_ {
1701            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1702        }
1703        Ok(isl_rs_result)
1704    }
1705
1706    /// Wraps `isl_pw_multi_aff_set_tuple_id`.
1707    pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<PwMultiAff, LibISLError> {
1708        let pma = self;
1709        let isl_rs_ctx = pma.get_ctx();
1710        let mut pma = pma;
1711        pma.do_not_free_on_drop();
1712        let pma = pma.ptr;
1713        let type_ = type_.to_i32();
1714        let mut id = id;
1715        id.do_not_free_on_drop();
1716        let id = id.ptr;
1717        let isl_rs_result = unsafe { isl_pw_multi_aff_set_tuple_id(pma, type_, id) };
1718        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1719                                         should_free_on_drop: true };
1720        let err = isl_rs_ctx.last_error();
1721        if err != Error::None_ {
1722            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1723        }
1724        Ok(isl_rs_result)
1725    }
1726
1727    /// Wraps `isl_pw_multi_aff_sub`.
1728    pub fn sub(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1729        let pma1 = self;
1730        let isl_rs_ctx = pma1.get_ctx();
1731        let mut pma1 = pma1;
1732        pma1.do_not_free_on_drop();
1733        let pma1 = pma1.ptr;
1734        let mut pma2 = pma2;
1735        pma2.do_not_free_on_drop();
1736        let pma2 = pma2.ptr;
1737        let isl_rs_result = unsafe { isl_pw_multi_aff_sub(pma1, pma2) };
1738        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1739                                         should_free_on_drop: true };
1740        let err = isl_rs_ctx.last_error();
1741        if err != Error::None_ {
1742            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1743        }
1744        Ok(isl_rs_result)
1745    }
1746
1747    /// Wraps `isl_pw_multi_aff_subtract_domain`.
1748    pub fn subtract_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1749        let pma = self;
1750        let isl_rs_ctx = pma.get_ctx();
1751        let mut pma = pma;
1752        pma.do_not_free_on_drop();
1753        let pma = pma.ptr;
1754        let mut set = set;
1755        set.do_not_free_on_drop();
1756        let set = set.ptr;
1757        let isl_rs_result = unsafe { isl_pw_multi_aff_subtract_domain(pma, set) };
1758        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1759                                         should_free_on_drop: true };
1760        let err = isl_rs_ctx.last_error();
1761        if err != Error::None_ {
1762            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1763        }
1764        Ok(isl_rs_result)
1765    }
1766
1767    /// Wraps `isl_pw_multi_aff_to_list`.
1768    pub fn to_list(self) -> Result<PwMultiAffList, LibISLError> {
1769        let el = self;
1770        let isl_rs_ctx = el.get_ctx();
1771        let mut el = el;
1772        el.do_not_free_on_drop();
1773        let el = el.ptr;
1774        let isl_rs_result = unsafe { isl_pw_multi_aff_to_list(el) };
1775        let isl_rs_result = PwMultiAffList { ptr: isl_rs_result,
1776                                             should_free_on_drop: true };
1777        let err = isl_rs_ctx.last_error();
1778        if err != Error::None_ {
1779            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1780        }
1781        Ok(isl_rs_result)
1782    }
1783
1784    /// Wraps `isl_pw_multi_aff_to_multi_pw_aff`.
1785    pub fn to_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
1786        let pma = self;
1787        let isl_rs_ctx = pma.get_ctx();
1788        let mut pma = pma;
1789        pma.do_not_free_on_drop();
1790        let pma = pma.ptr;
1791        let isl_rs_result = unsafe { isl_pw_multi_aff_to_multi_pw_aff(pma) };
1792        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1793                                         should_free_on_drop: true };
1794        let err = isl_rs_ctx.last_error();
1795        if err != Error::None_ {
1796            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1797        }
1798        Ok(isl_rs_result)
1799    }
1800
1801    /// Wraps `isl_pw_multi_aff_to_str`.
1802    pub fn to_str(&self) -> Result<&str, LibISLError> {
1803        let pma = self;
1804        let isl_rs_ctx = pma.get_ctx();
1805        let pma = pma.ptr;
1806        let isl_rs_result = unsafe { isl_pw_multi_aff_to_str(pma) };
1807        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1808        let isl_rs_result = isl_rs_result.to_str().unwrap();
1809        let err = isl_rs_ctx.last_error();
1810        if err != Error::None_ {
1811            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1812        }
1813        Ok(isl_rs_result)
1814    }
1815
1816    /// Wraps `isl_pw_multi_aff_to_union_pw_multi_aff`.
1817    pub fn to_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
1818        let pma = self;
1819        let isl_rs_ctx = pma.get_ctx();
1820        let mut pma = pma;
1821        pma.do_not_free_on_drop();
1822        let pma = pma.ptr;
1823        let isl_rs_result = unsafe { isl_pw_multi_aff_to_union_pw_multi_aff(pma) };
1824        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1825                                              should_free_on_drop: true };
1826        let err = isl_rs_ctx.last_error();
1827        if err != Error::None_ {
1828            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1829        }
1830        Ok(isl_rs_result)
1831    }
1832
1833    /// Wraps `isl_pw_multi_aff_union_add`.
1834    pub fn union_add(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1835        let pma1 = self;
1836        let isl_rs_ctx = pma1.get_ctx();
1837        let mut pma1 = pma1;
1838        pma1.do_not_free_on_drop();
1839        let pma1 = pma1.ptr;
1840        let mut pma2 = pma2;
1841        pma2.do_not_free_on_drop();
1842        let pma2 = pma2.ptr;
1843        let isl_rs_result = unsafe { isl_pw_multi_aff_union_add(pma1, pma2) };
1844        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1845                                         should_free_on_drop: true };
1846        let err = isl_rs_ctx.last_error();
1847        if err != Error::None_ {
1848            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1849        }
1850        Ok(isl_rs_result)
1851    }
1852
1853    /// Wraps `isl_pw_multi_aff_union_lexmax`.
1854    pub fn union_lexmax(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1855        let pma1 = self;
1856        let isl_rs_ctx = pma1.get_ctx();
1857        let mut pma1 = pma1;
1858        pma1.do_not_free_on_drop();
1859        let pma1 = pma1.ptr;
1860        let mut pma2 = pma2;
1861        pma2.do_not_free_on_drop();
1862        let pma2 = pma2.ptr;
1863        let isl_rs_result = unsafe { isl_pw_multi_aff_union_lexmax(pma1, pma2) };
1864        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1865                                         should_free_on_drop: true };
1866        let err = isl_rs_ctx.last_error();
1867        if err != Error::None_ {
1868            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1869        }
1870        Ok(isl_rs_result)
1871    }
1872
1873    /// Wraps `isl_pw_multi_aff_union_lexmin`.
1874    pub fn union_lexmin(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1875        let pma1 = self;
1876        let isl_rs_ctx = pma1.get_ctx();
1877        let mut pma1 = pma1;
1878        pma1.do_not_free_on_drop();
1879        let pma1 = pma1.ptr;
1880        let mut pma2 = pma2;
1881        pma2.do_not_free_on_drop();
1882        let pma2 = pma2.ptr;
1883        let isl_rs_result = unsafe { isl_pw_multi_aff_union_lexmin(pma1, pma2) };
1884        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1885                                         should_free_on_drop: true };
1886        let err = isl_rs_ctx.last_error();
1887        if err != Error::None_ {
1888            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1889        }
1890        Ok(isl_rs_result)
1891    }
1892
1893    /// Wraps `isl_pw_multi_aff_zero`.
1894    pub fn zero(space: Space) -> Result<PwMultiAff, LibISLError> {
1895        let isl_rs_ctx = space.get_ctx();
1896        let mut space = space;
1897        space.do_not_free_on_drop();
1898        let space = space.ptr;
1899        let isl_rs_result = unsafe { isl_pw_multi_aff_zero(space) };
1900        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1901                                         should_free_on_drop: true };
1902        let err = isl_rs_ctx.last_error();
1903        if err != Error::None_ {
1904            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1905        }
1906        Ok(isl_rs_result)
1907    }
1908
1909    /// Does not call isl_pw_multi_aff_free() on being dropped. (For internal
1910    /// use only.)
1911    pub fn do_not_free_on_drop(&mut self) {
1912        self.should_free_on_drop = false;
1913    }
1914}
1915
1916impl Drop for PwMultiAff {
1917    fn drop(&mut self) {
1918        if self.should_free_on_drop {
1919            unsafe {
1920                isl_pw_multi_aff_free(self.ptr);
1921            }
1922        }
1923    }
1924}