isl_rs/bindings/
aff.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    AffList, BasicSet, Context, DimType, Error, Id, LibISLError, LocalSpace, MultiAff, MultiId,
6    Point, Set, Space, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12/// Wraps `isl_aff`.
13pub struct Aff {
14    pub ptr: uintptr_t,
15    pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20    fn isl_aff_add(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
21
22    fn isl_aff_add_coefficient_si(aff: uintptr_t, type_: i32, pos: i32, v: i32) -> uintptr_t;
23
24    fn isl_aff_add_coefficient_val(aff: uintptr_t, type_: i32, pos: i32, v: uintptr_t)
25                                   -> uintptr_t;
26
27    fn isl_aff_add_constant_num_si(aff: uintptr_t, v: i32) -> uintptr_t;
28
29    fn isl_aff_add_constant_si(aff: uintptr_t, v: i32) -> uintptr_t;
30
31    fn isl_aff_add_constant_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
32
33    fn isl_aff_add_dims(aff: uintptr_t, type_: i32, n: u32) -> uintptr_t;
34
35    fn isl_aff_align_params(aff: uintptr_t, model: uintptr_t) -> uintptr_t;
36
37    fn isl_aff_bind_id(aff: uintptr_t, id: uintptr_t) -> uintptr_t;
38
39    fn isl_aff_ceil(aff: uintptr_t) -> uintptr_t;
40
41    fn isl_aff_coefficient_sgn(aff: uintptr_t, type_: i32, pos: i32) -> i32;
42
43    fn isl_aff_copy(aff: uintptr_t) -> uintptr_t;
44
45    fn isl_aff_dim(aff: uintptr_t, type_: i32) -> i32;
46
47    fn isl_aff_div(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
48
49    fn isl_aff_domain_reverse(aff: uintptr_t) -> uintptr_t;
50
51    fn isl_aff_drop_dims(aff: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
52
53    fn isl_aff_dump(aff: uintptr_t) -> ();
54
55    fn isl_aff_eq_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
56
57    fn isl_aff_eq_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
58
59    fn isl_aff_eval(aff: uintptr_t, pnt: uintptr_t) -> uintptr_t;
60
61    fn isl_aff_find_dim_by_name(aff: uintptr_t, type_: i32, name: *const c_char) -> i32;
62
63    fn isl_aff_floor(aff: uintptr_t) -> uintptr_t;
64
65    fn isl_aff_free(aff: uintptr_t) -> uintptr_t;
66
67    fn isl_aff_from_range(aff: uintptr_t) -> uintptr_t;
68
69    fn isl_aff_ge_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
70
71    fn isl_aff_ge_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
72
73    fn isl_aff_get_coefficient_val(aff: uintptr_t, type_: i32, pos: i32) -> uintptr_t;
74
75    fn isl_aff_get_constant_val(aff: uintptr_t) -> uintptr_t;
76
77    fn isl_aff_get_ctx(aff: uintptr_t) -> uintptr_t;
78
79    fn isl_aff_get_denominator_val(aff: uintptr_t) -> uintptr_t;
80
81    fn isl_aff_get_dim_name(aff: uintptr_t, type_: i32, pos: u32) -> *const c_char;
82
83    fn isl_aff_get_div(aff: uintptr_t, pos: i32) -> uintptr_t;
84
85    fn isl_aff_get_domain_local_space(aff: uintptr_t) -> uintptr_t;
86
87    fn isl_aff_get_domain_space(aff: uintptr_t) -> uintptr_t;
88
89    fn isl_aff_get_hash(aff: uintptr_t) -> u32;
90
91    fn isl_aff_get_local_space(aff: uintptr_t) -> uintptr_t;
92
93    fn isl_aff_get_space(aff: uintptr_t) -> uintptr_t;
94
95    fn isl_aff_gist(aff: uintptr_t, context: uintptr_t) -> uintptr_t;
96
97    fn isl_aff_gist_params(aff: uintptr_t, context: uintptr_t) -> uintptr_t;
98
99    fn isl_aff_gt_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
100
101    fn isl_aff_gt_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
102
103    fn isl_aff_insert_dims(aff: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
104
105    fn isl_aff_involves_dims(aff: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
106
107    fn isl_aff_involves_locals(aff: uintptr_t) -> i32;
108
109    fn isl_aff_is_cst(aff: uintptr_t) -> i32;
110
111    fn isl_aff_is_nan(aff: uintptr_t) -> i32;
112
113    fn isl_aff_le_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
114
115    fn isl_aff_le_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
116
117    fn isl_aff_lt_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
118
119    fn isl_aff_lt_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
120
121    fn isl_aff_mod_val(aff: uintptr_t, mod_: uintptr_t) -> uintptr_t;
122
123    fn isl_aff_move_dims(aff: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32, src_pos: u32,
124                         n: u32)
125                         -> uintptr_t;
126
127    fn isl_aff_mul(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
128
129    fn isl_aff_nan_on_domain(ls: uintptr_t) -> uintptr_t;
130
131    fn isl_aff_nan_on_domain_space(space: uintptr_t) -> uintptr_t;
132
133    fn isl_aff_ne_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
134
135    fn isl_aff_neg(aff: uintptr_t) -> uintptr_t;
136
137    fn isl_aff_neg_basic_set(aff: uintptr_t) -> uintptr_t;
138
139    fn isl_aff_param_on_domain_space_id(space: uintptr_t, id: uintptr_t) -> uintptr_t;
140
141    fn isl_aff_plain_is_equal(aff1: uintptr_t, aff2: uintptr_t) -> i32;
142
143    fn isl_aff_plain_is_zero(aff: uintptr_t) -> i32;
144
145    fn isl_aff_project_domain_on_params(aff: uintptr_t) -> uintptr_t;
146
147    fn isl_aff_pullback_aff(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
148
149    fn isl_aff_pullback_multi_aff(aff: uintptr_t, ma: uintptr_t) -> uintptr_t;
150
151    fn isl_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
152
153    fn isl_aff_scale_down_ui(aff: uintptr_t, f: u32) -> uintptr_t;
154
155    fn isl_aff_scale_down_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
156
157    fn isl_aff_scale_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
158
159    fn isl_aff_set_coefficient_si(aff: uintptr_t, type_: i32, pos: i32, v: i32) -> uintptr_t;
160
161    fn isl_aff_set_coefficient_val(aff: uintptr_t, type_: i32, pos: i32, v: uintptr_t)
162                                   -> uintptr_t;
163
164    fn isl_aff_set_constant_si(aff: uintptr_t, v: i32) -> uintptr_t;
165
166    fn isl_aff_set_constant_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
167
168    fn isl_aff_set_dim_id(aff: uintptr_t, type_: i32, pos: u32, id: uintptr_t) -> uintptr_t;
169
170    fn isl_aff_set_dim_name(aff: uintptr_t, type_: i32, pos: u32, s: *const c_char) -> uintptr_t;
171
172    fn isl_aff_set_tuple_id(aff: uintptr_t, type_: i32, id: uintptr_t) -> uintptr_t;
173
174    fn isl_aff_sub(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
175
176    fn isl_aff_to_list(el: uintptr_t) -> uintptr_t;
177
178    fn isl_aff_to_str(aff: uintptr_t) -> *const c_char;
179
180    fn isl_aff_unbind_params_insert_domain(aff: uintptr_t, domain: uintptr_t) -> uintptr_t;
181
182    fn isl_aff_val_on_domain(ls: uintptr_t, val: uintptr_t) -> uintptr_t;
183
184    fn isl_aff_val_on_domain_space(space: uintptr_t, val: uintptr_t) -> uintptr_t;
185
186    fn isl_aff_var_on_domain(ls: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
187
188    fn isl_aff_zero_basic_set(aff: uintptr_t) -> uintptr_t;
189
190    fn isl_aff_zero_on_domain(ls: uintptr_t) -> uintptr_t;
191
192    fn isl_aff_zero_on_domain_space(space: uintptr_t) -> uintptr_t;
193
194}
195
196impl Aff {
197    /// Wraps `isl_aff_add`.
198    pub fn add(self, aff2: Aff) -> Result<Aff, LibISLError> {
199        let aff1 = self;
200        let isl_rs_ctx = aff1.get_ctx();
201        let mut aff1 = aff1;
202        aff1.do_not_free_on_drop();
203        let aff1 = aff1.ptr;
204        let mut aff2 = aff2;
205        aff2.do_not_free_on_drop();
206        let aff2 = aff2.ptr;
207        let isl_rs_result = unsafe { isl_aff_add(aff1, aff2) };
208        let isl_rs_result = Aff { ptr: isl_rs_result,
209                                  should_free_on_drop: true };
210        let err = isl_rs_ctx.last_error();
211        if err != Error::None_ {
212            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
213        }
214        Ok(isl_rs_result)
215    }
216
217    /// Wraps `isl_aff_add_coefficient_si`.
218    pub fn add_coefficient_si(self, type_: DimType, pos: i32, v: i32) -> Result<Aff, LibISLError> {
219        let aff = self;
220        let isl_rs_ctx = aff.get_ctx();
221        let mut aff = aff;
222        aff.do_not_free_on_drop();
223        let aff = aff.ptr;
224        let type_ = type_.to_i32();
225        let isl_rs_result = unsafe { isl_aff_add_coefficient_si(aff, type_, pos, v) };
226        let isl_rs_result = Aff { ptr: isl_rs_result,
227                                  should_free_on_drop: true };
228        let err = isl_rs_ctx.last_error();
229        if err != Error::None_ {
230            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
231        }
232        Ok(isl_rs_result)
233    }
234
235    /// Wraps `isl_aff_add_coefficient_val`.
236    pub fn add_coefficient_val(self, type_: DimType, pos: i32, v: Val) -> Result<Aff, LibISLError> {
237        let aff = self;
238        let isl_rs_ctx = aff.get_ctx();
239        let mut aff = aff;
240        aff.do_not_free_on_drop();
241        let aff = aff.ptr;
242        let type_ = type_.to_i32();
243        let mut v = v;
244        v.do_not_free_on_drop();
245        let v = v.ptr;
246        let isl_rs_result = unsafe { isl_aff_add_coefficient_val(aff, type_, pos, v) };
247        let isl_rs_result = Aff { ptr: isl_rs_result,
248                                  should_free_on_drop: true };
249        let err = isl_rs_ctx.last_error();
250        if err != Error::None_ {
251            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
252        }
253        Ok(isl_rs_result)
254    }
255
256    /// Wraps `isl_aff_add_constant_num_si`.
257    pub fn add_constant_num_si(self, v: i32) -> Result<Aff, LibISLError> {
258        let aff = self;
259        let isl_rs_ctx = aff.get_ctx();
260        let mut aff = aff;
261        aff.do_not_free_on_drop();
262        let aff = aff.ptr;
263        let isl_rs_result = unsafe { isl_aff_add_constant_num_si(aff, v) };
264        let isl_rs_result = Aff { ptr: isl_rs_result,
265                                  should_free_on_drop: true };
266        let err = isl_rs_ctx.last_error();
267        if err != Error::None_ {
268            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
269        }
270        Ok(isl_rs_result)
271    }
272
273    /// Wraps `isl_aff_add_constant_si`.
274    pub fn add_constant_si(self, v: i32) -> Result<Aff, LibISLError> {
275        let aff = self;
276        let isl_rs_ctx = aff.get_ctx();
277        let mut aff = aff;
278        aff.do_not_free_on_drop();
279        let aff = aff.ptr;
280        let isl_rs_result = unsafe { isl_aff_add_constant_si(aff, v) };
281        let isl_rs_result = Aff { ptr: isl_rs_result,
282                                  should_free_on_drop: true };
283        let err = isl_rs_ctx.last_error();
284        if err != Error::None_ {
285            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
286        }
287        Ok(isl_rs_result)
288    }
289
290    /// Wraps `isl_aff_add_constant_val`.
291    pub fn add_constant_val(self, v: Val) -> Result<Aff, LibISLError> {
292        let aff = self;
293        let isl_rs_ctx = aff.get_ctx();
294        let mut aff = aff;
295        aff.do_not_free_on_drop();
296        let aff = aff.ptr;
297        let mut v = v;
298        v.do_not_free_on_drop();
299        let v = v.ptr;
300        let isl_rs_result = unsafe { isl_aff_add_constant_val(aff, v) };
301        let isl_rs_result = Aff { ptr: isl_rs_result,
302                                  should_free_on_drop: true };
303        let err = isl_rs_ctx.last_error();
304        if err != Error::None_ {
305            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
306        }
307        Ok(isl_rs_result)
308    }
309
310    /// Wraps `isl_aff_add_dims`.
311    pub fn add_dims(self, type_: DimType, n: u32) -> Result<Aff, LibISLError> {
312        let aff = self;
313        let isl_rs_ctx = aff.get_ctx();
314        let mut aff = aff;
315        aff.do_not_free_on_drop();
316        let aff = aff.ptr;
317        let type_ = type_.to_i32();
318        let isl_rs_result = unsafe { isl_aff_add_dims(aff, type_, n) };
319        let isl_rs_result = Aff { ptr: isl_rs_result,
320                                  should_free_on_drop: true };
321        let err = isl_rs_ctx.last_error();
322        if err != Error::None_ {
323            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
324        }
325        Ok(isl_rs_result)
326    }
327
328    /// Wraps `isl_aff_align_params`.
329    pub fn align_params(self, model: Space) -> Result<Aff, LibISLError> {
330        let aff = self;
331        let isl_rs_ctx = aff.get_ctx();
332        let mut aff = aff;
333        aff.do_not_free_on_drop();
334        let aff = aff.ptr;
335        let mut model = model;
336        model.do_not_free_on_drop();
337        let model = model.ptr;
338        let isl_rs_result = unsafe { isl_aff_align_params(aff, model) };
339        let isl_rs_result = Aff { ptr: isl_rs_result,
340                                  should_free_on_drop: true };
341        let err = isl_rs_ctx.last_error();
342        if err != Error::None_ {
343            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
344        }
345        Ok(isl_rs_result)
346    }
347
348    /// Wraps `isl_aff_bind_id`.
349    pub fn bind_id(self, id: Id) -> Result<BasicSet, LibISLError> {
350        let aff = self;
351        let isl_rs_ctx = aff.get_ctx();
352        let mut aff = aff;
353        aff.do_not_free_on_drop();
354        let aff = aff.ptr;
355        let mut id = id;
356        id.do_not_free_on_drop();
357        let id = id.ptr;
358        let isl_rs_result = unsafe { isl_aff_bind_id(aff, id) };
359        let isl_rs_result = BasicSet { ptr: isl_rs_result,
360                                       should_free_on_drop: true };
361        let err = isl_rs_ctx.last_error();
362        if err != Error::None_ {
363            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
364        }
365        Ok(isl_rs_result)
366    }
367
368    /// Wraps `isl_aff_ceil`.
369    pub fn ceil(self) -> Result<Aff, LibISLError> {
370        let aff = self;
371        let isl_rs_ctx = aff.get_ctx();
372        let mut aff = aff;
373        aff.do_not_free_on_drop();
374        let aff = aff.ptr;
375        let isl_rs_result = unsafe { isl_aff_ceil(aff) };
376        let isl_rs_result = Aff { ptr: isl_rs_result,
377                                  should_free_on_drop: true };
378        let err = isl_rs_ctx.last_error();
379        if err != Error::None_ {
380            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
381        }
382        Ok(isl_rs_result)
383    }
384
385    /// Wraps `isl_aff_coefficient_sgn`.
386    pub fn coefficient_sgn(&self, type_: DimType, pos: i32) -> Result<i32, LibISLError> {
387        let aff = self;
388        let isl_rs_ctx = aff.get_ctx();
389        let aff = aff.ptr;
390        let type_ = type_.to_i32();
391        let isl_rs_result = unsafe { isl_aff_coefficient_sgn(aff, type_, pos) };
392        let err = isl_rs_ctx.last_error();
393        if err != Error::None_ {
394            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
395        }
396        Ok(isl_rs_result)
397    }
398
399    /// Wraps `isl_aff_copy`.
400    pub fn copy(&self) -> Result<Aff, LibISLError> {
401        let aff = self;
402        let isl_rs_ctx = aff.get_ctx();
403        let aff = aff.ptr;
404        let isl_rs_result = unsafe { isl_aff_copy(aff) };
405        let isl_rs_result = Aff { ptr: isl_rs_result,
406                                  should_free_on_drop: true };
407        let err = isl_rs_ctx.last_error();
408        if err != Error::None_ {
409            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
410        }
411        Ok(isl_rs_result)
412    }
413
414    /// Wraps `isl_aff_dim`.
415    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
416        let aff = self;
417        let isl_rs_ctx = aff.get_ctx();
418        let aff = aff.ptr;
419        let type_ = type_.to_i32();
420        let isl_rs_result = unsafe { isl_aff_dim(aff, type_) };
421        let err = isl_rs_ctx.last_error();
422        if err != Error::None_ {
423            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
424        }
425        Ok(isl_rs_result)
426    }
427
428    /// Wraps `isl_aff_div`.
429    pub fn div(self, aff2: Aff) -> Result<Aff, LibISLError> {
430        let aff1 = self;
431        let isl_rs_ctx = aff1.get_ctx();
432        let mut aff1 = aff1;
433        aff1.do_not_free_on_drop();
434        let aff1 = aff1.ptr;
435        let mut aff2 = aff2;
436        aff2.do_not_free_on_drop();
437        let aff2 = aff2.ptr;
438        let isl_rs_result = unsafe { isl_aff_div(aff1, aff2) };
439        let isl_rs_result = Aff { ptr: isl_rs_result,
440                                  should_free_on_drop: true };
441        let err = isl_rs_ctx.last_error();
442        if err != Error::None_ {
443            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
444        }
445        Ok(isl_rs_result)
446    }
447
448    /// Wraps `isl_aff_domain_reverse`.
449    pub fn domain_reverse(self) -> Result<Aff, LibISLError> {
450        let aff = self;
451        let isl_rs_ctx = aff.get_ctx();
452        let mut aff = aff;
453        aff.do_not_free_on_drop();
454        let aff = aff.ptr;
455        let isl_rs_result = unsafe { isl_aff_domain_reverse(aff) };
456        let isl_rs_result = Aff { ptr: isl_rs_result,
457                                  should_free_on_drop: true };
458        let err = isl_rs_ctx.last_error();
459        if err != Error::None_ {
460            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
461        }
462        Ok(isl_rs_result)
463    }
464
465    /// Wraps `isl_aff_drop_dims`.
466    pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<Aff, LibISLError> {
467        let aff = self;
468        let isl_rs_ctx = aff.get_ctx();
469        let mut aff = aff;
470        aff.do_not_free_on_drop();
471        let aff = aff.ptr;
472        let type_ = type_.to_i32();
473        let isl_rs_result = unsafe { isl_aff_drop_dims(aff, type_, first, n) };
474        let isl_rs_result = Aff { ptr: isl_rs_result,
475                                  should_free_on_drop: true };
476        let err = isl_rs_ctx.last_error();
477        if err != Error::None_ {
478            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
479        }
480        Ok(isl_rs_result)
481    }
482
483    /// Wraps `isl_aff_dump`.
484    pub fn dump(&self) -> Result<(), LibISLError> {
485        let aff = self;
486        let isl_rs_ctx = aff.get_ctx();
487        let aff = aff.ptr;
488        let isl_rs_result = unsafe { isl_aff_dump(aff) };
489        let err = isl_rs_ctx.last_error();
490        if err != Error::None_ {
491            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
492        }
493        Ok(isl_rs_result)
494    }
495
496    /// Wraps `isl_aff_eq_basic_set`.
497    pub fn eq_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
498        let aff1 = self;
499        let isl_rs_ctx = aff1.get_ctx();
500        let mut aff1 = aff1;
501        aff1.do_not_free_on_drop();
502        let aff1 = aff1.ptr;
503        let mut aff2 = aff2;
504        aff2.do_not_free_on_drop();
505        let aff2 = aff2.ptr;
506        let isl_rs_result = unsafe { isl_aff_eq_basic_set(aff1, aff2) };
507        let isl_rs_result = BasicSet { ptr: isl_rs_result,
508                                       should_free_on_drop: true };
509        let err = isl_rs_ctx.last_error();
510        if err != Error::None_ {
511            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
512        }
513        Ok(isl_rs_result)
514    }
515
516    /// Wraps `isl_aff_eq_set`.
517    pub fn eq_set(self, aff2: Aff) -> Result<Set, LibISLError> {
518        let aff1 = self;
519        let isl_rs_ctx = aff1.get_ctx();
520        let mut aff1 = aff1;
521        aff1.do_not_free_on_drop();
522        let aff1 = aff1.ptr;
523        let mut aff2 = aff2;
524        aff2.do_not_free_on_drop();
525        let aff2 = aff2.ptr;
526        let isl_rs_result = unsafe { isl_aff_eq_set(aff1, aff2) };
527        let isl_rs_result = Set { ptr: isl_rs_result,
528                                  should_free_on_drop: true };
529        let err = isl_rs_ctx.last_error();
530        if err != Error::None_ {
531            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
532        }
533        Ok(isl_rs_result)
534    }
535
536    /// Wraps `isl_aff_eval`.
537    pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
538        let aff = self;
539        let isl_rs_ctx = aff.get_ctx();
540        let mut aff = aff;
541        aff.do_not_free_on_drop();
542        let aff = aff.ptr;
543        let mut pnt = pnt;
544        pnt.do_not_free_on_drop();
545        let pnt = pnt.ptr;
546        let isl_rs_result = unsafe { isl_aff_eval(aff, pnt) };
547        let isl_rs_result = Val { ptr: isl_rs_result,
548                                  should_free_on_drop: true };
549        let err = isl_rs_ctx.last_error();
550        if err != Error::None_ {
551            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
552        }
553        Ok(isl_rs_result)
554    }
555
556    /// Wraps `isl_aff_find_dim_by_name`.
557    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
558        let aff = self;
559        let isl_rs_ctx = aff.get_ctx();
560        let aff = aff.ptr;
561        let type_ = type_.to_i32();
562        let name = CString::new(name).unwrap();
563        let name = name.as_ptr();
564        let isl_rs_result = unsafe { isl_aff_find_dim_by_name(aff, type_, name) };
565        let err = isl_rs_ctx.last_error();
566        if err != Error::None_ {
567            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
568        }
569        Ok(isl_rs_result)
570    }
571
572    /// Wraps `isl_aff_floor`.
573    pub fn floor(self) -> Result<Aff, LibISLError> {
574        let aff = self;
575        let isl_rs_ctx = aff.get_ctx();
576        let mut aff = aff;
577        aff.do_not_free_on_drop();
578        let aff = aff.ptr;
579        let isl_rs_result = unsafe { isl_aff_floor(aff) };
580        let isl_rs_result = Aff { ptr: isl_rs_result,
581                                  should_free_on_drop: true };
582        let err = isl_rs_ctx.last_error();
583        if err != Error::None_ {
584            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
585        }
586        Ok(isl_rs_result)
587    }
588
589    /// Wraps `isl_aff_free`.
590    pub fn free(self) -> Result<Aff, LibISLError> {
591        let aff = self;
592        let isl_rs_ctx = aff.get_ctx();
593        let mut aff = aff;
594        aff.do_not_free_on_drop();
595        let aff = aff.ptr;
596        let isl_rs_result = unsafe { isl_aff_free(aff) };
597        let isl_rs_result = Aff { ptr: isl_rs_result,
598                                  should_free_on_drop: true };
599        let err = isl_rs_ctx.last_error();
600        if err != Error::None_ {
601            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
602        }
603        Ok(isl_rs_result)
604    }
605
606    /// Wraps `isl_aff_from_range`.
607    pub fn from_range(self) -> Result<Aff, LibISLError> {
608        let aff = self;
609        let isl_rs_ctx = aff.get_ctx();
610        let mut aff = aff;
611        aff.do_not_free_on_drop();
612        let aff = aff.ptr;
613        let isl_rs_result = unsafe { isl_aff_from_range(aff) };
614        let isl_rs_result = Aff { ptr: isl_rs_result,
615                                  should_free_on_drop: true };
616        let err = isl_rs_ctx.last_error();
617        if err != Error::None_ {
618            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
619        }
620        Ok(isl_rs_result)
621    }
622
623    /// Wraps `isl_aff_ge_basic_set`.
624    pub fn ge_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
625        let aff1 = self;
626        let isl_rs_ctx = aff1.get_ctx();
627        let mut aff1 = aff1;
628        aff1.do_not_free_on_drop();
629        let aff1 = aff1.ptr;
630        let mut aff2 = aff2;
631        aff2.do_not_free_on_drop();
632        let aff2 = aff2.ptr;
633        let isl_rs_result = unsafe { isl_aff_ge_basic_set(aff1, aff2) };
634        let isl_rs_result = BasicSet { ptr: isl_rs_result,
635                                       should_free_on_drop: true };
636        let err = isl_rs_ctx.last_error();
637        if err != Error::None_ {
638            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
639        }
640        Ok(isl_rs_result)
641    }
642
643    /// Wraps `isl_aff_ge_set`.
644    pub fn ge_set(self, aff2: Aff) -> Result<Set, LibISLError> {
645        let aff1 = self;
646        let isl_rs_ctx = aff1.get_ctx();
647        let mut aff1 = aff1;
648        aff1.do_not_free_on_drop();
649        let aff1 = aff1.ptr;
650        let mut aff2 = aff2;
651        aff2.do_not_free_on_drop();
652        let aff2 = aff2.ptr;
653        let isl_rs_result = unsafe { isl_aff_ge_set(aff1, aff2) };
654        let isl_rs_result = Set { ptr: isl_rs_result,
655                                  should_free_on_drop: true };
656        let err = isl_rs_ctx.last_error();
657        if err != Error::None_ {
658            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
659        }
660        Ok(isl_rs_result)
661    }
662
663    /// Wraps `isl_aff_get_coefficient_val`.
664    pub fn get_coefficient_val(&self, type_: DimType, pos: i32) -> Result<Val, LibISLError> {
665        let aff = self;
666        let isl_rs_ctx = aff.get_ctx();
667        let aff = aff.ptr;
668        let type_ = type_.to_i32();
669        let isl_rs_result = unsafe { isl_aff_get_coefficient_val(aff, type_, pos) };
670        let isl_rs_result = Val { ptr: isl_rs_result,
671                                  should_free_on_drop: true };
672        let err = isl_rs_ctx.last_error();
673        if err != Error::None_ {
674            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
675        }
676        Ok(isl_rs_result)
677    }
678
679    /// Wraps `isl_aff_get_constant_val`.
680    pub fn get_constant_val(&self) -> Result<Val, LibISLError> {
681        let aff = self;
682        let isl_rs_ctx = aff.get_ctx();
683        let aff = aff.ptr;
684        let isl_rs_result = unsafe { isl_aff_get_constant_val(aff) };
685        let isl_rs_result = Val { ptr: isl_rs_result,
686                                  should_free_on_drop: true };
687        let err = isl_rs_ctx.last_error();
688        if err != Error::None_ {
689            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
690        }
691        Ok(isl_rs_result)
692    }
693
694    /// Wraps `isl_aff_get_ctx`.
695    pub fn get_ctx(&self) -> Context {
696        let aff = self;
697        let aff = aff.ptr;
698        let isl_rs_result = unsafe { isl_aff_get_ctx(aff) };
699        let isl_rs_result = Context { ptr: isl_rs_result,
700                                      should_free_on_drop: false };
701        isl_rs_result
702    }
703
704    /// Wraps `isl_aff_get_denominator_val`.
705    pub fn get_denominator_val(&self) -> Result<Val, LibISLError> {
706        let aff = self;
707        let isl_rs_ctx = aff.get_ctx();
708        let aff = aff.ptr;
709        let isl_rs_result = unsafe { isl_aff_get_denominator_val(aff) };
710        let isl_rs_result = Val { ptr: isl_rs_result,
711                                  should_free_on_drop: true };
712        let err = isl_rs_ctx.last_error();
713        if err != Error::None_ {
714            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
715        }
716        Ok(isl_rs_result)
717    }
718
719    /// Wraps `isl_aff_get_dim_name`.
720    pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
721        let aff = self;
722        let isl_rs_ctx = aff.get_ctx();
723        let aff = aff.ptr;
724        let type_ = type_.to_i32();
725        let isl_rs_result = unsafe { isl_aff_get_dim_name(aff, type_, pos) };
726        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
727        let isl_rs_result = isl_rs_result.to_str().unwrap();
728        let err = isl_rs_ctx.last_error();
729        if err != Error::None_ {
730            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
731        }
732        Ok(isl_rs_result)
733    }
734
735    /// Wraps `isl_aff_get_div`.
736    pub fn get_div(&self, pos: i32) -> Result<Aff, LibISLError> {
737        let aff = self;
738        let isl_rs_ctx = aff.get_ctx();
739        let aff = aff.ptr;
740        let isl_rs_result = unsafe { isl_aff_get_div(aff, pos) };
741        let isl_rs_result = Aff { ptr: isl_rs_result,
742                                  should_free_on_drop: true };
743        let err = isl_rs_ctx.last_error();
744        if err != Error::None_ {
745            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
746        }
747        Ok(isl_rs_result)
748    }
749
750    /// Wraps `isl_aff_get_domain_local_space`.
751    pub fn get_domain_local_space(&self) -> Result<LocalSpace, LibISLError> {
752        let aff = self;
753        let isl_rs_ctx = aff.get_ctx();
754        let aff = aff.ptr;
755        let isl_rs_result = unsafe { isl_aff_get_domain_local_space(aff) };
756        let isl_rs_result = LocalSpace { ptr: isl_rs_result,
757                                         should_free_on_drop: true };
758        let err = isl_rs_ctx.last_error();
759        if err != Error::None_ {
760            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
761        }
762        Ok(isl_rs_result)
763    }
764
765    /// Wraps `isl_aff_get_domain_space`.
766    pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
767        let aff = self;
768        let isl_rs_ctx = aff.get_ctx();
769        let aff = aff.ptr;
770        let isl_rs_result = unsafe { isl_aff_get_domain_space(aff) };
771        let isl_rs_result = Space { ptr: isl_rs_result,
772                                    should_free_on_drop: true };
773        let err = isl_rs_ctx.last_error();
774        if err != Error::None_ {
775            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
776        }
777        Ok(isl_rs_result)
778    }
779
780    /// Wraps `isl_aff_get_hash`.
781    pub fn get_hash(&self) -> Result<u32, LibISLError> {
782        let aff = self;
783        let isl_rs_ctx = aff.get_ctx();
784        let aff = aff.ptr;
785        let isl_rs_result = unsafe { isl_aff_get_hash(aff) };
786        let err = isl_rs_ctx.last_error();
787        if err != Error::None_ {
788            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
789        }
790        Ok(isl_rs_result)
791    }
792
793    /// Wraps `isl_aff_get_local_space`.
794    pub fn get_local_space(&self) -> Result<LocalSpace, LibISLError> {
795        let aff = self;
796        let isl_rs_ctx = aff.get_ctx();
797        let aff = aff.ptr;
798        let isl_rs_result = unsafe { isl_aff_get_local_space(aff) };
799        let isl_rs_result = LocalSpace { ptr: isl_rs_result,
800                                         should_free_on_drop: true };
801        let err = isl_rs_ctx.last_error();
802        if err != Error::None_ {
803            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
804        }
805        Ok(isl_rs_result)
806    }
807
808    /// Wraps `isl_aff_get_space`.
809    pub fn get_space(&self) -> Result<Space, LibISLError> {
810        let aff = self;
811        let isl_rs_ctx = aff.get_ctx();
812        let aff = aff.ptr;
813        let isl_rs_result = unsafe { isl_aff_get_space(aff) };
814        let isl_rs_result = Space { ptr: isl_rs_result,
815                                    should_free_on_drop: true };
816        let err = isl_rs_ctx.last_error();
817        if err != Error::None_ {
818            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
819        }
820        Ok(isl_rs_result)
821    }
822
823    /// Wraps `isl_aff_gist`.
824    pub fn gist(self, context: Set) -> Result<Aff, LibISLError> {
825        let aff = self;
826        let isl_rs_ctx = aff.get_ctx();
827        let mut aff = aff;
828        aff.do_not_free_on_drop();
829        let aff = aff.ptr;
830        let mut context = context;
831        context.do_not_free_on_drop();
832        let context = context.ptr;
833        let isl_rs_result = unsafe { isl_aff_gist(aff, context) };
834        let isl_rs_result = Aff { ptr: isl_rs_result,
835                                  should_free_on_drop: true };
836        let err = isl_rs_ctx.last_error();
837        if err != Error::None_ {
838            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
839        }
840        Ok(isl_rs_result)
841    }
842
843    /// Wraps `isl_aff_gist_params`.
844    pub fn gist_params(self, context: Set) -> Result<Aff, LibISLError> {
845        let aff = self;
846        let isl_rs_ctx = aff.get_ctx();
847        let mut aff = aff;
848        aff.do_not_free_on_drop();
849        let aff = aff.ptr;
850        let mut context = context;
851        context.do_not_free_on_drop();
852        let context = context.ptr;
853        let isl_rs_result = unsafe { isl_aff_gist_params(aff, context) };
854        let isl_rs_result = Aff { ptr: isl_rs_result,
855                                  should_free_on_drop: true };
856        let err = isl_rs_ctx.last_error();
857        if err != Error::None_ {
858            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
859        }
860        Ok(isl_rs_result)
861    }
862
863    /// Wraps `isl_aff_gt_basic_set`.
864    pub fn gt_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
865        let aff1 = self;
866        let isl_rs_ctx = aff1.get_ctx();
867        let mut aff1 = aff1;
868        aff1.do_not_free_on_drop();
869        let aff1 = aff1.ptr;
870        let mut aff2 = aff2;
871        aff2.do_not_free_on_drop();
872        let aff2 = aff2.ptr;
873        let isl_rs_result = unsafe { isl_aff_gt_basic_set(aff1, aff2) };
874        let isl_rs_result = BasicSet { ptr: isl_rs_result,
875                                       should_free_on_drop: true };
876        let err = isl_rs_ctx.last_error();
877        if err != Error::None_ {
878            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
879        }
880        Ok(isl_rs_result)
881    }
882
883    /// Wraps `isl_aff_gt_set`.
884    pub fn gt_set(self, aff2: Aff) -> Result<Set, LibISLError> {
885        let aff1 = self;
886        let isl_rs_ctx = aff1.get_ctx();
887        let mut aff1 = aff1;
888        aff1.do_not_free_on_drop();
889        let aff1 = aff1.ptr;
890        let mut aff2 = aff2;
891        aff2.do_not_free_on_drop();
892        let aff2 = aff2.ptr;
893        let isl_rs_result = unsafe { isl_aff_gt_set(aff1, aff2) };
894        let isl_rs_result = Set { ptr: isl_rs_result,
895                                  should_free_on_drop: true };
896        let err = isl_rs_ctx.last_error();
897        if err != Error::None_ {
898            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
899        }
900        Ok(isl_rs_result)
901    }
902
903    /// Wraps `isl_aff_insert_dims`.
904    pub fn insert_dims(self, type_: DimType, first: u32, n: u32) -> Result<Aff, LibISLError> {
905        let aff = self;
906        let isl_rs_ctx = aff.get_ctx();
907        let mut aff = aff;
908        aff.do_not_free_on_drop();
909        let aff = aff.ptr;
910        let type_ = type_.to_i32();
911        let isl_rs_result = unsafe { isl_aff_insert_dims(aff, type_, first, n) };
912        let isl_rs_result = Aff { ptr: isl_rs_result,
913                                  should_free_on_drop: true };
914        let err = isl_rs_ctx.last_error();
915        if err != Error::None_ {
916            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
917        }
918        Ok(isl_rs_result)
919    }
920
921    /// Wraps `isl_aff_involves_dims`.
922    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
923        let aff = self;
924        let isl_rs_ctx = aff.get_ctx();
925        let aff = aff.ptr;
926        let type_ = type_.to_i32();
927        let isl_rs_result = unsafe { isl_aff_involves_dims(aff, type_, first, n) };
928        let isl_rs_result = match isl_rs_result {
929            0 => false,
930            1 => true,
931            _ => panic!("Got isl_bool = -1"),
932        };
933        let err = isl_rs_ctx.last_error();
934        if err != Error::None_ {
935            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
936        }
937        Ok(isl_rs_result)
938    }
939
940    /// Wraps `isl_aff_involves_locals`.
941    pub fn involves_locals(&self) -> Result<bool, LibISLError> {
942        let aff = self;
943        let isl_rs_ctx = aff.get_ctx();
944        let aff = aff.ptr;
945        let isl_rs_result = unsafe { isl_aff_involves_locals(aff) };
946        let isl_rs_result = match isl_rs_result {
947            0 => false,
948            1 => true,
949            _ => panic!("Got isl_bool = -1"),
950        };
951        let err = isl_rs_ctx.last_error();
952        if err != Error::None_ {
953            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
954        }
955        Ok(isl_rs_result)
956    }
957
958    /// Wraps `isl_aff_is_cst`.
959    pub fn is_cst(&self) -> Result<bool, LibISLError> {
960        let aff = self;
961        let isl_rs_ctx = aff.get_ctx();
962        let aff = aff.ptr;
963        let isl_rs_result = unsafe { isl_aff_is_cst(aff) };
964        let isl_rs_result = match isl_rs_result {
965            0 => false,
966            1 => true,
967            _ => panic!("Got isl_bool = -1"),
968        };
969        let err = isl_rs_ctx.last_error();
970        if err != Error::None_ {
971            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
972        }
973        Ok(isl_rs_result)
974    }
975
976    /// Wraps `isl_aff_is_nan`.
977    pub fn is_nan(&self) -> Result<bool, LibISLError> {
978        let aff = self;
979        let isl_rs_ctx = aff.get_ctx();
980        let aff = aff.ptr;
981        let isl_rs_result = unsafe { isl_aff_is_nan(aff) };
982        let isl_rs_result = match isl_rs_result {
983            0 => false,
984            1 => true,
985            _ => panic!("Got isl_bool = -1"),
986        };
987        let err = isl_rs_ctx.last_error();
988        if err != Error::None_ {
989            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
990        }
991        Ok(isl_rs_result)
992    }
993
994    /// Wraps `isl_aff_le_basic_set`.
995    pub fn le_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
996        let aff1 = self;
997        let isl_rs_ctx = aff1.get_ctx();
998        let mut aff1 = aff1;
999        aff1.do_not_free_on_drop();
1000        let aff1 = aff1.ptr;
1001        let mut aff2 = aff2;
1002        aff2.do_not_free_on_drop();
1003        let aff2 = aff2.ptr;
1004        let isl_rs_result = unsafe { isl_aff_le_basic_set(aff1, aff2) };
1005        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1006                                       should_free_on_drop: true };
1007        let err = isl_rs_ctx.last_error();
1008        if err != Error::None_ {
1009            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1010        }
1011        Ok(isl_rs_result)
1012    }
1013
1014    /// Wraps `isl_aff_le_set`.
1015    pub fn le_set(self, aff2: Aff) -> Result<Set, LibISLError> {
1016        let aff1 = self;
1017        let isl_rs_ctx = aff1.get_ctx();
1018        let mut aff1 = aff1;
1019        aff1.do_not_free_on_drop();
1020        let aff1 = aff1.ptr;
1021        let mut aff2 = aff2;
1022        aff2.do_not_free_on_drop();
1023        let aff2 = aff2.ptr;
1024        let isl_rs_result = unsafe { isl_aff_le_set(aff1, aff2) };
1025        let isl_rs_result = Set { ptr: isl_rs_result,
1026                                  should_free_on_drop: true };
1027        let err = isl_rs_ctx.last_error();
1028        if err != Error::None_ {
1029            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1030        }
1031        Ok(isl_rs_result)
1032    }
1033
1034    /// Wraps `isl_aff_lt_basic_set`.
1035    pub fn lt_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
1036        let aff1 = self;
1037        let isl_rs_ctx = aff1.get_ctx();
1038        let mut aff1 = aff1;
1039        aff1.do_not_free_on_drop();
1040        let aff1 = aff1.ptr;
1041        let mut aff2 = aff2;
1042        aff2.do_not_free_on_drop();
1043        let aff2 = aff2.ptr;
1044        let isl_rs_result = unsafe { isl_aff_lt_basic_set(aff1, aff2) };
1045        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1046                                       should_free_on_drop: true };
1047        let err = isl_rs_ctx.last_error();
1048        if err != Error::None_ {
1049            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1050        }
1051        Ok(isl_rs_result)
1052    }
1053
1054    /// Wraps `isl_aff_lt_set`.
1055    pub fn lt_set(self, aff2: Aff) -> Result<Set, LibISLError> {
1056        let aff1 = self;
1057        let isl_rs_ctx = aff1.get_ctx();
1058        let mut aff1 = aff1;
1059        aff1.do_not_free_on_drop();
1060        let aff1 = aff1.ptr;
1061        let mut aff2 = aff2;
1062        aff2.do_not_free_on_drop();
1063        let aff2 = aff2.ptr;
1064        let isl_rs_result = unsafe { isl_aff_lt_set(aff1, aff2) };
1065        let isl_rs_result = Set { ptr: isl_rs_result,
1066                                  should_free_on_drop: true };
1067        let err = isl_rs_ctx.last_error();
1068        if err != Error::None_ {
1069            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1070        }
1071        Ok(isl_rs_result)
1072    }
1073
1074    /// Wraps `isl_aff_mod_val`.
1075    pub fn mod_val(self, mod_: Val) -> Result<Aff, LibISLError> {
1076        let aff = self;
1077        let isl_rs_ctx = aff.get_ctx();
1078        let mut aff = aff;
1079        aff.do_not_free_on_drop();
1080        let aff = aff.ptr;
1081        let mut mod_ = mod_;
1082        mod_.do_not_free_on_drop();
1083        let mod_ = mod_.ptr;
1084        let isl_rs_result = unsafe { isl_aff_mod_val(aff, mod_) };
1085        let isl_rs_result = Aff { ptr: isl_rs_result,
1086                                  should_free_on_drop: true };
1087        let err = isl_rs_ctx.last_error();
1088        if err != Error::None_ {
1089            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1090        }
1091        Ok(isl_rs_result)
1092    }
1093
1094    /// Wraps `isl_aff_move_dims`.
1095    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1096                     n: u32)
1097                     -> Result<Aff, LibISLError> {
1098        let aff = self;
1099        let isl_rs_ctx = aff.get_ctx();
1100        let mut aff = aff;
1101        aff.do_not_free_on_drop();
1102        let aff = aff.ptr;
1103        let dst_type = dst_type.to_i32();
1104        let src_type = src_type.to_i32();
1105        let isl_rs_result =
1106            unsafe { isl_aff_move_dims(aff, dst_type, dst_pos, src_type, src_pos, n) };
1107        let isl_rs_result = Aff { ptr: isl_rs_result,
1108                                  should_free_on_drop: true };
1109        let err = isl_rs_ctx.last_error();
1110        if err != Error::None_ {
1111            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1112        }
1113        Ok(isl_rs_result)
1114    }
1115
1116    /// Wraps `isl_aff_mul`.
1117    pub fn mul(self, aff2: Aff) -> Result<Aff, LibISLError> {
1118        let aff1 = self;
1119        let isl_rs_ctx = aff1.get_ctx();
1120        let mut aff1 = aff1;
1121        aff1.do_not_free_on_drop();
1122        let aff1 = aff1.ptr;
1123        let mut aff2 = aff2;
1124        aff2.do_not_free_on_drop();
1125        let aff2 = aff2.ptr;
1126        let isl_rs_result = unsafe { isl_aff_mul(aff1, aff2) };
1127        let isl_rs_result = Aff { ptr: isl_rs_result,
1128                                  should_free_on_drop: true };
1129        let err = isl_rs_ctx.last_error();
1130        if err != Error::None_ {
1131            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1132        }
1133        Ok(isl_rs_result)
1134    }
1135
1136    /// Wraps `isl_aff_nan_on_domain`.
1137    pub fn nan_on_domain(ls: LocalSpace) -> Result<Aff, LibISLError> {
1138        let isl_rs_ctx = ls.get_ctx();
1139        let mut ls = ls;
1140        ls.do_not_free_on_drop();
1141        let ls = ls.ptr;
1142        let isl_rs_result = unsafe { isl_aff_nan_on_domain(ls) };
1143        let isl_rs_result = Aff { ptr: isl_rs_result,
1144                                  should_free_on_drop: true };
1145        let err = isl_rs_ctx.last_error();
1146        if err != Error::None_ {
1147            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1148        }
1149        Ok(isl_rs_result)
1150    }
1151
1152    /// Wraps `isl_aff_nan_on_domain_space`.
1153    pub fn nan_on_domain_space(space: Space) -> Result<Aff, LibISLError> {
1154        let isl_rs_ctx = space.get_ctx();
1155        let mut space = space;
1156        space.do_not_free_on_drop();
1157        let space = space.ptr;
1158        let isl_rs_result = unsafe { isl_aff_nan_on_domain_space(space) };
1159        let isl_rs_result = Aff { ptr: isl_rs_result,
1160                                  should_free_on_drop: true };
1161        let err = isl_rs_ctx.last_error();
1162        if err != Error::None_ {
1163            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1164        }
1165        Ok(isl_rs_result)
1166    }
1167
1168    /// Wraps `isl_aff_ne_set`.
1169    pub fn ne_set(self, aff2: Aff) -> Result<Set, LibISLError> {
1170        let aff1 = self;
1171        let isl_rs_ctx = aff1.get_ctx();
1172        let mut aff1 = aff1;
1173        aff1.do_not_free_on_drop();
1174        let aff1 = aff1.ptr;
1175        let mut aff2 = aff2;
1176        aff2.do_not_free_on_drop();
1177        let aff2 = aff2.ptr;
1178        let isl_rs_result = unsafe { isl_aff_ne_set(aff1, aff2) };
1179        let isl_rs_result = Set { ptr: isl_rs_result,
1180                                  should_free_on_drop: true };
1181        let err = isl_rs_ctx.last_error();
1182        if err != Error::None_ {
1183            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1184        }
1185        Ok(isl_rs_result)
1186    }
1187
1188    /// Wraps `isl_aff_neg`.
1189    pub fn neg(self) -> Result<Aff, LibISLError> {
1190        let aff = self;
1191        let isl_rs_ctx = aff.get_ctx();
1192        let mut aff = aff;
1193        aff.do_not_free_on_drop();
1194        let aff = aff.ptr;
1195        let isl_rs_result = unsafe { isl_aff_neg(aff) };
1196        let isl_rs_result = Aff { ptr: isl_rs_result,
1197                                  should_free_on_drop: true };
1198        let err = isl_rs_ctx.last_error();
1199        if err != Error::None_ {
1200            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1201        }
1202        Ok(isl_rs_result)
1203    }
1204
1205    /// Wraps `isl_aff_neg_basic_set`.
1206    pub fn neg_basic_set(self) -> Result<BasicSet, LibISLError> {
1207        let aff = self;
1208        let isl_rs_ctx = aff.get_ctx();
1209        let mut aff = aff;
1210        aff.do_not_free_on_drop();
1211        let aff = aff.ptr;
1212        let isl_rs_result = unsafe { isl_aff_neg_basic_set(aff) };
1213        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1214                                       should_free_on_drop: true };
1215        let err = isl_rs_ctx.last_error();
1216        if err != Error::None_ {
1217            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1218        }
1219        Ok(isl_rs_result)
1220    }
1221
1222    /// Wraps `isl_aff_param_on_domain_space_id`.
1223    pub fn param_on_domain_space_id(space: Space, id: Id) -> Result<Aff, LibISLError> {
1224        let isl_rs_ctx = space.get_ctx();
1225        let mut space = space;
1226        space.do_not_free_on_drop();
1227        let space = space.ptr;
1228        let mut id = id;
1229        id.do_not_free_on_drop();
1230        let id = id.ptr;
1231        let isl_rs_result = unsafe { isl_aff_param_on_domain_space_id(space, id) };
1232        let isl_rs_result = Aff { ptr: isl_rs_result,
1233                                  should_free_on_drop: true };
1234        let err = isl_rs_ctx.last_error();
1235        if err != Error::None_ {
1236            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1237        }
1238        Ok(isl_rs_result)
1239    }
1240
1241    /// Wraps `isl_aff_plain_is_equal`.
1242    pub fn plain_is_equal(&self, aff2: &Aff) -> Result<bool, LibISLError> {
1243        let aff1 = self;
1244        let isl_rs_ctx = aff1.get_ctx();
1245        let aff1 = aff1.ptr;
1246        let aff2 = aff2.ptr;
1247        let isl_rs_result = unsafe { isl_aff_plain_is_equal(aff1, aff2) };
1248        let isl_rs_result = match isl_rs_result {
1249            0 => false,
1250            1 => true,
1251            _ => panic!("Got isl_bool = -1"),
1252        };
1253        let err = isl_rs_ctx.last_error();
1254        if err != Error::None_ {
1255            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1256        }
1257        Ok(isl_rs_result)
1258    }
1259
1260    /// Wraps `isl_aff_plain_is_zero`.
1261    pub fn plain_is_zero(&self) -> Result<bool, LibISLError> {
1262        let aff = self;
1263        let isl_rs_ctx = aff.get_ctx();
1264        let aff = aff.ptr;
1265        let isl_rs_result = unsafe { isl_aff_plain_is_zero(aff) };
1266        let isl_rs_result = match isl_rs_result {
1267            0 => false,
1268            1 => true,
1269            _ => panic!("Got isl_bool = -1"),
1270        };
1271        let err = isl_rs_ctx.last_error();
1272        if err != Error::None_ {
1273            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1274        }
1275        Ok(isl_rs_result)
1276    }
1277
1278    /// Wraps `isl_aff_project_domain_on_params`.
1279    pub fn project_domain_on_params(self) -> Result<Aff, LibISLError> {
1280        let aff = self;
1281        let isl_rs_ctx = aff.get_ctx();
1282        let mut aff = aff;
1283        aff.do_not_free_on_drop();
1284        let aff = aff.ptr;
1285        let isl_rs_result = unsafe { isl_aff_project_domain_on_params(aff) };
1286        let isl_rs_result = Aff { ptr: isl_rs_result,
1287                                  should_free_on_drop: true };
1288        let err = isl_rs_ctx.last_error();
1289        if err != Error::None_ {
1290            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1291        }
1292        Ok(isl_rs_result)
1293    }
1294
1295    /// Wraps `isl_aff_pullback_aff`.
1296    pub fn pullback_aff(self, aff2: Aff) -> Result<Aff, LibISLError> {
1297        let aff1 = self;
1298        let isl_rs_ctx = aff1.get_ctx();
1299        let mut aff1 = aff1;
1300        aff1.do_not_free_on_drop();
1301        let aff1 = aff1.ptr;
1302        let mut aff2 = aff2;
1303        aff2.do_not_free_on_drop();
1304        let aff2 = aff2.ptr;
1305        let isl_rs_result = unsafe { isl_aff_pullback_aff(aff1, aff2) };
1306        let isl_rs_result = Aff { ptr: isl_rs_result,
1307                                  should_free_on_drop: true };
1308        let err = isl_rs_ctx.last_error();
1309        if err != Error::None_ {
1310            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1311        }
1312        Ok(isl_rs_result)
1313    }
1314
1315    /// Wraps `isl_aff_pullback_multi_aff`.
1316    pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<Aff, LibISLError> {
1317        let aff = self;
1318        let isl_rs_ctx = aff.get_ctx();
1319        let mut aff = aff;
1320        aff.do_not_free_on_drop();
1321        let aff = aff.ptr;
1322        let mut ma = ma;
1323        ma.do_not_free_on_drop();
1324        let ma = ma.ptr;
1325        let isl_rs_result = unsafe { isl_aff_pullback_multi_aff(aff, ma) };
1326        let isl_rs_result = Aff { ptr: isl_rs_result,
1327                                  should_free_on_drop: true };
1328        let err = isl_rs_ctx.last_error();
1329        if err != Error::None_ {
1330            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1331        }
1332        Ok(isl_rs_result)
1333    }
1334
1335    /// Wraps `isl_aff_read_from_str`.
1336    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<Aff, LibISLError> {
1337        let isl_rs_ctx = Context { ptr: ctx.ptr,
1338                                   should_free_on_drop: false };
1339        let ctx = ctx.ptr;
1340        let str_ = CString::new(str_).unwrap();
1341        let str_ = str_.as_ptr();
1342        let isl_rs_result = unsafe { isl_aff_read_from_str(ctx, str_) };
1343        let isl_rs_result = Aff { ptr: isl_rs_result,
1344                                  should_free_on_drop: true };
1345        let err = isl_rs_ctx.last_error();
1346        if err != Error::None_ {
1347            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1348        }
1349        Ok(isl_rs_result)
1350    }
1351
1352    /// Wraps `isl_aff_scale_down_ui`.
1353    pub fn scale_down_ui(self, f: u32) -> Result<Aff, LibISLError> {
1354        let aff = self;
1355        let isl_rs_ctx = aff.get_ctx();
1356        let mut aff = aff;
1357        aff.do_not_free_on_drop();
1358        let aff = aff.ptr;
1359        let isl_rs_result = unsafe { isl_aff_scale_down_ui(aff, f) };
1360        let isl_rs_result = Aff { ptr: isl_rs_result,
1361                                  should_free_on_drop: true };
1362        let err = isl_rs_ctx.last_error();
1363        if err != Error::None_ {
1364            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1365        }
1366        Ok(isl_rs_result)
1367    }
1368
1369    /// Wraps `isl_aff_scale_down_val`.
1370    pub fn scale_down_val(self, v: Val) -> Result<Aff, LibISLError> {
1371        let aff = self;
1372        let isl_rs_ctx = aff.get_ctx();
1373        let mut aff = aff;
1374        aff.do_not_free_on_drop();
1375        let aff = aff.ptr;
1376        let mut v = v;
1377        v.do_not_free_on_drop();
1378        let v = v.ptr;
1379        let isl_rs_result = unsafe { isl_aff_scale_down_val(aff, v) };
1380        let isl_rs_result = Aff { ptr: isl_rs_result,
1381                                  should_free_on_drop: true };
1382        let err = isl_rs_ctx.last_error();
1383        if err != Error::None_ {
1384            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1385        }
1386        Ok(isl_rs_result)
1387    }
1388
1389    /// Wraps `isl_aff_scale_val`.
1390    pub fn scale_val(self, v: Val) -> Result<Aff, LibISLError> {
1391        let aff = self;
1392        let isl_rs_ctx = aff.get_ctx();
1393        let mut aff = aff;
1394        aff.do_not_free_on_drop();
1395        let aff = aff.ptr;
1396        let mut v = v;
1397        v.do_not_free_on_drop();
1398        let v = v.ptr;
1399        let isl_rs_result = unsafe { isl_aff_scale_val(aff, v) };
1400        let isl_rs_result = Aff { ptr: isl_rs_result,
1401                                  should_free_on_drop: true };
1402        let err = isl_rs_ctx.last_error();
1403        if err != Error::None_ {
1404            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1405        }
1406        Ok(isl_rs_result)
1407    }
1408
1409    /// Wraps `isl_aff_set_coefficient_si`.
1410    pub fn set_coefficient_si(self, type_: DimType, pos: i32, v: i32) -> Result<Aff, LibISLError> {
1411        let aff = self;
1412        let isl_rs_ctx = aff.get_ctx();
1413        let mut aff = aff;
1414        aff.do_not_free_on_drop();
1415        let aff = aff.ptr;
1416        let type_ = type_.to_i32();
1417        let isl_rs_result = unsafe { isl_aff_set_coefficient_si(aff, type_, pos, v) };
1418        let isl_rs_result = Aff { ptr: isl_rs_result,
1419                                  should_free_on_drop: true };
1420        let err = isl_rs_ctx.last_error();
1421        if err != Error::None_ {
1422            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1423        }
1424        Ok(isl_rs_result)
1425    }
1426
1427    /// Wraps `isl_aff_set_coefficient_val`.
1428    pub fn set_coefficient_val(self, type_: DimType, pos: i32, v: Val) -> Result<Aff, LibISLError> {
1429        let aff = self;
1430        let isl_rs_ctx = aff.get_ctx();
1431        let mut aff = aff;
1432        aff.do_not_free_on_drop();
1433        let aff = aff.ptr;
1434        let type_ = type_.to_i32();
1435        let mut v = v;
1436        v.do_not_free_on_drop();
1437        let v = v.ptr;
1438        let isl_rs_result = unsafe { isl_aff_set_coefficient_val(aff, type_, pos, v) };
1439        let isl_rs_result = Aff { ptr: isl_rs_result,
1440                                  should_free_on_drop: true };
1441        let err = isl_rs_ctx.last_error();
1442        if err != Error::None_ {
1443            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1444        }
1445        Ok(isl_rs_result)
1446    }
1447
1448    /// Wraps `isl_aff_set_constant_si`.
1449    pub fn set_constant_si(self, v: i32) -> Result<Aff, LibISLError> {
1450        let aff = self;
1451        let isl_rs_ctx = aff.get_ctx();
1452        let mut aff = aff;
1453        aff.do_not_free_on_drop();
1454        let aff = aff.ptr;
1455        let isl_rs_result = unsafe { isl_aff_set_constant_si(aff, v) };
1456        let isl_rs_result = Aff { ptr: isl_rs_result,
1457                                  should_free_on_drop: true };
1458        let err = isl_rs_ctx.last_error();
1459        if err != Error::None_ {
1460            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1461        }
1462        Ok(isl_rs_result)
1463    }
1464
1465    /// Wraps `isl_aff_set_constant_val`.
1466    pub fn set_constant_val(self, v: Val) -> Result<Aff, LibISLError> {
1467        let aff = self;
1468        let isl_rs_ctx = aff.get_ctx();
1469        let mut aff = aff;
1470        aff.do_not_free_on_drop();
1471        let aff = aff.ptr;
1472        let mut v = v;
1473        v.do_not_free_on_drop();
1474        let v = v.ptr;
1475        let isl_rs_result = unsafe { isl_aff_set_constant_val(aff, v) };
1476        let isl_rs_result = Aff { ptr: isl_rs_result,
1477                                  should_free_on_drop: true };
1478        let err = isl_rs_ctx.last_error();
1479        if err != Error::None_ {
1480            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1481        }
1482        Ok(isl_rs_result)
1483    }
1484
1485    /// Wraps `isl_aff_set_dim_id`.
1486    pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<Aff, LibISLError> {
1487        let aff = self;
1488        let isl_rs_ctx = aff.get_ctx();
1489        let mut aff = aff;
1490        aff.do_not_free_on_drop();
1491        let aff = aff.ptr;
1492        let type_ = type_.to_i32();
1493        let mut id = id;
1494        id.do_not_free_on_drop();
1495        let id = id.ptr;
1496        let isl_rs_result = unsafe { isl_aff_set_dim_id(aff, type_, pos, id) };
1497        let isl_rs_result = Aff { ptr: isl_rs_result,
1498                                  should_free_on_drop: true };
1499        let err = isl_rs_ctx.last_error();
1500        if err != Error::None_ {
1501            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1502        }
1503        Ok(isl_rs_result)
1504    }
1505
1506    /// Wraps `isl_aff_set_dim_name`.
1507    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Result<Aff, LibISLError> {
1508        let aff = self;
1509        let isl_rs_ctx = aff.get_ctx();
1510        let mut aff = aff;
1511        aff.do_not_free_on_drop();
1512        let aff = aff.ptr;
1513        let type_ = type_.to_i32();
1514        let s = CString::new(s).unwrap();
1515        let s = s.as_ptr();
1516        let isl_rs_result = unsafe { isl_aff_set_dim_name(aff, type_, pos, s) };
1517        let isl_rs_result = Aff { ptr: isl_rs_result,
1518                                  should_free_on_drop: true };
1519        let err = isl_rs_ctx.last_error();
1520        if err != Error::None_ {
1521            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1522        }
1523        Ok(isl_rs_result)
1524    }
1525
1526    /// Wraps `isl_aff_set_tuple_id`.
1527    pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<Aff, LibISLError> {
1528        let aff = self;
1529        let isl_rs_ctx = aff.get_ctx();
1530        let mut aff = aff;
1531        aff.do_not_free_on_drop();
1532        let aff = aff.ptr;
1533        let type_ = type_.to_i32();
1534        let mut id = id;
1535        id.do_not_free_on_drop();
1536        let id = id.ptr;
1537        let isl_rs_result = unsafe { isl_aff_set_tuple_id(aff, type_, id) };
1538        let isl_rs_result = Aff { ptr: isl_rs_result,
1539                                  should_free_on_drop: true };
1540        let err = isl_rs_ctx.last_error();
1541        if err != Error::None_ {
1542            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1543        }
1544        Ok(isl_rs_result)
1545    }
1546
1547    /// Wraps `isl_aff_sub`.
1548    pub fn sub(self, aff2: Aff) -> Result<Aff, LibISLError> {
1549        let aff1 = self;
1550        let isl_rs_ctx = aff1.get_ctx();
1551        let mut aff1 = aff1;
1552        aff1.do_not_free_on_drop();
1553        let aff1 = aff1.ptr;
1554        let mut aff2 = aff2;
1555        aff2.do_not_free_on_drop();
1556        let aff2 = aff2.ptr;
1557        let isl_rs_result = unsafe { isl_aff_sub(aff1, aff2) };
1558        let isl_rs_result = Aff { ptr: isl_rs_result,
1559                                  should_free_on_drop: true };
1560        let err = isl_rs_ctx.last_error();
1561        if err != Error::None_ {
1562            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1563        }
1564        Ok(isl_rs_result)
1565    }
1566
1567    /// Wraps `isl_aff_to_list`.
1568    pub fn to_list(self) -> Result<AffList, LibISLError> {
1569        let el = self;
1570        let isl_rs_ctx = el.get_ctx();
1571        let mut el = el;
1572        el.do_not_free_on_drop();
1573        let el = el.ptr;
1574        let isl_rs_result = unsafe { isl_aff_to_list(el) };
1575        let isl_rs_result = AffList { ptr: isl_rs_result,
1576                                      should_free_on_drop: true };
1577        let err = isl_rs_ctx.last_error();
1578        if err != Error::None_ {
1579            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1580        }
1581        Ok(isl_rs_result)
1582    }
1583
1584    /// Wraps `isl_aff_to_str`.
1585    pub fn to_str(&self) -> Result<&str, LibISLError> {
1586        let aff = self;
1587        let isl_rs_ctx = aff.get_ctx();
1588        let aff = aff.ptr;
1589        let isl_rs_result = unsafe { isl_aff_to_str(aff) };
1590        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1591        let isl_rs_result = isl_rs_result.to_str().unwrap();
1592        let err = isl_rs_ctx.last_error();
1593        if err != Error::None_ {
1594            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1595        }
1596        Ok(isl_rs_result)
1597    }
1598
1599    /// Wraps `isl_aff_unbind_params_insert_domain`.
1600    pub fn unbind_params_insert_domain(self, domain: MultiId) -> Result<Aff, LibISLError> {
1601        let aff = self;
1602        let isl_rs_ctx = aff.get_ctx();
1603        let mut aff = aff;
1604        aff.do_not_free_on_drop();
1605        let aff = aff.ptr;
1606        let mut domain = domain;
1607        domain.do_not_free_on_drop();
1608        let domain = domain.ptr;
1609        let isl_rs_result = unsafe { isl_aff_unbind_params_insert_domain(aff, domain) };
1610        let isl_rs_result = Aff { ptr: isl_rs_result,
1611                                  should_free_on_drop: true };
1612        let err = isl_rs_ctx.last_error();
1613        if err != Error::None_ {
1614            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1615        }
1616        Ok(isl_rs_result)
1617    }
1618
1619    /// Wraps `isl_aff_val_on_domain`.
1620    pub fn val_on_domain(ls: LocalSpace, val: Val) -> Result<Aff, LibISLError> {
1621        let isl_rs_ctx = ls.get_ctx();
1622        let mut ls = ls;
1623        ls.do_not_free_on_drop();
1624        let ls = ls.ptr;
1625        let mut val = val;
1626        val.do_not_free_on_drop();
1627        let val = val.ptr;
1628        let isl_rs_result = unsafe { isl_aff_val_on_domain(ls, val) };
1629        let isl_rs_result = Aff { ptr: isl_rs_result,
1630                                  should_free_on_drop: true };
1631        let err = isl_rs_ctx.last_error();
1632        if err != Error::None_ {
1633            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1634        }
1635        Ok(isl_rs_result)
1636    }
1637
1638    /// Wraps `isl_aff_val_on_domain_space`.
1639    pub fn val_on_domain_space(space: Space, val: Val) -> Result<Aff, LibISLError> {
1640        let isl_rs_ctx = space.get_ctx();
1641        let mut space = space;
1642        space.do_not_free_on_drop();
1643        let space = space.ptr;
1644        let mut val = val;
1645        val.do_not_free_on_drop();
1646        let val = val.ptr;
1647        let isl_rs_result = unsafe { isl_aff_val_on_domain_space(space, val) };
1648        let isl_rs_result = Aff { ptr: isl_rs_result,
1649                                  should_free_on_drop: true };
1650        let err = isl_rs_ctx.last_error();
1651        if err != Error::None_ {
1652            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1653        }
1654        Ok(isl_rs_result)
1655    }
1656
1657    /// Wraps `isl_aff_var_on_domain`.
1658    pub fn var_on_domain(ls: LocalSpace, type_: DimType, pos: u32) -> Result<Aff, LibISLError> {
1659        let isl_rs_ctx = ls.get_ctx();
1660        let mut ls = ls;
1661        ls.do_not_free_on_drop();
1662        let ls = ls.ptr;
1663        let type_ = type_.to_i32();
1664        let isl_rs_result = unsafe { isl_aff_var_on_domain(ls, type_, pos) };
1665        let isl_rs_result = Aff { ptr: isl_rs_result,
1666                                  should_free_on_drop: true };
1667        let err = isl_rs_ctx.last_error();
1668        if err != Error::None_ {
1669            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1670        }
1671        Ok(isl_rs_result)
1672    }
1673
1674    /// Wraps `isl_aff_zero_basic_set`.
1675    pub fn zero_basic_set(self) -> Result<BasicSet, LibISLError> {
1676        let aff = self;
1677        let isl_rs_ctx = aff.get_ctx();
1678        let mut aff = aff;
1679        aff.do_not_free_on_drop();
1680        let aff = aff.ptr;
1681        let isl_rs_result = unsafe { isl_aff_zero_basic_set(aff) };
1682        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1683                                       should_free_on_drop: true };
1684        let err = isl_rs_ctx.last_error();
1685        if err != Error::None_ {
1686            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1687        }
1688        Ok(isl_rs_result)
1689    }
1690
1691    /// Wraps `isl_aff_zero_on_domain`.
1692    pub fn zero_on_domain(ls: LocalSpace) -> Result<Aff, LibISLError> {
1693        let isl_rs_ctx = ls.get_ctx();
1694        let mut ls = ls;
1695        ls.do_not_free_on_drop();
1696        let ls = ls.ptr;
1697        let isl_rs_result = unsafe { isl_aff_zero_on_domain(ls) };
1698        let isl_rs_result = Aff { ptr: isl_rs_result,
1699                                  should_free_on_drop: true };
1700        let err = isl_rs_ctx.last_error();
1701        if err != Error::None_ {
1702            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1703        }
1704        Ok(isl_rs_result)
1705    }
1706
1707    /// Wraps `isl_aff_zero_on_domain_space`.
1708    pub fn zero_on_domain_space(space: Space) -> Result<Aff, LibISLError> {
1709        let isl_rs_ctx = space.get_ctx();
1710        let mut space = space;
1711        space.do_not_free_on_drop();
1712        let space = space.ptr;
1713        let isl_rs_result = unsafe { isl_aff_zero_on_domain_space(space) };
1714        let isl_rs_result = Aff { ptr: isl_rs_result,
1715                                  should_free_on_drop: true };
1716        let err = isl_rs_ctx.last_error();
1717        if err != Error::None_ {
1718            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1719        }
1720        Ok(isl_rs_result)
1721    }
1722
1723    /// Does not call isl_aff_free() on being dropped. (For internal use only.)
1724    pub fn do_not_free_on_drop(&mut self) {
1725        self.should_free_on_drop = false;
1726    }
1727}
1728
1729impl Drop for Aff {
1730    fn drop(&mut self) {
1731        if self.should_free_on_drop {
1732            unsafe {
1733                isl_aff_free(self.ptr);
1734            }
1735        }
1736    }
1737}