1use crate::bindings::Context;
5use libc::uintptr_t;
6use std::ffi::{CStr, CString};
7use std::os::raw::c_char;
8
9pub 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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}