isl_rs/bindings/
val.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use crate::bindings::Context;
5use libc::uintptr_t;
6use std::ffi::{CStr, CString};
7use std::os::raw::c_char;
8
9/// Wraps `isl_val`.
10pub struct Val {
11    pub ptr: uintptr_t,
12    pub should_free_on_drop: bool,
13}
14
15extern "C" {
16
17    fn isl_val_zero(ctx: uintptr_t) -> uintptr_t;
18
19    fn isl_val_one(ctx: uintptr_t) -> uintptr_t;
20
21    fn isl_val_negone(ctx: uintptr_t) -> uintptr_t;
22
23    fn isl_val_nan(ctx: uintptr_t) -> uintptr_t;
24
25    fn isl_val_infty(ctx: uintptr_t) -> uintptr_t;
26
27    fn isl_val_neginfty(ctx: uintptr_t) -> uintptr_t;
28
29    fn isl_val_int_from_si(ctx: uintptr_t, i: i64) -> uintptr_t;
30
31    fn isl_val_int_from_ui(ctx: uintptr_t, u: u64) -> uintptr_t;
32
33    fn isl_val_copy(v: uintptr_t) -> uintptr_t;
34
35    fn isl_val_free(v: uintptr_t) -> uintptr_t;
36
37    fn isl_val_get_ctx(val: uintptr_t) -> uintptr_t;
38
39    fn isl_val_get_hash(val: uintptr_t) -> u32;
40
41    fn isl_val_get_num_si(v: uintptr_t) -> i64;
42
43    fn isl_val_get_den_si(v: uintptr_t) -> i64;
44
45    fn isl_val_get_den_val(v: uintptr_t) -> uintptr_t;
46
47    fn isl_val_get_d(v: uintptr_t) -> f64;
48
49    fn isl_val_n_abs_num_chunks(v: uintptr_t, size: usize) -> i32;
50
51    fn isl_val_set_si(v: uintptr_t, i: i64) -> uintptr_t;
52
53    fn isl_val_abs(v: uintptr_t) -> uintptr_t;
54
55    fn isl_val_neg(v: uintptr_t) -> uintptr_t;
56
57    fn isl_val_inv(v: uintptr_t) -> uintptr_t;
58
59    fn isl_val_floor(v: uintptr_t) -> uintptr_t;
60
61    fn isl_val_ceil(v: uintptr_t) -> uintptr_t;
62
63    fn isl_val_trunc(v: uintptr_t) -> uintptr_t;
64
65    fn isl_val_2exp(v: uintptr_t) -> uintptr_t;
66
67    fn isl_val_pow2(v: uintptr_t) -> uintptr_t;
68
69    fn isl_val_min(v1: uintptr_t, v2: uintptr_t) -> uintptr_t;
70
71    fn isl_val_max(v1: uintptr_t, v2: uintptr_t) -> uintptr_t;
72
73    fn isl_val_add(v1: uintptr_t, v2: uintptr_t) -> uintptr_t;
74
75    fn isl_val_add_ui(v1: uintptr_t, v2: u64) -> uintptr_t;
76
77    fn isl_val_sub(v1: uintptr_t, v2: uintptr_t) -> uintptr_t;
78
79    fn isl_val_sub_ui(v1: uintptr_t, v2: u64) -> uintptr_t;
80
81    fn isl_val_mul(v1: uintptr_t, v2: uintptr_t) -> uintptr_t;
82
83    fn isl_val_mul_ui(v1: uintptr_t, v2: u64) -> uintptr_t;
84
85    fn isl_val_div(v1: uintptr_t, v2: uintptr_t) -> uintptr_t;
86
87    fn isl_val_div_ui(v1: uintptr_t, v2: u64) -> uintptr_t;
88
89    fn isl_val_mod(v1: uintptr_t, v2: uintptr_t) -> uintptr_t;
90
91    fn isl_val_gcd(v1: uintptr_t, v2: uintptr_t) -> uintptr_t;
92
93    fn isl_val_sgn(v: uintptr_t) -> i32;
94
95    fn isl_val_is_zero(v: uintptr_t) -> i32;
96
97    fn isl_val_is_one(v: uintptr_t) -> i32;
98
99    fn isl_val_is_negone(v: uintptr_t) -> i32;
100
101    fn isl_val_is_nonneg(v: uintptr_t) -> i32;
102
103    fn isl_val_is_nonpos(v: uintptr_t) -> i32;
104
105    fn isl_val_is_pos(v: uintptr_t) -> i32;
106
107    fn isl_val_is_neg(v: uintptr_t) -> i32;
108
109    fn isl_val_is_int(v: uintptr_t) -> i32;
110
111    fn isl_val_is_rat(v: uintptr_t) -> i32;
112
113    fn isl_val_is_nan(v: uintptr_t) -> i32;
114
115    fn isl_val_is_infty(v: uintptr_t) -> i32;
116
117    fn isl_val_is_neginfty(v: uintptr_t) -> i32;
118
119    fn isl_val_cmp_si(v: uintptr_t, i: i64) -> i32;
120
121    fn isl_val_lt(v1: uintptr_t, v2: uintptr_t) -> i32;
122
123    fn isl_val_le(v1: uintptr_t, v2: uintptr_t) -> i32;
124
125    fn isl_val_gt(v1: uintptr_t, v2: uintptr_t) -> i32;
126
127    fn isl_val_gt_si(v: uintptr_t, i: i64) -> i32;
128
129    fn isl_val_ge(v1: uintptr_t, v2: uintptr_t) -> i32;
130
131    fn isl_val_eq(v1: uintptr_t, v2: uintptr_t) -> i32;
132
133    fn isl_val_eq_si(v: uintptr_t, i: i64) -> i32;
134
135    fn isl_val_ne(v1: uintptr_t, v2: uintptr_t) -> i32;
136
137    fn isl_val_abs_eq(v1: uintptr_t, v2: uintptr_t) -> i32;
138
139    fn isl_val_is_divisible_by(v1: uintptr_t, v2: uintptr_t) -> i32;
140
141    fn isl_val_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
142
143    fn isl_val_dump(v: uintptr_t);
144
145    fn isl_val_to_str(v: uintptr_t) -> *const c_char;
146
147}
148
149impl Val {
150    /// Wraps `isl_val_zero`.
151    pub fn zero(ctx: &Context) -> Val {
152        let ctx = ctx.ptr;
153        let isl_rs_result = unsafe { isl_val_zero(ctx) };
154        let isl_rs_result = Val { ptr: isl_rs_result,
155                                  should_free_on_drop: true };
156        isl_rs_result
157    }
158
159    /// Wraps `isl_val_one`.
160    pub fn one(ctx: &Context) -> Val {
161        let ctx = ctx.ptr;
162        let isl_rs_result = unsafe { isl_val_one(ctx) };
163        let isl_rs_result = Val { ptr: isl_rs_result,
164                                  should_free_on_drop: true };
165        isl_rs_result
166    }
167
168    /// Wraps `isl_val_negone`.
169    pub fn negone(ctx: &Context) -> Val {
170        let ctx = ctx.ptr;
171        let isl_rs_result = unsafe { isl_val_negone(ctx) };
172        let isl_rs_result = Val { ptr: isl_rs_result,
173                                  should_free_on_drop: true };
174        isl_rs_result
175    }
176
177    /// Wraps `isl_val_nan`.
178    pub fn nan(ctx: &Context) -> Val {
179        let ctx = ctx.ptr;
180        let isl_rs_result = unsafe { isl_val_nan(ctx) };
181        let isl_rs_result = Val { ptr: isl_rs_result,
182                                  should_free_on_drop: true };
183        isl_rs_result
184    }
185
186    /// Wraps `isl_val_infty`.
187    pub fn infty(ctx: &Context) -> Val {
188        let ctx = ctx.ptr;
189        let isl_rs_result = unsafe { isl_val_infty(ctx) };
190        let isl_rs_result = Val { ptr: isl_rs_result,
191                                  should_free_on_drop: true };
192        isl_rs_result
193    }
194
195    /// Wraps `isl_val_neginfty`.
196    pub fn neginfty(ctx: &Context) -> Val {
197        let ctx = ctx.ptr;
198        let isl_rs_result = unsafe { isl_val_neginfty(ctx) };
199        let isl_rs_result = Val { ptr: isl_rs_result,
200                                  should_free_on_drop: true };
201        isl_rs_result
202    }
203
204    /// Wraps `isl_val_int_from_si`.
205    pub fn int_from_si(ctx: &Context, i: i64) -> Val {
206        let ctx = ctx.ptr;
207        let isl_rs_result = unsafe { isl_val_int_from_si(ctx, i) };
208        let isl_rs_result = Val { ptr: isl_rs_result,
209                                  should_free_on_drop: true };
210        isl_rs_result
211    }
212
213    /// Wraps `isl_val_int_from_ui`.
214    pub fn int_from_ui(ctx: &Context, u: u64) -> Val {
215        let ctx = ctx.ptr;
216        let isl_rs_result = unsafe { isl_val_int_from_ui(ctx, u) };
217        let isl_rs_result = Val { ptr: isl_rs_result,
218                                  should_free_on_drop: true };
219        isl_rs_result
220    }
221
222    /// Wraps `isl_val_copy`.
223    pub fn copy(&self) -> Val {
224        let v = self;
225        let v = v.ptr;
226        let isl_rs_result = unsafe { isl_val_copy(v) };
227        let isl_rs_result = Val { ptr: isl_rs_result,
228                                  should_free_on_drop: true };
229        isl_rs_result
230    }
231
232    /// Wraps `isl_val_free`.
233    pub fn free(self) -> Val {
234        let v = self;
235        let mut v = v;
236        v.do_not_free_on_drop();
237        let v = v.ptr;
238        let isl_rs_result = unsafe { isl_val_free(v) };
239        let isl_rs_result = Val { ptr: isl_rs_result,
240                                  should_free_on_drop: true };
241        isl_rs_result
242    }
243
244    /// Wraps `isl_val_get_ctx`.
245    pub fn get_ctx(&self) -> Context {
246        let val = self;
247        let val = val.ptr;
248        let isl_rs_result = unsafe { isl_val_get_ctx(val) };
249        let isl_rs_result = Context { ptr: isl_rs_result,
250                                      should_free_on_drop: true };
251        let mut isl_rs_result = isl_rs_result;
252        isl_rs_result.do_not_free_on_drop();
253        isl_rs_result
254    }
255
256    /// Wraps `isl_val_get_hash`.
257    pub fn get_hash(&self) -> u32 {
258        let val = self;
259        let val = val.ptr;
260        let isl_rs_result = unsafe { isl_val_get_hash(val) };
261        isl_rs_result
262    }
263
264    /// Wraps `isl_val_get_num_si`.
265    pub fn get_num_si(&self) -> i64 {
266        let v = self;
267        let v = v.ptr;
268        let isl_rs_result = unsafe { isl_val_get_num_si(v) };
269        isl_rs_result
270    }
271
272    /// Wraps `isl_val_get_den_si`.
273    pub fn get_den_si(&self) -> i64 {
274        let v = self;
275        let v = v.ptr;
276        let isl_rs_result = unsafe { isl_val_get_den_si(v) };
277        isl_rs_result
278    }
279
280    /// Wraps `isl_val_get_den_val`.
281    pub fn get_den_val(&self) -> Val {
282        let v = self;
283        let v = v.ptr;
284        let isl_rs_result = unsafe { isl_val_get_den_val(v) };
285        let isl_rs_result = Val { ptr: isl_rs_result,
286                                  should_free_on_drop: true };
287        isl_rs_result
288    }
289
290    /// Wraps `isl_val_get_d`.
291    pub fn get_d(&self) -> f64 {
292        let v = self;
293        let v = v.ptr;
294        let isl_rs_result = unsafe { isl_val_get_d(v) };
295        isl_rs_result
296    }
297
298    /// Wraps `isl_val_n_abs_num_chunks`.
299    pub fn n_abs_num_chunks(&self, size: usize) -> i32 {
300        let v = self;
301        let v = v.ptr;
302        let isl_rs_result = unsafe { isl_val_n_abs_num_chunks(v, size) };
303        isl_rs_result
304    }
305
306    /// Wraps `isl_val_set_si`.
307    pub fn set_si(self, i: i64) -> Val {
308        let v = self;
309        let mut v = v;
310        v.do_not_free_on_drop();
311        let v = v.ptr;
312        let isl_rs_result = unsafe { isl_val_set_si(v, i) };
313        let isl_rs_result = Val { ptr: isl_rs_result,
314                                  should_free_on_drop: true };
315        isl_rs_result
316    }
317
318    /// Wraps `isl_val_abs`.
319    pub fn abs(self) -> Val {
320        let v = self;
321        let mut v = v;
322        v.do_not_free_on_drop();
323        let v = v.ptr;
324        let isl_rs_result = unsafe { isl_val_abs(v) };
325        let isl_rs_result = Val { ptr: isl_rs_result,
326                                  should_free_on_drop: true };
327        isl_rs_result
328    }
329
330    /// Wraps `isl_val_neg`.
331    pub fn neg(self) -> Val {
332        let v = self;
333        let mut v = v;
334        v.do_not_free_on_drop();
335        let v = v.ptr;
336        let isl_rs_result = unsafe { isl_val_neg(v) };
337        let isl_rs_result = Val { ptr: isl_rs_result,
338                                  should_free_on_drop: true };
339        isl_rs_result
340    }
341
342    /// Wraps `isl_val_inv`.
343    pub fn inv(self) -> Val {
344        let v = self;
345        let mut v = v;
346        v.do_not_free_on_drop();
347        let v = v.ptr;
348        let isl_rs_result = unsafe { isl_val_inv(v) };
349        let isl_rs_result = Val { ptr: isl_rs_result,
350                                  should_free_on_drop: true };
351        isl_rs_result
352    }
353
354    /// Wraps `isl_val_floor`.
355    pub fn floor(self) -> Val {
356        let v = self;
357        let mut v = v;
358        v.do_not_free_on_drop();
359        let v = v.ptr;
360        let isl_rs_result = unsafe { isl_val_floor(v) };
361        let isl_rs_result = Val { ptr: isl_rs_result,
362                                  should_free_on_drop: true };
363        isl_rs_result
364    }
365
366    /// Wraps `isl_val_ceil`.
367    pub fn ceil(self) -> Val {
368        let v = self;
369        let mut v = v;
370        v.do_not_free_on_drop();
371        let v = v.ptr;
372        let isl_rs_result = unsafe { isl_val_ceil(v) };
373        let isl_rs_result = Val { ptr: isl_rs_result,
374                                  should_free_on_drop: true };
375        isl_rs_result
376    }
377
378    /// Wraps `isl_val_trunc`.
379    pub fn trunc(self) -> Val {
380        let v = self;
381        let mut v = v;
382        v.do_not_free_on_drop();
383        let v = v.ptr;
384        let isl_rs_result = unsafe { isl_val_trunc(v) };
385        let isl_rs_result = Val { ptr: isl_rs_result,
386                                  should_free_on_drop: true };
387        isl_rs_result
388    }
389
390    /// Wraps `isl_val_2exp`.
391    pub fn to_exp(self) -> Val {
392        let v = self;
393        let mut v = v;
394        v.do_not_free_on_drop();
395        let v = v.ptr;
396        let isl_rs_result = unsafe { isl_val_2exp(v) };
397        let isl_rs_result = Val { ptr: isl_rs_result,
398                                  should_free_on_drop: true };
399        isl_rs_result
400    }
401
402    /// Wraps `isl_val_pow2`.
403    pub fn pow2(self) -> Val {
404        let v = self;
405        let mut v = v;
406        v.do_not_free_on_drop();
407        let v = v.ptr;
408        let isl_rs_result = unsafe { isl_val_pow2(v) };
409        let isl_rs_result = Val { ptr: isl_rs_result,
410                                  should_free_on_drop: true };
411        isl_rs_result
412    }
413
414    /// Wraps `isl_val_min`.
415    pub fn min(self, v2: Val) -> Val {
416        let v1 = self;
417        let mut v1 = v1;
418        v1.do_not_free_on_drop();
419        let v1 = v1.ptr;
420        let mut v2 = v2;
421        v2.do_not_free_on_drop();
422        let v2 = v2.ptr;
423        let isl_rs_result = unsafe { isl_val_min(v1, v2) };
424        let isl_rs_result = Val { ptr: isl_rs_result,
425                                  should_free_on_drop: true };
426        isl_rs_result
427    }
428
429    /// Wraps `isl_val_max`.
430    pub fn max(self, v2: Val) -> Val {
431        let v1 = self;
432        let mut v1 = v1;
433        v1.do_not_free_on_drop();
434        let v1 = v1.ptr;
435        let mut v2 = v2;
436        v2.do_not_free_on_drop();
437        let v2 = v2.ptr;
438        let isl_rs_result = unsafe { isl_val_max(v1, v2) };
439        let isl_rs_result = Val { ptr: isl_rs_result,
440                                  should_free_on_drop: true };
441        isl_rs_result
442    }
443
444    /// Wraps `isl_val_add`.
445    pub fn add(self, v2: Val) -> Val {
446        let v1 = self;
447        let mut v1 = v1;
448        v1.do_not_free_on_drop();
449        let v1 = v1.ptr;
450        let mut v2 = v2;
451        v2.do_not_free_on_drop();
452        let v2 = v2.ptr;
453        let isl_rs_result = unsafe { isl_val_add(v1, v2) };
454        let isl_rs_result = Val { ptr: isl_rs_result,
455                                  should_free_on_drop: true };
456        isl_rs_result
457    }
458
459    /// Wraps `isl_val_add_ui`.
460    pub fn add_ui(self, v2: u64) -> Val {
461        let v1 = self;
462        let mut v1 = v1;
463        v1.do_not_free_on_drop();
464        let v1 = v1.ptr;
465        let isl_rs_result = unsafe { isl_val_add_ui(v1, v2) };
466        let isl_rs_result = Val { ptr: isl_rs_result,
467                                  should_free_on_drop: true };
468        isl_rs_result
469    }
470
471    /// Wraps `isl_val_sub`.
472    pub fn sub(self, v2: Val) -> Val {
473        let v1 = self;
474        let mut v1 = v1;
475        v1.do_not_free_on_drop();
476        let v1 = v1.ptr;
477        let mut v2 = v2;
478        v2.do_not_free_on_drop();
479        let v2 = v2.ptr;
480        let isl_rs_result = unsafe { isl_val_sub(v1, v2) };
481        let isl_rs_result = Val { ptr: isl_rs_result,
482                                  should_free_on_drop: true };
483        isl_rs_result
484    }
485
486    /// Wraps `isl_val_sub_ui`.
487    pub fn sub_ui(self, v2: u64) -> Val {
488        let v1 = self;
489        let mut v1 = v1;
490        v1.do_not_free_on_drop();
491        let v1 = v1.ptr;
492        let isl_rs_result = unsafe { isl_val_sub_ui(v1, v2) };
493        let isl_rs_result = Val { ptr: isl_rs_result,
494                                  should_free_on_drop: true };
495        isl_rs_result
496    }
497
498    /// Wraps `isl_val_mul`.
499    pub fn mul(self, v2: Val) -> Val {
500        let v1 = self;
501        let mut v1 = v1;
502        v1.do_not_free_on_drop();
503        let v1 = v1.ptr;
504        let mut v2 = v2;
505        v2.do_not_free_on_drop();
506        let v2 = v2.ptr;
507        let isl_rs_result = unsafe { isl_val_mul(v1, v2) };
508        let isl_rs_result = Val { ptr: isl_rs_result,
509                                  should_free_on_drop: true };
510        isl_rs_result
511    }
512
513    /// Wraps `isl_val_mul_ui`.
514    pub fn mul_ui(self, v2: u64) -> Val {
515        let v1 = self;
516        let mut v1 = v1;
517        v1.do_not_free_on_drop();
518        let v1 = v1.ptr;
519        let isl_rs_result = unsafe { isl_val_mul_ui(v1, v2) };
520        let isl_rs_result = Val { ptr: isl_rs_result,
521                                  should_free_on_drop: true };
522        isl_rs_result
523    }
524
525    /// Wraps `isl_val_div`.
526    pub fn div(self, v2: Val) -> Val {
527        let v1 = self;
528        let mut v1 = v1;
529        v1.do_not_free_on_drop();
530        let v1 = v1.ptr;
531        let mut v2 = v2;
532        v2.do_not_free_on_drop();
533        let v2 = v2.ptr;
534        let isl_rs_result = unsafe { isl_val_div(v1, v2) };
535        let isl_rs_result = Val { ptr: isl_rs_result,
536                                  should_free_on_drop: true };
537        isl_rs_result
538    }
539
540    /// Wraps `isl_val_div_ui`.
541    pub fn div_ui(self, v2: u64) -> Val {
542        let v1 = self;
543        let mut v1 = v1;
544        v1.do_not_free_on_drop();
545        let v1 = v1.ptr;
546        let isl_rs_result = unsafe { isl_val_div_ui(v1, v2) };
547        let isl_rs_result = Val { ptr: isl_rs_result,
548                                  should_free_on_drop: true };
549        isl_rs_result
550    }
551
552    /// Wraps `isl_val_mod`.
553    pub fn mod_(self, v2: Val) -> Val {
554        let v1 = self;
555        let mut v1 = v1;
556        v1.do_not_free_on_drop();
557        let v1 = v1.ptr;
558        let mut v2 = v2;
559        v2.do_not_free_on_drop();
560        let v2 = v2.ptr;
561        let isl_rs_result = unsafe { isl_val_mod(v1, v2) };
562        let isl_rs_result = Val { ptr: isl_rs_result,
563                                  should_free_on_drop: true };
564        isl_rs_result
565    }
566
567    /// Wraps `isl_val_gcd`.
568    pub fn gcd(self, v2: Val) -> Val {
569        let v1 = self;
570        let mut v1 = v1;
571        v1.do_not_free_on_drop();
572        let v1 = v1.ptr;
573        let mut v2 = v2;
574        v2.do_not_free_on_drop();
575        let v2 = v2.ptr;
576        let isl_rs_result = unsafe { isl_val_gcd(v1, v2) };
577        let isl_rs_result = Val { ptr: isl_rs_result,
578                                  should_free_on_drop: true };
579        isl_rs_result
580    }
581
582    /// Wraps `isl_val_sgn`.
583    pub fn sgn(&self) -> i32 {
584        let v = self;
585        let v = v.ptr;
586        let isl_rs_result = unsafe { isl_val_sgn(v) };
587        isl_rs_result
588    }
589
590    /// Wraps `isl_val_is_zero`.
591    pub fn is_zero(&self) -> bool {
592        let v = self;
593        let v = v.ptr;
594        let isl_rs_result = unsafe { isl_val_is_zero(v) };
595        let isl_rs_result = match isl_rs_result {
596            0 => false,
597            1 => true,
598            _ => panic!("Got isl_bool = -1"),
599        };
600        isl_rs_result
601    }
602
603    /// Wraps `isl_val_is_one`.
604    pub fn is_one(&self) -> bool {
605        let v = self;
606        let v = v.ptr;
607        let isl_rs_result = unsafe { isl_val_is_one(v) };
608        let isl_rs_result = match isl_rs_result {
609            0 => false,
610            1 => true,
611            _ => panic!("Got isl_bool = -1"),
612        };
613        isl_rs_result
614    }
615
616    /// Wraps `isl_val_is_negone`.
617    pub fn is_negone(&self) -> bool {
618        let v = self;
619        let v = v.ptr;
620        let isl_rs_result = unsafe { isl_val_is_negone(v) };
621        let isl_rs_result = match isl_rs_result {
622            0 => false,
623            1 => true,
624            _ => panic!("Got isl_bool = -1"),
625        };
626        isl_rs_result
627    }
628
629    /// Wraps `isl_val_is_nonneg`.
630    pub fn is_nonneg(&self) -> bool {
631        let v = self;
632        let v = v.ptr;
633        let isl_rs_result = unsafe { isl_val_is_nonneg(v) };
634        let isl_rs_result = match isl_rs_result {
635            0 => false,
636            1 => true,
637            _ => panic!("Got isl_bool = -1"),
638        };
639        isl_rs_result
640    }
641
642    /// Wraps `isl_val_is_nonpos`.
643    pub fn is_nonpos(&self) -> bool {
644        let v = self;
645        let v = v.ptr;
646        let isl_rs_result = unsafe { isl_val_is_nonpos(v) };
647        let isl_rs_result = match isl_rs_result {
648            0 => false,
649            1 => true,
650            _ => panic!("Got isl_bool = -1"),
651        };
652        isl_rs_result
653    }
654
655    /// Wraps `isl_val_is_pos`.
656    pub fn is_pos(&self) -> bool {
657        let v = self;
658        let v = v.ptr;
659        let isl_rs_result = unsafe { isl_val_is_pos(v) };
660        let isl_rs_result = match isl_rs_result {
661            0 => false,
662            1 => true,
663            _ => panic!("Got isl_bool = -1"),
664        };
665        isl_rs_result
666    }
667
668    /// Wraps `isl_val_is_neg`.
669    pub fn is_neg(&self) -> bool {
670        let v = self;
671        let v = v.ptr;
672        let isl_rs_result = unsafe { isl_val_is_neg(v) };
673        let isl_rs_result = match isl_rs_result {
674            0 => false,
675            1 => true,
676            _ => panic!("Got isl_bool = -1"),
677        };
678        isl_rs_result
679    }
680
681    /// Wraps `isl_val_is_int`.
682    pub fn is_int(&self) -> bool {
683        let v = self;
684        let v = v.ptr;
685        let isl_rs_result = unsafe { isl_val_is_int(v) };
686        let isl_rs_result = match isl_rs_result {
687            0 => false,
688            1 => true,
689            _ => panic!("Got isl_bool = -1"),
690        };
691        isl_rs_result
692    }
693
694    /// Wraps `isl_val_is_rat`.
695    pub fn is_rat(&self) -> bool {
696        let v = self;
697        let v = v.ptr;
698        let isl_rs_result = unsafe { isl_val_is_rat(v) };
699        let isl_rs_result = match isl_rs_result {
700            0 => false,
701            1 => true,
702            _ => panic!("Got isl_bool = -1"),
703        };
704        isl_rs_result
705    }
706
707    /// Wraps `isl_val_is_nan`.
708    pub fn is_nan(&self) -> bool {
709        let v = self;
710        let v = v.ptr;
711        let isl_rs_result = unsafe { isl_val_is_nan(v) };
712        let isl_rs_result = match isl_rs_result {
713            0 => false,
714            1 => true,
715            _ => panic!("Got isl_bool = -1"),
716        };
717        isl_rs_result
718    }
719
720    /// Wraps `isl_val_is_infty`.
721    pub fn is_infty(&self) -> bool {
722        let v = self;
723        let v = v.ptr;
724        let isl_rs_result = unsafe { isl_val_is_infty(v) };
725        let isl_rs_result = match isl_rs_result {
726            0 => false,
727            1 => true,
728            _ => panic!("Got isl_bool = -1"),
729        };
730        isl_rs_result
731    }
732
733    /// Wraps `isl_val_is_neginfty`.
734    pub fn is_neginfty(&self) -> bool {
735        let v = self;
736        let v = v.ptr;
737        let isl_rs_result = unsafe { isl_val_is_neginfty(v) };
738        let isl_rs_result = match isl_rs_result {
739            0 => false,
740            1 => true,
741            _ => panic!("Got isl_bool = -1"),
742        };
743        isl_rs_result
744    }
745
746    /// Wraps `isl_val_cmp_si`.
747    pub fn cmp_si(&self, i: i64) -> i32 {
748        let v = self;
749        let v = v.ptr;
750        let isl_rs_result = unsafe { isl_val_cmp_si(v, i) };
751        isl_rs_result
752    }
753
754    /// Wraps `isl_val_lt`.
755    pub fn lt(&self, v2: &Val) -> bool {
756        let v1 = self;
757        let v1 = v1.ptr;
758        let v2 = v2.ptr;
759        let isl_rs_result = unsafe { isl_val_lt(v1, v2) };
760        let isl_rs_result = match isl_rs_result {
761            0 => false,
762            1 => true,
763            _ => panic!("Got isl_bool = -1"),
764        };
765        isl_rs_result
766    }
767
768    /// Wraps `isl_val_le`.
769    pub fn le(&self, v2: &Val) -> bool {
770        let v1 = self;
771        let v1 = v1.ptr;
772        let v2 = v2.ptr;
773        let isl_rs_result = unsafe { isl_val_le(v1, v2) };
774        let isl_rs_result = match isl_rs_result {
775            0 => false,
776            1 => true,
777            _ => panic!("Got isl_bool = -1"),
778        };
779        isl_rs_result
780    }
781
782    /// Wraps `isl_val_gt`.
783    pub fn gt(&self, v2: &Val) -> bool {
784        let v1 = self;
785        let v1 = v1.ptr;
786        let v2 = v2.ptr;
787        let isl_rs_result = unsafe { isl_val_gt(v1, v2) };
788        let isl_rs_result = match isl_rs_result {
789            0 => false,
790            1 => true,
791            _ => panic!("Got isl_bool = -1"),
792        };
793        isl_rs_result
794    }
795
796    /// Wraps `isl_val_gt_si`.
797    pub fn gt_si(&self, i: i64) -> bool {
798        let v = self;
799        let v = v.ptr;
800        let isl_rs_result = unsafe { isl_val_gt_si(v, i) };
801        let isl_rs_result = match isl_rs_result {
802            0 => false,
803            1 => true,
804            _ => panic!("Got isl_bool = -1"),
805        };
806        isl_rs_result
807    }
808
809    /// Wraps `isl_val_ge`.
810    pub fn ge(&self, v2: &Val) -> bool {
811        let v1 = self;
812        let v1 = v1.ptr;
813        let v2 = v2.ptr;
814        let isl_rs_result = unsafe { isl_val_ge(v1, v2) };
815        let isl_rs_result = match isl_rs_result {
816            0 => false,
817            1 => true,
818            _ => panic!("Got isl_bool = -1"),
819        };
820        isl_rs_result
821    }
822
823    /// Wraps `isl_val_eq`.
824    pub fn eq(&self, v2: &Val) -> bool {
825        let v1 = self;
826        let v1 = v1.ptr;
827        let v2 = v2.ptr;
828        let isl_rs_result = unsafe { isl_val_eq(v1, v2) };
829        let isl_rs_result = match isl_rs_result {
830            0 => false,
831            1 => true,
832            _ => panic!("Got isl_bool = -1"),
833        };
834        isl_rs_result
835    }
836
837    /// Wraps `isl_val_eq_si`.
838    pub fn eq_si(&self, i: i64) -> bool {
839        let v = self;
840        let v = v.ptr;
841        let isl_rs_result = unsafe { isl_val_eq_si(v, i) };
842        let isl_rs_result = match isl_rs_result {
843            0 => false,
844            1 => true,
845            _ => panic!("Got isl_bool = -1"),
846        };
847        isl_rs_result
848    }
849
850    /// Wraps `isl_val_ne`.
851    pub fn ne(&self, v2: &Val) -> bool {
852        let v1 = self;
853        let v1 = v1.ptr;
854        let v2 = v2.ptr;
855        let isl_rs_result = unsafe { isl_val_ne(v1, v2) };
856        let isl_rs_result = match isl_rs_result {
857            0 => false,
858            1 => true,
859            _ => panic!("Got isl_bool = -1"),
860        };
861        isl_rs_result
862    }
863
864    /// Wraps `isl_val_abs_eq`.
865    pub fn abs_eq(&self, v2: &Val) -> bool {
866        let v1 = self;
867        let v1 = v1.ptr;
868        let v2 = v2.ptr;
869        let isl_rs_result = unsafe { isl_val_abs_eq(v1, v2) };
870        let isl_rs_result = match isl_rs_result {
871            0 => false,
872            1 => true,
873            _ => panic!("Got isl_bool = -1"),
874        };
875        isl_rs_result
876    }
877
878    /// Wraps `isl_val_is_divisible_by`.
879    pub fn is_divisible_by(&self, v2: &Val) -> bool {
880        let v1 = self;
881        let v1 = v1.ptr;
882        let v2 = v2.ptr;
883        let isl_rs_result = unsafe { isl_val_is_divisible_by(v1, v2) };
884        let isl_rs_result = match isl_rs_result {
885            0 => false,
886            1 => true,
887            _ => panic!("Got isl_bool = -1"),
888        };
889        isl_rs_result
890    }
891
892    /// Wraps `isl_val_read_from_str`.
893    pub fn read_from_str(ctx: &Context, str_: &str) -> Val {
894        let ctx = ctx.ptr;
895        let str_ = CString::new(str_).unwrap();
896        let str_ = str_.as_ptr();
897        let isl_rs_result = unsafe { isl_val_read_from_str(ctx, str_) };
898        let isl_rs_result = Val { ptr: isl_rs_result,
899                                  should_free_on_drop: true };
900        isl_rs_result
901    }
902
903    /// Wraps `isl_val_dump`.
904    pub fn dump(&self) {
905        let v = self;
906        let v = v.ptr;
907        let isl_rs_result = unsafe { isl_val_dump(v) };
908        isl_rs_result
909    }
910
911    /// Wraps `isl_val_to_str`.
912    pub fn to_str(&self) -> &str {
913        let v = self;
914        let v = v.ptr;
915        let isl_rs_result = unsafe { isl_val_to_str(v) };
916        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
917        let isl_rs_result = isl_rs_result.to_str().unwrap();
918        isl_rs_result
919    }
920
921    /// Does not call isl_xxx_free() on being dropped. (For internal use only.)
922    pub fn do_not_free_on_drop(&mut self) {
923        self.should_free_on_drop = false;
924    }
925}
926
927impl Drop for Val {
928    fn drop(&mut self) {
929        if self.should_free_on_drop {
930            unsafe {
931                isl_val_free(self.ptr);
932            }
933        }
934    }
935}