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