isl_rs/bindings/
aff.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use crate::bindings::{BasicSet, Context, DimType, Id, LocalSpace, Point, Set, Space, Val};
5use libc::uintptr_t;
6use std::ffi::{CStr, CString};
7use std::os::raw::c_char;
8
9/// Wraps `isl_aff`.
10pub struct Aff {
11    pub ptr: uintptr_t,
12    pub should_free_on_drop: bool,
13}
14
15extern "C" {
16
17    fn isl_aff_zero_on_domain_space(space: uintptr_t) -> uintptr_t;
18
19    fn isl_aff_zero_on_domain(ls: uintptr_t) -> uintptr_t;
20
21    fn isl_aff_val_on_domain_space(space: uintptr_t, val: uintptr_t) -> uintptr_t;
22
23    fn isl_aff_val_on_domain(ls: uintptr_t, val: uintptr_t) -> uintptr_t;
24
25    fn isl_aff_var_on_domain(ls: uintptr_t, type_: DimType, pos: u32) -> uintptr_t;
26
27    fn isl_aff_nan_on_domain_space(space: uintptr_t) -> uintptr_t;
28
29    fn isl_aff_nan_on_domain(ls: uintptr_t) -> uintptr_t;
30
31    fn isl_aff_param_on_domain_space_id(space: uintptr_t, id: uintptr_t) -> uintptr_t;
32
33    fn isl_aff_copy(aff: uintptr_t) -> uintptr_t;
34
35    fn isl_aff_free(aff: uintptr_t) -> uintptr_t;
36
37    fn isl_aff_get_ctx(aff: uintptr_t) -> uintptr_t;
38
39    fn isl_aff_get_hash(aff: uintptr_t) -> u32;
40
41    fn isl_aff_involves_locals(aff: uintptr_t) -> i32;
42
43    fn isl_aff_dim(aff: uintptr_t, type_: DimType) -> i32;
44
45    fn isl_aff_involves_dims(aff: uintptr_t, type_: DimType, first: u32, n: u32) -> i32;
46
47    fn isl_aff_get_domain_space(aff: uintptr_t) -> uintptr_t;
48
49    fn isl_aff_get_space(aff: uintptr_t) -> uintptr_t;
50
51    fn isl_aff_get_domain_local_space(aff: uintptr_t) -> uintptr_t;
52
53    fn isl_aff_get_local_space(aff: uintptr_t) -> uintptr_t;
54
55    fn isl_aff_get_dim_name(aff: uintptr_t, type_: DimType, pos: u32) -> *const c_char;
56
57    fn isl_aff_get_constant_val(aff: uintptr_t) -> uintptr_t;
58
59    fn isl_aff_get_coefficient_val(aff: uintptr_t, type_: DimType, pos: i32) -> uintptr_t;
60
61    fn isl_aff_coefficient_sgn(aff: uintptr_t, type_: DimType, pos: i32) -> i32;
62
63    fn isl_aff_get_denominator_val(aff: uintptr_t) -> uintptr_t;
64
65    fn isl_aff_set_constant_si(aff: uintptr_t, v: i32) -> uintptr_t;
66
67    fn isl_aff_set_constant_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
68
69    fn isl_aff_set_coefficient_si(aff: uintptr_t, type_: DimType, pos: i32, v: i32) -> uintptr_t;
70
71    fn isl_aff_set_coefficient_val(aff: uintptr_t, type_: DimType, pos: i32, v: uintptr_t)
72                                   -> uintptr_t;
73
74    fn isl_aff_add_constant_si(aff: uintptr_t, v: i32) -> uintptr_t;
75
76    fn isl_aff_add_constant_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
77
78    fn isl_aff_add_constant_num_si(aff: uintptr_t, v: i32) -> uintptr_t;
79
80    fn isl_aff_add_coefficient_si(aff: uintptr_t, type_: DimType, pos: i32, v: i32) -> uintptr_t;
81
82    fn isl_aff_add_coefficient_val(aff: uintptr_t, type_: DimType, pos: i32, v: uintptr_t)
83                                   -> uintptr_t;
84
85    fn isl_aff_is_cst(aff: uintptr_t) -> i32;
86
87    fn isl_aff_set_tuple_id(aff: uintptr_t, type_: DimType, id: uintptr_t) -> uintptr_t;
88
89    fn isl_aff_set_dim_name(aff: uintptr_t, type_: DimType, pos: u32, s: *const c_char)
90                            -> uintptr_t;
91
92    fn isl_aff_set_dim_id(aff: uintptr_t, type_: DimType, pos: u32, id: uintptr_t) -> uintptr_t;
93
94    fn isl_aff_find_dim_by_name(aff: uintptr_t, type_: DimType, name: *const c_char) -> i32;
95
96    fn isl_aff_plain_is_equal(aff1: uintptr_t, aff2: uintptr_t) -> i32;
97
98    fn isl_aff_plain_is_zero(aff: uintptr_t) -> i32;
99
100    fn isl_aff_is_nan(aff: uintptr_t) -> i32;
101
102    fn isl_aff_get_div(aff: uintptr_t, pos: i32) -> uintptr_t;
103
104    fn isl_aff_from_range(aff: uintptr_t) -> uintptr_t;
105
106    fn isl_aff_neg(aff: uintptr_t) -> uintptr_t;
107
108    fn isl_aff_ceil(aff: uintptr_t) -> uintptr_t;
109
110    fn isl_aff_floor(aff: uintptr_t) -> uintptr_t;
111
112    fn isl_aff_mod_val(aff: uintptr_t, mod_: uintptr_t) -> uintptr_t;
113
114    fn isl_aff_mul(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
115
116    fn isl_aff_div(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
117
118    fn isl_aff_add(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
119
120    fn isl_aff_sub(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
121
122    fn isl_aff_scale_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
123
124    fn isl_aff_scale_down_ui(aff: uintptr_t, f: u32) -> uintptr_t;
125
126    fn isl_aff_scale_down_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
127
128    fn isl_aff_insert_dims(aff: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
129
130    fn isl_aff_add_dims(aff: uintptr_t, type_: DimType, n: u32) -> uintptr_t;
131
132    fn isl_aff_move_dims(aff: uintptr_t, dst_type: DimType, dst_pos: u32, src_type: DimType,
133                         src_pos: u32, n: u32)
134                         -> uintptr_t;
135
136    fn isl_aff_drop_dims(aff: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
137
138    fn isl_aff_project_domain_on_params(aff: uintptr_t) -> uintptr_t;
139
140    fn isl_aff_align_params(aff: uintptr_t, model: uintptr_t) -> uintptr_t;
141
142    fn isl_aff_gist(aff: uintptr_t, context: uintptr_t) -> uintptr_t;
143
144    fn isl_aff_gist_params(aff: uintptr_t, context: uintptr_t) -> uintptr_t;
145
146    fn isl_aff_eval(aff: uintptr_t, pnt: uintptr_t) -> uintptr_t;
147
148    fn isl_aff_pullback_aff(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
149
150    fn isl_aff_zero_basic_set(aff: uintptr_t) -> uintptr_t;
151
152    fn isl_aff_neg_basic_set(aff: uintptr_t) -> uintptr_t;
153
154    fn isl_aff_eq_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
155
156    fn isl_aff_eq_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
157
158    fn isl_aff_ne_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
159
160    fn isl_aff_le_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
161
162    fn isl_aff_le_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
163
164    fn isl_aff_lt_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
165
166    fn isl_aff_lt_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
167
168    fn isl_aff_ge_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
169
170    fn isl_aff_ge_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
171
172    fn isl_aff_gt_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
173
174    fn isl_aff_gt_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
175
176    fn isl_aff_bind_id(aff: uintptr_t, id: uintptr_t) -> uintptr_t;
177
178    fn isl_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
179
180    fn isl_aff_to_str(aff: uintptr_t) -> *const c_char;
181
182    fn isl_aff_dump(aff: uintptr_t);
183
184}
185
186impl Aff {
187    /// Wraps `isl_aff_zero_on_domain_space`.
188    pub fn zero_on_domain_space(space: Space) -> Aff {
189        let mut space = space;
190        space.do_not_free_on_drop();
191        let space = space.ptr;
192        let isl_rs_result = unsafe { isl_aff_zero_on_domain_space(space) };
193        let isl_rs_result = Aff { ptr: isl_rs_result,
194                                  should_free_on_drop: true };
195        isl_rs_result
196    }
197
198    /// Wraps `isl_aff_zero_on_domain`.
199    pub fn zero_on_domain(ls: LocalSpace) -> Aff {
200        let mut ls = ls;
201        ls.do_not_free_on_drop();
202        let ls = ls.ptr;
203        let isl_rs_result = unsafe { isl_aff_zero_on_domain(ls) };
204        let isl_rs_result = Aff { ptr: isl_rs_result,
205                                  should_free_on_drop: true };
206        isl_rs_result
207    }
208
209    /// Wraps `isl_aff_val_on_domain_space`.
210    pub fn val_on_domain_space(space: Space, val: Val) -> Aff {
211        let mut space = space;
212        space.do_not_free_on_drop();
213        let space = space.ptr;
214        let mut val = val;
215        val.do_not_free_on_drop();
216        let val = val.ptr;
217        let isl_rs_result = unsafe { isl_aff_val_on_domain_space(space, val) };
218        let isl_rs_result = Aff { ptr: isl_rs_result,
219                                  should_free_on_drop: true };
220        isl_rs_result
221    }
222
223    /// Wraps `isl_aff_val_on_domain`.
224    pub fn val_on_domain(ls: LocalSpace, val: Val) -> Aff {
225        let mut ls = ls;
226        ls.do_not_free_on_drop();
227        let ls = ls.ptr;
228        let mut val = val;
229        val.do_not_free_on_drop();
230        let val = val.ptr;
231        let isl_rs_result = unsafe { isl_aff_val_on_domain(ls, val) };
232        let isl_rs_result = Aff { ptr: isl_rs_result,
233                                  should_free_on_drop: true };
234        isl_rs_result
235    }
236
237    /// Wraps `isl_aff_var_on_domain`.
238    pub fn var_on_domain(ls: LocalSpace, type_: DimType, pos: u32) -> Aff {
239        let mut ls = ls;
240        ls.do_not_free_on_drop();
241        let ls = ls.ptr;
242        let isl_rs_result = unsafe { isl_aff_var_on_domain(ls, type_, pos) };
243        let isl_rs_result = Aff { ptr: isl_rs_result,
244                                  should_free_on_drop: true };
245        isl_rs_result
246    }
247
248    /// Wraps `isl_aff_nan_on_domain_space`.
249    pub fn nan_on_domain_space(space: Space) -> Aff {
250        let mut space = space;
251        space.do_not_free_on_drop();
252        let space = space.ptr;
253        let isl_rs_result = unsafe { isl_aff_nan_on_domain_space(space) };
254        let isl_rs_result = Aff { ptr: isl_rs_result,
255                                  should_free_on_drop: true };
256        isl_rs_result
257    }
258
259    /// Wraps `isl_aff_nan_on_domain`.
260    pub fn nan_on_domain(ls: LocalSpace) -> Aff {
261        let mut ls = ls;
262        ls.do_not_free_on_drop();
263        let ls = ls.ptr;
264        let isl_rs_result = unsafe { isl_aff_nan_on_domain(ls) };
265        let isl_rs_result = Aff { ptr: isl_rs_result,
266                                  should_free_on_drop: true };
267        isl_rs_result
268    }
269
270    /// Wraps `isl_aff_param_on_domain_space_id`.
271    pub fn param_on_domain_space_id(space: Space, id: Id) -> Aff {
272        let mut space = space;
273        space.do_not_free_on_drop();
274        let space = space.ptr;
275        let mut id = id;
276        id.do_not_free_on_drop();
277        let id = id.ptr;
278        let isl_rs_result = unsafe { isl_aff_param_on_domain_space_id(space, id) };
279        let isl_rs_result = Aff { ptr: isl_rs_result,
280                                  should_free_on_drop: true };
281        isl_rs_result
282    }
283
284    /// Wraps `isl_aff_copy`.
285    pub fn copy(&self) -> Aff {
286        let aff = self;
287        let aff = aff.ptr;
288        let isl_rs_result = unsafe { isl_aff_copy(aff) };
289        let isl_rs_result = Aff { ptr: isl_rs_result,
290                                  should_free_on_drop: true };
291        isl_rs_result
292    }
293
294    /// Wraps `isl_aff_free`.
295    pub fn free(self) -> Aff {
296        let aff = self;
297        let mut aff = aff;
298        aff.do_not_free_on_drop();
299        let aff = aff.ptr;
300        let isl_rs_result = unsafe { isl_aff_free(aff) };
301        let isl_rs_result = Aff { ptr: isl_rs_result,
302                                  should_free_on_drop: true };
303        isl_rs_result
304    }
305
306    /// Wraps `isl_aff_get_ctx`.
307    pub fn get_ctx(&self) -> Context {
308        let aff = self;
309        let aff = aff.ptr;
310        let isl_rs_result = unsafe { isl_aff_get_ctx(aff) };
311        let isl_rs_result = Context { ptr: isl_rs_result,
312                                      should_free_on_drop: true };
313        let mut isl_rs_result = isl_rs_result;
314        isl_rs_result.do_not_free_on_drop();
315        isl_rs_result
316    }
317
318    /// Wraps `isl_aff_get_hash`.
319    pub fn get_hash(&self) -> u32 {
320        let aff = self;
321        let aff = aff.ptr;
322        let isl_rs_result = unsafe { isl_aff_get_hash(aff) };
323        isl_rs_result
324    }
325
326    /// Wraps `isl_aff_involves_locals`.
327    pub fn involves_locals(&self) -> bool {
328        let aff = self;
329        let aff = aff.ptr;
330        let isl_rs_result = unsafe { isl_aff_involves_locals(aff) };
331        let isl_rs_result = match isl_rs_result {
332            0 => false,
333            1 => true,
334            _ => panic!("Got isl_bool = -1"),
335        };
336        isl_rs_result
337    }
338
339    /// Wraps `isl_aff_dim`.
340    pub fn dim(&self, type_: DimType) -> i32 {
341        let aff = self;
342        let aff = aff.ptr;
343        let isl_rs_result = unsafe { isl_aff_dim(aff, type_) };
344        isl_rs_result
345    }
346
347    /// Wraps `isl_aff_involves_dims`.
348    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> bool {
349        let aff = self;
350        let aff = aff.ptr;
351        let isl_rs_result = unsafe { isl_aff_involves_dims(aff, type_, first, n) };
352        let isl_rs_result = match isl_rs_result {
353            0 => false,
354            1 => true,
355            _ => panic!("Got isl_bool = -1"),
356        };
357        isl_rs_result
358    }
359
360    /// Wraps `isl_aff_get_domain_space`.
361    pub fn get_domain_space(&self) -> Space {
362        let aff = self;
363        let aff = aff.ptr;
364        let isl_rs_result = unsafe { isl_aff_get_domain_space(aff) };
365        let isl_rs_result = Space { ptr: isl_rs_result,
366                                    should_free_on_drop: true };
367        isl_rs_result
368    }
369
370    /// Wraps `isl_aff_get_space`.
371    pub fn get_space(&self) -> Space {
372        let aff = self;
373        let aff = aff.ptr;
374        let isl_rs_result = unsafe { isl_aff_get_space(aff) };
375        let isl_rs_result = Space { ptr: isl_rs_result,
376                                    should_free_on_drop: true };
377        isl_rs_result
378    }
379
380    /// Wraps `isl_aff_get_domain_local_space`.
381    pub fn get_domain_local_space(&self) -> LocalSpace {
382        let aff = self;
383        let aff = aff.ptr;
384        let isl_rs_result = unsafe { isl_aff_get_domain_local_space(aff) };
385        let isl_rs_result = LocalSpace { ptr: isl_rs_result,
386                                         should_free_on_drop: true };
387        isl_rs_result
388    }
389
390    /// Wraps `isl_aff_get_local_space`.
391    pub fn get_local_space(&self) -> LocalSpace {
392        let aff = self;
393        let aff = aff.ptr;
394        let isl_rs_result = unsafe { isl_aff_get_local_space(aff) };
395        let isl_rs_result = LocalSpace { ptr: isl_rs_result,
396                                         should_free_on_drop: true };
397        isl_rs_result
398    }
399
400    /// Wraps `isl_aff_get_dim_name`.
401    pub fn get_dim_name(&self, type_: DimType, pos: u32) -> &str {
402        let aff = self;
403        let aff = aff.ptr;
404        let isl_rs_result = unsafe { isl_aff_get_dim_name(aff, type_, pos) };
405        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
406        let isl_rs_result = isl_rs_result.to_str().unwrap();
407        isl_rs_result
408    }
409
410    /// Wraps `isl_aff_get_constant_val`.
411    pub fn get_constant_val(&self) -> Val {
412        let aff = self;
413        let aff = aff.ptr;
414        let isl_rs_result = unsafe { isl_aff_get_constant_val(aff) };
415        let isl_rs_result = Val { ptr: isl_rs_result,
416                                  should_free_on_drop: true };
417        isl_rs_result
418    }
419
420    /// Wraps `isl_aff_get_coefficient_val`.
421    pub fn get_coefficient_val(&self, type_: DimType, pos: i32) -> Val {
422        let aff = self;
423        let aff = aff.ptr;
424        let isl_rs_result = unsafe { isl_aff_get_coefficient_val(aff, type_, pos) };
425        let isl_rs_result = Val { ptr: isl_rs_result,
426                                  should_free_on_drop: true };
427        isl_rs_result
428    }
429
430    /// Wraps `isl_aff_coefficient_sgn`.
431    pub fn coefficient_sgn(&self, type_: DimType, pos: i32) -> i32 {
432        let aff = self;
433        let aff = aff.ptr;
434        let isl_rs_result = unsafe { isl_aff_coefficient_sgn(aff, type_, pos) };
435        isl_rs_result
436    }
437
438    /// Wraps `isl_aff_get_denominator_val`.
439    pub fn get_denominator_val(&self) -> Val {
440        let aff = self;
441        let aff = aff.ptr;
442        let isl_rs_result = unsafe { isl_aff_get_denominator_val(aff) };
443        let isl_rs_result = Val { ptr: isl_rs_result,
444                                  should_free_on_drop: true };
445        isl_rs_result
446    }
447
448    /// Wraps `isl_aff_set_constant_si`.
449    pub fn set_constant_si(self, v: i32) -> Aff {
450        let aff = self;
451        let mut aff = aff;
452        aff.do_not_free_on_drop();
453        let aff = aff.ptr;
454        let isl_rs_result = unsafe { isl_aff_set_constant_si(aff, v) };
455        let isl_rs_result = Aff { ptr: isl_rs_result,
456                                  should_free_on_drop: true };
457        isl_rs_result
458    }
459
460    /// Wraps `isl_aff_set_constant_val`.
461    pub fn set_constant_val(self, v: Val) -> Aff {
462        let aff = self;
463        let mut aff = aff;
464        aff.do_not_free_on_drop();
465        let aff = aff.ptr;
466        let mut v = v;
467        v.do_not_free_on_drop();
468        let v = v.ptr;
469        let isl_rs_result = unsafe { isl_aff_set_constant_val(aff, v) };
470        let isl_rs_result = Aff { ptr: isl_rs_result,
471                                  should_free_on_drop: true };
472        isl_rs_result
473    }
474
475    /// Wraps `isl_aff_set_coefficient_si`.
476    pub fn set_coefficient_si(self, type_: DimType, pos: i32, v: i32) -> Aff {
477        let aff = self;
478        let mut aff = aff;
479        aff.do_not_free_on_drop();
480        let aff = aff.ptr;
481        let isl_rs_result = unsafe { isl_aff_set_coefficient_si(aff, type_, pos, v) };
482        let isl_rs_result = Aff { ptr: isl_rs_result,
483                                  should_free_on_drop: true };
484        isl_rs_result
485    }
486
487    /// Wraps `isl_aff_set_coefficient_val`.
488    pub fn set_coefficient_val(self, type_: DimType, pos: i32, v: Val) -> Aff {
489        let aff = self;
490        let mut aff = aff;
491        aff.do_not_free_on_drop();
492        let aff = aff.ptr;
493        let mut v = v;
494        v.do_not_free_on_drop();
495        let v = v.ptr;
496        let isl_rs_result = unsafe { isl_aff_set_coefficient_val(aff, type_, pos, v) };
497        let isl_rs_result = Aff { ptr: isl_rs_result,
498                                  should_free_on_drop: true };
499        isl_rs_result
500    }
501
502    /// Wraps `isl_aff_add_constant_si`.
503    pub fn add_constant_si(self, v: i32) -> Aff {
504        let aff = self;
505        let mut aff = aff;
506        aff.do_not_free_on_drop();
507        let aff = aff.ptr;
508        let isl_rs_result = unsafe { isl_aff_add_constant_si(aff, v) };
509        let isl_rs_result = Aff { ptr: isl_rs_result,
510                                  should_free_on_drop: true };
511        isl_rs_result
512    }
513
514    /// Wraps `isl_aff_add_constant_val`.
515    pub fn add_constant_val(self, v: Val) -> Aff {
516        let aff = self;
517        let mut aff = aff;
518        aff.do_not_free_on_drop();
519        let aff = aff.ptr;
520        let mut v = v;
521        v.do_not_free_on_drop();
522        let v = v.ptr;
523        let isl_rs_result = unsafe { isl_aff_add_constant_val(aff, v) };
524        let isl_rs_result = Aff { ptr: isl_rs_result,
525                                  should_free_on_drop: true };
526        isl_rs_result
527    }
528
529    /// Wraps `isl_aff_add_constant_num_si`.
530    pub fn add_constant_num_si(self, v: i32) -> Aff {
531        let aff = self;
532        let mut aff = aff;
533        aff.do_not_free_on_drop();
534        let aff = aff.ptr;
535        let isl_rs_result = unsafe { isl_aff_add_constant_num_si(aff, v) };
536        let isl_rs_result = Aff { ptr: isl_rs_result,
537                                  should_free_on_drop: true };
538        isl_rs_result
539    }
540
541    /// Wraps `isl_aff_add_coefficient_si`.
542    pub fn add_coefficient_si(self, type_: DimType, pos: i32, v: i32) -> Aff {
543        let aff = self;
544        let mut aff = aff;
545        aff.do_not_free_on_drop();
546        let aff = aff.ptr;
547        let isl_rs_result = unsafe { isl_aff_add_coefficient_si(aff, type_, pos, v) };
548        let isl_rs_result = Aff { ptr: isl_rs_result,
549                                  should_free_on_drop: true };
550        isl_rs_result
551    }
552
553    /// Wraps `isl_aff_add_coefficient_val`.
554    pub fn add_coefficient_val(self, type_: DimType, pos: i32, v: Val) -> Aff {
555        let aff = self;
556        let mut aff = aff;
557        aff.do_not_free_on_drop();
558        let aff = aff.ptr;
559        let mut v = v;
560        v.do_not_free_on_drop();
561        let v = v.ptr;
562        let isl_rs_result = unsafe { isl_aff_add_coefficient_val(aff, type_, pos, v) };
563        let isl_rs_result = Aff { ptr: isl_rs_result,
564                                  should_free_on_drop: true };
565        isl_rs_result
566    }
567
568    /// Wraps `isl_aff_is_cst`.
569    pub fn is_cst(&self) -> bool {
570        let aff = self;
571        let aff = aff.ptr;
572        let isl_rs_result = unsafe { isl_aff_is_cst(aff) };
573        let isl_rs_result = match isl_rs_result {
574            0 => false,
575            1 => true,
576            _ => panic!("Got isl_bool = -1"),
577        };
578        isl_rs_result
579    }
580
581    /// Wraps `isl_aff_set_tuple_id`.
582    pub fn set_tuple_id(self, type_: DimType, id: Id) -> Aff {
583        let aff = self;
584        let mut aff = aff;
585        aff.do_not_free_on_drop();
586        let aff = aff.ptr;
587        let mut id = id;
588        id.do_not_free_on_drop();
589        let id = id.ptr;
590        let isl_rs_result = unsafe { isl_aff_set_tuple_id(aff, type_, id) };
591        let isl_rs_result = Aff { ptr: isl_rs_result,
592                                  should_free_on_drop: true };
593        isl_rs_result
594    }
595
596    /// Wraps `isl_aff_set_dim_name`.
597    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Aff {
598        let aff = self;
599        let mut aff = aff;
600        aff.do_not_free_on_drop();
601        let aff = aff.ptr;
602        let s = CString::new(s).unwrap();
603        let s = s.as_ptr();
604        let isl_rs_result = unsafe { isl_aff_set_dim_name(aff, type_, pos, s) };
605        let isl_rs_result = Aff { ptr: isl_rs_result,
606                                  should_free_on_drop: true };
607        isl_rs_result
608    }
609
610    /// Wraps `isl_aff_set_dim_id`.
611    pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Aff {
612        let aff = self;
613        let mut aff = aff;
614        aff.do_not_free_on_drop();
615        let aff = aff.ptr;
616        let mut id = id;
617        id.do_not_free_on_drop();
618        let id = id.ptr;
619        let isl_rs_result = unsafe { isl_aff_set_dim_id(aff, type_, pos, id) };
620        let isl_rs_result = Aff { ptr: isl_rs_result,
621                                  should_free_on_drop: true };
622        isl_rs_result
623    }
624
625    /// Wraps `isl_aff_find_dim_by_name`.
626    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> i32 {
627        let aff = self;
628        let aff = aff.ptr;
629        let name = CString::new(name).unwrap();
630        let name = name.as_ptr();
631        let isl_rs_result = unsafe { isl_aff_find_dim_by_name(aff, type_, name) };
632        isl_rs_result
633    }
634
635    /// Wraps `isl_aff_plain_is_equal`.
636    pub fn plain_is_equal(&self, aff2: &Aff) -> bool {
637        let aff1 = self;
638        let aff1 = aff1.ptr;
639        let aff2 = aff2.ptr;
640        let isl_rs_result = unsafe { isl_aff_plain_is_equal(aff1, aff2) };
641        let isl_rs_result = match isl_rs_result {
642            0 => false,
643            1 => true,
644            _ => panic!("Got isl_bool = -1"),
645        };
646        isl_rs_result
647    }
648
649    /// Wraps `isl_aff_plain_is_zero`.
650    pub fn plain_is_zero(&self) -> bool {
651        let aff = self;
652        let aff = aff.ptr;
653        let isl_rs_result = unsafe { isl_aff_plain_is_zero(aff) };
654        let isl_rs_result = match isl_rs_result {
655            0 => false,
656            1 => true,
657            _ => panic!("Got isl_bool = -1"),
658        };
659        isl_rs_result
660    }
661
662    /// Wraps `isl_aff_is_nan`.
663    pub fn is_nan(&self) -> bool {
664        let aff = self;
665        let aff = aff.ptr;
666        let isl_rs_result = unsafe { isl_aff_is_nan(aff) };
667        let isl_rs_result = match isl_rs_result {
668            0 => false,
669            1 => true,
670            _ => panic!("Got isl_bool = -1"),
671        };
672        isl_rs_result
673    }
674
675    /// Wraps `isl_aff_get_div`.
676    pub fn get_div(&self, pos: i32) -> Aff {
677        let aff = self;
678        let aff = aff.ptr;
679        let isl_rs_result = unsafe { isl_aff_get_div(aff, pos) };
680        let isl_rs_result = Aff { ptr: isl_rs_result,
681                                  should_free_on_drop: true };
682        isl_rs_result
683    }
684
685    /// Wraps `isl_aff_from_range`.
686    pub fn from_range(self) -> Aff {
687        let aff = self;
688        let mut aff = aff;
689        aff.do_not_free_on_drop();
690        let aff = aff.ptr;
691        let isl_rs_result = unsafe { isl_aff_from_range(aff) };
692        let isl_rs_result = Aff { ptr: isl_rs_result,
693                                  should_free_on_drop: true };
694        isl_rs_result
695    }
696
697    /// Wraps `isl_aff_neg`.
698    pub fn neg(self) -> Aff {
699        let aff = self;
700        let mut aff = aff;
701        aff.do_not_free_on_drop();
702        let aff = aff.ptr;
703        let isl_rs_result = unsafe { isl_aff_neg(aff) };
704        let isl_rs_result = Aff { ptr: isl_rs_result,
705                                  should_free_on_drop: true };
706        isl_rs_result
707    }
708
709    /// Wraps `isl_aff_ceil`.
710    pub fn ceil(self) -> Aff {
711        let aff = self;
712        let mut aff = aff;
713        aff.do_not_free_on_drop();
714        let aff = aff.ptr;
715        let isl_rs_result = unsafe { isl_aff_ceil(aff) };
716        let isl_rs_result = Aff { ptr: isl_rs_result,
717                                  should_free_on_drop: true };
718        isl_rs_result
719    }
720
721    /// Wraps `isl_aff_floor`.
722    pub fn floor(self) -> Aff {
723        let aff = self;
724        let mut aff = aff;
725        aff.do_not_free_on_drop();
726        let aff = aff.ptr;
727        let isl_rs_result = unsafe { isl_aff_floor(aff) };
728        let isl_rs_result = Aff { ptr: isl_rs_result,
729                                  should_free_on_drop: true };
730        isl_rs_result
731    }
732
733    /// Wraps `isl_aff_mod_val`.
734    pub fn mod_val(self, mod_: Val) -> Aff {
735        let aff = self;
736        let mut aff = aff;
737        aff.do_not_free_on_drop();
738        let aff = aff.ptr;
739        let mut mod_ = mod_;
740        mod_.do_not_free_on_drop();
741        let mod_ = mod_.ptr;
742        let isl_rs_result = unsafe { isl_aff_mod_val(aff, mod_) };
743        let isl_rs_result = Aff { ptr: isl_rs_result,
744                                  should_free_on_drop: true };
745        isl_rs_result
746    }
747
748    /// Wraps `isl_aff_mul`.
749    pub fn mul(self, aff2: Aff) -> Aff {
750        let aff1 = self;
751        let mut aff1 = aff1;
752        aff1.do_not_free_on_drop();
753        let aff1 = aff1.ptr;
754        let mut aff2 = aff2;
755        aff2.do_not_free_on_drop();
756        let aff2 = aff2.ptr;
757        let isl_rs_result = unsafe { isl_aff_mul(aff1, aff2) };
758        let isl_rs_result = Aff { ptr: isl_rs_result,
759                                  should_free_on_drop: true };
760        isl_rs_result
761    }
762
763    /// Wraps `isl_aff_div`.
764    pub fn div(self, aff2: Aff) -> Aff {
765        let aff1 = self;
766        let mut aff1 = aff1;
767        aff1.do_not_free_on_drop();
768        let aff1 = aff1.ptr;
769        let mut aff2 = aff2;
770        aff2.do_not_free_on_drop();
771        let aff2 = aff2.ptr;
772        let isl_rs_result = unsafe { isl_aff_div(aff1, aff2) };
773        let isl_rs_result = Aff { ptr: isl_rs_result,
774                                  should_free_on_drop: true };
775        isl_rs_result
776    }
777
778    /// Wraps `isl_aff_add`.
779    pub fn add(self, aff2: Aff) -> Aff {
780        let aff1 = self;
781        let mut aff1 = aff1;
782        aff1.do_not_free_on_drop();
783        let aff1 = aff1.ptr;
784        let mut aff2 = aff2;
785        aff2.do_not_free_on_drop();
786        let aff2 = aff2.ptr;
787        let isl_rs_result = unsafe { isl_aff_add(aff1, aff2) };
788        let isl_rs_result = Aff { ptr: isl_rs_result,
789                                  should_free_on_drop: true };
790        isl_rs_result
791    }
792
793    /// Wraps `isl_aff_sub`.
794    pub fn sub(self, aff2: Aff) -> Aff {
795        let aff1 = self;
796        let mut aff1 = aff1;
797        aff1.do_not_free_on_drop();
798        let aff1 = aff1.ptr;
799        let mut aff2 = aff2;
800        aff2.do_not_free_on_drop();
801        let aff2 = aff2.ptr;
802        let isl_rs_result = unsafe { isl_aff_sub(aff1, aff2) };
803        let isl_rs_result = Aff { ptr: isl_rs_result,
804                                  should_free_on_drop: true };
805        isl_rs_result
806    }
807
808    /// Wraps `isl_aff_scale_val`.
809    pub fn scale_val(self, v: Val) -> Aff {
810        let aff = self;
811        let mut aff = aff;
812        aff.do_not_free_on_drop();
813        let aff = aff.ptr;
814        let mut v = v;
815        v.do_not_free_on_drop();
816        let v = v.ptr;
817        let isl_rs_result = unsafe { isl_aff_scale_val(aff, v) };
818        let isl_rs_result = Aff { ptr: isl_rs_result,
819                                  should_free_on_drop: true };
820        isl_rs_result
821    }
822
823    /// Wraps `isl_aff_scale_down_ui`.
824    pub fn scale_down_ui(self, f: u32) -> Aff {
825        let aff = self;
826        let mut aff = aff;
827        aff.do_not_free_on_drop();
828        let aff = aff.ptr;
829        let isl_rs_result = unsafe { isl_aff_scale_down_ui(aff, f) };
830        let isl_rs_result = Aff { ptr: isl_rs_result,
831                                  should_free_on_drop: true };
832        isl_rs_result
833    }
834
835    /// Wraps `isl_aff_scale_down_val`.
836    pub fn scale_down_val(self, v: Val) -> Aff {
837        let aff = self;
838        let mut aff = aff;
839        aff.do_not_free_on_drop();
840        let aff = aff.ptr;
841        let mut v = v;
842        v.do_not_free_on_drop();
843        let v = v.ptr;
844        let isl_rs_result = unsafe { isl_aff_scale_down_val(aff, v) };
845        let isl_rs_result = Aff { ptr: isl_rs_result,
846                                  should_free_on_drop: true };
847        isl_rs_result
848    }
849
850    /// Wraps `isl_aff_insert_dims`.
851    pub fn insert_dims(self, type_: DimType, first: u32, n: u32) -> Aff {
852        let aff = self;
853        let mut aff = aff;
854        aff.do_not_free_on_drop();
855        let aff = aff.ptr;
856        let isl_rs_result = unsafe { isl_aff_insert_dims(aff, type_, first, n) };
857        let isl_rs_result = Aff { ptr: isl_rs_result,
858                                  should_free_on_drop: true };
859        isl_rs_result
860    }
861
862    /// Wraps `isl_aff_add_dims`.
863    pub fn add_dims(self, type_: DimType, n: u32) -> Aff {
864        let aff = self;
865        let mut aff = aff;
866        aff.do_not_free_on_drop();
867        let aff = aff.ptr;
868        let isl_rs_result = unsafe { isl_aff_add_dims(aff, type_, n) };
869        let isl_rs_result = Aff { ptr: isl_rs_result,
870                                  should_free_on_drop: true };
871        isl_rs_result
872    }
873
874    /// Wraps `isl_aff_move_dims`.
875    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
876                     n: u32)
877                     -> Aff {
878        let aff = self;
879        let mut aff = aff;
880        aff.do_not_free_on_drop();
881        let aff = aff.ptr;
882        let isl_rs_result =
883            unsafe { isl_aff_move_dims(aff, dst_type, dst_pos, src_type, src_pos, n) };
884        let isl_rs_result = Aff { ptr: isl_rs_result,
885                                  should_free_on_drop: true };
886        isl_rs_result
887    }
888
889    /// Wraps `isl_aff_drop_dims`.
890    pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Aff {
891        let aff = self;
892        let mut aff = aff;
893        aff.do_not_free_on_drop();
894        let aff = aff.ptr;
895        let isl_rs_result = unsafe { isl_aff_drop_dims(aff, type_, first, n) };
896        let isl_rs_result = Aff { ptr: isl_rs_result,
897                                  should_free_on_drop: true };
898        isl_rs_result
899    }
900
901    /// Wraps `isl_aff_project_domain_on_params`.
902    pub fn project_domain_on_params(self) -> Aff {
903        let aff = self;
904        let mut aff = aff;
905        aff.do_not_free_on_drop();
906        let aff = aff.ptr;
907        let isl_rs_result = unsafe { isl_aff_project_domain_on_params(aff) };
908        let isl_rs_result = Aff { ptr: isl_rs_result,
909                                  should_free_on_drop: true };
910        isl_rs_result
911    }
912
913    /// Wraps `isl_aff_align_params`.
914    pub fn align_params(self, model: Space) -> Aff {
915        let aff = self;
916        let mut aff = aff;
917        aff.do_not_free_on_drop();
918        let aff = aff.ptr;
919        let mut model = model;
920        model.do_not_free_on_drop();
921        let model = model.ptr;
922        let isl_rs_result = unsafe { isl_aff_align_params(aff, model) };
923        let isl_rs_result = Aff { ptr: isl_rs_result,
924                                  should_free_on_drop: true };
925        isl_rs_result
926    }
927
928    /// Wraps `isl_aff_gist`.
929    pub fn gist(self, context: Set) -> Aff {
930        let aff = self;
931        let mut aff = aff;
932        aff.do_not_free_on_drop();
933        let aff = aff.ptr;
934        let mut context = context;
935        context.do_not_free_on_drop();
936        let context = context.ptr;
937        let isl_rs_result = unsafe { isl_aff_gist(aff, context) };
938        let isl_rs_result = Aff { ptr: isl_rs_result,
939                                  should_free_on_drop: true };
940        isl_rs_result
941    }
942
943    /// Wraps `isl_aff_gist_params`.
944    pub fn gist_params(self, context: Set) -> Aff {
945        let aff = self;
946        let mut aff = aff;
947        aff.do_not_free_on_drop();
948        let aff = aff.ptr;
949        let mut context = context;
950        context.do_not_free_on_drop();
951        let context = context.ptr;
952        let isl_rs_result = unsafe { isl_aff_gist_params(aff, context) };
953        let isl_rs_result = Aff { ptr: isl_rs_result,
954                                  should_free_on_drop: true };
955        isl_rs_result
956    }
957
958    /// Wraps `isl_aff_eval`.
959    pub fn eval(self, pnt: Point) -> Val {
960        let aff = self;
961        let mut aff = aff;
962        aff.do_not_free_on_drop();
963        let aff = aff.ptr;
964        let mut pnt = pnt;
965        pnt.do_not_free_on_drop();
966        let pnt = pnt.ptr;
967        let isl_rs_result = unsafe { isl_aff_eval(aff, pnt) };
968        let isl_rs_result = Val { ptr: isl_rs_result,
969                                  should_free_on_drop: true };
970        isl_rs_result
971    }
972
973    /// Wraps `isl_aff_pullback_aff`.
974    pub fn pullback_aff(self, aff2: Aff) -> Aff {
975        let aff1 = self;
976        let mut aff1 = aff1;
977        aff1.do_not_free_on_drop();
978        let aff1 = aff1.ptr;
979        let mut aff2 = aff2;
980        aff2.do_not_free_on_drop();
981        let aff2 = aff2.ptr;
982        let isl_rs_result = unsafe { isl_aff_pullback_aff(aff1, aff2) };
983        let isl_rs_result = Aff { ptr: isl_rs_result,
984                                  should_free_on_drop: true };
985        isl_rs_result
986    }
987
988    /// Wraps `isl_aff_zero_basic_set`.
989    pub fn zero_basic_set(self) -> BasicSet {
990        let aff = self;
991        let mut aff = aff;
992        aff.do_not_free_on_drop();
993        let aff = aff.ptr;
994        let isl_rs_result = unsafe { isl_aff_zero_basic_set(aff) };
995        let isl_rs_result = BasicSet { ptr: isl_rs_result,
996                                       should_free_on_drop: true };
997        isl_rs_result
998    }
999
1000    /// Wraps `isl_aff_neg_basic_set`.
1001    pub fn neg_basic_set(self) -> BasicSet {
1002        let aff = self;
1003        let mut aff = aff;
1004        aff.do_not_free_on_drop();
1005        let aff = aff.ptr;
1006        let isl_rs_result = unsafe { isl_aff_neg_basic_set(aff) };
1007        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1008                                       should_free_on_drop: true };
1009        isl_rs_result
1010    }
1011
1012    /// Wraps `isl_aff_eq_basic_set`.
1013    pub fn eq_basic_set(self, aff2: Aff) -> BasicSet {
1014        let aff1 = self;
1015        let mut aff1 = aff1;
1016        aff1.do_not_free_on_drop();
1017        let aff1 = aff1.ptr;
1018        let mut aff2 = aff2;
1019        aff2.do_not_free_on_drop();
1020        let aff2 = aff2.ptr;
1021        let isl_rs_result = unsafe { isl_aff_eq_basic_set(aff1, aff2) };
1022        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1023                                       should_free_on_drop: true };
1024        isl_rs_result
1025    }
1026
1027    /// Wraps `isl_aff_eq_set`.
1028    pub fn eq_set(self, aff2: Aff) -> Set {
1029        let aff1 = self;
1030        let mut aff1 = aff1;
1031        aff1.do_not_free_on_drop();
1032        let aff1 = aff1.ptr;
1033        let mut aff2 = aff2;
1034        aff2.do_not_free_on_drop();
1035        let aff2 = aff2.ptr;
1036        let isl_rs_result = unsafe { isl_aff_eq_set(aff1, aff2) };
1037        let isl_rs_result = Set { ptr: isl_rs_result,
1038                                  should_free_on_drop: true };
1039        isl_rs_result
1040    }
1041
1042    /// Wraps `isl_aff_ne_set`.
1043    pub fn ne_set(self, aff2: Aff) -> Set {
1044        let aff1 = self;
1045        let mut aff1 = aff1;
1046        aff1.do_not_free_on_drop();
1047        let aff1 = aff1.ptr;
1048        let mut aff2 = aff2;
1049        aff2.do_not_free_on_drop();
1050        let aff2 = aff2.ptr;
1051        let isl_rs_result = unsafe { isl_aff_ne_set(aff1, aff2) };
1052        let isl_rs_result = Set { ptr: isl_rs_result,
1053                                  should_free_on_drop: true };
1054        isl_rs_result
1055    }
1056
1057    /// Wraps `isl_aff_le_basic_set`.
1058    pub fn le_basic_set(self, aff2: Aff) -> BasicSet {
1059        let aff1 = self;
1060        let mut aff1 = aff1;
1061        aff1.do_not_free_on_drop();
1062        let aff1 = aff1.ptr;
1063        let mut aff2 = aff2;
1064        aff2.do_not_free_on_drop();
1065        let aff2 = aff2.ptr;
1066        let isl_rs_result = unsafe { isl_aff_le_basic_set(aff1, aff2) };
1067        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1068                                       should_free_on_drop: true };
1069        isl_rs_result
1070    }
1071
1072    /// Wraps `isl_aff_le_set`.
1073    pub fn le_set(self, aff2: Aff) -> Set {
1074        let aff1 = self;
1075        let mut aff1 = aff1;
1076        aff1.do_not_free_on_drop();
1077        let aff1 = aff1.ptr;
1078        let mut aff2 = aff2;
1079        aff2.do_not_free_on_drop();
1080        let aff2 = aff2.ptr;
1081        let isl_rs_result = unsafe { isl_aff_le_set(aff1, aff2) };
1082        let isl_rs_result = Set { ptr: isl_rs_result,
1083                                  should_free_on_drop: true };
1084        isl_rs_result
1085    }
1086
1087    /// Wraps `isl_aff_lt_basic_set`.
1088    pub fn lt_basic_set(self, aff2: Aff) -> BasicSet {
1089        let aff1 = self;
1090        let mut aff1 = aff1;
1091        aff1.do_not_free_on_drop();
1092        let aff1 = aff1.ptr;
1093        let mut aff2 = aff2;
1094        aff2.do_not_free_on_drop();
1095        let aff2 = aff2.ptr;
1096        let isl_rs_result = unsafe { isl_aff_lt_basic_set(aff1, aff2) };
1097        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1098                                       should_free_on_drop: true };
1099        isl_rs_result
1100    }
1101
1102    /// Wraps `isl_aff_lt_set`.
1103    pub fn lt_set(self, aff2: Aff) -> Set {
1104        let aff1 = self;
1105        let mut aff1 = aff1;
1106        aff1.do_not_free_on_drop();
1107        let aff1 = aff1.ptr;
1108        let mut aff2 = aff2;
1109        aff2.do_not_free_on_drop();
1110        let aff2 = aff2.ptr;
1111        let isl_rs_result = unsafe { isl_aff_lt_set(aff1, aff2) };
1112        let isl_rs_result = Set { ptr: isl_rs_result,
1113                                  should_free_on_drop: true };
1114        isl_rs_result
1115    }
1116
1117    /// Wraps `isl_aff_ge_basic_set`.
1118    pub fn ge_basic_set(self, aff2: Aff) -> BasicSet {
1119        let aff1 = self;
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_ge_basic_set(aff1, aff2) };
1127        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1128                                       should_free_on_drop: true };
1129        isl_rs_result
1130    }
1131
1132    /// Wraps `isl_aff_ge_set`.
1133    pub fn ge_set(self, aff2: Aff) -> Set {
1134        let aff1 = self;
1135        let mut aff1 = aff1;
1136        aff1.do_not_free_on_drop();
1137        let aff1 = aff1.ptr;
1138        let mut aff2 = aff2;
1139        aff2.do_not_free_on_drop();
1140        let aff2 = aff2.ptr;
1141        let isl_rs_result = unsafe { isl_aff_ge_set(aff1, aff2) };
1142        let isl_rs_result = Set { ptr: isl_rs_result,
1143                                  should_free_on_drop: true };
1144        isl_rs_result
1145    }
1146
1147    /// Wraps `isl_aff_gt_basic_set`.
1148    pub fn gt_basic_set(self, aff2: Aff) -> BasicSet {
1149        let aff1 = self;
1150        let mut aff1 = aff1;
1151        aff1.do_not_free_on_drop();
1152        let aff1 = aff1.ptr;
1153        let mut aff2 = aff2;
1154        aff2.do_not_free_on_drop();
1155        let aff2 = aff2.ptr;
1156        let isl_rs_result = unsafe { isl_aff_gt_basic_set(aff1, aff2) };
1157        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1158                                       should_free_on_drop: true };
1159        isl_rs_result
1160    }
1161
1162    /// Wraps `isl_aff_gt_set`.
1163    pub fn gt_set(self, aff2: Aff) -> Set {
1164        let aff1 = self;
1165        let mut aff1 = aff1;
1166        aff1.do_not_free_on_drop();
1167        let aff1 = aff1.ptr;
1168        let mut aff2 = aff2;
1169        aff2.do_not_free_on_drop();
1170        let aff2 = aff2.ptr;
1171        let isl_rs_result = unsafe { isl_aff_gt_set(aff1, aff2) };
1172        let isl_rs_result = Set { ptr: isl_rs_result,
1173                                  should_free_on_drop: true };
1174        isl_rs_result
1175    }
1176
1177    /// Wraps `isl_aff_bind_id`.
1178    pub fn bind_id(self, id: Id) -> BasicSet {
1179        let aff = self;
1180        let mut aff = aff;
1181        aff.do_not_free_on_drop();
1182        let aff = aff.ptr;
1183        let mut id = id;
1184        id.do_not_free_on_drop();
1185        let id = id.ptr;
1186        let isl_rs_result = unsafe { isl_aff_bind_id(aff, id) };
1187        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1188                                       should_free_on_drop: true };
1189        isl_rs_result
1190    }
1191
1192    /// Wraps `isl_aff_read_from_str`.
1193    pub fn read_from_str(ctx: &Context, str_: &str) -> Aff {
1194        let ctx = ctx.ptr;
1195        let str_ = CString::new(str_).unwrap();
1196        let str_ = str_.as_ptr();
1197        let isl_rs_result = unsafe { isl_aff_read_from_str(ctx, str_) };
1198        let isl_rs_result = Aff { ptr: isl_rs_result,
1199                                  should_free_on_drop: true };
1200        isl_rs_result
1201    }
1202
1203    /// Wraps `isl_aff_to_str`.
1204    pub fn to_str(&self) -> &str {
1205        let aff = self;
1206        let aff = aff.ptr;
1207        let isl_rs_result = unsafe { isl_aff_to_str(aff) };
1208        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1209        let isl_rs_result = isl_rs_result.to_str().unwrap();
1210        isl_rs_result
1211    }
1212
1213    /// Wraps `isl_aff_dump`.
1214    pub fn dump(&self) {
1215        let aff = self;
1216        let aff = aff.ptr;
1217        let isl_rs_result = unsafe { isl_aff_dump(aff) };
1218        isl_rs_result
1219    }
1220
1221    /// Does not call isl_xxx_free() on being dropped. (For internal use only.)
1222    pub fn do_not_free_on_drop(&mut self) {
1223        self.should_free_on_drop = false;
1224    }
1225}
1226
1227impl Drop for Aff {
1228    fn drop(&mut self) {
1229        if self.should_free_on_drop {
1230            unsafe {
1231                isl_aff_free(self.ptr);
1232            }
1233        }
1234    }
1235}