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