isl_rs/bindings/
pw_aff.rs

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